@onekeyfe/hd-core 1.2.8-alpha.113 → 1.2.8-alpha.115
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__/logger.test.ts +23 -0
- package/__tests__/protocol-v2.test.ts +35 -2
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV4.ts +14 -4
- package/src/utils/logger.ts +4 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { LoggerNames, enableLog, getLogger } from '../src/utils/logger';
|
|
2
|
+
|
|
3
|
+
describe('logger', () => {
|
|
4
|
+
afterEach(() => {
|
|
5
|
+
enableLog(false);
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test('enables method logs that share a prefix with common-connect-sdk', () => {
|
|
9
|
+
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => undefined);
|
|
10
|
+
try {
|
|
11
|
+
enableLog(true);
|
|
12
|
+
getLogger(LoggerNames.Method).debug('[FirmwareUpdateV4] BLE FileWrite window');
|
|
13
|
+
|
|
14
|
+
expect(getLogger(LoggerNames.Method)).toBe(getLogger(LoggerNames.HdCommonConnectSdk));
|
|
15
|
+
expect(consoleSpy).toHaveBeenCalledWith(
|
|
16
|
+
LoggerNames.Method,
|
|
17
|
+
'[FirmwareUpdateV4] BLE FileWrite window'
|
|
18
|
+
);
|
|
19
|
+
} finally {
|
|
20
|
+
consoleSpy.mockRestore();
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -9014,10 +9014,22 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
9014
9014
|
expect(transferredBytes).toEqual([1500, 2500, 3000]);
|
|
9015
9015
|
});
|
|
9016
9016
|
|
|
9017
|
+
test('caps windowed staging writes at the generic BLE chunk', async () => {
|
|
9018
|
+
const requests: any[] = [];
|
|
9019
|
+
const method = createMethod(streamAll(requests));
|
|
9020
|
+
delete (method as any).getProtocolV2FirmwareChunkSize;
|
|
9021
|
+
(method as any).params = { platform: 'native', chunkSize: 4096 };
|
|
9022
|
+
|
|
9023
|
+
await expect(transfer(method)).resolves.toBe(3000);
|
|
9024
|
+
|
|
9025
|
+
expect(requests.map(request => request.file.offset)).toEqual([0, 1800]);
|
|
9026
|
+
expect(requests.map(request => request.file.data.byteLength)).toEqual([1800, 700]);
|
|
9027
|
+
});
|
|
9028
|
+
|
|
9017
9029
|
test.each([
|
|
9018
9030
|
['react-native', 10_000],
|
|
9019
|
-
['desktop-web-ble',
|
|
9020
|
-
] as const)('
|
|
9031
|
+
['desktop-web-ble', 10_000],
|
|
9032
|
+
] as const)('bounds each windowed response wait in %s', async (env, timeoutMs) => {
|
|
9021
9033
|
const getSettingsSpy = jest.spyOn(DataManager, 'getSettings').mockReturnValue(env);
|
|
9022
9034
|
const typedCall = streamAll([]);
|
|
9023
9035
|
|
|
@@ -9851,6 +9863,27 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
9851
9863
|
expect(writePayloads.map(payload => payload.file.data.byteLength)).toEqual([1960, 1]);
|
|
9852
9864
|
});
|
|
9853
9865
|
|
|
9866
|
+
test.each([
|
|
9867
|
+
[false, 'vol0:/application_p1.bin', 1960],
|
|
9868
|
+
[true, 'vol0:/application_p1.bin', 1800],
|
|
9869
|
+
[true, 'vol0:/bundles/images/animation.okpkg', 1800],
|
|
9870
|
+
])(
|
|
9871
|
+
'sizes BLE write chunks for fileWriteWindow=%s and %s',
|
|
9872
|
+
(fileWriteWindow, filePath, expected) => {
|
|
9873
|
+
const method = new FirmwareUpdateV4({
|
|
9874
|
+
id: 1,
|
|
9875
|
+
payload: {
|
|
9876
|
+
method: 'firmwareUpdateV4',
|
|
9877
|
+
},
|
|
9878
|
+
});
|
|
9879
|
+
(method as any).params = { platform: 'native', chunkSize: 4096 };
|
|
9880
|
+
|
|
9881
|
+
expect(
|
|
9882
|
+
(method as any).getProtocolV2FirmwareChunkSize('write', filePath, fileWriteWindow)
|
|
9883
|
+
).toBe(expected);
|
|
9884
|
+
}
|
|
9885
|
+
);
|
|
9886
|
+
|
|
9854
9887
|
test('keeps confirmation active after the Request write until terminal Success arrives', async () => {
|
|
9855
9888
|
const method = new FirmwareUpdateV4({
|
|
9856
9889
|
id: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkD,MAAM,qBAAqB,CAAC;AA4BlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAiC/E,OAAO,KAAK,EAEV,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AA+ErC,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,EAAE,sBAAsB,EAC9B,0BAA0B,UAAQ,QAiCnC;AAGD,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,MAAM,EACzB,oBAAoB,qBAA2D,WAOhF;AA0UD,eAAO,MAAM,oCAAoC,WACvC,WAAW,GAAG,UAAU,eACnB,MAAM,GAAG,SAAS,YAKhC,CAAC;AAEF,eAAO,MAAM,iCAAiC,0BACrB,MAAM,uBACR,MAAM,iBACZ,MAAM,eACR,MAAM,SAsBpB,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,wBAAwB,CAAC,sBAAsB,CAAC;IAC5F,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,sBAAsB,CAAC,CAAS;IAExC,OAAO,CAAC,oCAAoC,CAAS;IAErD,qBAAqB;IAIrB,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,iCAAiC,CAAS;IAElD,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,4BAA4B,CAAqB;IAEzD,OAAO,CAAC,6BAA6B,CAAC,CAAW;IAEjD,OAAO,CAAC,+BAA+B,CAAC,CAAuB;IAE/D,OAAO,CAAC,2BAA2B,CAAC,CAAuB;IAE3D,OAAO,CAAC,iCAAiC,CAA6B;IAEtE,OAAO,CAAC,+BAA+B,CAAS;IAEhD,OAAO,CAAC,mCAAmC,CAAS;IAEpD,OAAO,CAAC,wCAAwC,CAAS;IAEzD,OAAO,CAAC,kCAAkC,CAAC,CAAW;IAEtD,OAAO,CAAC,8BAA8B,CAAC,CAAS;IAEhD,OAAO,CAAC,gCAAgC,CAAK;IAE7C,OAAO,CAAC,8BAA8B,CAAK;IAE3C,IAAI;IA6LJ,OAAO,CAAC,8BAA8B;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -40784,6 +40784,9 @@ class Log$n {
|
|
|
40784
40784
|
}
|
|
40785
40785
|
const _logs = {};
|
|
40786
40786
|
const initLog = (prefix, enabled) => {
|
|
40787
|
+
const existing = _logs[prefix];
|
|
40788
|
+
if (existing)
|
|
40789
|
+
return existing;
|
|
40787
40790
|
const instance = new Log$n(prefix, !!enabled);
|
|
40788
40791
|
_logs[prefix] = instance;
|
|
40789
40792
|
return instance;
|
|
@@ -53069,7 +53072,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
53069
53072
|
componentArtifacts: preparedPlan ? undefined : payload.componentArtifacts,
|
|
53070
53073
|
};
|
|
53071
53074
|
}
|
|
53072
|
-
getProtocolV2FirmwareChunkSize(direction, filePath) {
|
|
53075
|
+
getProtocolV2FirmwareChunkSize(direction, filePath, fileWriteWindow = false) {
|
|
53073
53076
|
var _a, _b;
|
|
53074
53077
|
const payloadChunkSize = Number((_a = this.params) === null || _a === void 0 ? void 0 : _a.chunkSize);
|
|
53075
53078
|
const env = DataManager.getSettings('env');
|
|
@@ -53079,6 +53082,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
53079
53082
|
if (direction === 'read') {
|
|
53080
53083
|
maxChunkSize = hdTransport.PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE;
|
|
53081
53084
|
}
|
|
53085
|
+
else if (fileWriteWindow) {
|
|
53086
|
+
maxChunkSize = hdTransport.PROTOCOL_V2_BLE_FILE_CHUNK_SIZE;
|
|
53087
|
+
}
|
|
53082
53088
|
else {
|
|
53083
53089
|
maxChunkSize = PROTOCOL_V2_FIRMWARE_STAGING_PATHS.has(filePath !== null && filePath !== void 0 ? filePath : '')
|
|
53084
53090
|
? hdTransport.PROTOCOL_V2_BLE_FIRMWARE_FILE_CHUNK_SIZE
|
|
@@ -54189,8 +54195,8 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54189
54195
|
this.throwIfAborted();
|
|
54190
54196
|
const attemptStartedAt = Date.now();
|
|
54191
54197
|
try {
|
|
54192
|
-
const chunkSize = this.getProtocolV2FirmwareChunkSize('write', filePath);
|
|
54193
54198
|
const windowed = this.shouldUseProtocolV2BleFileWriteWindow();
|
|
54199
|
+
const chunkSize = this.getProtocolV2FirmwareChunkSize('write', filePath, windowed);
|
|
54194
54200
|
if (windowed) {
|
|
54195
54201
|
yield this.writeProtocolV2SourceWindowed({
|
|
54196
54202
|
source,
|
|
@@ -54967,11 +54973,10 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54967
54973
|
if (source.size === 0)
|
|
54968
54974
|
return;
|
|
54969
54975
|
const firstRequest = yield readRequest();
|
|
54970
|
-
const env = DataManager.getSettings('env');
|
|
54971
54976
|
const response = yield this.device
|
|
54972
54977
|
.getCommands()
|
|
54973
54978
|
.typedCall('FilesystemFileWrite', 'FilesystemFile', firstRequest, {
|
|
54974
|
-
timeoutMs:
|
|
54979
|
+
timeoutMs: PROTOCOL_V2_FILE_WRITE_RESPONSE_TIMEOUT,
|
|
54975
54980
|
writeWithResponse: false,
|
|
54976
54981
|
fileWritePipeline: {
|
|
54977
54982
|
next: nextRequest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,cAAM,GAAG;IACP,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,UAAU,EAAE,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAYxD,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASlB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASpB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASnB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;CAQrB;AAID,eAAO,MAAM,OAAO,WAAY,MAAM,YAAY,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,cAAM,GAAG;IACP,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,UAAU,EAAE,CAAC;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAYxD,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASlB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASpB,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;IASnB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;CAQrB;AAID,eAAO,MAAM,OAAO,WAAY,MAAM,YAAY,OAAO,QAQxD,CAAC;AAEF,eAAO,MAAM,SAAS,aAAc,OAAO,SAI1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAY,MAAM,WAAW,OAAO,SAIjE,CAAC;AAEF,eAAO,MAAM,MAAM,oBAOlB,CAAC;AAEF,eAAO,MAAM,oBAAoB,4BAA6B,WAAW,KAAK,IAAI,SAEjF,CAAC;AAuCF,oBAAY,WAAW;IACrB,IAAI,oBAAoB;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,kBAAkB,+BAA+B;IACjD,QAAQ,uBAAuB;IAC/B,eAAe,8BAA8B;IAC7C,mBAAmB,kCAAkC;IACrD,cAAc,6BAA6B;IAC3C,iBAAiB,iCAAiC;IAClD,iBAAiB,gCAAgC;IACjD,kBAAkB,kCAAkC;IACpD,OAAO,oBAAoB;IAC3B,MAAM,WAAW;IACjB,WAAW,kBAAkB;IAC7B,MAAM,aAAa;CACpB;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;CAoBrB,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,WAAW,QAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.8-alpha.
|
|
3
|
+
"version": "1.2.8-alpha.115",
|
|
4
4
|
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-shared": "1.2.8-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.8-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.8-alpha.115",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.8-alpha.115",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"buffer": "^6.0.3",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"@types/w3c-web-usb": "^1.0.10",
|
|
47
47
|
"@types/web-bluetooth": "^0.0.21"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "4f30138a51d564cd664fa9886f30229bebe469a5"
|
|
50
50
|
}
|
|
@@ -797,7 +797,11 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
797
797
|
};
|
|
798
798
|
}
|
|
799
799
|
|
|
800
|
-
private getProtocolV2FirmwareChunkSize(
|
|
800
|
+
private getProtocolV2FirmwareChunkSize(
|
|
801
|
+
direction: 'read' | 'write',
|
|
802
|
+
filePath?: string,
|
|
803
|
+
fileWriteWindow = false
|
|
804
|
+
) {
|
|
801
805
|
const payloadChunkSize = Number(this.params?.chunkSize);
|
|
802
806
|
const env = DataManager.getSettings('env');
|
|
803
807
|
const isBle = this.params?.platform === 'native' || (env && DataManager.isBleConnect(env));
|
|
@@ -805,6 +809,11 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
805
809
|
if (isBle) {
|
|
806
810
|
if (direction === 'read') {
|
|
807
811
|
maxChunkSize = PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE;
|
|
812
|
+
} else if (fileWriteWindow) {
|
|
813
|
+
// Pipelined frames share the main MCU's 4096-byte UART FIFO. Two 1800-byte chunks
|
|
814
|
+
// (about 3.75 KB of frames) leave room to spare; two 1960-byte staging chunks would
|
|
815
|
+
// leave under 60 bytes.
|
|
816
|
+
maxChunkSize = PROTOCOL_V2_BLE_FILE_CHUNK_SIZE;
|
|
808
817
|
} else {
|
|
809
818
|
// Firmware staging writes tolerate a larger BLE chunk than generic filesystem writes.
|
|
810
819
|
maxChunkSize = PROTOCOL_V2_FIRMWARE_STAGING_PATHS.has(filePath ?? '')
|
|
@@ -2266,8 +2275,8 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2266
2275
|
this.throwIfAborted();
|
|
2267
2276
|
const attemptStartedAt = Date.now();
|
|
2268
2277
|
try {
|
|
2269
|
-
const chunkSize = this.getProtocolV2FirmwareChunkSize('write', filePath);
|
|
2270
2278
|
const windowed = this.shouldUseProtocolV2BleFileWriteWindow();
|
|
2279
|
+
const chunkSize = this.getProtocolV2FirmwareChunkSize('write', filePath, windowed);
|
|
2271
2280
|
if (windowed) {
|
|
2272
2281
|
await this.writeProtocolV2SourceWindowed({
|
|
2273
2282
|
source,
|
|
@@ -3333,11 +3342,12 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
3333
3342
|
if (source.size === 0) return;
|
|
3334
3343
|
const firstRequest = await readRequest();
|
|
3335
3344
|
|
|
3336
|
-
const env = DataManager.getSettings('env');
|
|
3337
3345
|
const response = await this.device
|
|
3338
3346
|
.getCommands()
|
|
3339
3347
|
.typedCall('FilesystemFileWrite', 'FilesystemFile', firstRequest, {
|
|
3340
|
-
|
|
3348
|
+
// Both windowed transports (React Native and Electron BLE) invalidate a timed-out link,
|
|
3349
|
+
// so a lost chunk is retried after 10 s instead of the 5-minute default.
|
|
3350
|
+
timeoutMs: PROTOCOL_V2_FILE_WRITE_RESPONSE_TIMEOUT,
|
|
3341
3351
|
writeWithResponse: false,
|
|
3342
3352
|
fileWritePipeline: {
|
|
3343
3353
|
next: nextRequest,
|
package/src/utils/logger.ts
CHANGED
|
@@ -78,6 +78,10 @@ class Log {
|
|
|
78
78
|
const _logs: { [k: string]: Log } = {};
|
|
79
79
|
|
|
80
80
|
export const initLog = (prefix: string, enabled?: boolean) => {
|
|
81
|
+
// Loggers that share a prefix must share one instance; otherwise enableLog only reaches the
|
|
82
|
+
// last one registered and the others never print.
|
|
83
|
+
const existing = _logs[prefix];
|
|
84
|
+
if (existing) return existing;
|
|
81
85
|
const instance = new Log(prefix, !!enabled);
|
|
82
86
|
_logs[prefix] = instance;
|
|
83
87
|
return instance;
|