Partager via


Différer les mises à jour d’appareils

Important

Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).

Une application générale peut différer temporairement les mises à jour du système d’exploitation Azure Sphere et des images d’application pour éviter toute interruption de processus critique en cours. Un appareil Azure Sphere intégré dans un appareil électroménager, par exemple, peut différer les mises à jour quand il est en cours d’utilisation. Pour avoir la possibilité de différer les mises à jour, l’application s’inscrit à des notifications de mise à jour. Une fois que le système d’exploitation a téléchargé la mise à jour, il avertit l’application, laquelle peut obtenir des informations sur celle-ci et demander un report.

L’exemple Deferred Update (Mise à jour différée) montre comment utiliser une boucle d’événements et des événements système pour différer des mises à jour.

Les applications en temps réel ne peuvent pas recevoir de notifications de mise à jour ni demander des reports. L’application générale est responsable de la gestion du report des mises à jour pour le compte des applications en temps réel installées sur l’appareil.

Conditions de report

Les applications qui diffèrent les mises à jour doivent inclure les fichiers d’en-tête appropriés et ajouter des paramètres de report au manifeste de l’application.

Fichiers d’en-tête

Incluez les en-têtes eventloop et sysevent dans votre projet :

 #include <applibs/eventloop.h>
 #include <applibs/sysevent.h>

Paramètres de manifeste de l’application

Pour être informé des événements de mise à jour logicielle et pour avoir la possibilité de différer ces mises à jour, une application comprend deux fonctionnalités dans le fichier manifeste de l’application :

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Affectez au champ SystemEventNotifications la valeur true dans le fichier app_manifest.json pour recevoir des notifications des événements de mise à jour système. L’application doit également s’inscrire aux notifications d’événements, comme décrit dans Mécanisme de notification. Affectez à SoftwareUpdateDeferral la valeur true pour permettre à l’application de différer et de reprendre des mises à jour.

L’exemple suivant montre les paramètres du fichier app_manifest.json nécessaires pour activer la notification et le report :

"Capabilities": {
        "SystemEventNotifications" : true,
        "SoftwareUpdateDeferral" : true
    }

Mécanisme de notification

Azure Sphere prend en charge le report des mises à jour par le biais d’une notification d’événements et d’un mécanisme de boucle d’événements. L’application crée un EventLoop, à savoir un objet à thread unique par le biais duquel elle est notifiée des événements en attente.

Pour recevoir des notifications, une application appelle SysEvent_RegisterForEventNotifications, en transmettant ces paramètres :

  • Pointeur vers la boucle d’événements
  • eventBitmask qui spécifie les événements pour lesquels l’application demande une notification
  • Pointeur vers une fonction de rappel définie par l’application
  • Pointeur de contexte facultatif transmis au rappel

Un seul objet EventLoop peut être utilisé avec SysEvent_RegisterForEventNotifications par thread. Un second appel à SysEvent_RegisterForEventNotifications échoue avec un autre objet EventLoop.

Après l’inscription, l’application appelle EventLoop_Run, qui appelle la fonction de rappel si un événement a changé d’état. La fonction de rappel reçoit une valeur SysEvent_Events, qui identifie le type d’événement. À son tour, le rappel appelle SysEvent_Info_GetUpdateData pour déterminer si l’événement est une mise à jour du système d’exploitation ou d’une application, ainsi que sa durée possible de report. L’application peut alors déterminer comment gérer la notification d’événements.

Azure Sphere peut envoyer plusieurs notifications d’état pour chaque événement de mise à jour :

Statut Description
SysEvent_Status_Pending Avertissement de 10 secondes signalant qu’un événement de mise à jour va se produire, avec la possibilité de le différer.
SysEvent_Status_Final Avertissement de 10 secondes signalant qu’un événement de mise à jour va se produire, sans possibilité de report.
SysEvent_Status_Deferred L’événement précédemment en attente a été reporté et se produira plus tard.
SysEvent_Status_Complete Le processus de mise à jour logicielle est terminé. Cette notification d’événements est envoyée uniquement pour les mises à jour d’application.

Une application peut demander un report uniquement après avoir reçu une notification SysEvent_Status_Pending. Pour permettre à la mise à jour de se produire immédiatement, l’application peut ignorer la notification.

Pour différer la mise à jour, l’application appelle SysEvent_DeferEvent, en passant le nombre de minutes de report de la mise à jour. Pour une mise à jour du système d’exploitation, le report maximal est de 1 440 minutes (24 heures). Pour une mise à jour d’application, le report maximal est de 10 020 minutes (167 heures).

Une application peut mettre prématurément fin à un report de mise à jour en appelant SysEvent_ResumeEvent. Pour une mise à jour d’application ou du système d’exploitation, un appel correct à SysEvent_ResumeEvent redémarre le processus de notification et envoie donc une nouvelle notification SysEvent_Status_Pending. L’application ne doit plus appeler SysEvent_DeferEvent tant qu’elle n’a pas reçu cette notification.

Lorsque l’application reçoit la notification SysEvent_Status_Final , elle doit se préparer à recevoir un signal SIGTERM du système d’exploitation Azure Sphere. Lorsque le signal SIGTERM est reçu, l’application doit effectuer le nettoyage final et quitter. L’application ne doit pas se quitter avant la réception du SIGTERM ; sinon, il peut être redémarré avant l’envoi du SIGTERM. Pour une mise à jour du système d’exploitation, l’application doit effectuer tout nettoyage nécessaire avant le redémarrage de l’appareil. Pour une mise à jour d’application, l’application générale doit effectuer tout ce qui est nécessaire avant son redémarrage ou celui d’une autre application sur l’appareil. La notification de l’application ne spécifie actuellement pas quelle application est à mettre à jour.

Lorsque la notification n’est plus nécessaire, l’application doit appeler SysEvent_UnregisterForEventNotifications, puis EventLoop_Close pour libérer la mémoire allouée à l’objet de la boucle d’événements. Notez qu’après la désinscription de toutes les notifications d’événements, l’application peut utiliser un nouvel objet EventLoop.