@psdk/device-ble-taro 0.7.15 → 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.
@@ -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
@@ -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;AAEhC,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,MAAM,CAA4D;IAC1E,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAuC;gBAE3C,OAAO,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CAAC;QAClE,MAAM,EAAE,yBAAyB,CAAC;KACnC;IAQD,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,QAAQ;YAuBF,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;IAqB5C,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;CAC3D"}
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"}
@@ -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.doListen();
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
- taro_1.default.notifyBLECharacteristicValueChange({
40
- deviceId: this.device.deviceId,
41
- serviceId: this.scpair.service.uuid,
42
- characteristicId: this.scpair.read.uuid,
43
- state: true,
44
- success: result => console.log(result),
45
- // @ts-ignore
46
- fail: (e) => console.error(e),
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
- return new Promise((resolve, reject) => {
120
- taro_1.default.writeBLECharacteristicValue({
121
- deviceId: this.device.deviceId,
122
- serviceId: this.scpair.service.uuid,
123
- characteristicId: this.scpair.write.uuid,
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);
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,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;IA2B3B,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;CAkHzB"}
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);
@@ -247,6 +248,16 @@ class TaroBleBluetooth extends device_bluetooth_traits_1.Jluetooth {
247
248
  });
248
249
  _characteristicsMap.set(service.uuid, characteristics);
249
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
+ }
250
261
  // use special first
251
262
  if (this.options?.allowedWriteCharacteristic && this.options?.allowedReadCharacteristic) {
252
263
  for (const service of options.services) {