@onekeyfe/hd-transport-web-device 1.2.0-alpha.2 → 1.2.0-alpha.4
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/__tests__/electron-ble-transport.test.ts +12 -8
- package/dist/electron-ble-transport.d.ts +1 -1
- package/dist/electron-ble-transport.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +20 -31
- package/dist/webusb.d.ts +1 -0
- package/dist/webusb.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/electron-ble-transport.ts +4 -25
- package/src/webusb.ts +15 -11
|
@@ -28,21 +28,25 @@ const protocolV1Schema = {
|
|
|
28
28
|
|
|
29
29
|
const protocolV2Schema = {
|
|
30
30
|
nested: {
|
|
31
|
-
|
|
31
|
+
ProtocolInfoRequest: {
|
|
32
32
|
fields: {},
|
|
33
33
|
},
|
|
34
|
-
|
|
34
|
+
ProtocolInfo: {
|
|
35
35
|
fields: {
|
|
36
|
-
|
|
36
|
+
version: {
|
|
37
37
|
type: 'uint32',
|
|
38
38
|
id: 1,
|
|
39
39
|
},
|
|
40
|
-
|
|
40
|
+
supported_messages: {
|
|
41
|
+
rule: 'repeated',
|
|
41
42
|
type: 'uint32',
|
|
42
43
|
id: 2,
|
|
44
|
+
options: {
|
|
45
|
+
packed: false,
|
|
46
|
+
},
|
|
43
47
|
},
|
|
44
|
-
|
|
45
|
-
type: '
|
|
48
|
+
protobuf_definition: {
|
|
49
|
+
type: 'string',
|
|
46
50
|
id: 3,
|
|
47
51
|
},
|
|
48
52
|
},
|
|
@@ -65,8 +69,8 @@ const protocolV2Schema = {
|
|
|
65
69
|
},
|
|
66
70
|
MessageType: {
|
|
67
71
|
values: {
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
MessageType_ProtocolInfoRequest: 60200,
|
|
73
|
+
MessageType_ProtocolInfo: 60201,
|
|
70
74
|
MessageType_Ping: 60206,
|
|
71
75
|
MessageType_Success: 60207,
|
|
72
76
|
},
|
|
@@ -62,7 +62,7 @@ export default class ElectronBleTransport {
|
|
|
62
62
|
private probeProtocolV1;
|
|
63
63
|
private probeProtocolV2;
|
|
64
64
|
private writeWithChunking;
|
|
65
|
-
private
|
|
65
|
+
private writeOnce;
|
|
66
66
|
private handleNotification;
|
|
67
67
|
private handleProtocolV2Notification;
|
|
68
68
|
private getProtocolV2FrameQueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":";AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAevC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,YAAY,CAAC;CACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":";AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAevC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,YAAY,CAAC;CACjC,CAAC;AAqCF,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,SAAS,CAA0D;IAE3E,OAAO,CAAC,WAAW,CAA0D;IAE7E,IAAI,SAA0B;IAE9B,UAAU,UAAS;IAEnB,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,IAAI,CAAQ;IAExD,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,OAAO,CAAC,SAAS,CAAsE;IAEvF,OAAO,CAAC,YAAY,CAAoD;IAExE,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,eAAe,CAAgD;IAEvE,OAAO,CAAC,oBAAoB,CAAgD;IAE5E,OAAO,CAAC,uBAAuB,CAAK;IAEpC,OAAO,CAAC,oBAAoB,CAAsC;IAElE,OAAO,CAAC,kBAAkB,CAAsC;IAEhE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,kBAAkB;IA0B1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IAcxC,SAAS,CAAC,UAAU,EAAE,GAAG;IAKzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAK7B,MAAM;IAIN,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqBxC,OAAO,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;IAuF9B,OAAO,CAAC,EAAE,EAAE,MAAM;IAexB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,kBAAkB;YAMZ,cAAc;IA+C5B,OAAO,CAAC,8BAA8B;YAgBxB,iCAAiC;YAoCjC,eAAe;YAgBf,eAAe;YAuBf,iBAAiB;YAsBjB,SAAS;IASvB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,4BAA4B;IA2BpC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,sBAAsB;YAIhB,mBAAmB;IAiBjC,OAAO,CAAC,4BAA4B;IAgB9B,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,oBAAoB;YA+BlB,cAAc;YAuEd,cAAc;IAmF5B,OAAO,CAAC,6BAA6B;IAsCrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGxD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ declare class WebUsbTransport {
|
|
|
53
53
|
private getTransferInData;
|
|
54
54
|
private toArrayBuffer;
|
|
55
55
|
private transferOutWithRetry;
|
|
56
|
+
private transferOutOnce;
|
|
56
57
|
private transferInWithRetry;
|
|
57
58
|
private resetConnectionAfterProbe;
|
|
58
59
|
private withProtocolReadTimeout;
|
|
@@ -126,7 +127,7 @@ declare class ElectronBleTransport {
|
|
|
126
127
|
private probeProtocolV1;
|
|
127
128
|
private probeProtocolV2;
|
|
128
129
|
private writeWithChunking;
|
|
129
|
-
private
|
|
130
|
+
private writeOnce;
|
|
130
131
|
private handleNotification;
|
|
131
132
|
private handleProtocolV2Notification;
|
|
132
133
|
private getProtocolV2FrameQueue;
|
package/dist/index.js
CHANGED
|
@@ -420,19 +420,11 @@ class WebUsbTransport {
|
|
|
420
420
|
return copied.buffer;
|
|
421
421
|
}
|
|
422
422
|
transferOutWithRetry(path, packet) {
|
|
423
|
-
var _a;
|
|
424
423
|
return __awaiter(this, void 0, void 0, function* () {
|
|
425
424
|
let lastError;
|
|
426
425
|
for (let attempt = 1; attempt <= PACKET_IO_MAX_RETRIES; attempt += 1) {
|
|
427
426
|
try {
|
|
428
|
-
|
|
429
|
-
if (!device.opened) {
|
|
430
|
-
yield this.connect(path, false);
|
|
431
|
-
}
|
|
432
|
-
const endpoints = this.deviceEndpoints.get(path);
|
|
433
|
-
const endpointOut = (_a = endpoints === null || endpoints === void 0 ? void 0 : endpoints.endpointOut) !== null && _a !== void 0 ? _a : this.endpointId;
|
|
434
|
-
const transferBuffer = this.toArrayBuffer(packet.buffer.slice(packet.byteOffset, packet.byteOffset + packet.byteLength));
|
|
435
|
-
yield device.transferOut(endpointOut, transferBuffer);
|
|
427
|
+
yield this.transferOutOnce(path, packet);
|
|
436
428
|
return;
|
|
437
429
|
}
|
|
438
430
|
catch (error) {
|
|
@@ -453,6 +445,19 @@ class WebUsbTransport {
|
|
|
453
445
|
throw lastError;
|
|
454
446
|
});
|
|
455
447
|
}
|
|
448
|
+
transferOutOnce(path, packet) {
|
|
449
|
+
var _a;
|
|
450
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
451
|
+
const device = yield this.findDevice(path);
|
|
452
|
+
if (!device.opened) {
|
|
453
|
+
yield this.connect(path, false);
|
|
454
|
+
}
|
|
455
|
+
const endpoints = this.deviceEndpoints.get(path);
|
|
456
|
+
const endpointOut = (_a = endpoints === null || endpoints === void 0 ? void 0 : endpoints.endpointOut) !== null && _a !== void 0 ? _a : this.endpointId;
|
|
457
|
+
const transferBuffer = this.toArrayBuffer(packet.buffer.slice(packet.byteOffset, packet.byteOffset + packet.byteLength));
|
|
458
|
+
yield device.transferOut(endpointOut, transferBuffer);
|
|
459
|
+
});
|
|
460
|
+
}
|
|
456
461
|
transferInWithRetry(path, length, cancelToken) {
|
|
457
462
|
var _a;
|
|
458
463
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -642,7 +647,7 @@ class WebUsbTransport {
|
|
|
642
647
|
protocolV2: this.messagesV2,
|
|
643
648
|
},
|
|
644
649
|
router: transport.PROTOCOL_V2_CHANNEL_USB,
|
|
645
|
-
writeFrame: (frame) => this.
|
|
650
|
+
writeFrame: (frame) => this.transferOutOnce(path, frame),
|
|
646
651
|
readFrame: () => this.receiveProtocolV2Frame(path, this.protocolV2ReadTimeouts.get(path)),
|
|
647
652
|
logger: this.Log,
|
|
648
653
|
logPrefix: 'ProtocolV2 WebUSB',
|
|
@@ -761,8 +766,6 @@ function inferProtocolHintFromDeviceName(name) {
|
|
|
761
766
|
const toBleDescriptor = (device, protocolType) => (Object.assign({ id: device.id, name: device.name, path: device.id, debug: false, commType: 'electron-ble' }, (protocolType ? { protocolType } : {})));
|
|
762
767
|
const BLE_PACKET_SIZE = 192;
|
|
763
768
|
const BLE_WRITE_DELAY_MS = 5;
|
|
764
|
-
const BLE_WRITE_MAX_RETRIES = 3;
|
|
765
|
-
const BLE_WRITE_RETRY_DELAY_MS = 300;
|
|
766
769
|
const BLE_RESPONSE_TIMEOUT_MS = 30000;
|
|
767
770
|
const PROTOCOL_PROBE_TIMEOUT_MS = 1000;
|
|
768
771
|
const PROTOCOL_V2_PROBE_TIMEOUT_MS = 5000;
|
|
@@ -1120,42 +1123,28 @@ class ElectronBleTransport {
|
|
|
1120
1123
|
const totalBytes = hexData.length / 2;
|
|
1121
1124
|
if (totalBytes <= BLE_PACKET_SIZE) {
|
|
1122
1125
|
yield hdShared.wait(BLE_WRITE_DELAY_MS);
|
|
1123
|
-
yield this.
|
|
1126
|
+
yield this.writeOnce(uuid, hexData);
|
|
1124
1127
|
return;
|
|
1125
1128
|
}
|
|
1126
1129
|
for (let offset = 0; offset < hexData.length;) {
|
|
1127
1130
|
const chunkHexLen = Math.min(BLE_PACKET_SIZE * 2, hexData.length - offset);
|
|
1128
1131
|
const chunkHex = hexData.substring(offset, offset + chunkHexLen);
|
|
1129
1132
|
offset += chunkHexLen;
|
|
1130
|
-
yield this.
|
|
1133
|
+
yield this.writeOnce(uuid, chunkHex);
|
|
1131
1134
|
if (offset < hexData.length) {
|
|
1132
1135
|
yield hdShared.wait(BLE_WRITE_DELAY_MS);
|
|
1133
1136
|
}
|
|
1134
1137
|
}
|
|
1135
1138
|
});
|
|
1136
1139
|
}
|
|
1137
|
-
|
|
1138
|
-
var _a
|
|
1140
|
+
writeOnce(uuid, hexData) {
|
|
1141
|
+
var _a;
|
|
1139
1142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1140
|
-
let lastError;
|
|
1141
1143
|
const nobleBle = (_a = window.desktopApi) === null || _a === void 0 ? void 0 : _a.nobleBle;
|
|
1142
1144
|
if (!nobleBle) {
|
|
1143
1145
|
throw new Error('Noble BLE API not available');
|
|
1144
1146
|
}
|
|
1145
|
-
|
|
1146
|
-
try {
|
|
1147
|
-
yield nobleBle.write(uuid, hexData);
|
|
1148
|
-
return;
|
|
1149
|
-
}
|
|
1150
|
-
catch (error) {
|
|
1151
|
-
lastError = error;
|
|
1152
|
-
(_b = this.Log) === null || _b === void 0 ? void 0 : _b.error(`[Electron BLE] write failed (attempt ${attempt}/${BLE_WRITE_MAX_RETRIES}):`, error);
|
|
1153
|
-
if (attempt < BLE_WRITE_MAX_RETRIES) {
|
|
1154
|
-
yield hdShared.wait(BLE_WRITE_RETRY_DELAY_MS);
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1158
|
-
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.BleWriteCharacteristicError, `BLE write failed after ${BLE_WRITE_MAX_RETRIES} attempts: ${(_c = lastError === null || lastError === void 0 ? void 0 : lastError.message) !== null && _c !== void 0 ? _c : lastError}`);
|
|
1147
|
+
yield nobleBle.write(uuid, hexData);
|
|
1159
1148
|
});
|
|
1160
1149
|
}
|
|
1161
1150
|
handleNotification(deviceId, hexData) {
|
package/dist/webusb.d.ts
CHANGED
package/dist/webusb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webusb.d.ts","sourceRoot":"","sources":["../src/webusb.ts"],"names":[],"mappings":";AACA,OAAO,SAWN,MAAM,wBAAwB,CAAC;AAIhC,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAqChC,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAaD,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,QAAQ,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAGlE,UAAU,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAGpE,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAGnE,OAAO,CAAC,oBAAoB,CAAoD;IAGhF,OAAO,CAAC,kBAAkB,CAA6C;IAGvE,OAAO,CAAC,sBAAsB,CAA8C;IAG5E,OAAO,CAAC,eAAe,CAA2C;IAOlE,OAAO,CAAC,eAAe,CAA6C;IAEpE,OAAO,CAAC,iBAAiB,CAAK;IAE9B,IAAI,SAAqB;IAEzB,OAAO,UAAS;IAEhB,UAAU,UAAS;IAEnB,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,GAAG,CAAC,EAAE,GAAG,CAAC;IAMV,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IAEnC,eAAe,SAAoB;IAEnC,UAAU,SAAe;IAEzB,WAAW,SAAgB;IAK3B,IAAI,CAAC,MAAM,EAAE,GAAG;IAgBhB,SAAS,CAAC,UAAU,EAAE,GAAG;IASzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAY7B,kBAAkB;IAmBlB,SAAS;IASf,OAAO,CAAC,aAAa;IAmBf,mBAAmB;IAsCnB,OAAO,CAAC,KAAK,EAAE,YAAY;IA0BjC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,4BAA4B;YAOtB,cAAc;IA6CtB,UAAU,CAAC,IAAI,EAAE,MAAM;IAwBvB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAkB1C,OAAO,CAAC,iBAAiB;IAiCnB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;YA0CpC,eAAe;YAmBf,iBAAiB;IAezB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvE,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,wBAAwB;YAalB,yBAAyB;IAiCvC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;YASP,oBAAoB;
|
|
1
|
+
{"version":3,"file":"webusb.d.ts","sourceRoot":"","sources":["../src/webusb.ts"],"names":[],"mappings":";AACA,OAAO,SAWN,MAAM,wBAAwB,CAAC;AAIhC,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAqChC,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAaD,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,QAAQ,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAGlE,UAAU,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAGpE,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAGnE,OAAO,CAAC,oBAAoB,CAAoD;IAGhF,OAAO,CAAC,kBAAkB,CAA6C;IAGvE,OAAO,CAAC,sBAAsB,CAA8C;IAG5E,OAAO,CAAC,eAAe,CAA2C;IAOlE,OAAO,CAAC,eAAe,CAA6C;IAEpE,OAAO,CAAC,iBAAiB,CAAK;IAE9B,IAAI,SAAqB;IAEzB,OAAO,UAAS;IAEhB,UAAU,UAAS;IAEnB,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,GAAG,CAAC,EAAE,GAAG,CAAC;IAMV,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IAEnC,eAAe,SAAoB;IAEnC,UAAU,SAAe;IAEzB,WAAW,SAAgB;IAK3B,IAAI,CAAC,MAAM,EAAE,GAAG;IAgBhB,SAAS,CAAC,UAAU,EAAE,GAAG;IASzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAY7B,kBAAkB;IAmBlB,SAAS;IASf,OAAO,CAAC,aAAa;IAmBf,mBAAmB;IAsCnB,OAAO,CAAC,KAAK,EAAE,YAAY;IA0BjC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,4BAA4B;YAOtB,cAAc;IA6CtB,UAAU,CAAC,IAAI,EAAE,MAAM;IAwBvB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAkB1C,OAAO,CAAC,iBAAiB;IAiCnB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;YA0CpC,eAAe;YAmBf,iBAAiB;IAezB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIvE,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,wBAAwB;YAalB,yBAAyB;IAiCvC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;YASP,oBAAoB;YA2BpB,eAAe;YAaf,mBAAmB;YA2CnB,yBAAyB;YAyBzB,uBAAuB;YAoCvB,eAAe;YAcf,eAAe;IAiBvB,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,oBAAoB;YAkClB,cAAc;YAkCd,cAAc;YA4Cd,sBAAsB;IA4C9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAgD5C,OAAO,CAAC,IAAI,EAAE,MAAM;IAiB1B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGxD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport-web-device",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.4",
|
|
4
4
|
"author": "OneKey",
|
|
5
5
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"lint:fix": "eslint . --fix"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
24
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
23
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.4",
|
|
24
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.4"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@onekeyfe/hd-transport-electron": "1.2.0-alpha.
|
|
27
|
+
"@onekeyfe/hd-transport-electron": "1.2.0-alpha.4",
|
|
28
28
|
"@types/w3c-web-usb": "^1.0.6",
|
|
29
29
|
"@types/web-bluetooth": "^0.0.17"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "6f83d130f022a75003385bc4b2386cd0b2b539b5"
|
|
32
32
|
}
|
|
@@ -72,8 +72,6 @@ const toBleDescriptor = (
|
|
|
72
72
|
|
|
73
73
|
const BLE_PACKET_SIZE = 192;
|
|
74
74
|
const BLE_WRITE_DELAY_MS = 5;
|
|
75
|
-
const BLE_WRITE_MAX_RETRIES = 3;
|
|
76
|
-
const BLE_WRITE_RETRY_DELAY_MS = 300;
|
|
77
75
|
const BLE_RESPONSE_TIMEOUT_MS = 30_000;
|
|
78
76
|
const PROTOCOL_PROBE_TIMEOUT_MS = 1000;
|
|
79
77
|
const PROTOCOL_V2_PROBE_TIMEOUT_MS = 5000;
|
|
@@ -496,7 +494,7 @@ export default class ElectronBleTransport {
|
|
|
496
494
|
|
|
497
495
|
if (totalBytes <= BLE_PACKET_SIZE) {
|
|
498
496
|
await wait(BLE_WRITE_DELAY_MS);
|
|
499
|
-
await this.
|
|
497
|
+
await this.writeOnce(uuid, hexData);
|
|
500
498
|
return;
|
|
501
499
|
}
|
|
502
500
|
|
|
@@ -505,7 +503,7 @@ export default class ElectronBleTransport {
|
|
|
505
503
|
const chunkHex = hexData.substring(offset, offset + chunkHexLen);
|
|
506
504
|
offset += chunkHexLen;
|
|
507
505
|
|
|
508
|
-
await this.
|
|
506
|
+
await this.writeOnce(uuid, chunkHex);
|
|
509
507
|
|
|
510
508
|
if (offset < hexData.length) {
|
|
511
509
|
await wait(BLE_WRITE_DELAY_MS);
|
|
@@ -513,32 +511,13 @@ export default class ElectronBleTransport {
|
|
|
513
511
|
}
|
|
514
512
|
}
|
|
515
513
|
|
|
516
|
-
private async
|
|
517
|
-
let lastError: any;
|
|
514
|
+
private async writeOnce(uuid: string, hexData: string): Promise<void> {
|
|
518
515
|
const nobleBle = window.desktopApi?.nobleBle;
|
|
519
516
|
if (!nobleBle) {
|
|
520
517
|
throw new Error('Noble BLE API not available');
|
|
521
518
|
}
|
|
522
519
|
|
|
523
|
-
|
|
524
|
-
try {
|
|
525
|
-
await nobleBle.write(uuid, hexData);
|
|
526
|
-
return;
|
|
527
|
-
} catch (error) {
|
|
528
|
-
lastError = error;
|
|
529
|
-
this.Log?.error(
|
|
530
|
-
`[Electron BLE] write failed (attempt ${attempt}/${BLE_WRITE_MAX_RETRIES}):`,
|
|
531
|
-
error
|
|
532
|
-
);
|
|
533
|
-
if (attempt < BLE_WRITE_MAX_RETRIES) {
|
|
534
|
-
await wait(BLE_WRITE_RETRY_DELAY_MS);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
throw ERRORS.TypedError(
|
|
539
|
-
HardwareErrorCode.BleWriteCharacteristicError,
|
|
540
|
-
`BLE write failed after ${BLE_WRITE_MAX_RETRIES} attempts: ${lastError?.message ?? lastError}`
|
|
541
|
-
);
|
|
520
|
+
await nobleBle.write(uuid, hexData);
|
|
542
521
|
}
|
|
543
522
|
|
|
544
523
|
private handleNotification(deviceId: string, hexData: string): void {
|
package/src/webusb.ts
CHANGED
|
@@ -571,16 +571,7 @@ export default class WebUsbTransport {
|
|
|
571
571
|
let lastError: unknown;
|
|
572
572
|
for (let attempt = 1; attempt <= PACKET_IO_MAX_RETRIES; attempt += 1) {
|
|
573
573
|
try {
|
|
574
|
-
|
|
575
|
-
if (!device.opened) {
|
|
576
|
-
await this.connect(path, false);
|
|
577
|
-
}
|
|
578
|
-
const endpoints = this.deviceEndpoints.get(path);
|
|
579
|
-
const endpointOut = endpoints?.endpointOut ?? this.endpointId;
|
|
580
|
-
const transferBuffer = this.toArrayBuffer(
|
|
581
|
-
packet.buffer.slice(packet.byteOffset, packet.byteOffset + packet.byteLength)
|
|
582
|
-
);
|
|
583
|
-
await device.transferOut(endpointOut, transferBuffer);
|
|
574
|
+
await this.transferOutOnce(path, packet);
|
|
584
575
|
return;
|
|
585
576
|
} catch (error) {
|
|
586
577
|
lastError = error;
|
|
@@ -603,6 +594,19 @@ export default class WebUsbTransport {
|
|
|
603
594
|
throw lastError;
|
|
604
595
|
}
|
|
605
596
|
|
|
597
|
+
private async transferOutOnce(path: string, packet: Uint8Array) {
|
|
598
|
+
const device = await this.findDevice(path);
|
|
599
|
+
if (!device.opened) {
|
|
600
|
+
await this.connect(path, false);
|
|
601
|
+
}
|
|
602
|
+
const endpoints = this.deviceEndpoints.get(path);
|
|
603
|
+
const endpointOut = endpoints?.endpointOut ?? this.endpointId;
|
|
604
|
+
const transferBuffer = this.toArrayBuffer(
|
|
605
|
+
packet.buffer.slice(packet.byteOffset, packet.byteOffset + packet.byteLength)
|
|
606
|
+
);
|
|
607
|
+
await device.transferOut(endpointOut, transferBuffer);
|
|
608
|
+
}
|
|
609
|
+
|
|
606
610
|
private async transferInWithRetry(
|
|
607
611
|
path: string,
|
|
608
612
|
length: number,
|
|
@@ -835,7 +839,7 @@ export default class WebUsbTransport {
|
|
|
835
839
|
protocolV2: this.messagesV2,
|
|
836
840
|
},
|
|
837
841
|
router: PROTOCOL_V2_CHANNEL_USB,
|
|
838
|
-
writeFrame: (frame: Uint8Array) => this.
|
|
842
|
+
writeFrame: (frame: Uint8Array) => this.transferOutOnce(path, frame),
|
|
839
843
|
readFrame: () => this.receiveProtocolV2Frame(path, this.protocolV2ReadTimeouts.get(path)),
|
|
840
844
|
logger: this.Log,
|
|
841
845
|
logPrefix: 'ProtocolV2 WebUSB',
|