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 true
SystemEventNotifications 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.