Tidied global server hack

This commit is contained in:
Rob Moran
2016-03-22 18:48:10 +00:00
parent 90103c3735
commit cd41d86e9a

22
dist/dfu.js vendored
View File

@@ -44,7 +44,9 @@
}(this, function(Promise, bluetooth, crc16) { }(this, function(Promise, bluetooth, crc16) {
"use strict"; "use strict";
var server; // Make server a global variable (initialized in connect(). This fixes a bug in BlueZ that causes transfers to stall. // Make server a global variable (initialized in connect().
// This fixes a bug in BlueZ that causes transfers to stall.
var currentServer = null;
var LITTLE_ENDIAN = true; var LITTLE_ENDIAN = true;
@@ -143,8 +145,8 @@
log("modeData written"); log("modeData written");
// TODO: Remove this when gattserverdisconnected event is implemented and possibly put a timeout in that event handler before resolving // TODO: Remove this when gattserverdisconnected event is implemented and possibly put a timeout in that event handler before resolving
setTimeout(function() { setTimeout(function() {
if (characteristics.server.connected === true) { if (currentServer && currentServer.connected === true) {
characteristics.server.disconnect(); currentServer.disconnect();
} }
disconnectHandler(); disconnectHandler();
}, 5000); }, 5000);
@@ -211,7 +213,6 @@
function connect(device) { function connect(device) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
//var server = null;
var service = null; var service = null;
var controlChar = null; var controlChar = null;
var packetChar = null; var packetChar = null;
@@ -219,7 +220,6 @@
function complete() { function complete() {
resolve({ resolve({
server: server,
controlChar: controlChar, controlChar: controlChar,
packetChar: packetChar, packetChar: packetChar,
versionChar: versionChar versionChar: versionChar
@@ -229,14 +229,14 @@
device.gatt.connect() device.gatt.connect()
.then(function(gattServer) { .then(function(gattServer) {
log("connected to device"); log("connected to device");
server = gattServer; currentServer = gattServer;
// This delay is needed because BlueZ needs time to update it's cache. // This delay is needed because BlueZ needs time to update it's cache.
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
setTimeout(resolve, 2000); setTimeout(resolve, 2000);
}); });
}) })
.then(function() { .then(function() {
return server.getPrimaryService(serviceUUID); return currentServer.getPrimaryService(serviceUUID);
}) })
.then(function(primaryService) { .then(function(primaryService) {
log("found DFU service"); log("found DFU service");
@@ -275,8 +275,6 @@
var offset; var offset;
function transfer(chars, arrayBuffer, imageType, majorVersion, minorVersion) { function transfer(chars, arrayBuffer, imageType, majorVersion, minorVersion) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
// This should be 'chars.controlChar.service.server' but it's not implemented yet
var server = chars.server;
var controlChar = chars.controlChar; var controlChar = chars.controlChar;
var packetChar = chars.packetChar; var packetChar = chars.packetChar;
log('using dfu version ' + majorVersion + "." + minorVersion); log('using dfu version ' + majorVersion + "." + minorVersion);
@@ -289,7 +287,7 @@
resolve(); resolve();
} }
} }
server.device.addEventListener("gattserverdisconnected", disconnectHandler); currentServer.device.addEventListener("gattserverdisconnected", disconnectHandler);
// Set up receipts // Set up receipts
interval = Math.floor(arrayBuffer.byteLength / (packetSize * notifySteps)); interval = Math.floor(arrayBuffer.byteLength / (packetSize * notifySteps));
@@ -418,8 +416,8 @@
log('image activated and dfu target reset'); log('image activated and dfu target reset');
// TODO: Remove this when gattserverdisconnected event is implemented and possibly put a timeout in that event handler before resolving // TODO: Remove this when gattserverdisconnected event is implemented and possibly put a timeout in that event handler before resolving
setTimeout(function() { setTimeout(function() {
if (server.connected === true) { if (currentServer && currentServer.connected === true) {
server.disconnect(); currentServer.disconnect();
} }
disconnectHandler(); disconnectHandler();
}, 5000); }, 5000);