このページの内容
ファームウェア更新
更新 API は次から選びます: プロトコルファミリー, 製品名だけでは判断しません。Hardware SDK 1.2.0 は JavaScript の共通インターフェースを保ち、有効なメソッドはデバイスのプロトコルが決定します。
| 現在のデバイス | プロトコル | 方法 | 更新するもの |
|---|---|---|---|
| Classic, Mini, Touch | V1 | firmwareUpdateV2 | メインファームウェアおよび/または BLE |
| OneKey Pro | V1 | firmwareUpdateV3 | Bootloader + メイン + BLE + リソースを 1 つのフローで更新 |
| OneKey Pro 2, Neo | V2 | firmwareUpdateV4 | Bootloader、アプリのパーティション、コプロセッサー、リソース ZIP |
デバイスオブジェクトの connectProtocol、または getDeviceState で実際のプロトコルを確認します。USB PID や BLE 名で分岐させないでください。デバイスと Protocol V1 と V2を参照してください。
対象デバイスをユーザーが選択し、操作を承認してから更新を開始してください。そのモデルの公式リリースメタデータと検証済みファイルを使い、例示されたバージョンでインストール対象を決めてはいけません。
1. 更新が必要か確認
const release = await HardwareSDK.checkFirmwareRelease(connectId);
if (!release.success) throw new Error(release.payload.error);
// payload.status: 'valid' | 'outdated' | 'required' | 'unknown' | 'none'
const updateAvailable = release.payload !== null &&
(release.payload.status === 'outdated' || release.payload.status === 'required');
// Offer an update only when updateAvailable is true and release metadata exists.BLE コプロセッサー: checkBLEFirmwareRelease。FIRMWARE_EVENT (RELEASE_INFO / BLE_RELEASE_INFO) を購読すると、初回接続を妨げず、後で通知できます。
2. 更新の呼び出し前に進捗を購読
import { UI_EVENT, UI_REQUEST } from '@onekeyfe/hd-core';
HardwareSDK.on(UI_EVENT, (msg) => {
if (
msg.type === UI_REQUEST.FIRMWARE_PROGRESS ||
msg.type === UI_REQUEST.FIRMWARE_TIP ||
msg.type === UI_REQUEST.FIRMWARE_PROCESSING
) {
renderFirmwareProgress(msg.payload);
}
// firmwareUpdateV4 may emit REQUEST_BUTTON with reason 'firmware-update'.
// Show "confirm on device". Do not uiResponse() that hint.
});3. 対応するメソッドを呼び出す
Classic / Mini / Touch。接続中のモデルの検証済みリリースメタデータから対象を選択します:
declare const targetFirmwareVersion: number[];
const result = await HardwareSDK.firmwareUpdateV2(connectId, {
platform: 'web',
updateType: 'firmware',
version: targetFirmwareVersion,
});
if (!result.success) throw new Error(result.payload.error);Pro:
declare const targetFirmwareVersion: number[];
const result = await HardwareSDK.firmwareUpdateV3(connectId, {
platform: 'desktop',
firmwareVersion: targetFirmwareVersion,
});
if (!result.success) throw new Error(result.payload.error);Pro 2 / Neo — 検証済みのバイナリを渡します:
const result = await HardwareSDK.firmwareUpdateV4(connectId, {
platform: 'desktop',
bootloaderBinary,
applicationP1Binary,
applicationP2Binary,
coprocessorBinary,
resourceArchiveBinary,
});
if (!result.success) throw new Error(result.payload.error);platform は 3 つのメソッドすべてで必須です: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed'.
4. 呼び出し後
- デバイスが再起動する場合があります。
DEVICE.CONNECTを待つか、再検索してください。通常の再接続では確認済みプロトコルを維持します。切断と再接続を参照してください。 - 新しいビルドを信頼する前に、
getDeviceStateを再取得して確認します (バージョンが必要な場合はscope: 'firmware'を指定)。 - トランスポートのタイムアウトで失敗し、 すでに インストールリクエストを送信済みの場合、 再実行しないでください: 同じ更新を再実行せず、再接続して状態を読み取り、判断してください。
禁止事項
- Pro 2 / Neo で
firmwareUpdateV3、Classic / Pro でfirmwareUpdateV4を呼び出すこと。 - 切断やタイムアウト後に更新を自動再試行すること。
- BLE の次の
retryCountヘルパーを更新呼び出しに展開すること。 - 次で romloader をインストールすること:
firmwareUpdateV4.
次へ
最終更新日