-
Notifications
You must be signed in to change notification settings - Fork 26
/
event-service.js
60 lines (43 loc) · 2.06 KB
/
event-service.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var EVENT_SERVICE_SERVICE_UUID = 'e95d93af251d470aa062fa1922dfa9a8';
var MICROBIT_EVENT_CHARACTERISTIC_UUID = 'e95d9775251d470aa062fa1922dfa9a8';
var CLIENT_REQUIREMENTS_CHARACTERISTIC_UUID = 'e95d23c4251d470aa062fa1922dfa9a8';
var CLIENT_EVENT_CHARACTERISTIC_UUID = 'e95d5404251d470aa062fa1922dfa9a8';
var EventService = function() {
};
EventService.prototype.hasEventService = function() {
return this.hasService(EVENTSERVICE_SERVICE_UUID);
};
EventService.prototype.onEvent = function(data) {
if (data.length !== 4) {
return;
}
var id = data.readInt16LE(0);
var value = data.readInt16LE(2);
this.emit('event', id, value);
};
EventService.prototype.subscribeEvents = function(id, value, callback) {
// specifying which events we want to be notified about
this._writeClientEventRequirements(id, value, callback);
if (!this._eventSubscribed) {
this.onEventBinded = this.onEvent.bind(this);
this.subscribeCharacteristic(EVENT_SERVICE_SERVICE_UUID, MICROBIT_EVENT_CHARACTERISTIC_UUID, this.onEventBinded);
this._eventSubscribed = true;
}
};
EventService.prototype.unsubscribeEvent = function(callback) {
// allow this event if not previously explicitly subscribed through a call to subscribeEvents because the micro:bit may have persisted the
// client characteristic configuration descriptor state from a previous "session"
this.unsubscribeCharacteristic(EVENT_SERVICE_SERVICE_UUID, MICROBIT_EVENT_CHARACTERISTIC_UUID, this.onEventBinded, callback);
this._eventSubscribed = false;
};
EventService.prototype._writeClientEventRequirements = function(id, value, callback) {
var data = new Buffer(4);
data.writeUInt16LE(id, 0);
data.writeUInt16LE(value, 2);
this.writeDataCharacteristic(EVENT_SERVICE_SERVICE_UUID, CLIENT_REQUIREMENTS_CHARACTERISTIC_UUID, data, callback);
};
EventService.prototype.writeEvent = function(id, value, callback) {
var data = id << 16 | value;
this.writeUInt32LECharacteristic(EVENT_SERVICE_SERVICE_UUID, CLIENT_EVENT_CHARACTERISTIC_UUID, data, callback);
};
module.exports = EventService;