Microsoft에서 제공하는 UEFI 배터리 충전 애플리케이션의 아키텍처
이 항목에서는 Windows 10 Mobile 실행하는 디바이스에 대해 Microsoft에서 제공하는 UEFI 배터리 충전 애플리케이션의 디자인에 대한 정보를 제공합니다. OEM은 Microsoft의 배터리 충전 애플리케이션을 사용하거나 자체 충전 애플리케이션을 구현할 수 있습니다. 자체 UEFI 배터리 충전 애플리케이션을 구현하는 OEM은 이 항목의 정보를 디자인 지침으로 사용할 수 있습니다.
UEFI 배터리 충전 애플리케이션은 부팅 프로세스 중에 실행되는 최초의 Microsoft 소유 애플리케이션 중 하나입니다. UEFI 배터리 충전 애플리케이션에는 다음과 같은 주요 책임이 있습니다.
디바이스에 부팅할 수 있는 충분한 전원이 있는지 확인합니다.
OEM에서 사용하도록 설정된 경우 전원 끄기 충전 지원을 제공합니다. 전원 끄기 충전에 대한 자세한 내용은 부팅 환경에서 배터리 충전을 참조하세요.
UEFI 배터리 충전 애플리케이션은 주요 UEFI 프로토콜을 사용하며 관련 드라이버에서 반환하는 다양한 상태에 반응합니다.
이 항목에서 UEFI 배터리 충전 애플리케이션 이라는 용어는 mobilestartup.efi에서 로드한 UEFI 배터리 충전 라이브러리를 나타냅니다. mobilestartup.efi에 대한 자세한 내용은 부팅 및 UEFI를 참조하세요.
UEFI 배터리 충전 애플리케이션에서 사용하는 UEFI 프로토콜
UEFI 배터리 충전 애플리케이션(Microsoft 소유)은 다음 섹션에서 설명하는 프로토콜(OEM에서 구현)을 사용합니다.
UEFI 배터리 충전 프로토콜(EFI_BATTERY_CHARGING_PROTOCOL)
다음 단계에서는 UEFI 배터리 충전 애플리케이션이 UEFI 배터리 충전 프로토콜을 사용하는 방법의 주요 측면을 설명합니다.
UEFI 배터리 충전 애플리케이션은 EFI_BATTERY_CHARGING_PROTOCOL 사용하여 배터리 하드웨어의 실시간 상태를 폴링합니다 . GetBatteryInformation ( EFI_BATTERY_CHARGING_PROTOCOL 버전 0x00010002 지원하는 디바이스에서) 또는 EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus (EFI_BATTERY_CHARGING_PROTOCOL 버전 0x00010001 지원하는 디바이스). 이러한 함수는 가능한 한 정확한 SOC(충전 상태) 값을 반환하는 것이 중요합니다. SOC는 배터리의 충전량(용량, 전압 및 온도 포함)을 0에서 100까지의 값으로 매핑하는 OEM 정의 매핑입니다.
OEM은 주 OS로 부팅 임계값 (0에서 100까지의 값)을 정의합니다. 이 값은 디바이스 모델에 따라 다를 수 있습니다. 주 OS로 부팅 임계값 및 기타 임계값에 대한 자세한 내용은 부팅 환경에서 배터리 충전을 참조하세요.
배터리 충전 애플리케이션은 드라이버의 SOC를 사용하여 부팅-기본 OS 임계값 과 비교하여 UEFI에서 충전하거나 부팅을 계속하기 위해 부팅 프로세스를 차단해야 하는지 여부를 확인합니다. 청구 상태에 대한 다른 정보는 수신되지 않습니다.
UEFI 배터리 충전 애플리케이션은 EFI_BATTERY_CHARGING_PROTOCOL 호출합니다. ChargeBattery는 디바이스를 충전하고 해당 EFI_BATTERY_CHARGING_STATUS 있는 CompletionEvent가 반환될 때까지 기다립니다.
이 프로토콜에 대한 자세한 내용은 UEFI 배터리 충전 프로토콜을 참조하세요.
UEFI 디스플레이 전원 상태 프로토콜(EFI_DISPLAY_POWER_PROTOCOL)
UEFI 배터리 충전 프로세스 중에 UEFI 배터리 충전 애플리케이션은 번갈아 저전력 UI를 표시합니다. 전원 단추를 누르지 않고 10초 후에 애플리케이션은 EFI_DISPLAY_POWER_PROTOCOL 호출합니다 . SetDisplayPowerState 를 사용하여 디스플레이 및 백라이트를 끕니다. 이렇게 하면 디바이스가 UEFI 배터리 충전 중에 전력 소비를 줄여 디바이스 충전에 도움이 되며 주 OS로 더 빠르게 진행할 수 있습니다. 디스플레이가 꺼져 있는 동안 사용자가 전원 단추를 누르면 애플리케이션에서 EFI_DISPLAY_POWER_PROTOCOL 호출합니다. 디스플레이를 다시 켜려면 SetDisplayPowerState를 다시 설정합니다. 자세한 내용은 이 항목의 뒷부분에 있는 사용자 환경을 참조하세요.
이 프로토콜에 대한 자세한 내용은 UEFI 디스플레이 전원 상태 프로토콜을 참조하세요.
UEFI USB 함수 프로토콜(EFI_USBFN_IO_PROTOCOL)
UEFI 배터리 충전 애플리케이션은 EFI_USBFN_IO_PROTOCOL 단독으로 사용합니다 . DetectPort - 연결된 포트 유형을 확인합니다. 포트 유형에 따라 애플리케이션은 EFI_BATTERY_CHARGING_PROTOCOL 호출합니다 . 1500 mA 또는 500 mA를 가진 ChargeBattery.
이 프로토콜에 대한 자세한 내용은 UEFI USB 함수 프로토콜을 참조하세요.
애플리케이션 논리
다음 다이어그램에서는 UEFI 배터리 충전 애플리케이션의 논리적 절차를 설명합니다.
다음 참고는 논리의 일부 주요 섹션에서 확장됩니다.
EFI_BATTERY_CHARGING_PROTOCOL 호출하기 전에 . ChargeBattery, 애플리케이션은 EFI_USBFN_IO_PROTOCOL 호출합니다. DetectPort 를 사용하여 USB 충전기가 제공할 수 있는 최대 전류를 확인합니다.
포트가 있는 경우 애플리케이션은 전용 벽 충전기에 1500mA를 사용하고 다른 포트에는 500mA를 사용합니다.
포트가 없는 경우 애플리케이션은 500mA를 사용합니다. 무선 충전기는 이 값을 무시해야 합니다.
충전기가 없는 경우 애플리케이션은 500mA를 사용합니다. 그러나 애플리케이션은 EFI_BATTERY_CHARGING_PROTOCOL 예상합니다. EfiBatteryChargingSourceNotDetected 상태의 EFI_BATTERY_CHARGING_COMPLETION_TOKEN 반환하는 ChargeBattery입니다.
모든 경우에 OEM은 디바이스와 충전기가 안전한 운영 지역 내에 있는지 확인해야 합니다.
디바이스에 배터리가 없지만 연결된 전원이 있는 경우 애플리케이션이 EFI_BATTERY_CHARGING_PROTOCOL 호출합니다 . 배터리 를 충전하려면 UEFI 배터리 충전 드라이버가 EfiBatteryChargingStatusBatteryNotDetected를 반환해야 합니다. 애플리케이션은 오류 UI를 표시하고 디바이스를 종료하여 이 오류를 처리합니다.
EFI_BATTERY_CHARGING_STATUS 값은 EfiBatteryChargingStatusSuccess를 제외하고 임계값 충전 및 전원 끄기 충전 모드 모두에서 동일한 방식으로 해석됩니다. 이러한 충전 모드에 대한 자세한 내용은 부팅 환경에서 배터리 충전을 참조하세요.
디바이스가 충전 모드에 있는 경우 전원 연결을 끊으면 EfiBatteryChargingSourceNotDetected를 사용하여 애플리케이션에 신호를 전송하는 펌웨어가 발생하여 애플리케이션이 디바이스를 종료합니다.
펌웨어가 EfiBatteryChargingStatusOverheat 또는 EfiBatteryChargingStatusTimeout 상태로 애플리케이션에 신호를 보낼 경우 디바이스는 5분 동안 충전을 일시 중지하지만 애플리케이션은 여전히 EFI_BATTERY_CHARGING_PROTOCOL 호출합니다. GetBatteryInformation 또는 EFI_BATTERY_CHARGING_PROTOCOL. 약 1초 간격으로 GetBatteryStatus ). 5분 후 디바이스는 EFI_BATTERY_CHARGING_PROTOCOL 호출하여 충전을 다시 시작합니다 . ChargeBattery. 이 5분 동안 펌웨어는 적절한 EFI_BATTERY_CHARGING_STATUS 값으로 애플리케이션에서 제공하는 이벤트에 신호를 보낼 것으로 예상됩니다(예: 원본 연결 끊기는 EfiBatteryChargingSourceNotDetected 신호를 보내야 함).
두 충전 모드 모두에서 관련 애니메이션 UI가 이전 다이어그램 에서 앱에 유지 라는 레이블이 지정된 상자 중에 표시됩니다.
전원 끄기 충전 모드에서 펌웨어가 이벤트에 신호를 전송하고 EfiBatteryChargingStatusSuccess 상태를 제공하는 경우 사용자가 전원 단추를 3초 동안 보유할 때까지 UEFI 배터리 충전 애플리케이션이 주 OS로 부팅되지 않습니다. 그러나 애플리케이션이 현재 USB 케이블의 연결이 끊어진 것을 감지하면 디바이스 전원이 꺼져 있습니다. UEFI 배터리 충전 애플리케이션은 드라이버가 전원 끄기 충전 모드에서 배터리를 완전히 유지 관리할 것으로 예상합니다.
전원 끄기 충전 모드에서 펌웨어가 오류 또는 성공 이벤트를 알리지 않는 한 UEFI 배터리 충전 애플리케이션은 디바이스 전원을 끄지 않습니다.
오류 처리
매번 EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery가 호출되고 EFI_BATTERY_CHARGING_COMPLETION_TOKEN 지정됩니다. 드라이버에 오류가 발생하면 토큰의 이벤트가 EFI_BATTERY_CHARGING_STATUS 신호를 보냅니다. 다음 표에서는 UEFI 배터리 충전 애플리케이션이 다양한 상황에서 다양한 상태 값에 반응하는 방법을 보여 줍니다.
상태 | 임계값 충전 모드 | 전원 끄기 충전 모드(충전 상태가 임계값에 도달하기 전과 후) |
---|---|---|
EfiBatteryChargingStatusNoneNone | 예상/유효하지 않음 | 예상/유효하지 않음 |
EfiBatteryChargingStatusSuccess | OS로 부팅 | 충전 상태가 임계값에 도달하기 전에: 전원 끄기 충전 모드에서 계속합니다. 충전 상태가 임계값에 도달한 후: USB 연결이 끊어지게 될 때까지 전원 끄기 충전 모드를 유지합니다. |
EfiBatteryChargingStatusOverheat | 5분 동안 충전을 일시 중지한 다음 충전을 다시 시작합니다. | 5분 동안 충전을 일시 중지한 다음 충전을 다시 시작합니다. |
EfiBatteryChargingStatusVoltageOutOfRange | OS로 부팅 | OS로 부팅 |
EfiBatteryChargingStatusCurrentOutOfRange | OS로 부팅 | OS로 부팅 |
EfiBatteryChargingStatusTimeout | 5분 동안 충전을 일시 중지한 다음 충전을 다시 시작합니다. | 5분 동안 충전을 일시 중지한 다음 충전을 다시 시작합니다. |
EfiBatteryChargingStatusAborted | 오류 UI를 10초 동안 표시한 다음 종료 | 오류 UI를 10초 동안 표시한 다음 종료 |
EfiBatteryChargingStatusDeviceError | 오류 UI를 10초 동안 표시한 다음 종료 | 오류 UI를 10초 동안 표시한 다음 종료 |
EfiBatteryChargingStatusExtremeCold | 오류 UI를 10초 동안 표시한 다음 종료 | 오류 UI를 10초 동안 표시한 다음 종료 |
EfiBatteryChargingStatusBatteryChargingNotSupported | 오류 UI를 10초 동안 표시한 다음 종료 | 10초 동안 오류 UI를 표시한 다음 종료 |
EfiBatteryChargingStatusBatteryNotDetected | 10초 동안 오류 UI를 표시한 다음 종료 | 10초 동안 오류 UI를 표시한 다음 종료 |
EfiBatteryChargingSourceNotDetected | 시스템 종료 | 시스템 종료 |
EfiBatteryChargingSourceVoltageInvalid | 10초 동안 오류 UI를 표시한 다음 종료 | 10초 동안 오류 UI를 표시한 다음 종료 |
EfiBatteryChargingSourceCurrentInvalid | 10초 동안 오류 UI를 표시한 다음 종료 | 10초 동안 오류 UI를 표시한 다음 종료 |
EfiBatteryChargingErrorRequestShutdown | 시스템 종료 | 시스템 종료 |
EfiBatteryChargingErrorRequestReboot | Reboot | Reboot |
다음 표에서는 UEFI 배터리 충전 애플리케이션이 EFI_BATTERY_CHARGING_PROTOCOL 받은 상태 값에 어떻게 반응하는지 보여 줍니다 . GetBatteryInformation 또는 EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus.
상태 | 임계값 충전 모드 | 전원 끄기 충전 모드(충전 상태가 임계값에 도달하기 전과 후) |
---|---|---|
EFI_SUCCESS. 오류가 검색되지 않은 경우 이 값이 반환됩니다. |
해당 없음 | 해당 없음 |
EFI_INVALID_PARAMETER. 입력 매개 변수가 올바르지 않은 경우 이 값이 반환됩니다. 이론적으로 프로덕션 환경에서는 불가능합니다. |
10초 동안 오류 UI를 표시한 다음 종료 | 10초 동안 오류 UI를 표시한 다음 종료 |
EFI_DEVICE_ERROR 또는 EFI_NOT_READY. 이러한 오류 조건은 동일한 방식으로 처리됩니다. 이러한 값은 EFI_BATTERY_CHARGING_PROTOCOL 반환해야 합니다 . GetBatteryInformation 또는 EFI_BATTERY_CHARGING_PROTOCOL. 일부 디바이스 오류로 인해 디바이스가 기본 OS로 부팅되지 않을 수 있는 경우 GetBatteryStatus. 특히 다음 사항에 주의하십시오. EfiBatteryChargingStatusAborted EfiBatteryChargingStatusDeviceError EfiBatteryChargingStatusExtremeCold EfiBatteryChargingStatusBatteryChargingNotSupported EfiBatteryChargingStatusBatteryNotDetected EfiBatteryChargingSourceVoltageInvalid EfiBatteryChargingSourceCurrentInvalid EfiBatteryChargingErrorRequestShutdown EfiBatteryChargingErrorRequestReboot. EFI_DEVICE_ERROR 또는 EFI_NOT_READY 후 위에 나열된 오류 중 하나의 완료 토큰을 throw하면 디바이스가 결국 종료됩니다. |
EFI_BATTERY_CHARGING_PROTOCOL 다시 시작하고 호출합니다 . ChargeBattery | EFI_BATTERY_CHARGING_PROTOCOL 다시 시작하고 호출합니다 . ChargeBattery |
사용자 환경
다음 다이어그램에서는 배터리에 충분한 충전이 없거나 디바이스가 전원 끄기 충전 모드에 있는 경우 UEFI 배터리 충전 애플리케이션이 화면에 UI를 그리는 방법을 보여줍니다.
다음 단계에서는 애플리케이션이 화면에 UI를 그리는 방법을 설명합니다.
애플리케이션은 프레임의 모든 픽셀에 배경 채우기 색을 작성하여 화면을 지웁니다.
애플리케이션은 비트맵 버퍼에서 디스플레이로 직접 픽셀을 복사하여 번갈아 가며 배터리 부족 UI 비트맵을 그립니다. 전원 단추를 누르지 않고 10초가 지나면 애플리케이션은 EFI_DISPLAY_POWER_PROTOCOL 호출합니다 . SetDisplayPowerState 를 사용하여 디스플레이 및 백라이트를 끕니다. 사용자가 전원 단추를 누르면 EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState는 디스플레이를 다시 켜기 위해 호출됩니다.
애플리케이션이 드라이버에서 오류를 수신하면 애플리케이션은 프레임 버퍼의 모든 픽셀에 배경 채우기 색을 기록하여 화면을 지운 다음, 애플리케이션은 적절한 비트맵 버퍼의 픽셀을 디스플레이에 직접 복사하여 배터리 오류 화면을 그립니다.