이 문서에서는 I2C 전송을 통해 HID를 지원하는 디바이스에 대한 플러그 앤 플레이 지원을 설명합니다.
드라이버 로드 중
Windows는 하드웨어 식별자와 INF 간의 호환 가능한 식별자 일치를 기반으로 HID I2C 클래스 드라이버를 로드합니다. ACPI(고급 구성 및 전원 인터페이스)는 식별자를 생성합니다. 하드웨어 식별자는 ACPI의 I2C 디바이스 노드에 대해 생성됩니다. 모든 HID I2C 호환 디바이스는 고유한 하드웨어 식별자 외에도 호환성 식별자를 노출해야 합니다.
ACPI 5.0 사양에는 HID 클래스 디바이스에 대한 지원이 포함됩니다. HID I2C에 대한 ACPI 정의는 다음과 같습니다.
필드 | 값 | ACPI 개체 | 형식 | 댓글 |
---|---|---|---|---|
호환 가능한 ID | PNP0C50 | _CID | ACPI0C50 또는 PNP0C50 형식의 문자열 | 호환ID |
하드웨어 ID | 공급업체별 | _HID | VVVVVddddd 형식의 문자열(예: NVDA0001) | VendorID(공급업체 ID) + DeviceID(장치 ID) |
하위 시스템 | 공급업체별 | _SUB | VVVVVsss 형식의 문자열(예: INTL1234) | SubVendorID + SubSystemID |
하드웨어 개정 버전 | 공급업체별 | _HRV | 0xRRRR(2 바이트 수정 버전) | RevisionID |
현재 리소스 설정 | 공급업체별 | _CRS | 바이트 스트림 | I2C 컨트롤러와 GPIO 인터럽트에 대해 각각 I2CSerialBus 및 GPIO_INT를 포함해야 합니다. |
디바이스별 메서드 | GUID {3CDFF6F7-4267-4555-AD05-B30A3D8938DE} | _DSM | 패키지 | HID 설명자 주소를 포함하는 구조를 정의합니다. |
모든 HID I2C 디바이스는 다음 필수 필드를 제공해야 합니다.
- 호환 가능한 ID
- 하드웨어 ID
- 하드웨어 리비전
- 현재 리소스 설정
- 디바이스별 메서드
자세한 내용은 고급 구성 및 전원 인터페이스 사양 버전 5.0을 참조 하세요.
다음 하드웨어 ID 및 호환 ID는 임의의 HID I2C 디바이스에 대한 예제를 제공합니다. 이러한 세부 정보는 "공급업체별" 클래스의 최상위 컬렉션이 하나 있는 HID로 자신을 식별하는 샘플 장치에 기반합니다.
ACPI(고급 구성 및 전원 인터페이스)는 HID I2C 전송 드라이버를 로드하기 위해 다음과 같은 하드웨어 ID 및 호환 ID를 생성합니다.
하드웨어 식별자: 호환 식별자
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C50
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
이전 예제에서 하드웨어 ID는 샘플 디바이스에 대한 _HID ACPI 메서드에서 추출된 값을 사용하여 생성되었습니다. 호환 ID는 샘플 디바이스에 대한 _CID ACPI 메서드에서 추출된 값을 사용하여 생성됩니다. I2C를 통해 HID의 호환 ID는 항상 버전 1.0에 대해 PNP0C50 합니다.
참고 INF를 제공하는 경우 이전 테이블의 왼쪽 열에 있는 하드웨어 식별자만 사용해야 합니다. (오른쪽 열에 호환되는 식별자를 사용하지 마세요.)
HIDClass.sys 구성 요소에서 생성된 HID 클라이언트 디바이스 노드의 하드웨어 ID는 다음과 같습니다.
하드웨어 식별자: 호환 식별자
HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: 해당 사항 없음
-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: 해당 없음
-HID\*MSFT0010Col01: 해당 없음
-HID_DEVICE_UP:FF00_U:0001;: 해당 없음
-HID_DEVICE: 해당 없음
HIDClass.sys 하드웨어 ID를 생성하며 모든 전송에 대해 동일합니다. 이 식별자는 HIDI2C.sys(ACPI에서 추출)에서 HIDClass.sys 전달된 값을 기반으로 합니다.
디바이스 열거형 시퀀스
HID I2C 디바이스 드라이버(HIDI2C.sys)가 로드되면 I2C 버스를 통해 디바이스와 통신하기 시작합니다. 드라이버가 수행하는 첫 번째 작업은 디바이스 열거형 시퀀스입니다.
다음 목록에서는 열거형 시퀀스를 제공합니다. 이 목록의 순서는 이후 버전의 Windows에서 변경될 수 있습니다.
시스템 BIOS에서 HID I2C 디바이스에 대한 ASL(ACPI 원본 언어) 코드를 검색합니다.
디바이스에서 HID 설명자를 검색합니다.
- HID 설명자 주소 작성
- HID 설명자 읽기
디바이스에 SET_POWER 발급합니다.
- SET_POWER 명령 작성
디바이스에 RESET(호스트 시작 초기화)를 실행합니다.
- RESET 명령 쓰기
- 디바이스가 GPIO 인터럽트를 주장하다
- 입력 레지스터에서 값 읽기 (0x00 0x00)
디바이스에서 보고서 설명자를 검색합니다.
- 보고서 설명자 주소 작성
- 보고서 설명 읽기
HOST가 디바이스를 사용하여 1-5단계를 성공적으로 완료하지 못하면 HIDI2C 드라이버가 코드 10의 오류 값으로 로드될 수 있습니다. 이러한 명령에 기본 제공되는 재시도 논리는 없습니다.
참고: 4단계와 5단계는 I2C에서 시간을 최적화하기 위해 병렬로 수행할 수 있습니다. 보고서 설명자는 (a) 정적이며 (b) 길기 때문에 Windows 8은 디바이스가 4에 응답하기를 기다리는 동안에 5에 대한 요청을 보낼 수 있습니다.
지원되는 HID I2C 명령
HIDI2C.SYS 드라이버는 다음 명령을 지원합니다.
명령 | 사용 방법 | 사용되는 경우 |
---|---|---|
초기화 | Windows는 호스트 시작 초기화를 지원합니다. | Windows는 디바이스 초기화 - 사용 안 함/사용 - 제거/다시 설치 시나리오 중에 이 명령을 실행합니다. |
가져오기/설정_리포트 | Windows는 Get/Set_Report 명령을 지원합니다. | Windows는 다음의 경우에 이 명령을 실행합니다: - HID 클라이언트 드라이버가 기능 보고서 가져오기/설정 요청을 발급할 때 - HID 클라이언트 드라이버가 동기 입력/출력 보고서를 발급할 때. |
세트_전원 | Windows에서 Set_Power 명령을 지원합니다. | Windows는 시스템이 꺼져 있을 때 시스템이 저전력 S3/연결된 대기 상태로 전환되는 경우 다음과 같은 시나리오에서 이 명령을 실행합니다. |