Odložení aktualizací zařízení

Aplikace vysoké úrovně může dočasně odložit aktualizace operačního systému Azure Sphere a na image aplikací, aby zabránila přerušení důležitého zpracování. Například zařízení Azure Sphere v kuchyňském zařízení může během používání aktualizace odložit. Aby aplikace měla možnost odložit aktualizace, zaregistruje si oznámení o aktualizacích. Jakmile operační systém aktualizaci stáhne, upozorní aplikaci, která může získat podrobnosti o aktualizaci a požádat o odložení.

Ukázka odložené aktualizace ukazuje, jak použít smyčku událostí a systémové události k odložení aktualizací.

Aplikace podporující v reálném čase (RTApps) nemůžou přijímat oznámení o aktualizacích nebo odložení požadavků. Aplikace vysoké úrovně zodpovídá za správu odložení aktualizací jménem RTApps na zařízení.

Požadavky na odložení

Aplikace, které odloží aktualizace, musí obsahovat příslušné soubory hlaviček a přidat do manifestu aplikace nastavení odložení.

Soubory hlaviček

Do projektu zahrňte hlavičky eventloop a sysevent:

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

Nastavení manifestu aplikace

Aby aplikace dostávala oznámení o událostech aktualizací softwaru a měla možnost tyto aktualizace odložit, obsahuje do souboru manifestu aplikace dvě možnosti:

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Pokud chcete dostávat oznámení o událostech aktualizací systému, nastavte pole trueSystemEventNotifications v souboru app_manifest.json na hodnotu . Aplikace musí také zaregistrovat oznámení událostí, jak je popsáno v tématu Mechanismus oznámení. Pokud chcete aplikaci povolit odložení a obnovení aktualizací, nastavte SoftwareUpdateDeferral na hodnotu true .

Následující příklad ukazuje nastavení app_manifest.json vyžadovaná k povolení oznámení i odložení:

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

Mechanismus oznámení

Azure Sphere podporuje odložení aktualizací prostřednictvím oznámení událostí a mechanismu smyčky událostí. Aplikace vytvoří objekt EventLoop, což je objekt s jedním vláknem, jehož prostřednictvím je aplikace upozorněna na čekající události.

Aby aplikace dostávala oznámení, volá SysEvent_RegisterForEventNotifications a předává tyto parametry:

  • Ukazatel na smyčku událostí
  • Určuje eventBitmask události, pro které aplikace požaduje oznámení.
  • Ukazatel na funkci zpětného volání definovanou aplikací
  • Volitelný kontextový ukazatel předaný zpětnému volání

S SysEvent_RegisterForEventNotifications na vlákno lze použít pouze jeden EventLoop objekt. Druhé volání SysEvent_RegisterForEventNotifications s jiným EventLoop objektem selže.

Po registraci aplikace volá EventLoop_Run, která vyvolá funkci zpětného volání, pokud událost změnila stav. Funkce zpětného volání obdrží hodnotu SysEvent_Events , která identifikuje typ události. Zpětné volání pak SysEvent_Info_GetUpdateData zjistit, jestli se jedná o událost aktualizace operačního systému nebo aplikace a jak dlouho je možné aktualizaci odložit. Aplikace pak může určit, jak má oznámení události zpracovat.

Azure Sphere může posílat několik oznámení o stavu pro každou událost aktualizace:

Stav Popis
SysEvent_Status_Pending 10sekundové upozornění, že dojde k události aktualizace, s možností odložení.
SysEvent_Status_Final 10sekundové upozornění, že dojde k události aktualizace, bez možnosti odkladu.
SysEvent_Status_Deferred Dříve čekající událost byla odložena a nastane později.
SysEvent_Status_Complete Proces aktualizace softwaru je dokončen. Toto oznámení o události se odesílá pouze pro aktualizace aplikací.

Aplikace může požádat o odložení až poté, co obdrží oznámení o SysEvent_Status_Pending . Aby k aktualizaci mohlo dojít okamžitě, aplikace může oznámení ignorovat.

Pokud chcete aktualizaci odložit, aplikace zavolá SysEvent_DeferEvent a předá počet minut na odložení aktualizace. V případě aktualizace operačního systému je maximální odložení 1440 minut (24 hodin). U aktualizace aplikace je maximální doba odkladu 10 020 minut (167 hodin).

Aplikace může předčasně ukončit odložení aktualizací voláním SysEvent_ResumeEvent. V případě aktualizace aplikace nebo operačního systému úspěšné volání SysEvent_ResumeEvent restartuje proces oznámení a odešle tak nové oznámení SysEvent_Status_Pending . Aplikace by neměla volat SysEvent_DeferEvent znovu, dokud takové oznámení neobdrží.

Když aplikace obdrží oznámení SysEvent_Status_Final , měla by se připravit na příjem signálu SIGTERM z operačního systému Azure Sphere. Po přijetí signálu SIGTERM by aplikace měla provést konečné vyčištění a ukončení. Aplikace by neměla být ukončena před obdržením SIGTERM; v opačném případě může být restartován před odesláním SIGTERM. V případě aktualizace operačního systému by aplikace měla před restartováním zařízení provést jakékoli vyčištění. V případě aktualizace aplikace by měla aplikace vysoké úrovně udělat vše, co je potřeba před restartováním aplikace nebo jakékoli jiné aplikace v zařízení. Oznámení aplikace v současné době nespecifikuje, která aplikace se aktualizuje.

Pokud už se oznámení nevyžaduje, měla by aplikace volat SysEvent_UnregisterForEventNotifications a pak EventLoop_Close uvolnit paměť přidělenou objektu smyčky událostí. Všimněte si, že po zrušení registrace všech oznámení událostí může aplikace použít nový EventLoop objekt.