@microbit/microbit-connection 0.9.0-apps.alpha.18 → 0.9.0-apps.alpha.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/build/cjs/bluetooth/connection.d.ts +242 -1
  2. package/build/cjs/bluetooth/connection.js +52 -4
  3. package/build/cjs/bluetooth/connection.js.map +1 -1
  4. package/build/cjs/bluetooth/device-wrapper.d.ts +6 -0
  5. package/build/cjs/bluetooth/device-wrapper.js +27 -0
  6. package/build/cjs/bluetooth/device-wrapper.js.map +1 -1
  7. package/build/cjs/bluetooth/flashing/nordic-dfu.js +14 -3
  8. package/build/cjs/bluetooth/flashing/nordic-dfu.js.map +1 -1
  9. package/build/cjs/bluetooth/services/event-service.d.ts +48 -0
  10. package/build/cjs/bluetooth/services/event-service.js +273 -0
  11. package/build/cjs/bluetooth/services/event-service.js.map +1 -0
  12. package/build/cjs/bluetooth/services/event-service.test.d.ts +1 -0
  13. package/build/cjs/bluetooth/services/event-service.test.js +252 -0
  14. package/build/cjs/bluetooth/services/event-service.test.js.map +1 -0
  15. package/build/cjs/bluetooth/services/io-pin-service.d.ts +65 -0
  16. package/build/cjs/bluetooth/services/io-pin-service.js +173 -0
  17. package/build/cjs/bluetooth/services/io-pin-service.js.map +1 -0
  18. package/build/cjs/bluetooth/services/temperature-service.d.ts +14 -0
  19. package/build/cjs/bluetooth/services/temperature-service.js +80 -0
  20. package/build/cjs/bluetooth/services/temperature-service.js.map +1 -0
  21. package/build/cjs/index.d.ts +4 -3
  22. package/build/cjs/index.js +4 -1
  23. package/build/cjs/index.js.map +1 -1
  24. package/build/cjs/microbit-events.d.ts +67 -0
  25. package/build/cjs/microbit-events.js +55 -0
  26. package/build/cjs/microbit-events.js.map +1 -0
  27. package/build/cjs/service-events.d.ts +49 -1
  28. package/build/cjs/service-events.js.map +1 -1
  29. package/build/esm/bluetooth/connection.d.ts +242 -1
  30. package/build/esm/bluetooth/connection.js +53 -5
  31. package/build/esm/bluetooth/connection.js.map +1 -1
  32. package/build/esm/bluetooth/device-wrapper.d.ts +6 -0
  33. package/build/esm/bluetooth/device-wrapper.js +27 -0
  34. package/build/esm/bluetooth/device-wrapper.js.map +1 -1
  35. package/build/esm/bluetooth/flashing/nordic-dfu.js +14 -3
  36. package/build/esm/bluetooth/flashing/nordic-dfu.js.map +1 -1
  37. package/build/esm/bluetooth/services/event-service.d.ts +48 -0
  38. package/build/esm/bluetooth/services/event-service.js +269 -0
  39. package/build/esm/bluetooth/services/event-service.js.map +1 -0
  40. package/build/esm/bluetooth/services/event-service.test.d.ts +1 -0
  41. package/build/esm/bluetooth/services/event-service.test.js +250 -0
  42. package/build/esm/bluetooth/services/event-service.test.js.map +1 -0
  43. package/build/esm/bluetooth/services/io-pin-service.d.ts +65 -0
  44. package/build/esm/bluetooth/services/io-pin-service.js +169 -0
  45. package/build/esm/bluetooth/services/io-pin-service.js.map +1 -0
  46. package/build/esm/bluetooth/services/temperature-service.d.ts +14 -0
  47. package/build/esm/bluetooth/services/temperature-service.js +76 -0
  48. package/build/esm/bluetooth/services/temperature-service.js.map +1 -0
  49. package/build/esm/index.d.ts +4 -3
  50. package/build/esm/index.js +2 -1
  51. package/build/esm/index.js.map +1 -1
  52. package/build/esm/microbit-events.d.ts +67 -0
  53. package/build/esm/microbit-events.js +52 -0
  54. package/build/esm/microbit-events.js.map +1 -0
  55. package/build/esm/service-events.d.ts +49 -1
  56. package/build/esm/service-events.js.map +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,250 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { BleClient } from "@capacitor-community/bluetooth-le";
3
+ import { EventService } from "./event-service.js";
4
+ import { V2Source, GestureEvent, ButtonAction } from "../../microbit-events.js";
5
+ vi.mock("@capacitor-community/bluetooth-le", () => ({
6
+ BleClient: {
7
+ startNotifications: vi.fn().mockResolvedValue(undefined),
8
+ stopNotifications: vi.fn().mockResolvedValue(undefined),
9
+ write: vi.fn().mockResolvedValue(undefined),
10
+ writeWithoutResponse: vi.fn().mockResolvedValue(undefined),
11
+ },
12
+ }));
13
+ vi.mock("../ble-error.js", () => ({
14
+ mapBleError: (e) => e,
15
+ }));
16
+ function makeEvent(source, value) {
17
+ const data = new DataView(new ArrayBuffer(4));
18
+ data.setUint16(0, source, true);
19
+ data.setUint16(2, value, true);
20
+ return data;
21
+ }
22
+ function makeMultiEvent(...pairs) {
23
+ const data = new DataView(new ArrayBuffer(pairs.length * 4));
24
+ pairs.forEach(([source, value], i) => {
25
+ data.setUint16(i * 4, source, true);
26
+ data.setUint16(i * 4 + 2, value, true);
27
+ });
28
+ return data;
29
+ }
30
+ /** Captures the notification callback passed to BleClient.startNotifications */
31
+ function captureNotificationCallback() {
32
+ const calls = BleClient.startNotifications.mock.calls;
33
+ const lastCall = calls[calls.length - 1];
34
+ return lastCall[3];
35
+ }
36
+ describe("EventService", () => {
37
+ let service;
38
+ let dispatch;
39
+ beforeEach(() => {
40
+ vi.clearAllMocks();
41
+ dispatch = vi.fn();
42
+ service = new EventService("test-device", dispatch, () => "V2");
43
+ });
44
+ describe("named events", () => {
45
+ it("dispatches gesturechanged when listening", async () => {
46
+ await service.startNotifications("gesturechanged");
47
+ const notify = captureNotificationCallback();
48
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
49
+ expect(dispatch).toHaveBeenCalledWith("gesturechanged", {
50
+ gesture: GestureEvent.Shake,
51
+ });
52
+ });
53
+ it("dispatches button actions for A, B, AB", async () => {
54
+ await service.startNotifications("buttonaaction");
55
+ await service.startNotifications("buttonbaction");
56
+ await service.startNotifications("buttonabaction");
57
+ const notify = captureNotificationCallback();
58
+ notify(makeEvent(V2Source.ButtonA, ButtonAction.Click));
59
+ notify(makeEvent(V2Source.ButtonB, ButtonAction.LongClick));
60
+ notify(makeEvent(V2Source.ButtonAB, ButtonAction.DoubleClick));
61
+ expect(dispatch).toHaveBeenCalledWith("buttonaaction", {
62
+ button: "A",
63
+ action: ButtonAction.Click,
64
+ });
65
+ expect(dispatch).toHaveBeenCalledWith("buttonbaction", {
66
+ button: "B",
67
+ action: ButtonAction.LongClick,
68
+ });
69
+ expect(dispatch).toHaveBeenCalledWith("buttonabaction", {
70
+ button: "AB",
71
+ action: ButtonAction.DoubleClick,
72
+ });
73
+ });
74
+ it("dispatches logoaction (V2 only)", async () => {
75
+ await service.startNotifications("logoaction");
76
+ const notify = captureNotificationCallback();
77
+ notify(makeEvent(V2Source.Logo, ButtonAction.Click));
78
+ expect(dispatch).toHaveBeenCalledWith("logoaction", {
79
+ button: "Logo",
80
+ action: ButtonAction.Click,
81
+ });
82
+ });
83
+ it("does not dispatch after stopping a named event", async () => {
84
+ await service.startNotifications("gesturechanged");
85
+ const notify = captureNotificationCallback();
86
+ await service.stopNotifications("gesturechanged");
87
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
88
+ expect(dispatch).not.toHaveBeenCalledWith("gesturechanged", expect.anything());
89
+ });
90
+ it("handles multiple events packed in one notification", async () => {
91
+ await service.startNotifications("gesturechanged");
92
+ await service.startNotifications("buttonaaction");
93
+ const notify = captureNotificationCallback();
94
+ notify(makeMultiEvent([V2Source.Gesture, GestureEvent.FaceUp], [V2Source.ButtonA, ButtonAction.Click]));
95
+ expect(dispatch).toHaveBeenCalledWith("gesturechanged", {
96
+ gesture: GestureEvent.FaceUp,
97
+ });
98
+ expect(dispatch).toHaveBeenCalledWith("buttonaaction", {
99
+ button: "A",
100
+ action: ButtonAction.Click,
101
+ });
102
+ });
103
+ });
104
+ describe("microbitevent isolation", () => {
105
+ it("does not dispatch microbitevent for named event traffic", async () => {
106
+ await service.startNotifications("gesturechanged");
107
+ await service.startNotifications("microbitevent");
108
+ const notify = captureNotificationCallback();
109
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
110
+ expect(dispatch).toHaveBeenCalledWith("gesturechanged", {
111
+ gesture: GestureEvent.Shake,
112
+ });
113
+ expect(dispatch).not.toHaveBeenCalledWith("microbitevent", expect.anything());
114
+ });
115
+ it("dispatches microbitevent only for explicit subscriptions", async () => {
116
+ await service.startNotifications("microbitevent");
117
+ await service.subscribeToEvent(999, 0);
118
+ const notify = captureNotificationCallback();
119
+ notify(makeEvent(999, 42));
120
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
121
+ source: 999,
122
+ value: 42,
123
+ });
124
+ });
125
+ it("wildcard subscription (value=0) matches all values from that source", async () => {
126
+ await service.startNotifications("microbitevent");
127
+ await service.subscribeToEvent(999, 0);
128
+ const notify = captureNotificationCallback();
129
+ notify(makeEvent(999, 1));
130
+ notify(makeEvent(999, 2));
131
+ notify(makeEvent(888, 1));
132
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
133
+ source: 999,
134
+ value: 1,
135
+ });
136
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
137
+ source: 999,
138
+ value: 2,
139
+ });
140
+ expect(dispatch).not.toHaveBeenCalledWith("microbitevent", expect.objectContaining({ source: 888 }));
141
+ });
142
+ it("exact subscription only matches that specific value", async () => {
143
+ await service.startNotifications("microbitevent");
144
+ await service.subscribeToEvent(999, 5);
145
+ const notify = captureNotificationCallback();
146
+ notify(makeEvent(999, 5));
147
+ notify(makeEvent(999, 6));
148
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
149
+ source: 999,
150
+ value: 5,
151
+ });
152
+ expect(dispatch).not.toHaveBeenCalledWith("microbitevent", expect.objectContaining({ value: 6 }));
153
+ });
154
+ it("named events and explicit subscriptions work independently", async () => {
155
+ await service.startNotifications("gesturechanged");
156
+ await service.startNotifications("microbitevent");
157
+ await service.subscribeToEvent(999, 0);
158
+ const notify = captureNotificationCallback();
159
+ // Gesture events go to gesturechanged only
160
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
161
+ // Custom events go to microbitevent only
162
+ notify(makeEvent(999, 42));
163
+ expect(dispatch).toHaveBeenCalledWith("gesturechanged", {
164
+ gesture: GestureEvent.Shake,
165
+ });
166
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
167
+ source: 999,
168
+ value: 42,
169
+ });
170
+ // Gesture should NOT leak into microbitevent
171
+ expect(dispatch).not.toHaveBeenCalledWith("microbitevent", expect.objectContaining({ source: V2Source.Gesture }));
172
+ });
173
+ it("overlapping named + explicit subscription dispatches both", async () => {
174
+ await service.startNotifications("gesturechanged");
175
+ await service.startNotifications("microbitevent");
176
+ // Explicitly subscribe to the same source as the named event
177
+ await service.subscribeToEvent(V2Source.Gesture, 0);
178
+ const notify = captureNotificationCallback();
179
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
180
+ // Both fire — you asked for both
181
+ expect(dispatch).toHaveBeenCalledWith("gesturechanged", {
182
+ gesture: GestureEvent.Shake,
183
+ });
184
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
185
+ source: V2Source.Gesture,
186
+ value: GestureEvent.Shake,
187
+ });
188
+ });
189
+ it("stopping named event leaves explicit subscription working", async () => {
190
+ await service.startNotifications("gesturechanged");
191
+ await service.startNotifications("microbitevent");
192
+ await service.subscribeToEvent(V2Source.Gesture, 0);
193
+ const notify = captureNotificationCallback();
194
+ await service.stopNotifications("gesturechanged");
195
+ dispatch.mockClear();
196
+ notify(makeEvent(V2Source.Gesture, GestureEvent.Shake));
197
+ // Named event stopped
198
+ expect(dispatch).not.toHaveBeenCalledWith("gesturechanged", expect.anything());
199
+ // Explicit subscription still works
200
+ expect(dispatch).toHaveBeenCalledWith("microbitevent", {
201
+ source: V2Source.Gesture,
202
+ value: GestureEvent.Shake,
203
+ });
204
+ });
205
+ });
206
+ describe("BLE notification lifecycle", () => {
207
+ it("re-registers BLE notifications on each startNotifications call to handle reconnect", async () => {
208
+ await service.startNotifications("gesturechanged");
209
+ await service.startNotifications("buttonaaction");
210
+ await service.startNotifications("microbitevent");
211
+ expect(BleClient.startNotifications).toHaveBeenCalledTimes(3);
212
+ });
213
+ it("stops BLE notifications only when all event types are stopped", async () => {
214
+ await service.startNotifications("gesturechanged");
215
+ await service.startNotifications("buttonaaction");
216
+ await service.stopNotifications("gesturechanged");
217
+ expect(BleClient.stopNotifications).not.toHaveBeenCalled();
218
+ await service.stopNotifications("buttonaaction");
219
+ expect(BleClient.stopNotifications).toHaveBeenCalledTimes(1);
220
+ });
221
+ it("ignores irrelevant event types", async () => {
222
+ await service.startNotifications("accelerometerdatachanged");
223
+ expect(BleClient.startNotifications).not.toHaveBeenCalled();
224
+ });
225
+ });
226
+ describe("client requirements", () => {
227
+ it("writes client requirements for named events", async () => {
228
+ await service.startNotifications("gesturechanged");
229
+ expect(BleClient.write).toHaveBeenCalled();
230
+ const calls = BleClient.write.mock.calls;
231
+ const data = calls[calls.length - 1][3];
232
+ expect(data.getUint16(0, true)).toBe(V2Source.Gesture);
233
+ expect(data.getUint16(2, true)).toBe(0);
234
+ });
235
+ it("writes client requirements for explicit subscriptions", async () => {
236
+ await service.subscribeToEvent(999, 42);
237
+ expect(BleClient.write).toHaveBeenCalled();
238
+ const calls = BleClient.write.mock.calls;
239
+ const data = calls[calls.length - 1][3];
240
+ expect(data.getUint16(0, true)).toBe(999);
241
+ expect(data.getUint16(2, true)).toBe(42);
242
+ });
243
+ it("does not duplicate explicit subscription writes", async () => {
244
+ await service.subscribeToEvent(999, 42);
245
+ await service.subscribeToEvent(999, 42);
246
+ expect(BleClient.write).toHaveBeenCalledTimes(1);
247
+ });
248
+ });
249
+ });
250
+ //# sourceMappingURL=event-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-service.test.js","sourceRoot":"","sources":["../../../../src/bluetooth/services/event-service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Service } from "../device-wrapper.js";
2
+ import { PinValue, TypedServiceEvent, TypedServiceEventDispatcher } from "../../service-events.js";
3
+ export declare class IoPinService implements Service {
4
+ private deviceId;
5
+ private dispatchTypedEvent;
6
+ uuid: string;
7
+ constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
8
+ getRelevantEvents(): TypedServiceEvent[];
9
+ /**
10
+ * Gets which pins are configured as analog.
11
+ * All other pins are digital (the default).
12
+ *
13
+ * @returns array of pin numbers (0-18) configured as analog.
14
+ */
15
+ getAnalogPins(): Promise<number[]>;
16
+ /**
17
+ * Sets which pins are configured as analog.
18
+ * All other pins become digital (the default).
19
+ *
20
+ * @param pins array of pin numbers (0-18) to configure as analog.
21
+ */
22
+ setAnalogPins(pins: number[]): Promise<void>;
23
+ /**
24
+ * Gets which pins are configured as inputs.
25
+ * Input pins are monitored by the service and their values reported
26
+ * via notifications and reads of the pin data characteristic.
27
+ * All other pins are outputs (the default).
28
+ *
29
+ * @returns array of pin numbers (0-18) configured as inputs.
30
+ */
31
+ getInputPins(): Promise<number[]>;
32
+ /**
33
+ * Sets which pins are configured as inputs.
34
+ * Input pins are monitored by the service and their values reported
35
+ * via notifications and reads of the pin data characteristic.
36
+ * All other pins become outputs (the default).
37
+ *
38
+ * @param pins array of pin numbers (0-18) to configure as inputs.
39
+ */
40
+ setInputPins(pins: number[]): Promise<void>;
41
+ /**
42
+ * Reads pin data for all active input pins.
43
+ * For digital pins, value is 0 or 1.
44
+ * For analog pins, value is 0-255 (10-bit analog value >> 2).
45
+ */
46
+ readPins(): Promise<PinValue[]>;
47
+ /**
48
+ * Writes pin data for output pins.
49
+ * Only pins configured as outputs (not active inputs) will be affected.
50
+ * For digital pins, value is 0 or 1.
51
+ * For analog pins, value 0-255 is scaled to 0-1023 on the device.
52
+ */
53
+ writePins(data: PinValue[]): Promise<void>;
54
+ /**
55
+ * Sets PWM output on a pin.
56
+ *
57
+ * @param pin Pin number (0-18).
58
+ * @param value Analog value (0-1024).
59
+ * @param period Period in microseconds.
60
+ */
61
+ setPwm(pin: number, value: number, period: number): Promise<void>;
62
+ startNotifications(type: TypedServiceEvent): Promise<void>;
63
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
64
+ private dataViewToPinData;
65
+ }
@@ -0,0 +1,169 @@
1
+ import { BleClient } from "@capacitor-community/bluetooth-le";
2
+ import { profile } from "../profile.js";
3
+ import { mapBleError } from "../ble-error.js";
4
+ function pinsToBitmask(pins) {
5
+ let mask = 0;
6
+ for (const pin of pins) {
7
+ mask |= 1 << pin;
8
+ }
9
+ return mask;
10
+ }
11
+ function bitmaskToPins(mask) {
12
+ const pins = [];
13
+ for (let i = 0; i < 19; i++) {
14
+ if (mask & (1 << i)) {
15
+ pins.push(i);
16
+ }
17
+ }
18
+ return pins;
19
+ }
20
+ export class IoPinService {
21
+ constructor(deviceId, dispatchTypedEvent) {
22
+ Object.defineProperty(this, "deviceId", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: deviceId
27
+ });
28
+ Object.defineProperty(this, "dispatchTypedEvent", {
29
+ enumerable: true,
30
+ configurable: true,
31
+ writable: true,
32
+ value: dispatchTypedEvent
33
+ });
34
+ Object.defineProperty(this, "uuid", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: profile.ioPin.id
39
+ });
40
+ }
41
+ getRelevantEvents() {
42
+ return ["pinchanged"];
43
+ }
44
+ /**
45
+ * Gets which pins are configured as analog.
46
+ * All other pins are digital (the default).
47
+ *
48
+ * @returns array of pin numbers (0-18) configured as analog.
49
+ */
50
+ async getAnalogPins() {
51
+ const dataView = await BleClient.read(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinAdConfiguration.id);
52
+ return bitmaskToPins(dataView.getUint32(0, true));
53
+ }
54
+ /**
55
+ * Sets which pins are configured as analog.
56
+ * All other pins become digital (the default).
57
+ *
58
+ * @param pins array of pin numbers (0-18) to configure as analog.
59
+ */
60
+ async setAnalogPins(pins) {
61
+ const dataView = new DataView(new ArrayBuffer(4));
62
+ dataView.setUint32(0, pinsToBitmask(pins), true);
63
+ await BleClient.write(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinAdConfiguration.id, dataView);
64
+ }
65
+ /**
66
+ * Gets which pins are configured as inputs.
67
+ * Input pins are monitored by the service and their values reported
68
+ * via notifications and reads of the pin data characteristic.
69
+ * All other pins are outputs (the default).
70
+ *
71
+ * @returns array of pin numbers (0-18) configured as inputs.
72
+ */
73
+ async getInputPins() {
74
+ const dataView = await BleClient.read(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinIoConfiguration.id);
75
+ return bitmaskToPins(dataView.getUint32(0, true));
76
+ }
77
+ /**
78
+ * Sets which pins are configured as inputs.
79
+ * Input pins are monitored by the service and their values reported
80
+ * via notifications and reads of the pin data characteristic.
81
+ * All other pins become outputs (the default).
82
+ *
83
+ * @param pins array of pin numbers (0-18) to configure as inputs.
84
+ */
85
+ async setInputPins(pins) {
86
+ const dataView = new DataView(new ArrayBuffer(4));
87
+ dataView.setUint32(0, pinsToBitmask(pins), true);
88
+ await BleClient.write(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinIoConfiguration.id, dataView);
89
+ }
90
+ /**
91
+ * Reads pin data for all active input pins.
92
+ * For digital pins, value is 0 or 1.
93
+ * For analog pins, value is 0-255 (10-bit analog value >> 2).
94
+ */
95
+ async readPins() {
96
+ const dataView = await BleClient.read(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinData.id);
97
+ return this.dataViewToPinData(dataView);
98
+ }
99
+ /**
100
+ * Writes pin data for output pins.
101
+ * Only pins configured as outputs (not active inputs) will be affected.
102
+ * For digital pins, value is 0 or 1.
103
+ * For analog pins, value 0-255 is scaled to 0-1023 on the device.
104
+ */
105
+ async writePins(data) {
106
+ const dataView = new DataView(new ArrayBuffer(data.length * 2));
107
+ for (let i = 0; i < data.length; i++) {
108
+ dataView.setUint8(i * 2, data[i].pin);
109
+ dataView.setUint8(i * 2 + 1, data[i].value);
110
+ }
111
+ await BleClient.write(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinData.id, dataView);
112
+ }
113
+ /**
114
+ * Sets PWM output on a pin.
115
+ *
116
+ * @param pin Pin number (0-18).
117
+ * @param value Analog value (0-1024).
118
+ * @param period Period in microseconds.
119
+ */
120
+ async setPwm(pin, value, period) {
121
+ const dataView = new DataView(new ArrayBuffer(7));
122
+ dataView.setUint8(0, pin);
123
+ dataView.setUint16(1, value, true);
124
+ dataView.setUint32(3, period, true);
125
+ await BleClient.write(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pwmControl.id, dataView);
126
+ }
127
+ async startNotifications(type) {
128
+ if (type !== "pinchanged") {
129
+ return;
130
+ }
131
+ try {
132
+ await BleClient.startNotifications(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinData.id, (value) => {
133
+ const data = this.dataViewToPinData(value);
134
+ this.dispatchTypedEvent("pinchanged", { data });
135
+ });
136
+ }
137
+ catch (e) {
138
+ this.dispatchTypedEvent("backgrounderror", {
139
+ error: mapBleError(e),
140
+ event: type,
141
+ });
142
+ }
143
+ }
144
+ async stopNotifications(type) {
145
+ if (type !== "pinchanged") {
146
+ return;
147
+ }
148
+ try {
149
+ await BleClient.stopNotifications(this.deviceId, profile.ioPin.id, profile.ioPin.characteristics.pinData.id);
150
+ }
151
+ catch (e) {
152
+ this.dispatchTypedEvent("backgrounderror", {
153
+ error: mapBleError(e),
154
+ event: type,
155
+ });
156
+ }
157
+ }
158
+ dataViewToPinData(dataView) {
159
+ const result = [];
160
+ for (let i = 0; i + 1 < dataView.byteLength; i += 2) {
161
+ result.push({
162
+ pin: dataView.getUint8(i),
163
+ value: dataView.getUint8(i + 1),
164
+ });
165
+ }
166
+ return result;
167
+ }
168
+ }
169
+ //# sourceMappingURL=io-pin-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"io-pin-service.js","sourceRoot":"","sources":["../../../../src/bluetooth/services/io-pin-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAO9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,SAAS,aAAa,CAAC,IAAc;IACnC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,YAAY;IAGvB,YACU,QAAgB,EAChB,kBAA+C;QADvD;;;;mBAAQ,QAAQ;WAAQ;QACxB;;;;mBAAQ,kBAAkB;WAA6B;QAJzD;;;;mBAAO,OAAO,CAAC,KAAK,CAAC,EAAE;WAAC;IAKrB,CAAC;IAEJ,iBAAiB;QACf,OAAO,CAAC,YAAY,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CACnC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,CACpD,CAAC;QACF,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,IAAc;QAChC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,EACnD,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CACnC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,CACpD,CAAC;QACF,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY,CAAC,IAAc;QAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,EACnD,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CACnC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CACzC,CAAC;QACF,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,IAAgB;QAC9B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EACxC,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc;QACrD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,SAAS,CAAC,KAAK,CACnB,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAC3C,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAuB;QAC9C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,kBAAkB,CAChC,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EACxC,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE;gBACzC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAAuB;QAC7C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,iBAAiB,CAC/B,IAAI,CAAC,QAAQ,EACb,OAAO,CAAC,KAAK,CAAC,EAAE,EAChB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CACzC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE;gBACzC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,QAAkB;QAC1C,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzB,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { Service } from "../device-wrapper.js";
2
+ import { TypedServiceEvent, TypedServiceEventDispatcher } from "../../service-events.js";
3
+ export declare class TemperatureService implements Service {
4
+ private deviceId;
5
+ private dispatchTypedEvent;
6
+ uuid: string;
7
+ constructor(deviceId: string, dispatchTypedEvent: TypedServiceEventDispatcher);
8
+ getRelevantEvents(): TypedServiceEvent[];
9
+ getData(): Promise<number>;
10
+ getPeriod(): Promise<number>;
11
+ setPeriod(value: number): Promise<void>;
12
+ startNotifications(type: TypedServiceEvent): Promise<void>;
13
+ stopNotifications(type: TypedServiceEvent): Promise<void>;
14
+ }
@@ -0,0 +1,76 @@
1
+ import { BleClient } from "@capacitor-community/bluetooth-le";
2
+ import { profile } from "../profile.js";
3
+ import { mapBleError } from "../ble-error.js";
4
+ export class TemperatureService {
5
+ constructor(deviceId, dispatchTypedEvent) {
6
+ Object.defineProperty(this, "deviceId", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: deviceId
11
+ });
12
+ Object.defineProperty(this, "dispatchTypedEvent", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: dispatchTypedEvent
17
+ });
18
+ Object.defineProperty(this, "uuid", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: profile.temperature.id
23
+ });
24
+ }
25
+ getRelevantEvents() {
26
+ return ["temperaturechanged"];
27
+ }
28
+ async getData() {
29
+ const dataView = await BleClient.read(this.deviceId, profile.temperature.id, profile.temperature.characteristics.data.id);
30
+ return dataView.getInt8(0);
31
+ }
32
+ async getPeriod() {
33
+ const dataView = await BleClient.read(this.deviceId, profile.temperature.id, profile.temperature.characteristics.period.id);
34
+ return dataView.getUint16(0, true);
35
+ }
36
+ async setPeriod(value) {
37
+ if (value === 0) {
38
+ return;
39
+ }
40
+ const dataView = new DataView(new ArrayBuffer(2));
41
+ dataView.setUint16(0, value, true);
42
+ await BleClient.write(this.deviceId, profile.temperature.id, profile.temperature.characteristics.period.id, dataView);
43
+ }
44
+ async startNotifications(type) {
45
+ if (type !== "temperaturechanged") {
46
+ return;
47
+ }
48
+ try {
49
+ await BleClient.startNotifications(this.deviceId, profile.temperature.id, profile.temperature.characteristics.data.id, (value) => {
50
+ const celsius = value.getInt8(0);
51
+ this.dispatchTypedEvent("temperaturechanged", { celsius });
52
+ });
53
+ }
54
+ catch (e) {
55
+ this.dispatchTypedEvent("backgrounderror", {
56
+ error: mapBleError(e),
57
+ event: type,
58
+ });
59
+ }
60
+ }
61
+ async stopNotifications(type) {
62
+ if (type !== "temperaturechanged") {
63
+ return;
64
+ }
65
+ try {
66
+ await BleClient.stopNotifications(this.deviceId, profile.temperature.id, profile.temperature.characteristics.data.id);
67
+ }
68
+ catch (e) {
69
+ this.dispatchTypedEvent("backgrounderror", {
70
+ error: mapBleError(e),
71
+ event: type,
72
+ });
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=temperature-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temperature-service.js","sourceRoot":"","sources":["../../../../src/bluetooth/services/temperature-service.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { BackgroundErrorData, BoardVersion, ConnectOptions, ConnectionAvailabilityStatus, ConnectionStatus, ConnectionStatusChange, DeviceConnection, DeviceError, DeviceErrorCode, FlashDataError, FlashDataSource, FlashOptions, ProgressCallback, ProgressStage, assertConnected } from "./device.js";
5
5
  import { Logging, LoggingEvent } from "./logging.js";
6
- import { AccelerometerData, ButtonData, ButtonEventType, ButtonState, LedMatrix, MagnetometerData, UartData } from "./service-events.js";
7
- export { ButtonState, ConnectionStatus, DeviceError, FlashDataError, assertConnected, ProgressStage, };
8
- export type { AccelerometerData, BackgroundErrorData, BoardVersion, ButtonData, ButtonEventType, ConnectOptions, ConnectionAvailabilityStatus, ConnectionStatusChange, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, LedMatrix, Logging, LoggingEvent, MagnetometerData, ProgressCallback, UartData, };
6
+ import { AccelerometerData, ButtonActionData, ButtonData, ButtonActionType, ButtonState, GestureData, MicrobitEventData, PinValue, PinData, LedMatrix, MagnetometerData, TemperatureData, UartData } from "./service-events.js";
7
+ import { ButtonAction, GestureEvent } from "./microbit-events.js";
8
+ export { ButtonAction, ButtonState, ConnectionStatus, DeviceError, FlashDataError, GestureEvent, assertConnected, ProgressStage, };
9
+ export type { AccelerometerData, BackgroundErrorData, BoardVersion, ButtonActionData, ButtonData, ButtonActionType, ConnectOptions, ConnectionAvailabilityStatus, ConnectionStatusChange, DeviceConnection, DeviceErrorCode, FlashDataSource, FlashOptions, GestureData, MicrobitEventData, PinValue, PinData, LedMatrix, Logging, LoggingEvent, MagnetometerData, ProgressCallback, TemperatureData, UartData, };
@@ -3,5 +3,6 @@
3
3
  */
4
4
  import { ConnectionStatus, DeviceError, FlashDataError, ProgressStage, assertConnected, } from "./device.js";
5
5
  import { ButtonState, } from "./service-events.js";
6
- export { ButtonState, ConnectionStatus, DeviceError, FlashDataError, assertConnected, ProgressStage, };
6
+ import { ButtonAction, GestureEvent } from "./microbit-events.js";
7
+ export { ButtonAction, ButtonState, ConnectionStatus, DeviceError, FlashDataError, GestureEvent, assertConnected, ProgressStage, };
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAKL,gBAAgB,EAGhB,WAAW,EAEX,cAAc,EAId,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAIL,WAAW,GAIZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,GACd,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAKL,gBAAgB,EAGhB,WAAW,EAEX,cAAc,EAId,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAKL,WAAW,GASZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,GACd,CAAC"}