@ukeyfe/hardware-transport-react-native 1.1.25 → 1.1.26
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/README.md +1 -1
- package/dist/BleManager.d.ts +1 -1
- package/dist/BleManager.d.ts.map +1 -1
- package/dist/BleTransport.d.ts +1 -1
- package/dist/BleTransport.d.ts.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -4
- package/dist/subscribeBleOn.d.ts +1 -1
- package/dist/subscribeBleOn.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/BleManager.ts +4 -2
- package/src/BleTransport.ts +4 -2
- package/src/index.ts +89 -23
- package/src/subscribeBleOn.ts +3 -1
- package/src/utils/validateNotify.ts +1 -1
package/README.md
CHANGED
|
@@ -26,4 +26,4 @@ yar update:protobuf to generate new ./messages.json and ./src/types/messages.ts
|
|
|
26
26
|
|
|
27
27
|
## Docs
|
|
28
28
|
|
|
29
|
-
Documentation is available [hardware-js-sdk](https://developer.ukey.
|
|
29
|
+
Documentation is available [hardware-js-sdk](https://developer.ukey.io/connect-to-hardware/hardware-sdk/start)
|
package/dist/BleManager.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Peripheral } from '@ukeyfe/react-native-ble-utils';
|
|
1
|
+
import type { Peripheral } from '@ukeyfe/react-native-ble-utils';
|
|
2
2
|
export declare const getConnectedDeviceIds: (serviceUuids: string[]) => Promise<Peripheral[]>;
|
|
3
3
|
export declare const getBondedDevices: () => Promise<Peripheral[]>;
|
|
4
4
|
export declare const pairDevice: (macAddress: string) => Promise<{
|
package/dist/BleManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AASjE,eAAO,MAAM,qBAAqB,iBAAkB,MAAM,EAAE,0BACZ,CAAC;AAEjD,eAAO,MAAM,gBAAgB,6BAAwC,CAAC;AAEtE,eAAO,MAAM,UAAU,eAAgB,MAAM;;;EAAoC,CAAC;AAElF,eAAO,MAAM,iBAAiB,kBAAmB,MAAM,KAAG,QAAQ,UAAU,GAAG,SAAS,CAmCpF,CAAC"}
|
package/dist/BleTransport.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleTransport.d.ts","sourceRoot":"","sources":["../src/BleTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BleTransport.d.ts","sourceRoot":"","sources":["../src/BleTransport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAKnE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,SAA6B;IAEjC,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,SAAM;IAEb,mBAAmB,EAAE,cAAc,CAAC;IAEpC,oBAAoB,EAAE,cAAc,CAAC;IAErC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAEhC,MAAM,CAAC,WAAW,SAAK;IAEvB,MAAM,CAAC,WAAW,SAAQ;gBAGxB,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,cAAc,EACnC,oBAAoB,EAAE,cAAc;IAehC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BzF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as transport from '@ukeyfe/hardware-transport';
|
|
2
|
-
import transport__default from '@ukeyfe/hardware-transport';
|
|
3
|
-
import {
|
|
2
|
+
import transport__default, { UKeyDeviceInfoBase } from '@ukeyfe/hardware-transport';
|
|
3
|
+
import { Device, BleManager, Characteristic } from 'react-native-ble-plx';
|
|
4
4
|
import { Deferred } from '@ukeyfe/hardware-shared';
|
|
5
5
|
import EventEmitter from 'events';
|
|
6
6
|
|
|
@@ -12,6 +12,7 @@ type BleAcquireInput = {
|
|
|
12
12
|
forceCleanRunPromise?: boolean;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
+
type IUKeyDevice = UKeyDeviceInfoBase & Device;
|
|
15
16
|
declare class ReactNativeBleTransport {
|
|
16
17
|
blePlxManager: BleManager | undefined;
|
|
17
18
|
_messages: ReturnType<typeof transport__default.parseConfigure> | undefined;
|
|
@@ -27,16 +28,17 @@ declare class ReactNativeBleTransport {
|
|
|
27
28
|
configure(signedData: any): void;
|
|
28
29
|
listen(): void;
|
|
29
30
|
getPlxManager(): Promise<BleManager>;
|
|
30
|
-
enumerate(): Promise<
|
|
31
|
+
enumerate(): Promise<IUKeyDevice[]>;
|
|
31
32
|
acquire(input: BleAcquireInput): Promise<{
|
|
32
33
|
uuid: string;
|
|
33
34
|
}>;
|
|
34
|
-
_monitorCharacteristic(characteristic: Characteristic): () => void;
|
|
35
|
+
_monitorCharacteristic(characteristic: Characteristic, uuid: string): () => void;
|
|
35
36
|
release(uuid: string): Promise<boolean>;
|
|
36
37
|
post(session: string, name: string, data: Record<string, unknown>): Promise<void>;
|
|
37
38
|
call(uuid: string, name: string, data: Record<string, unknown>): Promise<transport.MessageFromUKey>;
|
|
38
39
|
stop(): void;
|
|
40
|
+
disconnect(session: string): Promise<void>;
|
|
39
41
|
cancel(): void;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
export { ReactNativeBleTransport as default };
|
|
44
|
+
export { IUKeyDevice, ReactNativeBleTransport as default };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAIL,UAAU,IAAI,aAAa,EAE5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,SAAS,EAAE,EAGhB,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAepC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAYjE,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,MAAM,CAAC;AA0CtD,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAEzC,SAAS,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAEnE,IAAI,SAA6B;IAEjC,UAAU,UAAS;IAEnB,OAAO,UAAS;IAEhB,WAAW,SAAQ;IAEnB,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAExC,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;gBAEX,OAAO,EAAE,gBAAgB;IAIrC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY;IAKvC,SAAS,CAAC,UAAU,EAAE,GAAG;IAMzB,MAAM;IAIN,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAWjC,SAAS;IA6FT,OAAO,CAAC,KAAK,EAAE,eAAe;;;IAqNpC,sBAAsB,CAAC,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM;IAkF7D,OAAO,CAAC,IAAI,EAAE,MAAM;IAepB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA2HpE,IAAI;IAIE,UAAU,CAAC,OAAO,EAAE,MAAM;IA6DhC,MAAM;CAOP"}
|
package/dist/index.js
CHANGED
|
@@ -338,7 +338,7 @@ class ReactNativeBleTransport {
|
|
|
338
338
|
});
|
|
339
339
|
const addDevice = (device) => {
|
|
340
340
|
if (deviceList.every(d => d.id !== device.id)) {
|
|
341
|
-
deviceList.push(device);
|
|
341
|
+
deviceList.push(Object.assign(Object.assign({}, device), { commType: 'ble' }));
|
|
342
342
|
}
|
|
343
343
|
};
|
|
344
344
|
timer.timeout(() => {
|
|
@@ -497,7 +497,7 @@ class ReactNativeBleTransport {
|
|
|
497
497
|
}
|
|
498
498
|
yield this.release(uuid);
|
|
499
499
|
const transport = new BleTransport(device, writeCharacteristic, notifyCharacteristic);
|
|
500
|
-
transport.nofitySubscription = this._monitorCharacteristic(transport.notifyCharacteristic);
|
|
500
|
+
transport.nofitySubscription = this._monitorCharacteristic(transport.notifyCharacteristic, uuid);
|
|
501
501
|
transportCache[uuid] = transport;
|
|
502
502
|
(_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit('device-connect', {
|
|
503
503
|
name: device.name,
|
|
@@ -528,7 +528,7 @@ class ReactNativeBleTransport {
|
|
|
528
528
|
return { uuid };
|
|
529
529
|
});
|
|
530
530
|
}
|
|
531
|
-
_monitorCharacteristic(characteristic) {
|
|
531
|
+
_monitorCharacteristic(characteristic, uuid) {
|
|
532
532
|
let bufferLength = 0;
|
|
533
533
|
let buffer$1 = [];
|
|
534
534
|
const subscription = characteristic.monitor((error, c) => {
|
|
@@ -580,7 +580,7 @@ class ReactNativeBleTransport {
|
|
|
580
580
|
this.Log.debug('monitor data error: ', error);
|
|
581
581
|
(_j = this.runPromise) === null || _j === void 0 ? void 0 : _j.reject(hardwareShared.ERRORS.TypedError(hardwareShared.HardwareErrorCode.BleWriteCharacteristicError));
|
|
582
582
|
}
|
|
583
|
-
});
|
|
583
|
+
}, uuid);
|
|
584
584
|
return () => {
|
|
585
585
|
this.Log.debug('remove characteristic monitor: ', characteristic.uuid);
|
|
586
586
|
subscription.remove();
|
|
@@ -714,6 +714,58 @@ class ReactNativeBleTransport {
|
|
|
714
714
|
stop() {
|
|
715
715
|
this.stopped = true;
|
|
716
716
|
}
|
|
717
|
+
disconnect(session) {
|
|
718
|
+
var _a, _b, _c, _d;
|
|
719
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
720
|
+
this.Log.debug('transport-react-native transport resetSession: ', session);
|
|
721
|
+
const transport = transportCache[session];
|
|
722
|
+
if (transport === null || transport === void 0 ? void 0 : transport.nofitySubscription) {
|
|
723
|
+
try {
|
|
724
|
+
transport.nofitySubscription();
|
|
725
|
+
transport.nofitySubscription = undefined;
|
|
726
|
+
}
|
|
727
|
+
catch (e) {
|
|
728
|
+
this.Log.error('resetSession: remove notify subscription error: ', e);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
if (session) {
|
|
732
|
+
try {
|
|
733
|
+
yield ((_a = this.blePlxManager) === null || _a === void 0 ? void 0 : _a.cancelTransaction(session));
|
|
734
|
+
}
|
|
735
|
+
catch (e) {
|
|
736
|
+
this.Log.debug('resetSession: cancel transaction error (ignored): ', (e === null || e === void 0 ? void 0 : e.message) || e);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
if (transport === null || transport === void 0 ? void 0 : transport.device) {
|
|
740
|
+
try {
|
|
741
|
+
yield transport.device.cancelConnection();
|
|
742
|
+
}
|
|
743
|
+
catch (e) {
|
|
744
|
+
this.Log.debug('resetSession: device.cancelConnection error (ignored): ', (e === null || e === void 0 ? void 0 : e.message) || e);
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
try {
|
|
748
|
+
yield ((_b = this.blePlxManager) === null || _b === void 0 ? void 0 : _b.cancelDeviceConnection(session));
|
|
749
|
+
}
|
|
750
|
+
catch (e) {
|
|
751
|
+
this.Log.debug('resetSession: manager.cancelDeviceConnection error (ignored): ', (e === null || e === void 0 ? void 0 : e.message) || e);
|
|
752
|
+
}
|
|
753
|
+
if (transportCache[session]) {
|
|
754
|
+
delete transportCache[session];
|
|
755
|
+
}
|
|
756
|
+
try {
|
|
757
|
+
(_c = this.emitter) === null || _c === void 0 ? void 0 : _c.emit('device-disconnect', {
|
|
758
|
+
name: (_d = transport === null || transport === void 0 ? void 0 : transport.device) === null || _d === void 0 ? void 0 : _d.name,
|
|
759
|
+
id: session,
|
|
760
|
+
connectId: session,
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
catch (e) {
|
|
764
|
+
this.Log.error('resetSession: emit disconnect event error: ', e);
|
|
765
|
+
}
|
|
766
|
+
yield new Promise(resolve => setTimeout(() => resolve(), 100));
|
|
767
|
+
});
|
|
768
|
+
}
|
|
717
769
|
cancel() {
|
|
718
770
|
this.Log.debug('transport-react-native transport cancel');
|
|
719
771
|
if (this.runPromise) ;
|
package/dist/subscribeBleOn.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribeBleOn.d.ts","sourceRoot":"","sources":["../src/subscribeBleOn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subscribeBleOn.d.ts","sourceRoot":"","sources":["../src/subscribeBleOn.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,cAAc,eAAgB,aAAa,kBAAc,QAAQ,IAAI,CAqB9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukeyfe/hardware-transport-react-native",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.26",
|
|
4
4
|
"homepage": "https://github.com/UKeyHQ/hardware-js-sdk#readme",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "git+https://github.com/
|
|
13
|
+
"url": "git+https://github.com/UKeyHQ/hardware-js-sdk.git"
|
|
14
14
|
},
|
|
15
15
|
"scripts": {
|
|
16
16
|
"dev": "rimraf dist && rollup -c ../../build/rollup.config.js -w",
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"lint:fix": "eslint . --fix"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ukeyfe/hardware-shared": "1.1.
|
|
23
|
-
"@ukeyfe/hardware-transport": "1.1.
|
|
22
|
+
"@ukeyfe/hardware-shared": "1.1.26",
|
|
23
|
+
"@ukeyfe/hardware-transport": "1.1.26",
|
|
24
24
|
"@ukeyfe/react-native-ble-utils": "^0.1.5",
|
|
25
25
|
"react-native-ble-plx": "3.5.0"
|
|
26
26
|
},
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "ca0b502d1ac83fdd0883d5e278e20bd80ac08f29"
|
|
28
28
|
}
|
package/src/BleManager.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import BleUtils
|
|
1
|
+
import BleUtils from '@ukeyfe/react-native-ble-utils';
|
|
2
2
|
import { ERRORS, HardwareErrorCode } from '@ukeyfe/hardware-shared';
|
|
3
|
-
import {
|
|
3
|
+
import { LoggerNames, getLogger } from '@ukeyfe/hardware-core';
|
|
4
|
+
|
|
5
|
+
import type { Peripheral } from '@ukeyfe/react-native-ble-utils';
|
|
4
6
|
|
|
5
7
|
const Logger = getLogger(LoggerNames.HdBleTransport);
|
|
6
8
|
|
package/src/BleTransport.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { BleErrorCode } from 'react-native-ble-plx';
|
|
2
|
+
import { LoggerNames, getLogger, wait } from '@ukeyfe/hardware-core';
|
|
3
|
+
|
|
4
|
+
import type { Characteristic, Device } from 'react-native-ble-plx';
|
|
3
5
|
// import { wait } from '@ukeyfe/hardware-core/src/utils';
|
|
4
6
|
|
|
5
7
|
const Log = getLogger(LoggerNames.HdBleTransport);
|
package/src/index.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PermissionsAndroid, Platform } from 'react-native';
|
|
2
2
|
import { Buffer } from 'buffer';
|
|
3
3
|
import {
|
|
4
|
-
BleManager as BlePlxManager,
|
|
5
|
-
Device,
|
|
6
|
-
BleErrorCode,
|
|
7
|
-
Characteristic,
|
|
8
|
-
ScanMode,
|
|
9
4
|
BleATTErrorCode,
|
|
10
5
|
BleError,
|
|
6
|
+
BleErrorCode,
|
|
7
|
+
BleManager as BlePlxManager,
|
|
8
|
+
ScanMode,
|
|
11
9
|
} from 'react-native-ble-plx';
|
|
12
10
|
import ByteBuffer from 'bytebuffer';
|
|
13
|
-
import transport, {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
} from '@ukeyfe/hardware-shared';
|
|
21
|
-
import type EventEmitter from 'events';
|
|
11
|
+
import transport, {
|
|
12
|
+
COMMON_HEADER_SIZE,
|
|
13
|
+
LogBlockCommand,
|
|
14
|
+
type UKeyDeviceInfoBase,
|
|
15
|
+
} from '@ukeyfe/hardware-transport';
|
|
16
|
+
import { ERRORS, HardwareErrorCode, createDeferred, isUkeyDevice } from '@ukeyfe/hardware-shared';
|
|
17
|
+
|
|
22
18
|
import { getConnectedDeviceIds, onDeviceBondState, pairDevice } from './BleManager';
|
|
23
19
|
import { subscribeBleOn } from './subscribeBleOn';
|
|
24
20
|
import {
|
|
21
|
+
ANDROID_PACKET_LENGTH,
|
|
22
|
+
IOS_PACKET_LENGTH,
|
|
25
23
|
getBluetoothServiceUuids,
|
|
26
24
|
getInfosForServiceUuid,
|
|
27
|
-
IOS_PACKET_LENGTH,
|
|
28
|
-
ANDROID_PACKET_LENGTH,
|
|
29
25
|
} from './constants';
|
|
30
26
|
import { isHeaderChunk } from './utils/validateNotify';
|
|
31
27
|
import BleTransport from './BleTransport';
|
|
32
28
|
import timer from './utils/timer';
|
|
29
|
+
|
|
30
|
+
import type { Deferred } from '@ukeyfe/hardware-shared';
|
|
31
|
+
import type { Characteristic, Device } from 'react-native-ble-plx';
|
|
32
|
+
import type EventEmitter from 'events';
|
|
33
33
|
import type { BleAcquireInput, TransportOptions } from './types';
|
|
34
34
|
|
|
35
35
|
const { check, buildBuffers, receiveOne, parseConfigure } = transport;
|
|
@@ -42,6 +42,8 @@ let connectOptions: Record<string, unknown> = {
|
|
|
42
42
|
refreshGatt: 'OnConnected',
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
+
export type IUKeyDevice = UKeyDeviceInfoBase & Device;
|
|
46
|
+
|
|
45
47
|
const tryToGetConfiguration = (device: Device) => {
|
|
46
48
|
if (!device || !device.serviceUUIDs) return null;
|
|
47
49
|
const [serviceUUID] = device.serviceUUIDs;
|
|
@@ -133,8 +135,8 @@ export default class ReactNativeBleTransport {
|
|
|
133
135
|
*/
|
|
134
136
|
async enumerate() {
|
|
135
137
|
// eslint-disable-next-line no-async-promise-executor
|
|
136
|
-
return new Promise<
|
|
137
|
-
const deviceList:
|
|
138
|
+
return new Promise<IUKeyDevice[]>(async (resolve, reject) => {
|
|
139
|
+
const deviceList: IUKeyDevice[] = [];
|
|
138
140
|
const blePlxManager = await this.getPlxManager();
|
|
139
141
|
try {
|
|
140
142
|
await subscribeBleOn(blePlxManager);
|
|
@@ -213,7 +215,7 @@ export default class ReactNativeBleTransport {
|
|
|
213
215
|
|
|
214
216
|
const addDevice = (device: Device) => {
|
|
215
217
|
if (deviceList.every(d => d.id !== device.id)) {
|
|
216
|
-
deviceList.push(device);
|
|
218
|
+
deviceList.push({ ...device, commType: 'ble' } as IUKeyDevice);
|
|
217
219
|
}
|
|
218
220
|
};
|
|
219
221
|
|
|
@@ -403,7 +405,10 @@ export default class ReactNativeBleTransport {
|
|
|
403
405
|
await this.release(uuid);
|
|
404
406
|
|
|
405
407
|
const transport = new BleTransport(device, writeCharacteristic, notifyCharacteristic);
|
|
406
|
-
transport.nofitySubscription = this._monitorCharacteristic(
|
|
408
|
+
transport.nofitySubscription = this._monitorCharacteristic(
|
|
409
|
+
transport.notifyCharacteristic,
|
|
410
|
+
uuid
|
|
411
|
+
);
|
|
407
412
|
transportCache[uuid] = transport;
|
|
408
413
|
|
|
409
414
|
this.emitter?.emit('device-connect', {
|
|
@@ -434,7 +439,7 @@ export default class ReactNativeBleTransport {
|
|
|
434
439
|
return { uuid };
|
|
435
440
|
}
|
|
436
441
|
|
|
437
|
-
_monitorCharacteristic(characteristic: Characteristic) {
|
|
442
|
+
_monitorCharacteristic(characteristic: Characteristic, uuid: string) {
|
|
438
443
|
let bufferLength = 0;
|
|
439
444
|
let buffer: any[] = [];
|
|
440
445
|
const subscription = characteristic.monitor((error, c) => {
|
|
@@ -508,7 +513,7 @@ export default class ReactNativeBleTransport {
|
|
|
508
513
|
this.Log.debug('monitor data error: ', error);
|
|
509
514
|
this.runPromise?.reject(ERRORS.TypedError(HardwareErrorCode.BleWriteCharacteristicError));
|
|
510
515
|
}
|
|
511
|
-
});
|
|
516
|
+
}, uuid);
|
|
512
517
|
|
|
513
518
|
return () => {
|
|
514
519
|
this.Log.debug('remove characteristic monitor: ', characteristic.uuid);
|
|
@@ -662,6 +667,67 @@ export default class ReactNativeBleTransport {
|
|
|
662
667
|
this.stopped = true;
|
|
663
668
|
}
|
|
664
669
|
|
|
670
|
+
async disconnect(session: string) {
|
|
671
|
+
this.Log.debug('transport-react-native transport resetSession: ', session);
|
|
672
|
+
const transport = transportCache[session] as BleTransport;
|
|
673
|
+
|
|
674
|
+
// cancel the notify subscription
|
|
675
|
+
if (transport?.nofitySubscription) {
|
|
676
|
+
try {
|
|
677
|
+
transport.nofitySubscription();
|
|
678
|
+
transport.nofitySubscription = undefined;
|
|
679
|
+
} catch (e) {
|
|
680
|
+
this.Log.error('resetSession: remove notify subscription error: ', e);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// cancel the ble transaction
|
|
685
|
+
if (session) {
|
|
686
|
+
try {
|
|
687
|
+
await this.blePlxManager?.cancelTransaction(session);
|
|
688
|
+
} catch (e) {
|
|
689
|
+
this.Log.debug('resetSession: cancel transaction error (ignored): ', e?.message || e);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
// disconnect the device via the device object
|
|
694
|
+
if (transport?.device) {
|
|
695
|
+
try {
|
|
696
|
+
await transport.device.cancelConnection();
|
|
697
|
+
} catch (e) {
|
|
698
|
+
this.Log.debug('resetSession: device.cancelConnection error (ignored): ', e?.message || e);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// disconnect the device via the ble manager
|
|
703
|
+
try {
|
|
704
|
+
await this.blePlxManager?.cancelDeviceConnection(session);
|
|
705
|
+
} catch (e) {
|
|
706
|
+
this.Log.debug(
|
|
707
|
+
'resetSession: manager.cancelDeviceConnection error (ignored): ',
|
|
708
|
+
e?.message || e
|
|
709
|
+
);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// clear the transport cache
|
|
713
|
+
if (transportCache[session]) {
|
|
714
|
+
delete transportCache[session];
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// emit the disconnect event
|
|
718
|
+
try {
|
|
719
|
+
this.emitter?.emit('device-disconnect', {
|
|
720
|
+
name: transport?.device?.name,
|
|
721
|
+
id: session,
|
|
722
|
+
connectId: session,
|
|
723
|
+
});
|
|
724
|
+
} catch (e) {
|
|
725
|
+
this.Log.error('resetSession: emit disconnect event error: ', e);
|
|
726
|
+
}
|
|
727
|
+
// eslint-disable-next-line no-promise-executor-return
|
|
728
|
+
await new Promise<void>(resolve => setTimeout(() => resolve(), 100));
|
|
729
|
+
}
|
|
730
|
+
|
|
665
731
|
cancel() {
|
|
666
732
|
this.Log.debug('transport-react-native transport cancel');
|
|
667
733
|
if (this.runPromise) {
|
package/src/subscribeBleOn.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ERRORS, HardwareErrorCode } from '@ukeyfe/hardware-shared';
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import timer from './utils/timer';
|
|
4
4
|
|
|
5
|
+
import type { BlePlxManager } from './types';
|
|
6
|
+
|
|
5
7
|
export const subscribeBleOn = (bleManager: BlePlxManager, ms = 1000): Promise<void> =>
|
|
6
8
|
new Promise((resolve, reject) => {
|
|
7
9
|
let done = false;
|