Sur cette page
Mise à jour du micrologiciel
Choisissez l’API de mise à jour selon la famille de protocole, et non le seul nom commercial. Hardware SDK 1.2.0 conserve une interface JavaScript unique ; le protocole de l’appareil détermine la méthode valide.
| Appareil actuel | Protocole | Méthode | Éléments mis à jour |
|---|---|---|---|
| Classic, Mini, Touch | V1 | firmwareUpdateV2 | Micrologiciel principal et/ou BLE |
| OneKey Pro | V1 | firmwareUpdateV3 | Bootloader + principal + BLE + ressources en un seul parcours |
| OneKey Pro 2, Neo | V2 | firmwareUpdateV4 | Bootloader, partitions d’application, coprocesseur, ZIP de ressources |
Confirmez le protocole actif avec connectProtocol dans l’objet appareil ou via getDeviceState. Ne différenciez pas le comportement selon le PID USB ou le nom BLE. Consultez Appareils et Protocol V1 et V2.
Ne lancez une mise à jour qu’après que l’utilisateur a sélectionné l’appareil cible et approuvé l’opération. Utilisez les métadonnées de publication officielles et des fichiers vérifiés pour ce modèle ; une version d’exemple ne doit jamais déterminer le micrologiciel à installer.
1. Vérifier si une mise à jour est nécessaire
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.Coprocesseur BLE : checkBLEFirmwareRelease. Abonnez-vous à FIRMWARE_EVENT (RELEASE_INFO / BLE_RELEASE_INFO) si vous souhaitez proposer la mise à jour plus tard plutôt que bloquer la première connexion.
2. S’abonner à la progression avant d’appeler la mise à jour
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. Appeler la méthode correspondante
Classic / Mini / Touch. Choisissez la cible à partir des métadonnées de publication vérifiées pour le modèle connecté :
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 — transmettre des binaires déjà vérifiés :
const result = await HardwareSDK.firmwareUpdateV4(connectId, {
platform: 'desktop',
bootloaderBinary,
applicationP1Binary,
applicationP2Binary,
coprocessorBinary,
resourceArchiveBinary,
});
if (!result.success) throw new Error(result.payload.error);platform est obligatoire pour les trois méthodes : 'native' | 'desktop' | 'ext' | 'web' | 'web-embed'.
4. Après l’appel
- L’appareil peut redémarrer. Attendez
DEVICE.CONNECT(ou effectuez une nouvelle recherche). Une reconnexion ordinaire conserve le protocole confirmé. Consultez Déconnexions et reconnexion. - Relisez
getDeviceState(scope: 'firmware'si vous avez besoin des versions) avant de faire confiance à la nouvelle version. - Si l’appel a échoué avec un délai de transport dépassé après l’envoi de la demande d’installation, ne rejouez pas la même mise à jour. Reconnectez-vous, lisez l’état, puis décidez.
À ne pas faire
- Appeler
firmwareUpdateV3sur Pro 2 / Neo, oufirmwareUpdateV4sur Classic / Pro. - Réessayer automatiquement une mise à jour après déconnexion ou délai dépassé.
- Propager les utilitaires BLE
retryCountdans les appels de mise à jour. - Installer romloader via
firmwareUpdateV4.