Skip to content

Commit

Permalink
Attempting to fix #1492: WeDo2 use of should be backwards compatible.
Browse files Browse the repository at this point in the history
  • Loading branch information
evhan55 committed Aug 22, 2018
1 parent f4e9212 commit bfa4dfa
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 20 deletions.
13 changes: 3 additions & 10 deletions src/extensions/scratch3_wedo2/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -460,8 +460,9 @@ class WeDo2 {
// TODO: rename scan?
startDeviceScan () {
this._ble = new BLESession(this._runtime, {
filters: [{services: [UUID.DEVICE_SERVICE]}],
optionalServices: [UUID.IO_SERVICE]
filters: [
{services: [UUID.DEVICE_SERVICE, UUID.IO_SERVICE]}
]
}, this._onConnect);
}

Expand Down Expand Up @@ -516,10 +517,6 @@ class WeDo2 {
})
.then(() => {
// register for attached io notifications
// TODO: make backwards compatible with 'read':
// - try 'startNotifications'
// - then try 'read' with 'startNotifications' flag
// - then catch OSX and Windows errors
this._ble.startNotifications(UUID.DEVICE_SERVICE, UUID.ATTACHED_IO, this._onMessage);
});
}
Expand Down Expand Up @@ -629,10 +626,6 @@ class WeDo2 {

this._send(UUID.INPUT_COMMAND, Base64Util.uint8ArrayToBase64(cmd))
.then(() => {
// TODO: make backwards compatible with 'read':
// - try 'startNotifications'
// - then try 'read' with 'startNotifications' flag
// - then catch OSX and Windows errors
this._ble.startNotifications(UUID.IO_SERVICE, UUID.INPUT_VALUES, this._onMessage);
});
}
Expand Down
25 changes: 15 additions & 10 deletions src/io/bleSession.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const JSONRPCWebSocket = require('../util/jsonrpc-web-socket');
// const log = require('../util/log');
const log = require('../util/log');
const ScratchLinkWebSocket = 'wss://device-manager.scratch.mit.edu:20110/scratch/ble';

class BLESession extends JSONRPCWebSocket {
Expand Down Expand Up @@ -115,7 +115,17 @@ class BLESession extends JSONRPCWebSocket {
characteristicId
};
this._characteristicDidChangeCallback = onCharacteristicChanged;
return this.sendRemoteRequest('startNotifications', params);
return this.sendRemoteRequest('startNotifications', params)
.catch(() => {
// backwards compatibility: try read
this.read(serviceId, characteristicId, true, onCharacteristicChanged)
.catch(e => {
// if read not allowed, send error
if (e.data !== 'Reading is not permitted.') { // OSX error TODO: Windows error?
this._sendError(e);
}
});
});
}

/**
Expand All @@ -135,12 +145,7 @@ class BLESession extends JSONRPCWebSocket {
params.startNotifications = true;
}
this._characteristicDidChangeCallback = onCharacteristicChanged;
return this.sendRemoteRequest('read', params)
.catch(e => {
if (e.data !== 'Reading is not permitted.') { // TODO: move this error check to extension
this._sendError(e);
}
});
return this.sendRemoteRequest('read', params);
}

/**
Expand All @@ -166,9 +171,9 @@ class BLESession extends JSONRPCWebSocket {
});
}

_sendError (/* e */) {
_sendError (e) {
this._connected = false;
// log.error(`BLESession error: ${JSON.stringify(e)}`);
log.error(`BLESession error: ${JSON.stringify(e)}`);
this._runtime.emit(this._runtime.constructor.PERIPHERAL_ERROR);
}

Expand Down

0 comments on commit bfa4dfa

Please sign in to comment.