En esta página
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 actuales | Protocolo | Método | Qué actualiza |
|---|---|---|---|
| Classic, Mini, Touch | V1 | firmwareUpdateV2 | Firmware principal y/o BLE |
| OneKey Pro | V1 | firmwareUpdateV3 | Bootloader + principal + BLE + recursos en un solo flujo |
| OneKey Pro 2, Neo | V2 | firmwareUpdateV4 | Bootloader, 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
- 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. - Vuelve a leer
getDeviceState(scope: 'firmware'si necesitas las versiones) antes de confiar en la nueva compilación. - 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
firmwareUpdateV3en Pro 2 / Neo, ni afirmwareUpdateV4en Classic / Pro. - Reintentar automáticamente una actualización tras una desconexión o un tiempo de espera agotado.
- Expandir los helpers BLE
retryCounten las llamadas de actualización. - Instalar romloader mediante
firmwareUpdateV4.