Menangguhkan pembaruan perangkat

Aplikasi tingkat tinggi dapat menunda pembaruan untuk sementara waktu ke Azure Sphere OS dan ke gambar aplikasi untuk mencegah pembaruan mengganggu pemrosesan penting. Perangkat Azure Sphere di peralatan dapur, misalnya, dapat menangguhkan pembaruan selama penggunaan. Untuk mendapatkan kesempatan untuk menangguhkan pembaruan, aplikasi mendaftar untuk pemberitahuan pembaruan. Setelah OS mengunduh pembaruan, OS akan memberi tahu aplikasi, yang dapat mendapatkan detail tentang pembaruan dan permintaan penundaan.

Sampel Pembaruan Ditunda memperlihatkan cara menggunakan pengulangan kejadian dan kejadian sistem untuk menunda pembaruan.

Aplikasi berkemampuan real-time (RTApps) tidak dapat menerima pemberitahuan pembaruan atau meminta penolakan. Aplikasi tingkat tinggi bertanggung jawab untuk mengelola penangguhan pembaruan atas nama RTApps di perangkat.

Persyaratan tangguhan

Aplikasi yang menangguhkan pembaruan harus menyertakan file header yang sesuai dan menambahkan pengaturan penolakan ke manifes aplikasi.

File header

Sertakan header eventloop dan sysevent dalam proyek Anda:

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

Pengaturan manifes aplikasi

Untuk diberi tahu tentang kejadian pembaruan perangkat lunak dan memiliki kesempatan untuk menangguhkan pembaruan tersebut, aplikasi menyertakan dua kemampuan dalam file manifes aplikasi :

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Atur bidang SystemEventNotifications ke true dalam file app_manifest.json untuk menerima pemberitahuan kejadian pembaruan sistem. Aplikasi juga harus mendaftar untuk pemberitahuan kejadian, seperti yang dijelaskan dalam Mekanisme pemberitahuan. Atur SoftwareUpdateDeferral untuk true mengaktifkan aplikasi untuk menangguhkan dan melanjutkan pembaruan.

Berikut ini memperlihatkan pengaturan app_manifest.json yang diperlukan untuk mengaktifkan pemberitahuan dan penentangan:

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

Mekanisme pemberitahuan

Azure Sphere mendukung penahanan pembaruan melalui pemberitahuan kejadian dan mekanisme pengulangan kejadian. Aplikasi membuat EventLoop, yang merupakan objek beralur tunggal di mana aplikasi diberi tahu tentang kejadian tertunda.

Untuk menerima pemberitahuan, aplikasi memanggil SysEvent_RegisterForEventNotifications, melewati parameter ini:

  • Penunjuk ke pengulangan acara
  • An eventBitmask that specifies the events for which the app requests notification
  • Penunjuk ke fungsi callback yang ditentukan aplikasi
  • Penunjuk konteks opsional yang dialihkan ke callback

Hanya satu EventLoop objek yang dapat digunakan dengan SysEvent_RegisterForEventNotifications per utas. Panggilan kedua untuk SysEvent_RegisterForEventNotifications dengan objek lain EventLoop akan gagal.

Setelah pendaftaran, aplikasi memanggil EventLoop_Run, yang memanggil fungsi callback jika suatu kejadian telah berubah status. Fungsi callback menerima nilai SysEvent_Events , yang mengidentifikasi tipe kejadian. Pada gilirannya, panggilan kembali SysEvent_Info_GetUpdateData untuk mencari tahu apakah acara tersebut merupakan pembaruan OS atau aplikasi dan berapa lama pembaruan dapat ditunda. Aplikasi kemudian dapat menentukan cara menangani pemberitahuan acara.

Azure Sphere mungkin mengirim beberapa pemberitahuan status untuk setiap acara pembaruan:

Status Deskripsi
SysEvent_Status_Pending Peringatan 10 detik bahwa kejadian pembaruan akan terjadi, dengan kesempatan untuk menangguhkan.
SysEvent_Status_Final Peringatan 10 detik bahwa kejadian pembaruan akan terjadi, tanpa kesempatan untuk menunda.
SysEvent_Status_Deferred Acara yang sebelumnya tertunda telah ditunda dan akan terjadi nanti.
SysEvent_Status_Complete Proses pembaruan perangkat lunak selesai. Pemberitahuan kejadian ini dikirim hanya untuk pembaruan aplikasi.

Aplikasi dapat meminta penahanan hanya setelah menerima pemberitahuan SysEvent_Status_Pending . Untuk memungkinkan pembaruan segera terjadi, aplikasi dapat mengabaikan pemberitahuan.

Untuk menangguhkan pembaruan, aplikasi memanggil SysEvent_DeferEvent, melewati jumlah menit untuk menangguhkan pembaruan. Untuk pembaruan OS, penahanan maksimum adalah 1440 menit (24 jam). Untuk pembaruan aplikasi, periode tangguhan maksimum adalah 10.020 menit (167 jam).

Aplikasi dapat mengakhiri penahanan pembaruan sebelum waktunya dengan memanggil SysEvent_ResumeEvent. Untuk pembaruan aplikasi atau OS, panggilan yang berhasil untuk SysEvent_ResumeEvent memulai ulang proses pemberitahuan dan dengan demikian mengirimkan pemberitahuan SysEvent_Status_Pending baru. Aplikasi tidak boleh memanggil SysEvent_DeferEvent lagi hingga menerima pemberitahuan seperti itu.

Ketika aplikasi menerima pemberitahuan SysEvent_Status_Final , aplikasi harus bersiap untuk menerima sinyal SIGTERM dari Azure Sphere OS. Ketika sinyal SIGTERM diterima, aplikasi harus melakukan pembersihan dan keluar akhir. Aplikasi tidak boleh keluar sebelum SIGTERM diterima; jika tidak, SIGTERM dapat dimulai ulang sebelum SIGTERM dikirim. Untuk pembaruan OS, aplikasi harus melakukan pembersihan apa pun yang diperlukan sebelum boot ulang perangkat. Untuk pembaruan aplikasi, aplikasi tingkat tinggi harus melakukan apa pun yang diperlukan sebelum atau aplikasi lain di perangkat dimulai ulang. Pemberitahuan aplikasi saat ini tidak menentukan aplikasi mana yang sedang diperbarui.

Ketika pemberitahuan tidak lagi diperlukan, aplikasi harus memanggil SysEvent_UnregisterForEventNotifications lalu EventLoop_Close untuk melepaskan memori yang dialokasikan untuk objek pengulangan kejadian. Perhatikan bahwa setelah semua pemberitahuan acara tidak terdaftar, aplikasi dapat menggunakan objek baru EventLoop .