Jusqu'à présent, la seule façon de mettre à jour un module Yoctopuce était d'utiliser le VirtualHub. Depuis la version 18640 de nos librairies, il est possible de mettre à jour le firmware de vos modules avec les librairies Yoctopuce. Nous avons aussi publié une application Android qui permet de mettre à jour vos modules. Petit tour du propriétaire de ces nouveaux moyens de mise à jour.
Les nouveaux outils de mise à jour
Si vous désirez simplement mettre à jour vos modules sans devoir coder, vous pouvez utiliser les utilitaires lignes de commande ou notre application Android.
La librairie ligne de commandes
Tous les outils lignes de commandes ont désormais la possibilité de mettre à jour les modules Yoctopuce grâce à la commande downloadAndUpdate. Le mécanisme de sélection des modules fonctionne comme pour une commande traditionnelle. La [cible] est le nom du module qui va être mis à jour. Vous pouvez aussi utiliser les alias "any" ou "all", ou encore une liste de noms, séparés par des virgules, sans espace.
L'exemple suivant met à jour tous les modules Yoctopuce connectés en USB.
ok: Yocto-PowerRelay RELAYHI1-266C8(rev=15430) is up to date.
ok: 0 / 0 hubs in 0.000000s.
ok: 0 / 0 shields in 0.000000s.
ok: 1 / 1 devices in 0.130000s 0.130000s per device.
ok: All devices are now up to date.
C:\>
L'application Android Yocto-Firmware
Il est possible de mettre à jour le firmware de vos modules depuis votre téléphone ou tablette Android avec l'application Yocto-Firmware. Cette application liste tous les modules Yoctopuce branchés en USB et vérifie si un firmware plus récent est disponible sur www.yoctopuce.com. Si un firmware plus récent est disponible, il est possible de mettre à jour le module. L'application se charge de télécharger et d'installer le nouveau firmware en préservant les paramètres du module.
Attention, pendant la mise à jour du firmware, le module redémarre plusieurs fois. Android interprète le reboot d'un périphérique USB comme une déconnexion et reconnexion du périphérique USB, et demande à nouveau l'autorisation d'utiliser le port USB. L'utilisateur est obligé de cliquer sur OK pour que la procédure de mise à jour se termine correctement.
Captures d'écran de l'application Yocto-Friwmare
Mettre à jour un firmware avec la librairie de programmation
Si vous avez besoin d’intégrer la mise à jour de firmware dans votre application, les librairies proposent une API pour mettre à jour vos modules. Note: les librairiest JavaScript, Node.js et PHP ne permettent pas encore de mettre à jour les modules, mais ces fonctions seront disponibles dans le prochain build.
Sauvegarder et restaurer les paramètres
La méthode get_allSettings() retourne un buffer binaire qui permet de sauvegarder les paramètres persistants d'un module. Cette fonction est très utile pour sauvegarder la configuration réseau d'un YoctoHub par exemple.
YModule module = wireless.get_module();
byte[] default_config = module.get_allSettings();
saveFile("default.bin", default_config);
...
Ces paramètres peuvent être appliqués sur d'autres modules à l'aide le la méthode set_allSettings().
YModule module = YModule.FirstModule();
while (module != null) {
if (module.get_productName() == "YoctoHub-Wireless") {
module.set_allSettings(default_config);
}
module = module.next();
}
Chercher le bon firmware
La première étape pour mettre à jour un module Yoctopuce est de trouver quel firmware il faut utiliser, c'est le travail de la méthode checkFirmware(path, onlynew) de l'objet YModule. Cette méthode vérifie que le firmware passé en argument (path) est compatible avec le module. Si le paramètre onlynew est vrai, cette méthode vérifie si le firmware est plus récent que la version qui est actuellement utilisée par notre module. Quand le fichier n'est pas compatible (ou si le fichier est plus vieux que la version installée), cette méthode retourne une chaîne vide. Si au contraire le fichier est valide, la méthode retourne le chemin d'accès d'un fichier.
Le code suivant vérifie si le fichier c:\tmp\METEOMK1.17328.byn est compatible avec notre module.
...
...
string path = "c:\\tmp\METEOMK1.17328.byn";
string newfirm = module.checkFirmware(path, false);
if (newfirm != "") {
Console.WriteLine("firmware " + newfirm + " is compatible");
}
...
Il est possible de passer un répertoire en argument (au lieu d'un fichier). Dans ce cas la méthode va parcourir récursivement tous les fichiers du répertoire et retourner le firmware compatible le plus récent. Le code suivant vérifie s'il existe un firmware plus récent dans le répertoire c:\tmp\.
...
...
string path = "c:\\tmp";
string newfirm = module.checkFirmware(path, true);
if (newfirm != "") {
Console.WriteLine("firmware " + newfirm + " is compatible and newer");
}
...
Il est aussi possible de passer la chaîne "www.yoctopuce.com" en argument pour vérifier s'il existe un firmware plus récent publié sur notre site web. Dans ce cas, la méthode retournera l'URL du firmware. Vous pourrez soit utiliser cette URL pour télécharger le firmware sur votre disque, soit utiliser cette URL lors de la mise à jour du firmware (voir ci-dessous). Bien évidemment, cette possibilité ne fonctionne que si votre machine est reliée à Internet.
...
...
string url = module.checkFirmware("www.yoctopuce.com", true);
if (url != "") {
Console.WriteLine("new firmware is available at " + url );
}
...
Mettre à jour le firmware
La mise à jour du firmware peut prendre plusieurs minutes, par conséquent le processus de mise à jour est exécuté par la librairie en arrière plan et est contrôlé par le code utilisateur à l'aide de la classe YFirmwareUdpate.
Pour mettre à jour un module Yoctopuce, il faut obtenir une instance de la classe YFirmwareUpdate à l'aide de la méthode updateFirmware d'un objet YModule. Le seul paramètre de cette méthode est le path du firmware à installer. Cette méthode ne démarre pas immédiatement la mise à jour, mais retourne un objet YFirmwareUpdate configuré pour mettre à jour le module.
.....
YFirmwareUpdate fw_update = module.updateFirmware(newfirm);
La méthode startUpdate() démarre la mise à jour en arrière plan. Ce processus en arrière plan se charge automatiquement de:
- sauvegarder des paramètres du module,
- redémarrer le module en mode "mise à jour"
- mettre à jour le firmware
- démarrer le module avec la nouvelle version du firmware
- restaurer les paramètres
Les méthodes get_progress() et get_progressMessage() permettent de suivre la progression de la mise à jour. get_progress()retourne la progression sous forme de pourcentage (100 = mise à jour terminée). get_progressMessage() retourne une chaîne de caractères décrivant l'opération en cours (effacement, écriture, reboot,...). Si la méthode get_progress() retourne une valeur négative, c'est que le processus de mise à jour à échoué. Dans ce cas la méthode get_progressMessage() retourne le message d'erreur.
Le code suivant démarre la mise à jour et affiche la progression sur la sortie standard.
....
int status = fw_update.startUpdate();
while (status < 100 && status >= 0) {
int newstatus = fw_update.get_progress();
if (newstatus != status) {
Console.WriteLine(status + "% "
+ fw_update.get_progressMessage());
}
YAPI.Sleep(500, ref errmsg);
status = newstatus;
}
if (status < 0) {
Console.WriteLine("Firmware Update failed: "
+ fw_update.get_progressMessage());
} else {
Console.WriteLine("Firmware Updated Successfully!");
}
Conclusion
Comme vous pouvez le voir, nous avons fait notre maximum pour simplifier la vie des développeurs. Cependant, si votre application est interrompue pendant la mise à jour, le module peut rester bloqué en mode "mise à jour" et les paramètres seront perdus. Par prudence, nous recommandons de toujours sauvegarder les paramètres importants du module avant une mise à jour.