diff --git a/src/extensions/scratch3_boost/index.js b/src/extensions/scratch3_boost/index.js index 854ef7b71..c5ea7784f 100644 --- a/src/extensions/scratch3_boost/index.js +++ b/src/extensions/scratch3_boost/index.js @@ -678,7 +678,7 @@ class Boost { */ this._pingDeviceId = null; - this.disconnect = this.disconnect.bind(this); + this.reset = this.reset.bind(this); this._onConnect = this._onConnect.bind(this); this._onMessage = this._onMessage.bind(this); this._pingDevice = this._pingDevice.bind(this); @@ -809,7 +809,7 @@ class Boost { } commented out until feature is enabled in scratch-link */ }], optionalServices: [] - }, this._onConnect, this.disconnect); + }, this._onConnect, this.reset); } /** @@ -826,6 +826,15 @@ class Boost { * Disconnects from the current BLE socket. */ disconnect () { + if (this._ble) { + this._ble.disconnect(); + } + } + + /** + * Reset all the state and timeout/interval ids. + */ + reset () { this._ports = []; this._motors = []; this._sensors = { @@ -835,10 +844,6 @@ class Boost { previousColor: BoostColor.NONE }; - if (this._ble) { - this._ble.disconnect(); - } - if (this._pingDeviceId) { window.clearInterval(this._pingDeviceId); this._pingDeviceId = null; diff --git a/src/io/ble.js b/src/io/ble.js index a4d92d442..e95490b36 100644 --- a/src/io/ble.js +++ b/src/io/ble.js @@ -9,9 +9,9 @@ class BLE extends JSONRPC { * @param {string} extensionId - the id of the extension using this socket. * @param {object} peripheralOptions - the list of options for peripheral discovery. * @param {object} connectCallback - a callback for connection. - * @param {object} disconnectCallback - a callback for disconnection. + * @param {object} resetCallback - a callback for resetting extension state. */ - constructor (runtime, extensionId, peripheralOptions, connectCallback, disconnectCallback = null) { + constructor (runtime, extensionId, peripheralOptions, connectCallback, resetCallback = null) { super(); this._socket = runtime.getScratchLinkSocket('BLE'); @@ -26,7 +26,7 @@ class BLE extends JSONRPC { this._connectCallback = connectCallback; this._connected = false; this._characteristicDidChangeCallback = null; - this._disconnectCallback = disconnectCallback; + this._resetCallback = resetCallback; this._discoverTimeoutID = null; this._extensionId = extensionId; this._peripheralOptions = peripheralOptions; @@ -199,18 +199,17 @@ class BLE extends JSONRPC { * - being powered down * * Disconnect the socket, and if the extension using this socket has a - * disconnect callback, call it. Finally, emit an error to the runtime. + * reset callback, call it. Finally, emit an error to the runtime. */ handleDisconnectError (/* e */) { // log.error(`BLE error: ${JSON.stringify(e)}`); if (!this._connected) return; - // TODO: Fix branching by splitting up cleanup/disconnect in extension - if (this._disconnectCallback) { - this._disconnectCallback(); // must call disconnect() - } else { - this.disconnect(); + this.disconnect(); + + if (this._resetCallback) { + this._resetCallback(); } this._runtime.emit(this._runtime.constructor.PERIPHERAL_CONNECTION_LOST_ERROR, {