Skip to Content
HardwareActualización del firmware

Actualización del firmware

Elige la API de actualización según la familia del protocolo, no solo por el nombre comercial. Hardware SDK 1.2.0 mantiene una única API de JavaScript; el protocolo del dispositivo determina qué método es válido.

Dispositivos actualesProtocoloMétodoQué actualiza
Classic, Mini, TouchV1firmwareUpdateV2Firmware principal y/o BLE
OneKey ProV1firmwareUpdateV3Bootloader + principal + BLE + recursos en un solo flujo
OneKey Pro 2, NeoV2firmwareUpdateV4Bootloader, particiones de aplicación, coprocesador, ZIP de recursos

Confirma el protocolo de la conexión activa con connectProtocol en el objeto del dispositivo o mediante getDeviceState. No diferencies los casos según el PID de USB ni el nombre BLE. Consulta Dispositivos y Protocol V1 y V2.

Inicia una actualización solo después de que el usuario seleccione el dispositivo de destino y apruebe la operación. Usa metadatos de publicación oficiales y artefactos verificados para ese modelo; una versión de ejemplo nunca debe determinar qué firmware instalar.

1. Comprueba si es necesaria una actualización

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.

Coprocesador BLE: checkBLEFirmwareRelease. Suscríbete a FIRMWARE_EVENT (RELEASE_INFO / BLE_RELEASE_INFO) si prefieres avisar más tarde en lugar de bloquear la primera conexión.

2. Suscríbete al progreso antes de llamar al método de actualización

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. Llama al método correspondiente

Classic / Mini / Touch. Selecciona la versión de destino a partir de metadatos de publicación verificados para el modelo conectado:

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 — pasa binarios que ya hayas verificado:

const result = await HardwareSDK.firmwareUpdateV4(connectId, { platform: 'desktop', bootloaderBinary, applicationP1Binary, applicationP2Binary, coprocessorBinary, resourceArchiveBinary, }); if (!result.success) throw new Error(result.payload.error);

platform es obligatorio en los tres métodos: 'native' | 'desktop' | 'ext' | 'web' | 'web-embed'.

4. Después de la llamada

  1. El dispositivo puede reiniciarse. Espera a DEVICE.CONNECT (o vuelve a buscar). Una reconexión normal conserva el protocolo confirmado. Consulta Desconexiones y reconexión.
  2. Vuelve a leer getDeviceState (scope: 'firmware' si necesitas las versiones) antes de confiar en la nueva compilación.
  3. Si la llamada falla por un tiempo de espera del transporte agotado después de enviar la solicitud de instalación, no repitas la misma actualización. Reconecta, lee el estado y luego decide.

No debes

  • Llamar a firmwareUpdateV3 en Pro 2 / Neo, ni a firmwareUpdateV4 en Classic / Pro.
  • Reintentar automáticamente una actualización tras una desconexión o un tiempo de espera agotado.
  • Expandir los helpers BLE retryCount en las llamadas de actualización.
  • Instalar romloader mediante firmwareUpdateV4.

Siguiente

Última actualización el