@onekeyfe/hd-core 1.2.8-alpha.116 → 1.2.8-alpha.118
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 +6 -11
- package/__tests__/protocol-v2.test.ts +176 -23
- package/__tests__/search-devices.test.ts +36 -0
- package/dist/api/FirmwareUpdateV4.d.ts +1 -0
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +59 -7
- package/dist/types/device.d.ts +1 -0
- package/dist/types/device.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/FirmwareUpdateV4.ts +91 -19
- package/src/types/device.ts +6 -0
package/__tests__/logger.test.ts
CHANGED
|
@@ -3,21 +3,16 @@ import { LoggerNames, enableLog, getLogger } from '../src/utils/logger';
|
|
|
3
3
|
describe('logger', () => {
|
|
4
4
|
afterEach(() => {
|
|
5
5
|
enableLog(false);
|
|
6
|
+
jest.restoreAllMocks();
|
|
6
7
|
});
|
|
7
8
|
|
|
8
9
|
test('enables method logs that share a prefix with common-connect-sdk', () => {
|
|
9
10
|
const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => undefined);
|
|
10
|
-
|
|
11
|
-
enableLog(true);
|
|
12
|
-
getLogger(LoggerNames.Method).debug('[FirmwareUpdateV4] BLE FileWrite window');
|
|
11
|
+
enableLog(true);
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
);
|
|
19
|
-
} finally {
|
|
20
|
-
consoleSpy.mockRestore();
|
|
21
|
-
}
|
|
13
|
+
expect(getLogger(LoggerNames.Method)).toBe(getLogger(LoggerNames.HdCommonConnectSdk));
|
|
14
|
+
getLogger(LoggerNames.Method).debug('shared prefix message');
|
|
15
|
+
|
|
16
|
+
expect(consoleSpy).toHaveBeenCalledWith(LoggerNames.Method, 'shared prefix message');
|
|
22
17
|
});
|
|
23
18
|
});
|
|
@@ -8884,13 +8884,163 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
8884
8884
|
expect((method as any).protocolV2SourceUpdateProcess).not.toHaveBeenCalled();
|
|
8885
8885
|
});
|
|
8886
8886
|
|
|
8887
|
+
describe('RESC header check link recovery', () => {
|
|
8888
|
+
const currentHeader = {
|
|
8889
|
+
version: [1, 0, 0],
|
|
8890
|
+
payloadHash: '11'.repeat(64),
|
|
8891
|
+
headerHash: '22'.repeat(64),
|
|
8892
|
+
};
|
|
8893
|
+
const linkLost = () =>
|
|
8894
|
+
ERRORS.TypedError(
|
|
8895
|
+
HardwareErrorCode.RuntimeError,
|
|
8896
|
+
'Device protocol has not been detected for AA:BB'
|
|
8897
|
+
);
|
|
8898
|
+
const createResource = (name: string) => ({
|
|
8899
|
+
name,
|
|
8900
|
+
source: { size: 3, readAt: jest.fn(), close: jest.fn() },
|
|
8901
|
+
devicePath: `vol0:/bundles/${name}`,
|
|
8902
|
+
...currentHeader,
|
|
8903
|
+
});
|
|
8904
|
+
const createMethod = () => {
|
|
8905
|
+
const method = new FirmwareUpdateV4({
|
|
8906
|
+
id: 1,
|
|
8907
|
+
payload: {
|
|
8908
|
+
method: 'firmwareUpdateV4',
|
|
8909
|
+
},
|
|
8910
|
+
});
|
|
8911
|
+
method.postTipMessage = jest.fn();
|
|
8912
|
+
method.postProgressMessage = jest.fn();
|
|
8913
|
+
(method as any).protocolV2SourceUpdateProcess = jest.fn(
|
|
8914
|
+
({ processedSize }: { processedSize: number }) => Promise.resolve(processedSize + 3)
|
|
8915
|
+
);
|
|
8916
|
+
(method as any).verifyProtocolV2StagedFile = jest.fn().mockResolvedValue(undefined);
|
|
8917
|
+
(method as any).recoverProtocolV2FileTransfer = jest.fn().mockResolvedValue(undefined);
|
|
8918
|
+
return method;
|
|
8919
|
+
};
|
|
8920
|
+
|
|
8921
|
+
test('reconnects and asks again when the link drops during a header check', async () => {
|
|
8922
|
+
const method = createMethod();
|
|
8923
|
+
(method as any).readProtocolV2DeviceFileHeader = jest
|
|
8924
|
+
.fn()
|
|
8925
|
+
.mockRejectedValueOnce(linkLost())
|
|
8926
|
+
.mockResolvedValue(currentHeader);
|
|
8927
|
+
|
|
8928
|
+
await (method as any).executeProtocolV2TransferPhase({
|
|
8929
|
+
installSources: [],
|
|
8930
|
+
resourceSources: [createResource('images.okpkg'), createResource('fonts.okpkg')],
|
|
8931
|
+
});
|
|
8932
|
+
|
|
8933
|
+
expect((method as any).recoverProtocolV2FileTransfer).toHaveBeenCalledTimes(1);
|
|
8934
|
+
expect((method as any).readProtocolV2DeviceFileHeader).toHaveBeenCalledTimes(3);
|
|
8935
|
+
expect((method as any).protocolV2SourceUpdateProcess).not.toHaveBeenCalled();
|
|
8936
|
+
});
|
|
8937
|
+
|
|
8938
|
+
test.each([
|
|
8939
|
+
['BLE disconnect', () => ERRORS.TypedError(HardwareErrorCode.BleDeviceDisconnected)],
|
|
8940
|
+
['BLE timeout', () => ERRORS.TypedError(HardwareErrorCode.BleTimeoutError)],
|
|
8941
|
+
[
|
|
8942
|
+
'invalidated Protocol V2 link',
|
|
8943
|
+
() =>
|
|
8944
|
+
Object.assign(new Error('Protocol V2 link generation changed'), {
|
|
8945
|
+
name: 'ProtocolV2LinkError',
|
|
8946
|
+
code: 'generation',
|
|
8947
|
+
}),
|
|
8948
|
+
],
|
|
8949
|
+
[
|
|
8950
|
+
'released React Native BLE transport',
|
|
8951
|
+
() => new Error('React Native BLE transport released'),
|
|
8952
|
+
],
|
|
8953
|
+
['released Electron BLE transport', () => new Error('Electron BLE transport released')],
|
|
8954
|
+
['cleaned Electron BLE state', () => new Error('Electron BLE device state cleaned')],
|
|
8955
|
+
[
|
|
8956
|
+
'Electron BLE device that is no longer connected',
|
|
8957
|
+
() => ERRORS.TypedError(HardwareErrorCode.TransportNotFound, 'Device AA:BB not connected'),
|
|
8958
|
+
],
|
|
8959
|
+
])('rethrows a %s from the header check for recovery', async (_label, createError) => {
|
|
8960
|
+
const method = createMethod();
|
|
8961
|
+
const error = createError();
|
|
8962
|
+
(method as any).readProtocolV2DeviceFileHeader = jest.fn().mockRejectedValue(error);
|
|
8963
|
+
|
|
8964
|
+
await expect(
|
|
8965
|
+
(method as any).isProtocolV2ResourceBundleUpToDate(createResource('images.okpkg'))
|
|
8966
|
+
).rejects.toBe(error);
|
|
8967
|
+
});
|
|
8968
|
+
|
|
8969
|
+
test('treats a device-side header read failure as stale without reconnecting', async () => {
|
|
8970
|
+
const method = createMethod();
|
|
8971
|
+
(method as any).readProtocolV2DeviceFileHeader = jest
|
|
8972
|
+
.fn()
|
|
8973
|
+
.mockRejectedValue(ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'Failure: busy'));
|
|
8974
|
+
|
|
8975
|
+
await (method as any).executeProtocolV2TransferPhase({
|
|
8976
|
+
installSources: [],
|
|
8977
|
+
resourceSources: [createResource('images.okpkg')],
|
|
8978
|
+
});
|
|
8979
|
+
|
|
8980
|
+
expect((method as any).recoverProtocolV2FileTransfer).not.toHaveBeenCalled();
|
|
8981
|
+
expect((method as any).protocolV2SourceUpdateProcess).toHaveBeenCalledTimes(1);
|
|
8982
|
+
});
|
|
8983
|
+
|
|
8984
|
+
test('limits header-check reconnects per transfer phase', async () => {
|
|
8985
|
+
const method = createMethod();
|
|
8986
|
+
(method as any).readProtocolV2DeviceFileHeader = jest.fn().mockRejectedValue(linkLost());
|
|
8987
|
+
|
|
8988
|
+
await (method as any).executeProtocolV2TransferPhase({
|
|
8989
|
+
installSources: [],
|
|
8990
|
+
resourceSources: ['a.okpkg', 'b.okpkg', 'c.okpkg'].map(createResource),
|
|
8991
|
+
});
|
|
8992
|
+
|
|
8993
|
+
expect((method as any).recoverProtocolV2FileTransfer).toHaveBeenCalledTimes(2);
|
|
8994
|
+
expect((method as any).protocolV2SourceUpdateProcess).toHaveBeenCalledTimes(3);
|
|
8995
|
+
});
|
|
8996
|
+
|
|
8997
|
+
test('resends without further reconnects when the header-check reconnect fails', async () => {
|
|
8998
|
+
const method = createMethod();
|
|
8999
|
+
(method as any).readProtocolV2DeviceFileHeader = jest.fn().mockRejectedValue(linkLost());
|
|
9000
|
+
(method as any).recoverProtocolV2FileTransfer = jest
|
|
9001
|
+
.fn()
|
|
9002
|
+
.mockRejectedValue(ERRORS.TypedError(HardwareErrorCode.DeviceNotFound));
|
|
9003
|
+
|
|
9004
|
+
await (method as any).executeProtocolV2TransferPhase({
|
|
9005
|
+
installSources: [],
|
|
9006
|
+
resourceSources: [createResource('images.okpkg'), createResource('fonts.okpkg')],
|
|
9007
|
+
});
|
|
9008
|
+
|
|
9009
|
+
expect((method as any).recoverProtocolV2FileTransfer).toHaveBeenCalledTimes(1);
|
|
9010
|
+
expect((method as any).protocolV2SourceUpdateProcess).toHaveBeenCalledTimes(2);
|
|
9011
|
+
});
|
|
9012
|
+
|
|
9013
|
+
test.each(['mismatch: expected A, received B', 'unavailable: expected path A'])(
|
|
9014
|
+
'aborts instead of resending when the reconnected device identity is %s',
|
|
9015
|
+
async identityFailure => {
|
|
9016
|
+
const method = createMethod();
|
|
9017
|
+
(method as any).readProtocolV2DeviceFileHeader = jest.fn().mockRejectedValue(linkLost());
|
|
9018
|
+
(method as any).recoverProtocolV2FileTransfer = jest
|
|
9019
|
+
.fn()
|
|
9020
|
+
.mockRejectedValue(
|
|
9021
|
+
ERRORS.TypedError(
|
|
9022
|
+
HardwareErrorCode.DeviceNotFound,
|
|
9023
|
+
`Protocol V2 reconnect physical identity ${identityFailure}`
|
|
9024
|
+
)
|
|
9025
|
+
);
|
|
9026
|
+
|
|
9027
|
+
await expect(
|
|
9028
|
+
(method as any).executeProtocolV2TransferPhase({
|
|
9029
|
+
installSources: [],
|
|
9030
|
+
resourceSources: [createResource('images.okpkg')],
|
|
9031
|
+
})
|
|
9032
|
+
).rejects.toMatchObject({ errorCode: HardwareErrorCode.DeviceNotFound });
|
|
9033
|
+
expect((method as any).protocolV2SourceUpdateProcess).not.toHaveBeenCalled();
|
|
9034
|
+
}
|
|
9035
|
+
);
|
|
9036
|
+
});
|
|
9037
|
+
|
|
8887
9038
|
test.each([
|
|
8888
9039
|
['1.0.3', '1.0.3', true],
|
|
8889
9040
|
['1.0.10', '1.0.3', true],
|
|
8890
9041
|
['1.0.2', '1.0.3', false],
|
|
8891
9042
|
['0.0.0.1', '1.0.3', false],
|
|
8892
|
-
['1.0.
|
|
8893
|
-
['1.0.1', undefined, false],
|
|
9043
|
+
['1.0.3', '', false],
|
|
8894
9044
|
] as const)(
|
|
8895
9045
|
'gates the BLE file write window on bootloader %s with minimum %s',
|
|
8896
9046
|
(bootloaderVersion, minBootloaderVersion, expected) => {
|
|
@@ -8900,6 +9050,11 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
8900
9050
|
}
|
|
8901
9051
|
);
|
|
8902
9052
|
|
|
9053
|
+
test('defaults the BLE file write window to the 1.0.2 bootloader minimum', () => {
|
|
9054
|
+
expect(supportsProtocolV2BleFileWriteWindow('1.0.2')).toBe(true);
|
|
9055
|
+
expect(supportsProtocolV2BleFileWriteWindow('1.0.1')).toBe(false);
|
|
9056
|
+
});
|
|
9057
|
+
|
|
8903
9058
|
test.each([
|
|
8904
9059
|
['react-native', 'bootloader', true],
|
|
8905
9060
|
['desktop-web-ble', 'bootloader', true],
|
|
@@ -9000,14 +9155,12 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
9000
9155
|
expect(requests.map(request => request.file.data.byteLength)).toEqual([1000, 1000, 500]);
|
|
9001
9156
|
expect(requests.map(request => request.overwrite)).toEqual([true, false, false]);
|
|
9002
9157
|
expect(requests.map(request => request.ui_percentage)).toEqual([50, 84, 99]);
|
|
9003
|
-
|
|
9004
|
-
|
|
9005
|
-
|
|
9006
|
-
|
|
9007
|
-
|
|
9008
|
-
|
|
9009
|
-
)
|
|
9010
|
-
).toBe(true);
|
|
9158
|
+
requests.forEach(request =>
|
|
9159
|
+
expect(request).toMatchObject({
|
|
9160
|
+
append: false,
|
|
9161
|
+
file: { total_size: 2500, path: 'vol0:/application_p1.bin' },
|
|
9162
|
+
})
|
|
9163
|
+
);
|
|
9011
9164
|
const transferredBytes = (method.postProgressMessage as jest.Mock).mock.calls.map(
|
|
9012
9165
|
([, , metrics]) => metrics.transferredBytes
|
|
9013
9166
|
);
|
|
@@ -9026,21 +9179,21 @@ describe('Protocol V2 firmware update targets', () => {
|
|
|
9026
9179
|
expect(requests.map(request => request.file.data.byteLength)).toEqual([1800, 700]);
|
|
9027
9180
|
});
|
|
9028
9181
|
|
|
9029
|
-
test.each([
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
|
|
9033
|
-
|
|
9034
|
-
const typedCall = streamAll([]);
|
|
9182
|
+
test.each(['react-native', 'desktop-web-ble'] as const)(
|
|
9183
|
+
'bounds each windowed response wait in %s',
|
|
9184
|
+
async env => {
|
|
9185
|
+
const getSettingsSpy = jest.spyOn(DataManager, 'getSettings').mockReturnValue(env);
|
|
9186
|
+
const typedCall = streamAll([]);
|
|
9035
9187
|
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9040
|
-
|
|
9188
|
+
try {
|
|
9189
|
+
await transfer(createMethod(typedCall));
|
|
9190
|
+
} finally {
|
|
9191
|
+
getSettingsSpy.mockRestore();
|
|
9192
|
+
}
|
|
9041
9193
|
|
|
9042
|
-
|
|
9043
|
-
|
|
9194
|
+
expect(typedCall.mock.calls[0][3]).toEqual(expect.objectContaining({ timeoutMs: 10_000 }));
|
|
9195
|
+
}
|
|
9196
|
+
);
|
|
9044
9197
|
|
|
9045
9198
|
test('restarts the whole file after a failed windowed write', async () => {
|
|
9046
9199
|
const requests: any[] = [];
|
|
@@ -338,6 +338,42 @@ describe('SearchDevices', () => {
|
|
|
338
338
|
}
|
|
339
339
|
);
|
|
340
340
|
|
|
341
|
+
test('BLE discovery returns the advertised color letter without a device identity', async () => {
|
|
342
|
+
mockIsBleConnect.mockReturnValue(true);
|
|
343
|
+
|
|
344
|
+
const descriptor = {
|
|
345
|
+
id: 'ble-peripheral-id',
|
|
346
|
+
path: 'ble-peripheral-id',
|
|
347
|
+
name: 'Neo A1B2',
|
|
348
|
+
commType: 'ble',
|
|
349
|
+
bleColorCode: 'E',
|
|
350
|
+
};
|
|
351
|
+
const method = new SearchDevices({
|
|
352
|
+
id: 1,
|
|
353
|
+
payload: {
|
|
354
|
+
method: 'searchDevices',
|
|
355
|
+
},
|
|
356
|
+
} as any);
|
|
357
|
+
method.init();
|
|
358
|
+
method.connector = {
|
|
359
|
+
enumerate: jest.fn().mockResolvedValue({
|
|
360
|
+
descriptors: [descriptor],
|
|
361
|
+
}),
|
|
362
|
+
} as any;
|
|
363
|
+
|
|
364
|
+
await expect(method.run()).resolves.toEqual([
|
|
365
|
+
{
|
|
366
|
+
...descriptor,
|
|
367
|
+
connectId: 'ble-peripheral-id',
|
|
368
|
+
serialNo: null,
|
|
369
|
+
uuid: '',
|
|
370
|
+
deviceId: null,
|
|
371
|
+
deviceType: 'neo',
|
|
372
|
+
bleColorCode: 'E',
|
|
373
|
+
},
|
|
374
|
+
]);
|
|
375
|
+
});
|
|
376
|
+
|
|
341
377
|
test.each([
|
|
342
378
|
['Pro2 A1B2 - Find My', undefined, 'Pro 2 A1B2'],
|
|
343
379
|
['Pro2 5E9D - Finde My', undefined, 'Pro 2 5E9D'],
|
|
@@ -69,6 +69,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
69
69
|
private getProtocolV2ResourceComparePath;
|
|
70
70
|
private readProtocolV2DeviceFileHeader;
|
|
71
71
|
private isProtocolV2ResourceBundleUpToDate;
|
|
72
|
+
private isProtocolV2ResourceBundleUpToDateWithRecovery;
|
|
72
73
|
private isProtocolV2BootloaderMode;
|
|
73
74
|
private isProtocolV2RomloaderMode;
|
|
74
75
|
private rebootProtocolV2ToBootloader;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"FirmwareUpdateV4.d.ts","sourceRoot":"","sources":["../../src/api/FirmwareUpdateV4.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -383,6 +383,12 @@ type SearchDevice = {
|
|
|
383
383
|
deviceType: IDeviceType;
|
|
384
384
|
name: string;
|
|
385
385
|
commType: OneKeyDeviceCommType;
|
|
386
|
+
/**
|
|
387
|
+
* React Native and Electron BLE discovery only. Serial-number color letter ('A'-'Z')
|
|
388
|
+
* advertised by Pro2 / Neo, possibly remembered from an earlier advertisement in this
|
|
389
|
+
* process. Absent when unknown; the letter's meaning depends on deviceType.
|
|
390
|
+
*/
|
|
391
|
+
bleColorCode?: string;
|
|
386
392
|
};
|
|
387
393
|
/** Identity confirmed over USB. The descriptor path is only a transport address. */
|
|
388
394
|
type UsbDeviceIdentity = {
|
package/dist/index.js
CHANGED
|
@@ -52634,6 +52634,7 @@ const PROTOCOL_V2_CONNECT_POLL_INTERVAL = 500;
|
|
|
52634
52634
|
const PROTOCOL_V2_CONNECT_SINGLE_TIMEOUT = 75 * 1000;
|
|
52635
52635
|
const PROTOCOL_V2_DEVICE_INFO_READY_TIMEOUT = 30 * 1000;
|
|
52636
52636
|
const PROTOCOL_V2_FILE_TRANSFER_RETRY_COUNT = 3;
|
|
52637
|
+
const PROTOCOL_V2_RESOURCE_HEADER_RECOVERY_LIMIT = 2;
|
|
52637
52638
|
const PROTOCOL_V2_BLE_FILE_WRITE_WINDOW_MIN_BOOTLOADER_VERSION = '1.0.2';
|
|
52638
52639
|
const PROTOCOL_V2_TRANSFER_PROGRESS_HEARTBEAT_MS = 1000;
|
|
52639
52640
|
const PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE = 'FirmwareInstallStatusConflict';
|
|
@@ -52696,6 +52697,8 @@ const getProtocolV2DeviceTransferProgress = (bytesBeforeChunk, bytesAfterChunk,
|
|
|
52696
52697
|
}
|
|
52697
52698
|
return Math.min(Math.max(Math.ceil((bytesAfterChunk / totalBytes) * 100), 1), 99);
|
|
52698
52699
|
};
|
|
52700
|
+
const getProtocolV2TransferRate = (bytes, elapsedMs) => elapsedMs > 0 ? Math.round((bytes / elapsedMs) * 1000) : undefined;
|
|
52701
|
+
const getProtocolV2ElapsedMs = (startedAt, now = Date.now()) => Math.max(now - startedAt, 0);
|
|
52699
52702
|
const PROTOCOL_V2_REMOTE_COMPONENT_TARGETS = {
|
|
52700
52703
|
BOOTLOADER: {
|
|
52701
52704
|
fileName: 'bootloader.bin',
|
|
@@ -52796,6 +52799,21 @@ const getProtocolV2ErrorCode = (error) => {
|
|
|
52796
52799
|
const causeCode = errorCode !== null && errorCode !== void 0 ? errorCode : code;
|
|
52797
52800
|
return typeof causeCode === 'number' || typeof causeCode === 'string' ? causeCode : undefined;
|
|
52798
52801
|
};
|
|
52802
|
+
const isProtocolV2ResourceHeaderLinkError = (error) => {
|
|
52803
|
+
if (isProtocolV2DeviceDisconnectedError(error))
|
|
52804
|
+
return true;
|
|
52805
|
+
const errorCode = getProtocolV2ErrorCode(error);
|
|
52806
|
+
if (errorCode === hdShared.HardwareErrorCode.BleTimeoutError)
|
|
52807
|
+
return true;
|
|
52808
|
+
const message = getProtocolV2UnknownErrorText(error);
|
|
52809
|
+
if (errorCode === hdShared.HardwareErrorCode.TransportNotFound && /not connected/i.test(message)) {
|
|
52810
|
+
return true;
|
|
52811
|
+
}
|
|
52812
|
+
return (message.includes('ProtocolV2LinkError') ||
|
|
52813
|
+
message.includes('Device protocol has not been detected') ||
|
|
52814
|
+
message.includes('Electron BLE device state cleaned') ||
|
|
52815
|
+
message.includes('Electron BLE transport released'));
|
|
52816
|
+
};
|
|
52799
52817
|
const isProtocolV2TerminalInstallStatusError = (error) => {
|
|
52800
52818
|
var _a;
|
|
52801
52819
|
return error instanceof hdShared.HardwareError &&
|
|
@@ -52911,6 +52929,7 @@ const assertProtocolV2ReconnectIdentity = (expectedSerialNumber, actualSerialNum
|
|
|
52911
52929
|
}
|
|
52912
52930
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.DeviceNotFound, `Protocol V2 reconnect physical identity unavailable: expected path ${expectedPath !== null && expectedPath !== void 0 ? expectedPath : 'unknown'}, received ${actualPath !== null && actualPath !== void 0 ? actualPath : 'unknown'}`);
|
|
52913
52931
|
};
|
|
52932
|
+
const isProtocolV2ReconnectIdentityUnverified = (error) => getProtocolV2UnknownErrorText(error).includes('Protocol V2 reconnect physical identity');
|
|
52914
52933
|
class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
52915
52934
|
constructor() {
|
|
52916
52935
|
super(...arguments);
|
|
@@ -53899,11 +53918,43 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
53899
53918
|
return true;
|
|
53900
53919
|
}
|
|
53901
53920
|
catch (error) {
|
|
53921
|
+
if (isProtocolV2ResourceHeaderLinkError(error))
|
|
53922
|
+
throw error;
|
|
53902
53923
|
Log$6.log(`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check failed: `, error);
|
|
53903
53924
|
return false;
|
|
53904
53925
|
}
|
|
53905
53926
|
});
|
|
53906
53927
|
}
|
|
53928
|
+
isProtocolV2ResourceBundleUpToDateWithRecovery(bundle, recovery) {
|
|
53929
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53930
|
+
for (;;) {
|
|
53931
|
+
try {
|
|
53932
|
+
return yield this.isProtocolV2ResourceBundleUpToDate(bundle);
|
|
53933
|
+
}
|
|
53934
|
+
catch (error) {
|
|
53935
|
+
this.throwIfAborted();
|
|
53936
|
+
if (recovery.remaining <= 0) {
|
|
53937
|
+
Log$6.log(`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check lost the link; reconnect budget used up: `, getProtocolV2UnknownErrorText(error));
|
|
53938
|
+
return false;
|
|
53939
|
+
}
|
|
53940
|
+
recovery.remaining -= 1;
|
|
53941
|
+
Log$6.log(`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check lost the link; reconnecting: `, getProtocolV2UnknownErrorText(error));
|
|
53942
|
+
}
|
|
53943
|
+
try {
|
|
53944
|
+
yield this.recoverProtocolV2FileTransfer();
|
|
53945
|
+
}
|
|
53946
|
+
catch (recoverError) {
|
|
53947
|
+
this.throwIfAborted();
|
|
53948
|
+
if (isProtocolV2ReconnectIdentityUnverified(recoverError))
|
|
53949
|
+
throw recoverError;
|
|
53950
|
+
recovery.remaining = 0;
|
|
53951
|
+
Log$6.log('[FirmwareUpdateV4] RESC header check reconnect failed: ', getProtocolV2UnknownErrorText(recoverError));
|
|
53952
|
+
return false;
|
|
53953
|
+
}
|
|
53954
|
+
this.throwIfAborted();
|
|
53955
|
+
}
|
|
53956
|
+
});
|
|
53957
|
+
}
|
|
53907
53958
|
isProtocolV2BootloaderMode() {
|
|
53908
53959
|
var _a, _b, _c;
|
|
53909
53960
|
if (typeof this.device.isBootloader === 'function') {
|
|
@@ -54082,8 +54133,9 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54082
54133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54083
54134
|
let totalSize = installSources.reduce((total, item) => total + item.source.size, 0);
|
|
54084
54135
|
const resourcesToSync = [];
|
|
54136
|
+
const headerRecovery = { remaining: PROTOCOL_V2_RESOURCE_HEADER_RECOVERY_LIMIT };
|
|
54085
54137
|
for (const resource of resourceSources) {
|
|
54086
|
-
if (yield this.
|
|
54138
|
+
if (yield this.isProtocolV2ResourceBundleUpToDateWithRecovery(resource, headerRecovery)) {
|
|
54087
54139
|
Log$6.log(`[FirmwareUpdateV4] skip RESC bundle ${resource.name}; already up to date`);
|
|
54088
54140
|
}
|
|
54089
54141
|
else {
|
|
@@ -54128,8 +54180,8 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54128
54180
|
});
|
|
54129
54181
|
}
|
|
54130
54182
|
if (totalSize > 0) {
|
|
54131
|
-
const elapsedMs =
|
|
54132
|
-
const rateBytesPerSecond =
|
|
54183
|
+
const elapsedMs = getProtocolV2ElapsedMs(transferStartedAt);
|
|
54184
|
+
const rateBytesPerSecond = getProtocolV2TransferRate(totalSize, elapsedMs);
|
|
54133
54185
|
this.postProgressMessage(100, 'transferData', {
|
|
54134
54186
|
transferredBytes: totalSize,
|
|
54135
54187
|
totalBytes: totalSize,
|
|
@@ -54158,7 +54210,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54158
54210
|
yield this.waitForProtocolV2FirmwareUpdateComplete(targets, true);
|
|
54159
54211
|
Log$6.debug('[FirmwareUpdateV4] Protocol V2 install completed', {
|
|
54160
54212
|
targets: targets.length,
|
|
54161
|
-
elapsedMs:
|
|
54213
|
+
elapsedMs: getProtocolV2ElapsedMs(installStartedAt),
|
|
54162
54214
|
});
|
|
54163
54215
|
}
|
|
54164
54216
|
finally {
|
|
@@ -54171,7 +54223,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54171
54223
|
const reportConfirmedChunk = (chunkEnd) => {
|
|
54172
54224
|
const transferredBytes = processedSize + chunkEnd;
|
|
54173
54225
|
const now = Date.now();
|
|
54174
|
-
const elapsedMs =
|
|
54226
|
+
const elapsedMs = getProtocolV2ElapsedMs(transferStartedAt, now);
|
|
54175
54227
|
const progress = Math.min(Math.ceil((transferredBytes / totalSize) * 100), 99);
|
|
54176
54228
|
const shouldPostProgress = transferredBytes >= this.protocolV2LastTransferredBytes &&
|
|
54177
54229
|
(progress !== this.protocolV2LastTransferProgress ||
|
|
@@ -54185,7 +54237,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54185
54237
|
this.postProgressMessage(progress, 'transferData', {
|
|
54186
54238
|
transferredBytes,
|
|
54187
54239
|
totalBytes: totalSize,
|
|
54188
|
-
rateBytesPerSecond:
|
|
54240
|
+
rateBytesPerSecond: getProtocolV2TransferRate(transferredBytes, elapsedMs),
|
|
54189
54241
|
elapsedMs,
|
|
54190
54242
|
});
|
|
54191
54243
|
}
|
|
@@ -54229,7 +54281,7 @@ class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod {
|
|
|
54229
54281
|
Log$6.debug('[FirmwareUpdateV4] Protocol V2 file transferred', {
|
|
54230
54282
|
path: filePath,
|
|
54231
54283
|
bytes: source.size,
|
|
54232
|
-
elapsedMs:
|
|
54284
|
+
elapsedMs: getProtocolV2ElapsedMs(attemptStartedAt),
|
|
54233
54285
|
attempt,
|
|
54234
54286
|
fileWriteWindow: windowed ? hdTransport.PROTOCOL_V2_FILE_WRITE_PIPELINE_WINDOW : 1,
|
|
54235
54287
|
});
|
package/dist/types/device.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/types/device.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/types/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,IAAI,sBAAsB,EACtC,YAAY,IAAI,sBAAsB,EACvC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAE7D,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,YAAY,GACZ,iBAAiB,GACjB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,uBAAuB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAK1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IAEzB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,kBAAkB,EAAE,aAAa,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC;IAGtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,eAAe,CAAC,EAAE,uBAAuB,CAAC;IAO1C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAMzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAM/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,eAAe,EAAE,uBAAuB,CAAC;IACzC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAE9B,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAgCF,MAAM,MAAM,MAAM,GAAG,WAAW,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,MAAM,oBAAoB,GAAG;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kBAAkB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACpC,wBAAwB,CAAC,EAAE,cAAc,CAAC;IAC1C,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;KAClC,GAAG,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI;CACjE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,kBAAkB,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAElG,MAAM,MAAM,uBAAuB,GAC/B,YAAY,GACZ,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,eAAe,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,WAAW,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9B,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,wBAAwB,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,wBAAwB,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,0BAA0B,CAAC,CACtE,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,OAAO,CACpD,MAAM,CAAC,MAAM,2BAA2B,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAC/E,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAE9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,EAAE,mBAAmB,CAAC;IAE9B,gBAAgB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,gCAAgC,CAAC;IACpD,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,GAAG,CAAC,EAAE,sBAAsB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,uBAAuB,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,WAAW,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,wBAAwB,EAAE,OAAO,GAAG,IAAI,CAAC;IAEzC,kBAAkB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,wBAAwB,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,kBAAkB,GACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,kBAAkB,CAAC,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEvF,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB,WAAW,CAAC,OAAO,GACnB,WAAW,CAAC,OAAO,GACnB,WAAW,CAAC,SAAS,GACrB,WAAW,CAAC,WAAW,GACvB,WAAW,CAAC,IAAI,GAChB,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,IAAI,GAChB,WAAW,CAAC,GAAG,CAAC;AAQpB,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,YAAY,CAAC;AAEjB,eAAO,MAAM,kBAAkB,EAAE;KAAG,WAAW,IAAI,YAAY,GAAG,WAAW,EAAE;CAW9E,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE;KAAG,UAAU,IAAI,WAAW,GAAG,YAAY,EAAE;CAU7E,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3F,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;KAC/B,UAAU,IAAI,WAAW,GAAG,YAAY,CAAC,CAAC,EAAE,aAAa;CAC3D,CAAC;AAEF,KAAK,iBAAiB,GAClB;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,EAAE,IAAI,CAAC;IACtB,gBAAgB,EAAE,KAAK,CAAC;CACzB,GACD;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,EAAE,IAAI,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC;CACxB,GACD;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,CAAC,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC;CACxB,GACD;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,EAAE,IAAI,CAAC;IACtB,gBAAgB,EAAE,KAAK,CAAC;CACzB,GACD;IACE,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,eAAe,EAAE,IAAI,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,eAAe,GAAG;IAC5B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,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.118",
|
|
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.118",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.8-alpha.118",
|
|
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": "7b5fe42a7c29ff0aa4c8340c1d5da93026a1b590"
|
|
50
50
|
}
|
|
@@ -103,13 +103,14 @@ const PROTOCOL_V2_CONNECT_POLL_INTERVAL = 500;
|
|
|
103
103
|
const PROTOCOL_V2_CONNECT_SINGLE_TIMEOUT = 75 * 1000;
|
|
104
104
|
const PROTOCOL_V2_DEVICE_INFO_READY_TIMEOUT = 30 * 1000;
|
|
105
105
|
const PROTOCOL_V2_FILE_TRANSFER_RETRY_COUNT = 3;
|
|
106
|
-
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
//
|
|
106
|
+
const PROTOCOL_V2_RESOURCE_HEADER_RECOVERY_LIMIT = 2;
|
|
107
|
+
// Minimum running bootloader that receives two in-flight BLE FilesystemFileWrite frames.
|
|
108
|
+
// Bootloaders with the 2048-byte BLE UART FIFO have no room beside one waiting FileWrite frame,
|
|
109
|
+
// so a second frame can overflow it: the lost chunk is detected (no response or a mismatched
|
|
110
|
+
// confirmation) and Core rewrites the file, which slows the transfer or fails it after the
|
|
111
|
+
// retries. 1.0.2 also matches released 2048-byte FIFO bootloaders. Raise it to the first
|
|
112
|
+
// release that ships the 4096-byte FIFO once firmware confirms that version and the BLE
|
|
113
|
+
// coprocessor margin, or set it to undefined to keep every transfer serial.
|
|
113
114
|
const PROTOCOL_V2_BLE_FILE_WRITE_WINDOW_MIN_BOOTLOADER_VERSION: string | undefined = '1.0.2';
|
|
114
115
|
const PROTOCOL_V2_TRANSFER_PROGRESS_HEARTBEAT_MS = 1000;
|
|
115
116
|
const PROTOCOL_V2_INSTALL_STATUS_CONFLICT_CODE = 'FirmwareInstallStatusConflict';
|
|
@@ -206,6 +207,12 @@ const getProtocolV2DeviceTransferProgress = (
|
|
|
206
207
|
return Math.min(Math.max(Math.ceil((bytesAfterChunk / totalBytes) * 100), 1), 99);
|
|
207
208
|
};
|
|
208
209
|
|
|
210
|
+
const getProtocolV2TransferRate = (bytes: number, elapsedMs: number) =>
|
|
211
|
+
elapsedMs > 0 ? Math.round((bytes / elapsedMs) * 1000) : undefined;
|
|
212
|
+
|
|
213
|
+
const getProtocolV2ElapsedMs = (startedAt: number, now = Date.now()) =>
|
|
214
|
+
Math.max(now - startedAt, 0);
|
|
215
|
+
|
|
209
216
|
type ProtocolV2FirmwareUpdateStatusTarget = {
|
|
210
217
|
target_id: number | string;
|
|
211
218
|
status?: number | string;
|
|
@@ -404,6 +411,23 @@ const getProtocolV2ErrorCode = (error: unknown): number | string | undefined =>
|
|
|
404
411
|
return typeof causeCode === 'number' || typeof causeCode === 'string' ? causeCode : undefined;
|
|
405
412
|
};
|
|
406
413
|
|
|
414
|
+
/** Errors that mean the link is gone, so the read says nothing about the installed bundle. */
|
|
415
|
+
const isProtocolV2ResourceHeaderLinkError = (error: unknown) => {
|
|
416
|
+
if (isProtocolV2DeviceDisconnectedError(error)) return true;
|
|
417
|
+
const errorCode = getProtocolV2ErrorCode(error);
|
|
418
|
+
if (errorCode === HardwareErrorCode.BleTimeoutError) return true;
|
|
419
|
+
const message = getProtocolV2UnknownErrorText(error);
|
|
420
|
+
if (errorCode === HardwareErrorCode.TransportNotFound && /not connected/i.test(message)) {
|
|
421
|
+
return true;
|
|
422
|
+
}
|
|
423
|
+
return (
|
|
424
|
+
message.includes('ProtocolV2LinkError') ||
|
|
425
|
+
message.includes('Device protocol has not been detected') ||
|
|
426
|
+
message.includes('Electron BLE device state cleaned') ||
|
|
427
|
+
message.includes('Electron BLE transport released')
|
|
428
|
+
);
|
|
429
|
+
};
|
|
430
|
+
|
|
407
431
|
const isProtocolV2TerminalInstallStatusError = (error: unknown) =>
|
|
408
432
|
error instanceof HardwareError &&
|
|
409
433
|
(error.errorCode === HardwareErrorCode.ActionCancelled ||
|
|
@@ -557,6 +581,10 @@ export const assertProtocolV2ReconnectIdentity = (
|
|
|
557
581
|
);
|
|
558
582
|
};
|
|
559
583
|
|
|
584
|
+
/** Mismatch or unavailable: the reconnected device could not be re-verified. */
|
|
585
|
+
const isProtocolV2ReconnectIdentityUnverified = (error: unknown) =>
|
|
586
|
+
getProtocolV2UnknownErrorText(error).includes('Protocol V2 reconnect physical identity');
|
|
587
|
+
|
|
560
588
|
/**
|
|
561
589
|
* FirmwareUpdateV4 is the complete Protocol V2 firmware update flow.
|
|
562
590
|
*
|
|
@@ -810,9 +838,8 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
810
838
|
if (direction === 'read') {
|
|
811
839
|
maxChunkSize = PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE;
|
|
812
840
|
} else if (fileWriteWindow) {
|
|
813
|
-
//
|
|
814
|
-
//
|
|
815
|
-
// leave under 60 bytes.
|
|
841
|
+
// Skip the larger staging chunk so two in-flight frames fit the UART FIFO; see
|
|
842
|
+
// PROTOCOL_V2_FILE_WRITE_PIPELINE_WINDOW.
|
|
816
843
|
maxChunkSize = PROTOCOL_V2_BLE_FILE_CHUNK_SIZE;
|
|
817
844
|
} else {
|
|
818
845
|
// Firmware staging writes tolerate a larger BLE chunk than generic filesystem writes.
|
|
@@ -1900,11 +1927,57 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1900
1927
|
if (!expectedHeaderHash || header.headerHash !== expectedHeaderHash) return false;
|
|
1901
1928
|
return true;
|
|
1902
1929
|
} catch (error) {
|
|
1930
|
+
if (isProtocolV2ResourceHeaderLinkError(error)) throw error;
|
|
1903
1931
|
Log.log(`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check failed: `, error);
|
|
1904
1932
|
return false;
|
|
1905
1933
|
}
|
|
1906
1934
|
}
|
|
1907
1935
|
|
|
1936
|
+
/**
|
|
1937
|
+
* A lost link would fail every remaining header check and resend bundles that are already
|
|
1938
|
+
* installed, so reconnect (a bounded number of times per transfer phase) and ask again.
|
|
1939
|
+
* Header reads have no side effects. If reconnecting fails or the budget is used up, the bundle
|
|
1940
|
+
* is resent as before; a failed identity check after reconnecting aborts the update.
|
|
1941
|
+
*/
|
|
1942
|
+
private async isProtocolV2ResourceBundleUpToDateWithRecovery(
|
|
1943
|
+
bundle: ProtocolV2ResourceBundleSource,
|
|
1944
|
+
recovery: { remaining: number }
|
|
1945
|
+
): Promise<boolean> {
|
|
1946
|
+
for (;;) {
|
|
1947
|
+
try {
|
|
1948
|
+
return await this.isProtocolV2ResourceBundleUpToDate(bundle);
|
|
1949
|
+
} catch (error) {
|
|
1950
|
+
this.throwIfAborted();
|
|
1951
|
+
if (recovery.remaining <= 0) {
|
|
1952
|
+
Log.log(
|
|
1953
|
+
`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check lost the link; reconnect budget used up: `,
|
|
1954
|
+
getProtocolV2UnknownErrorText(error)
|
|
1955
|
+
);
|
|
1956
|
+
return false;
|
|
1957
|
+
}
|
|
1958
|
+
recovery.remaining -= 1;
|
|
1959
|
+
Log.log(
|
|
1960
|
+
`[FirmwareUpdateV4] RESC bundle ${bundle.name} header check lost the link; reconnecting: `,
|
|
1961
|
+
getProtocolV2UnknownErrorText(error)
|
|
1962
|
+
);
|
|
1963
|
+
}
|
|
1964
|
+
try {
|
|
1965
|
+
await this.recoverProtocolV2FileTransfer();
|
|
1966
|
+
} catch (recoverError) {
|
|
1967
|
+
this.throwIfAborted();
|
|
1968
|
+
// Never keep writing to a device that was not re-verified.
|
|
1969
|
+
if (isProtocolV2ReconnectIdentityUnverified(recoverError)) throw recoverError;
|
|
1970
|
+
recovery.remaining = 0;
|
|
1971
|
+
Log.log(
|
|
1972
|
+
'[FirmwareUpdateV4] RESC header check reconnect failed: ',
|
|
1973
|
+
getProtocolV2UnknownErrorText(recoverError)
|
|
1974
|
+
);
|
|
1975
|
+
return false;
|
|
1976
|
+
}
|
|
1977
|
+
this.throwIfAborted();
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1908
1981
|
private isProtocolV2BootloaderMode() {
|
|
1909
1982
|
if (typeof this.device.isBootloader === 'function') {
|
|
1910
1983
|
return !!this.device.isBootloader();
|
|
@@ -2143,8 +2216,9 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2143
2216
|
}: ProtocolV2TransferBatch) {
|
|
2144
2217
|
let totalSize = installSources.reduce((total, item) => total + item.source.size, 0);
|
|
2145
2218
|
const resourcesToSync: ProtocolV2ResourceBundleSource[] = [];
|
|
2219
|
+
const headerRecovery = { remaining: PROTOCOL_V2_RESOURCE_HEADER_RECOVERY_LIMIT };
|
|
2146
2220
|
for (const resource of resourceSources) {
|
|
2147
|
-
if (await this.
|
|
2221
|
+
if (await this.isProtocolV2ResourceBundleUpToDateWithRecovery(resource, headerRecovery)) {
|
|
2148
2222
|
Log.log(`[FirmwareUpdateV4] skip RESC bundle ${resource.name}; already up to date`);
|
|
2149
2223
|
} else {
|
|
2150
2224
|
resourcesToSync.push(resource);
|
|
@@ -2193,9 +2267,8 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2193
2267
|
}
|
|
2194
2268
|
|
|
2195
2269
|
if (totalSize > 0) {
|
|
2196
|
-
const elapsedMs =
|
|
2197
|
-
const rateBytesPerSecond =
|
|
2198
|
-
elapsedMs > 0 ? Math.round((totalSize / elapsedMs) * 1000) : undefined;
|
|
2270
|
+
const elapsedMs = getProtocolV2ElapsedMs(transferStartedAt);
|
|
2271
|
+
const rateBytesPerSecond = getProtocolV2TransferRate(totalSize, elapsedMs);
|
|
2199
2272
|
this.postProgressMessage(100, 'transferData', {
|
|
2200
2273
|
transferredBytes: totalSize,
|
|
2201
2274
|
totalBytes: totalSize,
|
|
@@ -2226,7 +2299,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2226
2299
|
await this.waitForProtocolV2FirmwareUpdateComplete(targets, true);
|
|
2227
2300
|
Log.debug('[FirmwareUpdateV4] Protocol V2 install completed', {
|
|
2228
2301
|
targets: targets.length,
|
|
2229
|
-
elapsedMs:
|
|
2302
|
+
elapsedMs: getProtocolV2ElapsedMs(installStartedAt),
|
|
2230
2303
|
});
|
|
2231
2304
|
} finally {
|
|
2232
2305
|
this.device?.clearCancelableAction();
|
|
@@ -2249,7 +2322,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2249
2322
|
const reportConfirmedChunk = (chunkEnd: number) => {
|
|
2250
2323
|
const transferredBytes = processedSize + chunkEnd;
|
|
2251
2324
|
const now = Date.now();
|
|
2252
|
-
const elapsedMs =
|
|
2325
|
+
const elapsedMs = getProtocolV2ElapsedMs(transferStartedAt, now);
|
|
2253
2326
|
const progress = Math.min(Math.ceil((transferredBytes / totalSize) * 100), 99);
|
|
2254
2327
|
const shouldPostProgress =
|
|
2255
2328
|
transferredBytes >= this.protocolV2LastTransferredBytes &&
|
|
@@ -2264,8 +2337,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2264
2337
|
this.postProgressMessage(progress, 'transferData', {
|
|
2265
2338
|
transferredBytes,
|
|
2266
2339
|
totalBytes: totalSize,
|
|
2267
|
-
rateBytesPerSecond:
|
|
2268
|
-
elapsedMs > 0 ? Math.round((transferredBytes / elapsedMs) * 1000) : undefined,
|
|
2340
|
+
rateBytesPerSecond: getProtocolV2TransferRate(transferredBytes, elapsedMs),
|
|
2269
2341
|
elapsedMs,
|
|
2270
2342
|
});
|
|
2271
2343
|
}
|
|
@@ -2323,7 +2395,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2323
2395
|
Log.debug('[FirmwareUpdateV4] Protocol V2 file transferred', {
|
|
2324
2396
|
path: filePath,
|
|
2325
2397
|
bytes: source.size,
|
|
2326
|
-
elapsedMs:
|
|
2398
|
+
elapsedMs: getProtocolV2ElapsedMs(attemptStartedAt),
|
|
2327
2399
|
attempt,
|
|
2328
2400
|
fileWriteWindow: windowed ? PROTOCOL_V2_FILE_WRITE_PIPELINE_WINDOW : 1,
|
|
2329
2401
|
});
|
package/src/types/device.ts
CHANGED
|
@@ -83,6 +83,12 @@ export type SearchDevice = {
|
|
|
83
83
|
deviceType: IDeviceType;
|
|
84
84
|
name: string;
|
|
85
85
|
commType: OneKeyDeviceCommType;
|
|
86
|
+
/**
|
|
87
|
+
* React Native and Electron BLE discovery only. Serial-number color letter ('A'-'Z')
|
|
88
|
+
* advertised by Pro2 / Neo, possibly remembered from an earlier advertisement in this
|
|
89
|
+
* process. Absent when unknown; the letter's meaning depends on deviceType.
|
|
90
|
+
*/
|
|
91
|
+
bleColorCode?: string;
|
|
86
92
|
};
|
|
87
93
|
|
|
88
94
|
/** Identity confirmed over USB. The descriptor path is only a transport address. */
|