@onekeyfe/hd-core 1.2.0-alpha.70 → 1.2.0-alpha.72
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__/check-all-firmware-release-protocol-v2.test.ts +28 -0
- package/__tests__/protocol-v2-firmware-targets.test.ts +49 -1
- package/__tests__/protocol-v2-resources.test.ts +9 -6
- package/__tests__/protocol-v2.test.ts +431 -61
- package/__tests__/protocolV2FileWrite.test.ts +48 -7
- package/dist/api/CheckAllFirmwareRelease.d.ts +2 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +4 -0
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +1 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +193 -43
- package/dist/protocols/protocol-v2/resources.d.ts +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/settings.d.ts +1 -1
- package/dist/types/settings.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/CheckAllFirmwareRelease.ts +19 -4
- package/src/api/FirmwareUpdateV4.ts +155 -23
- package/src/api/helpers/protocolV2FileWrite.ts +62 -8
- package/src/protocols/protocol-v2/resources.ts +5 -1
- package/src/types/api/firmwareUpdate.ts +1 -0
- package/src/types/settings.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/protocols/protocol-v2/resources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,eAAO,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/protocols/protocol-v2/resources.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,eAAO,MAAM,0BAA0B,mGAQgB,CAAC;AAExD,eAAO,MAAM,iCAAiC,EAAE,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAS7F,CAAC;AAaJ,eAAO,MAAM,yCAAyC,QAAW,CAAC;AAElE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,aAAa,GAAG,qBAAqB,CAAC;AAEjF,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC,CAAC;AAwHF,wBAAsB,+BAA+B,CAAC,EACpD,QAAQ,EACR,SAAS,EACT,SAAgD,EAChD,SAAqD,GACtD,EAAE;IACD,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5C,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,+BAA+B,EAAE,CAAC,CAmB7C;AAiGD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAkCzF;AAGD,wBAAgB,iCAAiC,CAAC,EAChD,SAAS,EACT,SAAS,EACT,IAAI,EACJ,MAAc,GACf,EAAE;IACD,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACvD,IAAI,EAAE,4BAA4B,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,4BAA4B,CA8B/B;AAOD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,UAAU,CAAC,GAC3D,OAAO,CAGT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firmwareUpdate.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"firmwareUpdate.d.ts","sourceRoot":"","sources":["../../../src/types/api/firmwareUpdate.ts"],"names":[],"mappings":"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"}
|
package/dist/types/settings.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export type IProtocolV2FirmwareComponent = {
|
|
|
35
35
|
expectedSize?: number;
|
|
36
36
|
version?: IVersionArray;
|
|
37
37
|
};
|
|
38
|
-
export type IProtocolV2ResourceType = 'images' | 'animation' | 'wallpaper' | 'translations' | 'roobert' | 'noto';
|
|
38
|
+
export type IProtocolV2ResourceType = 'images' | 'animation' | 'wallpaper' | 'translations' | 'roobert' | 'noto' | 'firmware_logo';
|
|
39
39
|
export type IProtocolV2Resource = {
|
|
40
40
|
type: IProtocolV2ResourceType;
|
|
41
41
|
url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,KAAK,GACL,cAAc,GACd,UAAU,GACV,cAAc,GACd,QAAQ,GACR,gBAAgB,GAChB,iBAAiB,GACjB,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AACf,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,aAAa,GAAG,eAAe,CAAC;IACvD,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAExC,MAAM,MAAM,kCAAkC,GAC1C,WAAW,GACX,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,kCAAkC,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IAEZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,WAAW,GACX,WAAW,GACX,cAAc,GACd,SAAS,GACT,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,KAAK,GACL,cAAc,GACd,UAAU,GACV,cAAc,GACd,QAAQ,GACR,gBAAgB,GAChB,iBAAiB,GACjB,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AACf,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,aAAa,GAAG,eAAe,CAAC;IACvD,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAExC,MAAM,MAAM,kCAAkC,GAC1C,WAAW,GACX,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,kCAAkC,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IAEZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,WAAW,GACX,WAAW,GACX,cAAc,GACd,SAAS,GACT,MAAM,GACN,eAAe,CAAC;AAGpB,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,KAAK,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,CAAC,EAAE,wBAAwB,CAAC;CACjC,CAAC;AAGF,MAAM,MAAM,yBAAyB,GAAG;IAEtC,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IAKZ,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,wBAAwB,CAAC,EAAE,aAAa,CAAC;IACzC,gCAAgC,CAAC,EAAE,aAAa,CAAC;IACjD,WAAW,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,eAAe,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC9C,mBAAmB,CAAC,EAAE;SACnB,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE;SACR,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;CACH,CAAC;AAGF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,OAAO,CAAC;IAElB,GAAG,EAAE,MAAM,CAAC;IAEZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE;SACR,CAAC,IAAI,OAAO,GAAG,MAAM;KACvB,CAAC;CACH,CAAC;AAEF,KAAK,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACpD,KAAK,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAEvD,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IAEjC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC3C,GAAG,EAAE,uBAAuB,EAAE,CAAC;IAE/B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,kBAAkB,GAAG,kBAAkB;CAC9C,GAAG;IAEF,GAAG,CAAC,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,aAAa,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE;aACR,CAAC,IAAI,OAAO,GAAG,MAAM;SACvB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;CAC7B,GAAG,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.72",
|
|
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.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.72",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.72",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"bytebuffer": "^5.0.1",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@types/w3c-web-usb": "^1.0.10",
|
|
45
45
|
"@types/web-bluetooth": "^0.0.21"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "76311ccd3753eca8e492b5324f93542bd38525ba"
|
|
48
48
|
}
|
|
@@ -191,6 +191,7 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
191
191
|
remotePayloadHashes = {},
|
|
192
192
|
firmwareType,
|
|
193
193
|
release,
|
|
194
|
+
deviceType,
|
|
194
195
|
}: {
|
|
195
196
|
currentVersions: DeviceStateVersions;
|
|
196
197
|
currentVerification?: Partial<DeviceFeaturesVerify>;
|
|
@@ -198,6 +199,7 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
198
199
|
remotePayloadHashes?: Readonly<Record<string, string | null>>;
|
|
199
200
|
firmwareType: EFirmwareType;
|
|
200
201
|
release: IFirmwareReleaseInfo | undefined;
|
|
202
|
+
deviceType?: 'pro2' | 'neo';
|
|
201
203
|
}): ProtocolV2FirmwareReleasePlan {
|
|
202
204
|
if (!release) {
|
|
203
205
|
return {
|
|
@@ -212,8 +214,8 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
212
214
|
};
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
let components = getOrderedComponentEntries(release).map(([configKey, component]) =>
|
|
216
|
-
buildComponentRelease({
|
|
217
|
+
let components = getOrderedComponentEntries(release).map(([configKey, component]) => {
|
|
218
|
+
const result = buildComponentRelease({
|
|
217
219
|
configKey,
|
|
218
220
|
component,
|
|
219
221
|
currentVersions,
|
|
@@ -223,8 +225,20 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
223
225
|
? remotePayloadHashes[configKey]
|
|
224
226
|
: normalizeHex(component.payloadHash),
|
|
225
227
|
releaseRequired: release.required,
|
|
226
|
-
})
|
|
227
|
-
|
|
228
|
+
});
|
|
229
|
+
if (
|
|
230
|
+
deviceType === 'neo' &&
|
|
231
|
+
(result.componentTarget === 'SE03' || result.componentTarget === 'SE04')
|
|
232
|
+
) {
|
|
233
|
+
return {
|
|
234
|
+
...result,
|
|
235
|
+
updateTarget: null,
|
|
236
|
+
status: 'unsupported' as const,
|
|
237
|
+
required: false,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
return result;
|
|
241
|
+
});
|
|
228
242
|
if (!currentVersions.applicationP2) {
|
|
229
243
|
const applicationP1 = components.find(
|
|
230
244
|
component => component.componentTarget === 'APPLICATION_P1'
|
|
@@ -401,6 +415,7 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
401
415
|
checkFirmwareHash,
|
|
402
416
|
firmwareType,
|
|
403
417
|
release,
|
|
418
|
+
deviceType: state.identity.deviceType,
|
|
404
419
|
});
|
|
405
420
|
const resourceDeviceType =
|
|
406
421
|
state.identity.deviceType === 'neo' ? EDeviceType.Neo : EDeviceType.Pro2;
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
DeviceRebootType,
|
|
4
4
|
PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE,
|
|
5
5
|
PROTOCOL_V2_BLE_FILE_CHUNK_SIZE,
|
|
6
|
+
PROTOCOL_V2_BLE_FIRMWARE_FILE_CHUNK_SIZE,
|
|
6
7
|
PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE,
|
|
7
8
|
} from '@onekeyfe/hd-transport';
|
|
8
9
|
import { sha256 } from '@noble/hashes/sha256';
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
15
16
|
getDeviceBLEFirmwareVersion,
|
|
16
17
|
getDeviceBootloaderVersion,
|
|
17
18
|
getDeviceFirmwareVersion,
|
|
19
|
+
getDeviceType,
|
|
18
20
|
getFirmwareType,
|
|
19
21
|
getLogger,
|
|
20
22
|
} from '../utils';
|
|
@@ -90,6 +92,28 @@ const PROTOCOL_V2_OKPP_PAYLOAD_HASH_OFFSET = 0x200;
|
|
|
90
92
|
const PROTOCOL_V2_OKPP_HEADER_HASH_OFFSET = 0x240;
|
|
91
93
|
const PROTOCOL_V2_OKPP_HASH_SIZE = 64;
|
|
92
94
|
|
|
95
|
+
const PROTOCOL_V2_NEO_UNSUPPORTED_TARGETS = new Set<FirmwareUpdateV4Target>(['se03', 'se04']);
|
|
96
|
+
|
|
97
|
+
export function assertProtocolV2FirmwareTargetsSupported(
|
|
98
|
+
deviceType: EDeviceType | string | undefined,
|
|
99
|
+
params: FirmwareUpdateV4Params
|
|
100
|
+
) {
|
|
101
|
+
const unsupportedTargets = new Set(
|
|
102
|
+
(params.targetsToUpdate ?? []).filter(target => PROTOCOL_V2_NEO_UNSUPPORTED_TARGETS.has(target))
|
|
103
|
+
);
|
|
104
|
+
if (params.se03Binary) unsupportedTargets.add('se03');
|
|
105
|
+
if (params.se04Binary) unsupportedTargets.add('se04');
|
|
106
|
+
|
|
107
|
+
if (!unsupportedTargets.size || deviceType === EDeviceType.Pro2) return;
|
|
108
|
+
|
|
109
|
+
const targetList = Array.from(unsupportedTargets).join(', ');
|
|
110
|
+
const message =
|
|
111
|
+
deviceType === EDeviceType.Neo
|
|
112
|
+
? `Neo only supports SE01 and SE02; unsupported firmware targets: ${targetList}`
|
|
113
|
+
: `Cannot safely update ${targetList} without a confirmed Pro2 device type`;
|
|
114
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceNotSupportMethod, message);
|
|
115
|
+
}
|
|
116
|
+
|
|
93
117
|
const getProtocolV2DeviceTransferProgress = (
|
|
94
118
|
bytesBeforeChunk: number,
|
|
95
119
|
bytesAfterChunk: number,
|
|
@@ -218,6 +242,12 @@ const PROTOCOL_V2_REMOTE_COMPONENT_TARGETS: Readonly<
|
|
|
218
242
|
},
|
|
219
243
|
};
|
|
220
244
|
|
|
245
|
+
const PROTOCOL_V2_FIRMWARE_STAGING_PATHS = new Set(
|
|
246
|
+
Object.values(PROTOCOL_V2_REMOTE_COMPONENT_TARGETS).map(
|
|
247
|
+
target => `${PROTOCOL_V2_FIRMWARE_STAGING_VOLUME}${target.fileName}`
|
|
248
|
+
)
|
|
249
|
+
);
|
|
250
|
+
|
|
221
251
|
const PROTOCOL_V2_UPDATE_TARGET_BY_TARGET_ID = new Map<number, FirmwareUpdateV4Target>([
|
|
222
252
|
[ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_BOOTLOADER, 'boot'],
|
|
223
253
|
[ProtocolV2FirmwareTargetType.FW_MGMT_TARGET_APPLICATION_P1, 'app_v1'],
|
|
@@ -582,16 +612,20 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
582
612
|
};
|
|
583
613
|
}
|
|
584
614
|
|
|
585
|
-
private getProtocolV2FirmwareChunkSize(direction: 'read' | 'write' = 'write') {
|
|
615
|
+
private getProtocolV2FirmwareChunkSize(direction: 'read' | 'write' = 'write', filePath?: string) {
|
|
586
616
|
const payloadChunkSize = Number(this.params?.chunkSize);
|
|
587
617
|
const env = DataManager.getSettings('env');
|
|
588
618
|
const isBle = this.params?.platform === 'native' || (env && DataManager.isBleConnect(env));
|
|
589
619
|
let maxChunkSize = PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE;
|
|
590
620
|
if (isBle) {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
621
|
+
if (direction === 'read') {
|
|
622
|
+
maxChunkSize = PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE;
|
|
623
|
+
} else {
|
|
624
|
+
// Firmware staging writes tolerate a larger BLE chunk than generic filesystem writes.
|
|
625
|
+
maxChunkSize = PROTOCOL_V2_FIRMWARE_STAGING_PATHS.has(filePath ?? '')
|
|
626
|
+
? PROTOCOL_V2_BLE_FIRMWARE_FILE_CHUNK_SIZE
|
|
594
627
|
: PROTOCOL_V2_BLE_FILE_CHUNK_SIZE;
|
|
628
|
+
}
|
|
595
629
|
}
|
|
596
630
|
if (!Number.isFinite(payloadChunkSize) || payloadChunkSize <= 0) {
|
|
597
631
|
return maxChunkSize;
|
|
@@ -610,6 +644,12 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
610
644
|
private async runProtocolV2() {
|
|
611
645
|
await this.captureProtocolV2PhysicalIdentity();
|
|
612
646
|
const deviceFeatures = await this.getProtocolV2DeviceFeatures();
|
|
647
|
+
const currentDeviceType = this.device.getCurrentDeviceType();
|
|
648
|
+
const capabilityDeviceType =
|
|
649
|
+
currentDeviceType === EDeviceType.Pro2 || currentDeviceType === EDeviceType.Neo
|
|
650
|
+
? currentDeviceType
|
|
651
|
+
: getDeviceType(deviceFeatures);
|
|
652
|
+
assertProtocolV2FirmwareTargetsSupported(capabilityDeviceType, this.params);
|
|
613
653
|
const deviceFirmwareType = getFirmwareType(deviceFeatures);
|
|
614
654
|
const firmwareType = this.params.firmwareType ?? deviceFirmwareType;
|
|
615
655
|
this.validateExpectedTargetVersions();
|
|
@@ -620,9 +660,12 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
620
660
|
) {
|
|
621
661
|
return this.runProtocolV2PreparedArtifacts(deviceFeatures, firmwareType);
|
|
622
662
|
}
|
|
623
|
-
const
|
|
624
|
-
|
|
625
|
-
const
|
|
663
|
+
const hasExplicitResourceFiles = !!this.params.resourceFiles?.length;
|
|
664
|
+
const wantsStableResources = !!this.params.targetsToUpdate?.includes('resource');
|
|
665
|
+
const wantsBootResources = !!this.params.targetsToUpdate?.includes('boot_resources');
|
|
666
|
+
const needsRemoteResources = !hasExplicitResourceFiles && wantsStableResources;
|
|
667
|
+
const needsRemoteBootResources =
|
|
668
|
+
!hasExplicitResourceFiles && (wantsBootResources || wantsStableResources);
|
|
626
669
|
|
|
627
670
|
let fwBinaryMap: ProtocolV2TargetBinary[] = [];
|
|
628
671
|
let bootloaderBinary: ArrayBuffer | null = null;
|
|
@@ -664,7 +707,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
664
707
|
}
|
|
665
708
|
const bootResourceFiles = await this.prepareProtocolV2BootResources();
|
|
666
709
|
if (bootResourceFiles?.length) {
|
|
667
|
-
resourceBundles =
|
|
710
|
+
resourceBundles = this.mergeProtocolV2ResourceBundles(resourceBundles, bootResourceFiles);
|
|
668
711
|
}
|
|
669
712
|
if (!needsRemoteResources) {
|
|
670
713
|
this.postTipMessage(FirmwareUpdateTipMessage.FinishDownloadFirmware);
|
|
@@ -693,7 +736,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
693
736
|
const enteredBootloader = await this.enterProtocolV2BootloaderMode();
|
|
694
737
|
try {
|
|
695
738
|
const stableResources = await this.prepareProtocolV2ResourceBundles();
|
|
696
|
-
resourceBundles =
|
|
739
|
+
resourceBundles = this.mergeProtocolV2ResourceBundles(resourceBundles, stableResources);
|
|
697
740
|
this.postTipMessage(FirmwareUpdateTipMessage.FinishDownloadFirmware);
|
|
698
741
|
} catch (err) {
|
|
699
742
|
if (enteredBootloader) {
|
|
@@ -1223,26 +1266,108 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1223
1266
|
private async prepareProtocolV2BootResources(): Promise<
|
|
1224
1267
|
ProtocolV2ResourceBundleBinary[] | undefined
|
|
1225
1268
|
> {
|
|
1226
|
-
|
|
1269
|
+
const wantsStableResources = !!this.params.targetsToUpdate?.includes('resource');
|
|
1270
|
+
const wantsBootResources = !!this.params.targetsToUpdate?.includes('boot_resources');
|
|
1271
|
+
if (!wantsStableResources && !wantsBootResources) {
|
|
1272
|
+
return undefined;
|
|
1273
|
+
}
|
|
1274
|
+
if (this.params.resourceFiles?.length) {
|
|
1275
|
+
return undefined;
|
|
1276
|
+
}
|
|
1227
1277
|
const resource = DataManager.getProtocolV2BootResources(this.getProtocolV2DeviceType());
|
|
1228
|
-
if (!resource)
|
|
1278
|
+
if (!resource) {
|
|
1279
|
+
if (wantsBootResources) {
|
|
1280
|
+
throw new Error('Missing Protocol V2 boot resources configuration');
|
|
1281
|
+
}
|
|
1282
|
+
Log.debug('[FirmwareUpdateV4] no boot resources configured; continue with stable resources');
|
|
1283
|
+
return undefined;
|
|
1284
|
+
}
|
|
1229
1285
|
|
|
1230
1286
|
const files: ProtocolV2ResourceBundleBinary[] = [];
|
|
1231
1287
|
for (const file of resource.files) {
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
if (
|
|
1235
|
-
|
|
1288
|
+
const isCurrent =
|
|
1289
|
+
!this.params.forcedUpdateRes && (await this.isProtocolV2BootResourceCurrent(file));
|
|
1290
|
+
if (isCurrent) {
|
|
1291
|
+
Log.log(`[FirmwareUpdateV4] boot resource unchanged, skipping ${file.devicePath}`);
|
|
1292
|
+
} else {
|
|
1293
|
+
Log.log(`[FirmwareUpdateV4] downloading boot resource ${file.devicePath}`);
|
|
1294
|
+
const { binary } = await getSysResourceBinary(file.url);
|
|
1295
|
+
if (!isProtocolV2ResourceFileValid(binary, file)) {
|
|
1296
|
+
throw new Error(`Boot resource file verification failed: ${file.devicePath}`);
|
|
1297
|
+
}
|
|
1298
|
+
files.push({
|
|
1299
|
+
name: file.name ?? file.devicePath.split('/').pop() ?? file.devicePath,
|
|
1300
|
+
binary,
|
|
1301
|
+
devicePath: file.devicePath,
|
|
1302
|
+
});
|
|
1236
1303
|
}
|
|
1237
|
-
files.push({
|
|
1238
|
-
name: file.name ?? file.devicePath.split('/').pop() ?? file.devicePath,
|
|
1239
|
-
binary,
|
|
1240
|
-
devicePath: file.devicePath,
|
|
1241
|
-
});
|
|
1242
1304
|
}
|
|
1243
1305
|
return files;
|
|
1244
1306
|
}
|
|
1245
1307
|
|
|
1308
|
+
private async isProtocolV2BootResourceCurrent(file: IProtocolV2ResourceFile) {
|
|
1309
|
+
try {
|
|
1310
|
+
const commands = this.device.getCommands();
|
|
1311
|
+
const pathInfo = await commands.typedCall(
|
|
1312
|
+
'FilesystemPathInfoQuery',
|
|
1313
|
+
'FilesystemPathInfo',
|
|
1314
|
+
{ path: file.devicePath },
|
|
1315
|
+
{ timeoutMs: PROTOCOL_V2_SHORT_RESPONSE_TIMEOUT }
|
|
1316
|
+
);
|
|
1317
|
+
const size = toProtocolV2FiniteNumber(pathInfo.message?.size);
|
|
1318
|
+
if (
|
|
1319
|
+
!pathInfo.message?.exist ||
|
|
1320
|
+
pathInfo.message?.directory ||
|
|
1321
|
+
!Number.isSafeInteger(size) ||
|
|
1322
|
+
size !== file.size
|
|
1323
|
+
) {
|
|
1324
|
+
return false;
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
const digest = sha256.create();
|
|
1328
|
+
const chunkSize = this.getProtocolV2FirmwareChunkSize();
|
|
1329
|
+
let offset = 0;
|
|
1330
|
+
while (offset < file.size) {
|
|
1331
|
+
const response = await commands.typedCall(
|
|
1332
|
+
'FilesystemFileRead',
|
|
1333
|
+
'FilesystemFile',
|
|
1334
|
+
{
|
|
1335
|
+
file: { path: file.devicePath, offset, total_size: 0 },
|
|
1336
|
+
chunk_len: Math.min(chunkSize, file.size - offset),
|
|
1337
|
+
},
|
|
1338
|
+
{ timeoutMs: PROTOCOL_V2_SHORT_RESPONSE_TIMEOUT }
|
|
1339
|
+
);
|
|
1340
|
+
const data = toProtocolV2Bytes(response.message?.data);
|
|
1341
|
+
if (data.byteLength === 0) return false;
|
|
1342
|
+
const consumed = data.subarray(0, Math.min(data.byteLength, file.size - offset));
|
|
1343
|
+
digest.update(consumed);
|
|
1344
|
+
offset += consumed.byteLength;
|
|
1345
|
+
}
|
|
1346
|
+
return bytesToHex(digest.digest()) === normalizeProtocolV2Hex(file.fileHash);
|
|
1347
|
+
} catch (error) {
|
|
1348
|
+
Log.debug(
|
|
1349
|
+
`[FirmwareUpdateV4] unable to compare boot resource ${file.devicePath}; scheduling rewrite`,
|
|
1350
|
+
error
|
|
1351
|
+
);
|
|
1352
|
+
return false;
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
private mergeProtocolV2ResourceBundles(
|
|
1357
|
+
...groups: Array<ProtocolV2ResourceBundleBinary[] | undefined>
|
|
1358
|
+
): ProtocolV2ResourceBundleBinary[] | undefined {
|
|
1359
|
+
const merged = groups.flatMap(group => group ?? []);
|
|
1360
|
+
if (!merged.length) return undefined;
|
|
1361
|
+
const seenPaths = new Set<string>();
|
|
1362
|
+
for (const bundle of merged) {
|
|
1363
|
+
if (seenPaths.has(bundle.devicePath)) {
|
|
1364
|
+
throw new Error(`Duplicate Protocol V2 resource devicePath: ${bundle.devicePath}`);
|
|
1365
|
+
}
|
|
1366
|
+
seenPaths.add(bundle.devicePath);
|
|
1367
|
+
}
|
|
1368
|
+
return merged;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1246
1371
|
private prepareExplicitProtocolV2ResourceFiles(): ProtocolV2ResourceBundleBinary[] | undefined {
|
|
1247
1372
|
const files = this.params.resourceFiles ?? [];
|
|
1248
1373
|
if (!files?.length) return undefined;
|
|
@@ -1764,7 +1889,7 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
1764
1889
|
const transferStartedAt = Date.now();
|
|
1765
1890
|
await writeFirmwareByteSource({
|
|
1766
1891
|
source,
|
|
1767
|
-
chunkSize: this.getProtocolV2FirmwareChunkSize(),
|
|
1892
|
+
chunkSize: this.getProtocolV2FirmwareChunkSize('write', filePath),
|
|
1768
1893
|
write: async ({ data, sourceOffset, length, first }) => {
|
|
1769
1894
|
const chunkEnd = sourceOffset + length;
|
|
1770
1895
|
const deviceProgress = getProtocolV2DeviceTransferProgress(
|
|
@@ -2289,7 +2414,11 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2289
2414
|
}
|
|
2290
2415
|
|
|
2291
2416
|
private isProtocolV2ReconnectIdentityError(error: unknown) {
|
|
2292
|
-
|
|
2417
|
+
// A serial can be temporarily unavailable while Loader starts, and BLE has no stable path.
|
|
2418
|
+
// Keep polling unless the device explicitly reports a different serial.
|
|
2419
|
+
return this.normalizeErrorMessage(error).includes(
|
|
2420
|
+
'Protocol V2 reconnect physical identity mismatch'
|
|
2421
|
+
);
|
|
2293
2422
|
}
|
|
2294
2423
|
|
|
2295
2424
|
private async fileWriteChunk(
|
|
@@ -2315,7 +2444,10 @@ export default class FirmwareUpdateV4 extends FirmwareUpdateBaseMethod<FirmwareU
|
|
|
2315
2444
|
append: false,
|
|
2316
2445
|
ui_percentage: progress ?? undefined,
|
|
2317
2446
|
},
|
|
2318
|
-
{
|
|
2447
|
+
{
|
|
2448
|
+
writeWithResponse: false,
|
|
2449
|
+
onWriteCompleted: () => undefined,
|
|
2450
|
+
}
|
|
2319
2451
|
);
|
|
2320
2452
|
if (writeRes.type !== 'FilesystemFile') {
|
|
2321
2453
|
if ((writeRes as any).type === 'CallMethodError') {
|
|
@@ -9,7 +9,7 @@ import { LoggerNames, getLogger } from '../../utils/logger';
|
|
|
9
9
|
|
|
10
10
|
import type { DeviceCommands } from '../../device/DeviceCommands';
|
|
11
11
|
|
|
12
|
-
const Log = getLogger(LoggerNames.
|
|
12
|
+
const Log = getLogger(LoggerNames.Core);
|
|
13
13
|
|
|
14
14
|
export type ProtocolV2FileWriteData = ArrayBuffer | Uint8Array | Blob | string;
|
|
15
15
|
|
|
@@ -35,6 +35,7 @@ export type ProtocolV2FileWriteOptions = {
|
|
|
35
35
|
totalSize?: number;
|
|
36
36
|
chunkSize?: number;
|
|
37
37
|
chunkLen?: number;
|
|
38
|
+
chunkSizeLimit?: number;
|
|
38
39
|
overwrite?: boolean;
|
|
39
40
|
append?: boolean;
|
|
40
41
|
uiPercentage?: number;
|
|
@@ -69,22 +70,36 @@ function getFileTransferTransport() {
|
|
|
69
70
|
function logFileTransferMetrics({
|
|
70
71
|
transport,
|
|
71
72
|
status,
|
|
73
|
+
path,
|
|
72
74
|
transferredBytes,
|
|
73
75
|
totalBytes,
|
|
74
76
|
elapsedMs,
|
|
75
77
|
rateBytesPerSecond,
|
|
78
|
+
hostWriteElapsedMs,
|
|
79
|
+
responseWaitElapsedMs,
|
|
80
|
+
measuredAttempts,
|
|
76
81
|
}: {
|
|
77
82
|
transport: string;
|
|
78
83
|
status: 'progress' | 'completed' | 'failed';
|
|
84
|
+
path: string;
|
|
79
85
|
transferredBytes: number;
|
|
80
86
|
totalBytes: number;
|
|
81
87
|
elapsedMs: number;
|
|
82
88
|
rateBytesPerSecond: number;
|
|
89
|
+
hostWriteElapsedMs: number;
|
|
90
|
+
responseWaitElapsedMs: number;
|
|
91
|
+
measuredAttempts: number;
|
|
83
92
|
}) {
|
|
93
|
+
const segmentedMetrics =
|
|
94
|
+
measuredAttempts > 0
|
|
95
|
+
? ` hostWriteTotal=${(hostWriteElapsedMs / 1000).toFixed(2)}s responseWaitTotal=${(
|
|
96
|
+
responseWaitElapsedMs / 1000
|
|
97
|
+
).toFixed(2)}s measuredAttempts=${measuredAttempts}`
|
|
98
|
+
: '';
|
|
84
99
|
Log.log(
|
|
85
|
-
`[FileWrite] metrics transport=${transport} status=${status} bytes=${transferredBytes}/${totalBytes} elapsed=${(
|
|
100
|
+
`[FileWrite] metrics transport=${transport} status=${status} path=${path} bytes=${transferredBytes}/${totalBytes} elapsed=${(
|
|
86
101
|
elapsedMs / 1000
|
|
87
|
-
).toFixed(2)}s speed=${formatFileTransferRate(rateBytesPerSecond)} KiB/s`
|
|
102
|
+
).toFixed(2)}s speed=${formatFileTransferRate(rateBytesPerSecond)} KiB/s${segmentedMetrics}`
|
|
88
103
|
);
|
|
89
104
|
}
|
|
90
105
|
|
|
@@ -163,10 +178,13 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
163
178
|
);
|
|
164
179
|
}
|
|
165
180
|
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
181
|
+
const defaultChunkSizeLimit = getProtocolV2FileChunkLimit();
|
|
182
|
+
const configuredChunkSizeLimit = Number(options.chunkSizeLimit);
|
|
183
|
+
const chunkSizeLimit =
|
|
184
|
+
Number.isFinite(configuredChunkSizeLimit) && configuredChunkSizeLimit > 0
|
|
185
|
+
? Math.floor(configuredChunkSizeLimit)
|
|
186
|
+
: defaultChunkSizeLimit;
|
|
187
|
+
const chunkSize = normalizeChunkSize(options.chunkSize ?? options.chunkLen, chunkSizeLimit);
|
|
170
188
|
let written = 0;
|
|
171
189
|
let chunks = 0;
|
|
172
190
|
let lastMessage: Record<string, unknown> | undefined;
|
|
@@ -177,7 +195,13 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
177
195
|
let lastConfirmedAt = startTime;
|
|
178
196
|
let logWindowStartedAt = startTime;
|
|
179
197
|
let logWindowStartedBytes = 0;
|
|
198
|
+
let hostWriteElapsedMs = 0;
|
|
199
|
+
let responseWaitElapsedMs = 0;
|
|
200
|
+
let measuredAttempts = 0;
|
|
180
201
|
const transport = getFileTransferTransport();
|
|
202
|
+
Log.log(
|
|
203
|
+
`[FileWrite] started transport=${transport} path=${options.path} bytes=${dataLength} offset=${startOffset} chunk=${chunkSize}`
|
|
204
|
+
);
|
|
181
205
|
|
|
182
206
|
try {
|
|
183
207
|
while (written < dataLength) {
|
|
@@ -203,13 +227,25 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
203
227
|
let response;
|
|
204
228
|
let isWritePending = true;
|
|
205
229
|
while (isWritePending) {
|
|
230
|
+
let currentHostWriteElapsedMs: number | undefined;
|
|
231
|
+
let responseWaitStartedAt: number | undefined;
|
|
206
232
|
try {
|
|
207
233
|
const callOptions =
|
|
208
234
|
options.writeWithResponse === undefined
|
|
209
|
-
? {
|
|
235
|
+
? {
|
|
236
|
+
timeoutMs: options.timeoutMs,
|
|
237
|
+
onWriteCompleted: ({ elapsedMs }: { elapsedMs: number }) => {
|
|
238
|
+
currentHostWriteElapsedMs = elapsedMs;
|
|
239
|
+
responseWaitStartedAt = Date.now();
|
|
240
|
+
},
|
|
241
|
+
}
|
|
210
242
|
: {
|
|
211
243
|
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
212
244
|
writeWithResponse: options.writeWithResponse,
|
|
245
|
+
onWriteCompleted: ({ elapsedMs }: { elapsedMs: number }) => {
|
|
246
|
+
currentHostWriteElapsedMs = elapsedMs;
|
|
247
|
+
responseWaitStartedAt = Date.now();
|
|
248
|
+
},
|
|
213
249
|
};
|
|
214
250
|
response = await options.commands.typedCall(
|
|
215
251
|
'FilesystemFileWrite',
|
|
@@ -222,6 +258,12 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
222
258
|
if (retryCount >= maxChunkRetries || !isProtocolV2ResponseTimeout(error)) throw error;
|
|
223
259
|
retryCount += 1;
|
|
224
260
|
options.throwIfAborted?.();
|
|
261
|
+
} finally {
|
|
262
|
+
if (currentHostWriteElapsedMs !== undefined && responseWaitStartedAt !== undefined) {
|
|
263
|
+
hostWriteElapsedMs += currentHostWriteElapsedMs;
|
|
264
|
+
responseWaitElapsedMs += Math.max(Date.now() - responseWaitStartedAt, 0);
|
|
265
|
+
measuredAttempts += 1;
|
|
266
|
+
}
|
|
225
267
|
}
|
|
226
268
|
}
|
|
227
269
|
if (!response) {
|
|
@@ -285,10 +327,14 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
285
327
|
logFileTransferMetrics({
|
|
286
328
|
transport,
|
|
287
329
|
status: 'progress',
|
|
330
|
+
path: options.path,
|
|
288
331
|
transferredBytes,
|
|
289
332
|
totalBytes: dataLength,
|
|
290
333
|
elapsedMs,
|
|
291
334
|
rateBytesPerSecond: getAverageFileTransferRate(logWindowBytes, logWindowElapsedMs),
|
|
335
|
+
hostWriteElapsedMs,
|
|
336
|
+
responseWaitElapsedMs,
|
|
337
|
+
measuredAttempts,
|
|
292
338
|
});
|
|
293
339
|
logWindowStartedAt = now;
|
|
294
340
|
logWindowStartedBytes = transferredBytes;
|
|
@@ -307,10 +353,14 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
307
353
|
logFileTransferMetrics({
|
|
308
354
|
transport,
|
|
309
355
|
status: 'failed',
|
|
356
|
+
path: options.path,
|
|
310
357
|
transferredBytes: written,
|
|
311
358
|
totalBytes: dataLength,
|
|
312
359
|
elapsedMs,
|
|
313
360
|
rateBytesPerSecond: getAverageFileTransferRate(logWindowBytes, logWindowElapsedMs),
|
|
361
|
+
hostWriteElapsedMs,
|
|
362
|
+
responseWaitElapsedMs,
|
|
363
|
+
measuredAttempts,
|
|
314
364
|
});
|
|
315
365
|
throw error;
|
|
316
366
|
}
|
|
@@ -321,10 +371,14 @@ export async function writeProtocolV2File(options: ProtocolV2FileWriteOptions) {
|
|
|
321
371
|
logFileTransferMetrics({
|
|
322
372
|
transport,
|
|
323
373
|
status: 'completed',
|
|
374
|
+
path: options.path,
|
|
324
375
|
transferredBytes: written,
|
|
325
376
|
totalBytes: dataLength,
|
|
326
377
|
elapsedMs,
|
|
327
378
|
rateBytesPerSecond: getAverageFileTransferRate(logWindowBytes, logWindowElapsedMs),
|
|
379
|
+
hostWriteElapsedMs,
|
|
380
|
+
responseWaitElapsedMs,
|
|
381
|
+
measuredAttempts,
|
|
328
382
|
});
|
|
329
383
|
|
|
330
384
|
return {
|
|
@@ -17,6 +17,7 @@ export const PROTOCOL_V2_RESOURCE_TYPES = [
|
|
|
17
17
|
'translations',
|
|
18
18
|
'roobert',
|
|
19
19
|
'noto',
|
|
20
|
+
'firmware_logo',
|
|
20
21
|
] as const satisfies readonly IProtocolV2ResourceType[];
|
|
21
22
|
|
|
22
23
|
export const PROTOCOL_V2_RESOURCE_DEVICE_PATHS: Readonly<Record<IProtocolV2ResourceType, string>> =
|
|
@@ -27,6 +28,7 @@ export const PROTOCOL_V2_RESOURCE_DEVICE_PATHS: Readonly<Record<IProtocolV2Resou
|
|
|
27
28
|
translations: 'vol0:/bundles/translations/translations.okpkg',
|
|
28
29
|
roobert: 'vol0:/bundles/font/roobert.okpkg',
|
|
29
30
|
noto: 'vol0:/bundles/font/noto.okpkg',
|
|
31
|
+
firmware_logo: 'vol0:/bundles/firmware_logo.okpkg',
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
const RESOURCE_TYPE_SET = new Set<string>(PROTOCOL_V2_RESOURCE_TYPES);
|
|
@@ -313,7 +315,9 @@ export function parseProtocolV2Resources(value: unknown): IProtocolV2Resources |
|
|
|
313
315
|
const stable = config.stable.map(validateResource);
|
|
314
316
|
const types = new Set(stable.map(resource => resource.type));
|
|
315
317
|
if (stable.length !== PROTOCOL_V2_RESOURCE_TYPES.length || types.size !== stable.length) {
|
|
316
|
-
throw new Error(
|
|
318
|
+
throw new Error(
|
|
319
|
+
`Invalid Pro2 resources config: stable must contain ${PROTOCOL_V2_RESOURCE_TYPES.length} unique resource types`
|
|
320
|
+
);
|
|
317
321
|
}
|
|
318
322
|
for (const type of PROTOCOL_V2_RESOURCE_TYPES) {
|
|
319
323
|
if (!types.has(type)) {
|
|
@@ -157,6 +157,7 @@ export interface FirmwareUpdateV4Params {
|
|
|
157
157
|
/**
|
|
158
158
|
* Arbitrary Protocol V2 resource files written directly with FilesystemFileWrite.
|
|
159
159
|
* Use this for manifest-driven boot resources and other non-RESC files.
|
|
160
|
+
* When provided, these files are authoritative for resource and boot_resources targets.
|
|
160
161
|
*/
|
|
161
162
|
resourceFiles?: Array<{
|
|
162
163
|
binary: ArrayBuffer;
|
package/src/types/settings.ts
CHANGED
|
@@ -70,7 +70,8 @@ export type IProtocolV2ResourceType =
|
|
|
70
70
|
| 'wallpaper'
|
|
71
71
|
| 'translations'
|
|
72
72
|
| 'roobert'
|
|
73
|
-
| 'noto'
|
|
73
|
+
| 'noto'
|
|
74
|
+
| 'firmware_logo';
|
|
74
75
|
|
|
75
76
|
/** Pro2 RES package descriptor. Hashes identify content without a human-managed version. */
|
|
76
77
|
export type IProtocolV2Resource = {
|