다음을 통해 공유


전원 및 충전 하위 시스템 구현

Windows 플랫폼의 배터리 전원 및 충전 하위 시스템은 ACPI 제어 메서드 배터리 인터페이스를 구현해야 합니다. Windows는 이 인터페이스를 사용하여 배터리 하위 시스템에서 상태 정보를 얻고 배터리 이벤트 알림을 받습니다.

Windows 배터리 및 전원 하위 시스템 드라이버 모델

Windows는 강력한 배터리 및 전원 하위 시스템 디바이스 드라이버 모델을 제공합니다. 전원 관리 정보는 배터리 디바이스 드라이버를 통해 Windows 전원 관리자로 전달됩니다. 그런 다음 이 정보가 집계되고 배터리 디바이스 IRP와 전원 관리 소프트웨어 API 세트를 통해 Windows 사용자 인터페이스에 노출됩니다.

Windows용 배터리 드라이버 모델은 포트/미니포트 모델입니다. 즉, 배터리 모델과 인터페이스는 다음 블록 다이어그램과 같이 미니포트 드라이버를 통해 새로운 배터리 유형이 노출될 수 있도록 정의됩니다. 그러나 실제로는 ACPI 제어 방식 배터리 인터페이스만 사용됩니다. USB 연결 UPS(무정전 전원 공급) 디바이스용 HID(휴먼 인터페이스 디바이스) 배터리 미니포트 드라이버가 지원되지만 이 드라이버는 시스템 배터리에 사용되지 않습니다.

모든 Windows 플랫폼은 ACPI 제어 메서드 배터리 인터페이스를 통해 배터리 및 충전 하위 시스템을 노출해야 합니다. 배터리 미니포트 인터페이스는 플랫폼별 배터리 충전 하위 시스템에 사용하면 안 됩니다. ACPI 5.0 사양은 Windows가 배터리 정보와 현재 상태를 얻을 수 있도록 하는 제어 메서드를 정의합니다. 또한 ACPI 인터페이스는 하드웨어 플랫폼이 AC에서 배터리 전원으로의 전환과 같은 배터리 및 전원 변경 내용을 Windows에 알릴 수 있도록 하는 이벤트를 제공합니다.

배터리 상태 가져오기

Windows 전원 관리자는 배터리의 남은 충전 용량 및 현재 소모율을 포함하여 상태 정보를 주기적으로 요청합니다. 이 요청은 전원 관리자 자체, 상위 수준 사용자 인터페이스 구성 요소 또는 애플리케이션에서 시작됩니다. 전원 관리자는 요청을 배터리 디바이스에 대한 IRP(I/O 요청 패킷)으로 변환한 다음 Windows 제어 방식 배터리 드라이버인 Cmbatt.sys에 의해 적절한 제어 메서드로 전환됩니다. 메서드가 실행되고 결과가 드라이버 스택으로 반환됩니다.

상태 정보의 경우 _BST(배터리 상태) 방식이 적절한 제어 방식입니다. _BST 방법을 사용하려면 ACPI 펌웨어가 전원 하위 시스템에서 현재 정보를 가져와야 합니다. _BST 메서드의 결과는 제어 메서드 배터리 드라이버에 반환되는 필수 정보가 포함된 버퍼입니다. 제어 메서드 배터리 드라이버는 버퍼 내용을 배터리 드라이버와 Windows 전원 관리자가 요구하는 형식으로 변환합니다.

상태 변경 알림

전원 및 배터리 하위 시스템은 충전 수준의 변경, AC에서 배터리 전원으로의 전환 등을 포함하여 상태 변경에 대해 운영 체제에 여러 알림을 생성합니다. 이렇게 하려면 높은 폴링 빈도가 필요하기 때문에 이러한 상태 변경을 지속적으로 폴링하는 것은 바람직하지 않습니다. 따라서 하드웨어 플랫폼은 이벤트 기반 모델을 구현하여 전원 및 배터리 하위 시스템의 변경 내용을 Windows에 알려야 합니다.

배터리 상태(남은 용량 또는 충전 상태 포함)가 변경되면 ACPI 펌웨어는 컨트롤 메서드 배터리 디바이스에서 Notify(0x80) 명령을 발행해야 합니다. 이에 대한 응답으로 Windows의 제어 메서드 배터리 드라이버는 _BST 메서드를 평가하고 업데이트된 정보를 전원 관리자에 반환합니다.

배터리 정적 데이터가 변경되면(마지막 완전 충전 용량, 디자인 용량 및 주기 수 포함) ACPI 펌웨어는 제어 메서드 배터리 디바이스에서 Notify(0x81) 명령을 발행해야 합니다. 이에 대한 응답으로 Windows의 제어 메서드 배터리 드라이버는 _BIX 메서드를 평가하고 업데이트된 정보를 전원 관리자에 반환합니다.

ACPI 알림 이벤트는 포함된 컨트롤러가 포함된 플랫폼의 경우 SCI(시스템 제어 인터럽트)를 통해, 또는 배터리 하위 시스템 하드웨어가 코어 실리콘에 직접 연결된 플랫폼의 경우 GPIO(범용 I/O)를 통해 신호를 보냅니다.