From 908bf5390257d7ed49063d5d22f544a44350adbf Mon Sep 17 00:00:00 2001 From: Michael Dietz Date: Tue, 16 Feb 2016 11:32:41 +0100 Subject: [PATCH] DFU Controller should not disconnect in dfu.writeMode() when switching target from application mode to bootloader/dfu mode. --- dist/dfu.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/dist/dfu.js b/dist/dfu.js index 312c2dd..4857b74 100644 --- a/dist/dfu.js +++ b/dist/dfu.js @@ -85,28 +85,28 @@ }); } + /** + * Switch to bootloader/DFU mode by writing to the control point of the DFU Service. + * The DFU Controller is not responsible for disconnecting from the application (DFU Target) after the write. + * The application (DFU Target) will issue a GAP Disconnect and reset into Bootloader/DFU mode. + */ function writeMode(device) { return new Promise(function(resolve, reject) { /* - // Disconnect event currently not implemented + // Disconnect event currently not implemented... device.addEventListener("gattserverdisconnected", () => { - log("modeData written"); - resolve(); + log("DFU Target issued GAP Disconnect and reset into Bootloader/DFU mode."); + resolve(device); }); */ connect(device) .then(chars => { - log("writing modeData..."); - chars.controlChar.writeValue(new Uint8Array([1])); - - // Hack to gracefully disconnect without disconnect event - setTimeout(() => { - chars.server.disconnect(); - setTimeout(() => { - log("modeData written"); - resolve(device); - }, 3000); - }, 3000); + log("Writing modeData..."); + return chars.controlChar.writeValue(new Uint8Array([1])) + .then(() => { + log("modeData Written."); + resolve(device); // Once disconnect event is implemented we should resolve in its callback... + }); }) .catch(error => { error = "writeMode error: " + error;