mirror of
https://github.com/scratchfoundation/scratch-vm.git
synced 2024-12-24 06:52:40 -05:00
Resolves 1975: Vernier gdxfor extension should disconnect on sensor timeout.
This commit is contained in:
parent
16ebcb82b2
commit
b5eb54fc44
1 changed files with 31 additions and 1 deletions
|
@ -25,6 +25,18 @@ const BLEUUID = {
|
|||
responseChar: 'b41e6675-a329-40e0-aa01-44d2f444babe'
|
||||
};
|
||||
|
||||
/**
|
||||
* A time interval to wait (in milliseconds) before reporting to the BLE socket
|
||||
* that data has stopped coming from the peripheral.
|
||||
*/
|
||||
const BLETimeout = 4500;
|
||||
|
||||
/**
|
||||
* A string to report to the BLE socket when the GdxFor has stopped receiving data.
|
||||
* @type {string}
|
||||
*/
|
||||
const BLEDataStoppedError = 'Force and Acceleration extension stopped receiving data';
|
||||
|
||||
/**
|
||||
* Sensor ID numbers for the GDX-FOR.
|
||||
*/
|
||||
|
@ -140,6 +152,13 @@ class GdxFor {
|
|||
spinSpeedZ: 0
|
||||
};
|
||||
|
||||
/**
|
||||
* Interval ID for data reading timeout.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this._timeoutID = null;
|
||||
|
||||
this.disconnect = this.disconnect.bind(this);
|
||||
this._onConnect = this._onConnect.bind(this);
|
||||
}
|
||||
|
@ -160,7 +179,7 @@ class GdxFor {
|
|||
optionalServices: [
|
||||
BLEUUID.service
|
||||
]
|
||||
}, this._onConnect);
|
||||
}, this._onConnect, this.disconnect);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -178,6 +197,7 @@ class GdxFor {
|
|||
* Disconnect from the GDX FOR.
|
||||
*/
|
||||
disconnect () {
|
||||
window.clearInterval(this._timeoutID);
|
||||
this._sensors = {
|
||||
force: 0,
|
||||
accelerationX: 0,
|
||||
|
@ -228,6 +248,10 @@ class GdxFor {
|
|||
this._onSensorValueChanged(s);
|
||||
});
|
||||
});
|
||||
this._timeoutID = window.setInterval(
|
||||
() => this._scratchLinkSocket.handleDisconnectError(BLEDataStoppedError),
|
||||
BLETimeout
|
||||
);
|
||||
});
|
||||
|
||||
// Start device
|
||||
|
@ -266,6 +290,12 @@ class GdxFor {
|
|||
this._sensors.spinSpeedZ = this._spinSpeedFromGyro(sensor.value);
|
||||
break;
|
||||
}
|
||||
// cancel disconnect timeout and start a new one
|
||||
window.clearInterval(this._timeoutID);
|
||||
this._timeoutID = window.setInterval(
|
||||
() => this._scratchLinkSocket.handleDisconnectError(BLEDataStoppedError),
|
||||
BLETimeout
|
||||
);
|
||||
}
|
||||
|
||||
_spinSpeedFromGyro (val) {
|
||||
|
|
Loading…
Reference in a new issue