Udostępnij za pośrednictwem


Odraczania aktualizacji urządzenia

Aplikacja wysokiego poziomu może tymczasowo odroczyć aktualizacje systemu operacyjnego Azure Sphere i obrazów aplikacji, aby zapobiec przerwaniu krytycznego przetwarzania aktualizacji. Na przykład urządzenie Azure Sphere w urządzeniu kuchennym może odroczyć aktualizacje podczas użytkowania. Aby mieć możliwość odroczenia aktualizacji, aplikacja rejestruje powiadomienia o aktualizacjach. Po pobraniu aktualizacji przez system operacyjny powiadamia aplikację, która może uzyskać szczegółowe informacje o aktualizacji i zażądać odroczenia.

W przykładzie odroczonej aktualizacji pokazano, jak używać pętli zdarzeń i zdarzeń systemowych w celu odroczenia aktualizacji.

Aplikacje obsługujące czas rzeczywisty (RTApps) nie mogą otrzymywać powiadomień o aktualizacjach ani żądać odroczeń. Aplikacja wysokiego poziomu jest odpowiedzialna za zarządzanie odroczeniem aktualizacji w imieniu aplikacji RTApps na urządzeniu.

Wymagania dotyczące odroczenia

Aplikacje odraczające aktualizacje muszą zawierać odpowiednie pliki nagłówków i dodać ustawienia odroczenia do manifestu aplikacji.

Pliki nagłówków

Uwzględnij nagłówki zdarzenia i zdarzenia sysevent w projekcie:

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

Ustawienia manifestu aplikacji

Aby otrzymywać powiadomienia o zdarzeniach aktualizacji oprogramowania i mieć możliwość odroczenia takich aktualizacji, aplikacja zawiera dwie możliwości w pliku manifestu aplikacji :

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Ustaw pole trueSystemEventNotifications na wartość w pliku app_manifest.json, aby otrzymywać powiadomienia o zdarzeniach aktualizacji systemu. Aplikacja musi również zarejestrować się w celu otrzymywania powiadomień o zdarzeniach, zgodnie z opisem w artykule Mechanizm powiadomień. Ustaw softwareUpdateDeferral , aby true umożliwić aplikacji odraczanie i wznawianie aktualizacji.

Poniżej przedstawiono ustawienia app_manifest.json wymagane do włączenia zarówno powiadomienia, jak i odroczenia:

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

Mechanizm powiadomień

Usługa Azure Sphere obsługuje odroczenie aktualizacji za pośrednictwem mechanizmu powiadomień o zdarzeniach i pętli zdarzeń. Aplikacja tworzy EventLoopobiekt , który jest obiektem jednowątkowym, za pośrednictwem którego aplikacja jest powiadamiana o oczekujących zdarzeniach.

Aby otrzymywać powiadomienia, aplikacja dzwoni SysEvent_RegisterForEventNotifications, przekazując następujące parametry:

  • Wskaźnik do pętli zdarzenia
  • An eventBitmask określający zdarzenia, dla których aplikacja żąda powiadomienia
  • Wskaźnik do funkcji wywołania zwrotnego zdefiniowanej przez aplikację
  • Opcjonalny wskaźnik kontekstowy przekazywany do wywołania zwrotnego

Z SysEvent_RegisterForEventNotifications na wątek można używać tylko jednego EventLoop obiektu. Drugie wywołanie SysEvent_RegisterForEventNotifications z innym EventLoop obiektem zakończy się niepowodzeniem.

Po rejestracji aplikacja wywołuje EventLoop_Run, która wywołuje funkcję wywołania zwrotnego, jeśli zdarzenie zmieniło stan. Funkcja wywołania zwrotnego otrzymuje wartość SysEvent_Events , która określa typ zdarzenia. Z kolei wywołania zwrotne SysEvent_Info_GetUpdateData , aby dowiedzieć się, czy zdarzenie jest aktualizacją systemu operacyjnego lub aplikacji i jak długo aktualizacja może zostać odroczona. Aplikacja może następnie określić sposób obsługi powiadomienia o zdarzeniu.

W przypadku każdego zdarzenia aktualizacji usługa Azure Sphere może wysłać kilka powiadomień o stanie:

Stan Opis
SysEvent_Status_Pending 10-sekundowe ostrzeżenie o wystąpieniu zdarzenia aktualizacji z możliwością odroczenia.
SysEvent_Status_Final 10-sekundowe ostrzeżenie o wystąpieniu zdarzenia aktualizacji bez możliwości odroczenia.
SysEvent_Status_Deferred Wcześniej oczekujące zdarzenie zostało odroczone i nastąpi później.
SysEvent_Status_Complete Proces aktualizacji oprogramowania został ukończony. To powiadomienie o zdarzeniu jest wysyłane tylko w przypadku aktualizacji aplikacji.

Aplikacja może zażądać odroczenia dopiero po otrzymaniu powiadomienia o SysEvent_Status_Pending . Aby zezwolić na natychmiastową aktualizację, aplikacja może zignorować powiadomienie.

Aby odroczyć aktualizację, aplikacja wywoła SysEvent_DeferEvent, podając liczbę minut w celu odroczenia aktualizacji. W przypadku aktualizacji systemu operacyjnego maksymalne odroczenie wynosi 1440 minut (24 godziny). W przypadku aktualizacji aplikacji maksymalny okres odroczenia wynosi 10 020 minut (167 godzin).

Aplikacja może przedwcześnie zakończyć odroczenie aktualizacji, wywołując SysEvent_ResumeEvent. W przypadku aktualizacji aplikacji lub systemu operacyjnego pomyślne wywołanie SysEvent_ResumeEvent powoduje ponowne uruchomienie procesu powiadomień, a tym samym wysłanie nowego powiadomienia o SysEvent_Status_Pending . Aplikacja nie powinna ponownie dzwonić SysEvent_DeferEvent , dopóki nie otrzyma takiego powiadomienia.

Gdy aplikacja otrzyma powiadomienie o SysEvent_Status_Final , powinna przygotować się do odebrania sygnału SIGTERM z systemu operacyjnego Azure Sphere. Po odebraniu sygnału SIGTERM aplikacja powinna wykonać ostateczne oczyszczanie i zakończenie. Wniosek nie powinien się zamykać przed otrzymaniem SIGTERM; w przeciwnym razie może on zostać ponownie uruchomiony przed wysłaniem SIGTERM. W przypadku aktualizacji systemu operacyjnego przed ponownym uruchomieniem urządzenia aplikacja powinna wykonać wymagane oczyszczanie. W przypadku aktualizacji aplikacji aplikacja wysokiego poziomu powinna zrobić wszystko, co konieczne, zanim zostanie ponownie uruchomiona lub inna aplikacja na urządzeniu. Powiadomienie aplikacji nie określa obecnie, która aplikacja jest aktualizowana.

Gdy powiadomienie nie jest już wymagane, aplikacja powinna wywołać SysEvent_UnregisterForEventNotifications , a następnie EventLoop_Close zwolnić pamięć przydzieloną do obiektu pętli zdarzeń. Zwróć uwagę, że po wyrejestrowywanie wszystkich powiadomień o zdarzeniach aplikacja może używać nowego EventLoop obiektu.