# Xamarin-NRF-DFU

![](https://img.shields.io/github/license/mashape/apistatus.svg)

Simple plugin for Xamarin forms which supports Secure DFU OTA Bluetooth update.
## Platforms

 > iOS, Android, and basically any other what is supported by aritchie BLE plugin
## Prerequesites

- Bluetooth LE plugin by aritchie https://github.com/aritchie/bluetoothle
- Nordic semiconductor device
## Features
 - Upload firmware for NordicSemiconductor devices supporting Buttonless Secure DFU without bonds

## Usage
Include
		

    using Plugin.XamarinNordicDFU;
Initialize
    
    var dfu = new DFU();
    DFUEvents.OnFimwareProgressChanged = (float progress, TimeSpan elapsed) =>
    {
    
    };
    DFUEvents.OnSuccess = (TimeSpan elapsed) =>
    {
    
    };
    DFUEvents.OnError = (string error) =>
    {
    
    };
    DFUEvents.OnResponseError = (ResponseErrors error) =>
    {
    
    };
    DFUEvents.OnExtendedError = (ExtendedErrors error) =>
    {
    
    };

Run [**device** is ***IDevice*** from bluetoothle]. Start command accepts Two streams - fimware stream **xxx.bin** and init packet stream **xxx.dat**. These files are usually found in distribution **.zip** package what can be created using **nrfutil** [More info about distribution packages](https://devzone.nordicsemi.com/b/blog/posts/creating-zip-package-for-dfu)

    var assembly = System.Reflection.Assembly.GetExecutingAssembly();

	#if __IOS__
            var currentOS = "iOS";
	#endif
	#if __ANDROID__
            var currentOS = "Droid";
	#endif
    string firmwarePacketPath = String.Format("MyHelloProject.{0}.FW.{1}", currentOS, "nrf52832_xxaa.bin");
    string initPacketPath = String.Format("MyHelloProject.{0}.FW.{1}", currentOS, "nrf52832_xxaa.dat");

    
    Stream FirmwarePacket = assembly.GetManifestResourceStream(firmwarePacketPath);
    Stream InitPacket = assembly.GetManifestResourceStream(initPacketPath);
                
    await dfu.Start(device, FirmwarePacket, InitPacket);

## TODO

 - [ ] Nuget package
 - [ ] Other firmware upgrade possibilities. Other than buttonless without bonds
 - [ ] Device advertised names now should be unique while updating DFU. Should add device name change for buttonless dfu.

## License
 > MIT
## Contributors