디바이스 업데이트 연기

상위 수준 애플리케이션은 업데이트가 중요한 처리를 중단하지 않도록 Azure Sphere OS 및 애플리케이션 이미지에 대한 업데이트를 일시적으로 연기할 수 있습니다. 예를 들어 주방 어플라이언스 Azure Sphere 디바이스는 사용 중에 업데이트를 연기할 수 있습니다. 업데이트를 연기할 기회를 갖기 위해 앱은 업데이트 알림을 등록합니다. OS가 업데이트를 다운로드한 후 업데이트 및 요청 지연에 대한 세부 정보를 가져올 수 있는 애플리케이션에 알 수 있습니다.

지연 업데이트 샘플은 이벤트 루프 및 시스템 이벤트를 사용하여 업데이트를 지연하는 방법을 보여 줍니다.

RTApps(실시간 지원 애플리케이션)는 업데이트 알림을 받거나 지연을 요청할 수 없습니다. 상위 수준 앱은 디바이스에서 RTApps를 대신하여 업데이트 지연을 관리합니다.

지연 요구 사항

업데이트를 지연하는 애플리케이션은 적절한 헤더 파일을 포함하고 애플리케이션 매니페스트에 지연 설정을 추가해야 합니다.

헤더 파일

프로젝트에 eventloop 및 sysevent 헤더를 포함합니다.

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

애플리케이션 매니페스트 설정

소프트웨어 업데이트 이벤트에 대한 알림을 받고 이러한 업데이트를 연기할 기회를 갖기 위해 애플리케이션 에는 애플리케이션 매니페스트 파일에 다음 두 가지 기능이 포함됩니다.

  • SystemEventNotifications
  • SoftwareUpdateDeferral

SystemEventNotifications 필드를 true app_manifest.json 파일에서 로 설정하여 시스템 업데이트 이벤트에 대한 알림을 받습니다. 또한 애플리케이션은 알림 메커니즘에 설명된 대로 이벤트 알림에 등록해야 합니다. 앱이 업데이트를 연기하고 다시 시작할 수 있도록 SoftwareUpdateDeferraltrue 을 로 설정합니다.

다음은 알림 및 지연을 모두 사용하도록 설정하는 데 필요한 app_manifest.json 설정을 보여 줍니다.

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

알림 메커니즘

Azure Sphere는 이벤트 알림 및 이벤트 루프 메커니즘을 통해 지연 업데이트를 지원합니다. 애플리케이션은 애플리케이션에 EventLoop보류 중인 이벤트에 대한 알림을 수신하는 단일 스레드 개체인 를 만듭니다.

알림을 받으려면 앱이 SysEvent_RegisterForEventNotifications 호출하여 다음 매개 변수를 전달합니다.

  • 이벤트 루프에 대한 포인터
  • eventBitmask 앱이 알림을 요청하는 이벤트를 지정하는 입니다.
  • 앱 정의 콜백 함수에 대한 포인터
  • 콜백에 전달되는 선택적 컨텍스트 포인터

스레드당 SysEvent_RegisterForEventNotifications 하나의 EventLoop 개체만 사용할 수 있습니다. 다른 EventLoop 개체를 사용하여 SysEvent_RegisterForEventNotifications 두 번째 호출이 실패합니다.

등록 후 애플리케이션은 EventLoop_Run 호출하며, 이벤트가 상태 변경된 경우 콜백 함수를 호출합니다. 콜백 함수는 이벤트 유형을 식별하는 SysEvent_Events 값을 받습니다. 차례로 콜백은 SysEvent_Info_GetUpdateData 호출하여 이벤트가 OS 또는 애플리케이션 업데이트인지 여부와 업데이트를 지연할 수 있는 기간을 확인합니다. 그러면 앱에서 이벤트 알림을 처리하는 방법을 결정할 수 있습니다.

Azure Sphere는 각 업데이트 이벤트에 대해 여러 상태 알림을 보낼 수 있습니다.

상태 설명
SysEvent_Status_Pending 지연할 수 있는 기회와 함께 업데이트 이벤트가 발생할 것이라는 10초 경고입니다.
SysEvent_Status_Final 지연 기회 없이 업데이트 이벤트가 발생한다는 10초 경고입니다.
SysEvent_Status_Deferred 이전에 보류 중인 이벤트가 지연되었으며 나중에 발생합니다.
SysEvent_Status_Complete 소프트웨어 업데이트 프로세스가 완료되었습니다. 이 이벤트 알림은 애플리케이션 업데이트에 대해서만 전송됩니다.

앱은 SysEvent_Status_Pending 알림을 받은 후에만 지연을 요청할 수 있습니다. 업데이트가 즉시 수행되도록 하려면 애플리케이션에서 알림을 무시할 수 있습니다.

업데이트를 연기하기 위해 애플리케이션은 SysEvent_DeferEvent 호출하여 업데이트를 연기할 시간(분)을 전달합니다. OS 업데이트의 경우 최대 지연 시간은 1440분(24시간)입니다. 애플리케이션 업데이트의 경우 최대 지연 기간은 10,020분(167시간)입니다.

애플리케이션은 SysEvent_ResumeEvent 호출하여 업데이트 지연을 조기에 종료할 수 있습니다. 애플리케이션 또는 OS 업데이트의 경우 SysEvent_ResumeEvent 성공적으로 호출하면 알림 프로세스가 다시 시작되므로 새 SysEvent_Status_Pending 알림이 전송됩니다. 앱은 이러한 알림을 받을 때까지 SysEvent_DeferEvent 다시 호출하면 안 됩니다.

애플리케이션이 SysEvent_Status_Final 알림을 받으면 Azure Sphere OS에서 SIGTERM 신호를 받을 준비를 해야 합니다. SIGTERM 신호가 수신되면 앱은 최종 정리를 수행하고 종료해야 합니다. SIGTERM을 받기 전에 애플리케이션을 종료하면 안 됩니다. 그렇지 않으면 SIGTERM을 보내기 전에 다시 시작할 수 있습니다. OS 업데이트의 경우 애플리케이션은 디바이스를 다시 부팅하기 전에 필요한 모든 정리를 수행해야 합니다. 애플리케이션 업데이트의 경우 상위 수준 애플리케이션은 디바이스 또는 디바이스의 다른 애플리케이션을 다시 시작하기 전에 필요한 모든 작업을 수행해야 합니다. 애플리케이션 알림은 현재 업데이트할 애플리케이션을 지정하지 않습니다.

알림이 더 이상 필요하지 않은 경우 앱은 SysEvent_UnregisterForEventNotifications 호출한 다음 EventLoop_Close 이벤트 루프 개체에 할당된 메모리를 해제해야 합니다. 모든 이벤트 알림이 등록 취소된 후 앱은 새 EventLoop 개체를 사용할 수 있습니다.