@psdk/device-ble-taro 0.7.14 → 0.7.16
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.
- package/build/connected.d.ts +10 -0
- package/build/connected.d.ts.map +1 -1
- package/build/connected.js +81 -30
- package/build/provider.d.ts.map +1 -1
- package/build/provider.js +13 -3
- package/dist/index.js +5 -5
- package/dist/index.js.map +4 -4
- package/package.json +4 -4
package/build/connected.d.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import { ConnectedDevice, ConnectionState, ReadOptions } from "@psdk/frame-father";
|
|
2
2
|
import Taro from "@tarojs/taro";
|
|
3
|
+
import { BleFlowControlOptions } from "@psdk/device-bluetooth-traits";
|
|
3
4
|
export declare class TaroBleConnectedDevice implements ConnectedDevice {
|
|
4
5
|
private device;
|
|
5
6
|
private scpair;
|
|
7
|
+
private flowControlWriter?;
|
|
6
8
|
private _connectionState;
|
|
7
9
|
private dataOfRead;
|
|
8
10
|
private notifyCallback?;
|
|
11
|
+
private notifyReady;
|
|
9
12
|
constructor(options: {
|
|
10
13
|
device: Taro.onBluetoothDeviceFound.CallbackResultBlueToothDevice;
|
|
11
14
|
scpair: ServiceCharacteristicPair;
|
|
15
|
+
flowControl?: BleFlowControlOptions;
|
|
12
16
|
});
|
|
13
17
|
notify(callback: (value: Uint8Array) => Promise<void>): void;
|
|
14
18
|
private doListen;
|
|
19
|
+
private enableNotify;
|
|
20
|
+
private createFlowControlWriter;
|
|
21
|
+
private notifyFlowControl;
|
|
22
|
+
private isSameCharacteristicUuid;
|
|
23
|
+
private writeChunk;
|
|
15
24
|
private realRead;
|
|
16
25
|
origin(): Taro.onBluetoothDeviceFound.CallbackResultBlueToothDevice;
|
|
17
26
|
connectionState(): ConnectionState;
|
|
@@ -26,5 +35,6 @@ export interface ServiceCharacteristicPair {
|
|
|
26
35
|
service: Taro.getBLEDeviceServices.BLEService;
|
|
27
36
|
write: Taro.getBLEDeviceCharacteristics.BLECharacteristic;
|
|
28
37
|
read?: Taro.getBLEDeviceCharacteristics.BLECharacteristic;
|
|
38
|
+
flowControl?: Taro.getBLEDeviceCharacteristics.BLECharacteristic;
|
|
29
39
|
}
|
|
30
40
|
//# sourceMappingURL=connected.d.ts.map
|
package/build/connected.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../src/connected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAEjF,OAAO,IAAI,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../src/connected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAEjF,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,EACL,qBAAqB,EAGtB,MAAM,+BAA+B,CAAC;AAEvC,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,MAAM,CAA4D;IAC1E,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,iBAAiB,CAAC,CAAuB;IAEjD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAuC;IAC9D,OAAO,CAAC,WAAW,CAAgB;gBAEhB,OAAO,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC;QAClE,MAAM,EAAE,yBAAyB,CAAC;QAClC,WAAW,CAAC,EAAE,qBAAqB,CAAC;KACrC;IASD,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAI9C,QAAQ;YAqCR,YAAY;IAiB1B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,wBAAwB;YAIlB,UAAU;YAqBV,QAAQ;IAuBtB,MAAM,IAAI,IAAI,CAAC,sBAAsB,CAAC,6BAA6B;IAInE,eAAe,IAAI,eAAe;IAIlC,UAAU,IAAI,MAAM;IAId,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC,OAAO,IAAI,OAAO;IAIZ,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBhD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,KAAK,IAAI,IAAI;CAId;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;IAC9C,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;IAC1D,IAAI,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;IAC1D,WAAW,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;CAClE"}
|
package/build/connected.js
CHANGED
|
@@ -7,27 +7,43 @@ exports.TaroBleConnectedDevice = void 0;
|
|
|
7
7
|
const frame_father_1 = require("@psdk/frame-father");
|
|
8
8
|
const await_timeout_1 = __importDefault(require("await-timeout"));
|
|
9
9
|
const taro_1 = __importDefault(require("@tarojs/taro"));
|
|
10
|
+
const device_bluetooth_traits_1 = require("@psdk/device-bluetooth-traits");
|
|
10
11
|
class TaroBleConnectedDevice {
|
|
11
12
|
device;
|
|
12
13
|
scpair;
|
|
14
|
+
flowControlWriter;
|
|
13
15
|
_connectionState;
|
|
14
16
|
dataOfRead;
|
|
15
17
|
notifyCallback;
|
|
18
|
+
notifyReady;
|
|
16
19
|
constructor(options) {
|
|
17
20
|
this.device = options.device;
|
|
18
21
|
this.scpair = options.scpair;
|
|
19
22
|
this._connectionState = frame_father_1.ConnectionState.CONNECTED;
|
|
20
23
|
this.dataOfRead = [];
|
|
21
|
-
this.
|
|
24
|
+
this.flowControlWriter = this.createFlowControlWriter(options.flowControl);
|
|
25
|
+
this.notifyReady = this.doListen();
|
|
22
26
|
}
|
|
23
27
|
notify(callback) {
|
|
24
28
|
this.notifyCallback = callback;
|
|
25
29
|
}
|
|
26
|
-
doListen() {
|
|
27
|
-
if (this.scpair.read == null)
|
|
28
|
-
return;
|
|
30
|
+
async doListen() {
|
|
29
31
|
taro_1.default.onBLECharacteristicValueChange(async (value) => {
|
|
30
32
|
let data = new Uint8Array(value.value);
|
|
33
|
+
if (this.flowControlWriter &&
|
|
34
|
+
this.scpair.flowControl &&
|
|
35
|
+
value.characteristicId &&
|
|
36
|
+
this.isSameCharacteristicUuid(value.characteristicId, this.scpair.flowControl.uuid)) {
|
|
37
|
+
this.notifyFlowControl(data);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!this.scpair.read) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (value.characteristicId &&
|
|
44
|
+
!this.isSameCharacteristicUuid(value.characteristicId, this.scpair.read.uuid)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
31
47
|
if (this.notifyCallback) {
|
|
32
48
|
await this.notifyCallback(data);
|
|
33
49
|
}
|
|
@@ -36,14 +52,62 @@ class TaroBleConnectedDevice {
|
|
|
36
52
|
taro_1.default.onBLEConnectionStateChange(value => {
|
|
37
53
|
this._connectionState = value.connected ? frame_father_1.ConnectionState.CONNECTED : frame_father_1.ConnectionState.DISCONNECTED;
|
|
38
54
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
if (this.scpair.read != null) {
|
|
56
|
+
await this.enableNotify(this.scpair.read.uuid);
|
|
57
|
+
}
|
|
58
|
+
if (this.scpair.flowControl != null) {
|
|
59
|
+
await this.enableNotify(this.scpair.flowControl.uuid);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async enableNotify(characteristicId) {
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
taro_1.default.notifyBLECharacteristicValueChange({
|
|
65
|
+
deviceId: this.device.deviceId,
|
|
66
|
+
serviceId: this.scpair.service.uuid,
|
|
67
|
+
characteristicId,
|
|
68
|
+
state: true,
|
|
69
|
+
success: result => {
|
|
70
|
+
console.log(result);
|
|
71
|
+
resolve();
|
|
72
|
+
},
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
fail: (e) => reject(e),
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
createFlowControlWriter(options) {
|
|
79
|
+
if (!this.scpair.flowControl || !(options?.enabled ?? false)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return new device_bluetooth_traits_1.BleFlowControlWriter({
|
|
83
|
+
...device_bluetooth_traits_1.DEFAULT_BLE_FLOW_CONTROL_OPTIONS,
|
|
84
|
+
...options,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
notifyFlowControl(data) {
|
|
88
|
+
this.flowControlWriter.onNotify(data);
|
|
89
|
+
}
|
|
90
|
+
isSameCharacteristicUuid(left, right) {
|
|
91
|
+
return left.replace(/-/g, '').toLowerCase() == right.replace(/-/g, '').toLowerCase();
|
|
92
|
+
}
|
|
93
|
+
async writeChunk(data) {
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
taro_1.default.writeBLECharacteristicValue({
|
|
96
|
+
deviceId: this.device.deviceId,
|
|
97
|
+
serviceId: this.scpair.service.uuid,
|
|
98
|
+
characteristicId: this.scpair.write.uuid,
|
|
99
|
+
// @ts-ignore
|
|
100
|
+
value: data.buffer,
|
|
101
|
+
success: result => {
|
|
102
|
+
if (result.errMsg.indexOf('ok') == -1) {
|
|
103
|
+
reject(result.errMsg);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
resolve();
|
|
107
|
+
},
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
fail: (e) => reject(e)
|
|
110
|
+
});
|
|
47
111
|
});
|
|
48
112
|
}
|
|
49
113
|
async realRead() {
|
|
@@ -116,24 +180,11 @@ class TaroBleConnectedDevice {
|
|
|
116
180
|
}
|
|
117
181
|
}
|
|
118
182
|
async write(data) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// @ts-ignore
|
|
125
|
-
value: data.buffer,
|
|
126
|
-
success: result => {
|
|
127
|
-
if (result.errMsg.indexOf('ok') == -1) {
|
|
128
|
-
reject(result.errMsg);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
resolve();
|
|
132
|
-
},
|
|
133
|
-
// @ts-ignore
|
|
134
|
-
fail: (e) => reject(e)
|
|
135
|
-
});
|
|
136
|
-
});
|
|
183
|
+
if (this.flowControlWriter) {
|
|
184
|
+
await this.notifyReady;
|
|
185
|
+
return this.flowControlWriter.write(data, { writeChunk: chunk => this.writeChunk(chunk) });
|
|
186
|
+
}
|
|
187
|
+
return this.writeChunk(data);
|
|
137
188
|
}
|
|
138
189
|
flush() {
|
|
139
190
|
this.dataOfRead.splice(0, this.dataOfRead.length);
|
package/build/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,EAEd,SAAS,EACT,eAAe,EACf,eAAe,EAEhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AAGpE,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,qBAAa,gBAAiB,SAAQ,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC;IAExG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAG3C,OAAO,CAAC,kBAAkB,CAAC,CAAgH;IAC3I,OAAO,CAAC,eAAe,CAAC,CAAyB;gBAErC,OAAO,CAAC,EAAE,eAAe;IAMrC,WAAW,IAAI,OAAO;IAMhB,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAUvD,OAAO,CACX,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,EAClF,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,eAAe,CAAC;IA4B3B,UAAU,CACR,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC,CAAC,KAChG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIrB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B/B,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;YAY9B,oBAAoB;YAgBpB,qBAAqB;IAgBnC,OAAO,CAAC,sBAAsB;IAqC9B,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,gBAAgB;YAQV,mBAAmB;YAYnB,oBAAoB;YAkBpB,2BAA2B;YAmB3B,eAAe;YAgBf,UAAU;CA6HzB"}
|
package/build/provider.js
CHANGED
|
@@ -53,6 +53,7 @@ class TaroBleBluetooth extends device_bluetooth_traits_1.Jluetooth {
|
|
|
53
53
|
this.connectedDevice = new connected_1.TaroBleConnectedDevice({
|
|
54
54
|
device: origin,
|
|
55
55
|
scpair,
|
|
56
|
+
flowControl: this.options?.flowControl,
|
|
56
57
|
});
|
|
57
58
|
await this.stopDiscovery();
|
|
58
59
|
return Promise.resolve(this.connectedDevice);
|
|
@@ -161,11 +162,10 @@ class TaroBleBluetooth extends device_bluetooth_traits_1.Jluetooth {
|
|
|
161
162
|
});
|
|
162
163
|
}
|
|
163
164
|
extractMacFromAdvertisData(advertisData) {
|
|
164
|
-
if (!advertisData || advertisData.byteLength <
|
|
165
|
+
if (!advertisData || advertisData.byteLength < 8)
|
|
165
166
|
return null;
|
|
166
167
|
const bytes = new Uint8Array(advertisData);
|
|
167
|
-
|
|
168
|
-
const macBytes = Array.from(bytes.slice(0, 6)).reverse();
|
|
168
|
+
const macBytes = Array.from(bytes.slice(2, 8));
|
|
169
169
|
return macBytes
|
|
170
170
|
.map(b => b.toString(16).padStart(2, '0'))
|
|
171
171
|
.join(':')
|
|
@@ -248,6 +248,16 @@ class TaroBleBluetooth extends device_bluetooth_traits_1.Jluetooth {
|
|
|
248
248
|
});
|
|
249
249
|
_characteristicsMap.set(service.uuid, characteristics);
|
|
250
250
|
}
|
|
251
|
+
if (this.options?.flowControl?.enabled) {
|
|
252
|
+
return (0, device_bluetooth_traits_1.findBleFlowControlCharacteristics)({
|
|
253
|
+
services: options.services,
|
|
254
|
+
flowControlOptions: this.options.flowControl,
|
|
255
|
+
isServiceAllowed: service => device_bluetooth_traits_1.TBluetoothHelpers.isAllowServices(service.uuid, this.options?.allowServices),
|
|
256
|
+
getServiceUuid: service => service.uuid,
|
|
257
|
+
getCharacteristics: service => _characteristicsMap.get(service.uuid),
|
|
258
|
+
getCharacteristicUuid: characteristic => characteristic.uuid,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
251
261
|
// use special first
|
|
252
262
|
if (this.options?.allowedWriteCharacteristic && this.options?.allowedReadCharacteristic) {
|
|
253
263
|
for (const service of options.services) {
|