필수 HID 최상위 컬렉션(touchscreen-required-hid-top-level-collections)
이 항목에서는 Windows 10 이상 운영 체제에서 터치 스크린 보고에 사용되는 필수 HID 최상위 컬렉션에 대해 설명합니다.
Windows 터치 스크린 디바이스는 최소한 터치 보고를 위한 단일 필수 최상위 컬렉션을 노출해야 합니다. 펌웨어 업데이트에 대한 선택적(하지만 권장되는) 컬렉션도 구현할 수 있습니다.
다음 다이어그램은 Windows 터치 스크린 디바이스에 대한 HID 컬렉션을 보여줍니다.
Windows 터치 스크린 컬렉션
Windows 10에서 터치 스크린 디바이스는 HID 프로토콜을 사용하여 디지타이저/터치 스크린으로 표시되는 최상위 컬렉션을 제공할 수 있습니다(페이지 0x0D, 사용 0x04).
Windows 터치 스크린 컬렉션은 호스트에 대한 다중 접촉 보고서 및 이러한 보고서와 관련된 디바이스 정보를 제공합니다. 이 컬렉션은 접촉 정보가 포함된 필수 입력 보고서 하나와 디지타이저가 지원하는 최대 접점 수가 포함된 기능 보고서 하나를 지원해야 합니다. 절전 모드에서 USB 디바이스의 전력 소비를 줄이기 위해 호스트에서 대기 시간 모드 힌트를 얻을 수 있도록 선택적(하지만 적극 권장되는) 기능 보고서를 구현할 수 있습니다. 마지막으로, 인증 상태를 전달하기 위해 선택적(하지만 권장되는) 기능 보고서를 구현할 수 있습니다.
Windows 터치 스크린 입력 보고서
접점 수준 사용에는 보고된 각 고유 디지타이저 접촉과 관련된 모든 필수 사용 및 지원되는 선택적 사용이 포함됩니다. 호스트는 Windows 터치 스크린 컬렉션을 통해 다음 사용 데이터를 사용하여 입력 보고서에서 접촉 데이터를 추출합니다.
멤버 | Description | 페이지 | ID | 필수/선택 |
---|---|---|---|---|
접촉 ID | 지정된 프레임 내에서 접점을 고유하게 식별합니다. | 0x0D | 0x51 | 필수 |
X | 접점 위치의 X 좌표입니다. | 0x01 | 0x30 | T의 경우 필수 C의 경우 선택 사항 |
Y | 접점 위치의 Y 좌표입니다. | 0x01 | 0x31 | T의 경우 필수 C의 경우 선택 사항 |
팁 | 접촉이 디지타이저 표면에 있는 경우 설정합니다. | 0x0D | 0x42 | 필수 |
신뢰 | 손가락 접촉이 되기에는 너무 클 때 설정합니다. | 0x0D | 0x47 | 선택 사항 |
너비 | 접촉 주위 경계 상자의 너비 | 0x0D | 0x48 | 선택 사항 |
높이 | 접촉 주위 경계 상자의 높이 | 0x0D | 0x49 | 선택 사항 |
압력 | 사용자가 접점에 적용하는 압력의 양 | 0x0D | 0x30 | 선택 사항 |
방위각 | Z축에 대한 커서의 시계 반대 방향 회전 | 0x0D | 0x3F | 선택 사항 |
다음 표는 Windows 터치 스크린 디바이스에 대한 모든 입력 보고서에 있어야 하는 모든 필수 보고서 수준 사용을 보여줍니다.
멤버 | Description | 페이지 | ID | 필수/선택 |
---|---|---|---|---|
보고서 ID | Windows 터치 스크린 보고서 ID | 0x0D | 0x05 | 필수 |
검사 시간 | 프레임당 상대 검사 시간 | 0x0D | 0x56 | 선택 사항 |
접촉 수 | 지정된 보고서에 보고된 총 접점 수 | 0x0D | 0x54 | 필수 |
접촉 또는 보고 수준에서 모든 필수 사용을 보고하지 않는 디바이스는 Windows 터치 스크린 디바이스로 작동하지 않습니다. 필수 사용은 Windows 호스트에서 엄격하게 적용됩니다. 논리적 최댓값이 제한되지 않은 경우 설명자 크기를 줄이기 위해 최적화할 수 있습니다.
접점 ID
접점 ID는 수명 주기 동안 보고서 내에서 접점을 고유하게 식별합니다. 디바이스에서 접점을 감지하고 보고하는 동안 접점 ID는 일정하게 유지되어야 합니다. 각각의 개별 동시 접촉에는 고유 식별자가 있어야 합니다. 이전에 연결된 접점이 더 이상 감지되거나 보고되지 않으면 식별자를 다시 사용할 수 있습니다. 필요한 숫자 범위가 없으며, 사용되는 값은 설명자에 지정된 논리적 최댓값으로만 제한됩니다.
X/Y
X 및 Y는 주어진 접점의 좌표를 보고합니다. 디바이스는 각 접촉에 대해 두 지점을 보고할 수 있습니다. 첫 번째 점(T라고 함)은 사용자가 터치하려는 지점으로 간주되고, 두 번째 지점(C라고 함)은 접촉의 중심으로 간주됩니다. T 및 C를 보고할 수 있는 디바이스에는 두 개의 X 값과 두 개의 Y 값으로 구성된 사용법 배열이 있어야 합니다. 배열의 첫 번째 위치에 있는 값은 T의 좌표로 해석되고 두 번째 위치에 있는 값은 C의 좌표로 해석됩니다. 두 사용에 대한 보고서 수는 2로 사용 배열이 있음을 나타냅니다.
C를 보고하는 디바이스는 너비 및 높이 사용법도 보고해야 합니다. 호스트는 C를 사용하여 접점 주위에 경계 사각형을 빌드합니다. 디바이스가 X와 Y 쌍을 하나만 보고하는 경우 호스트는 T와 C에 해당 쌍을 사용합니다. 샘플 터치 설명자에는 X 및 Y 모두에 대한 사용 배열이 포함됩니다.
T만 보고하는 디바이스에는 X 및 Y 속성에 대한 사용 배열이 없어야 합니다. 즉, 샘플 설명자에서 다음 추출에 표시된 대로 각 사용에 대한 보고서 수는 1입니다. 또한 발췌 내용은 T만 지원하는 디바이스 및 T와 C를 지원하는 디바이스 간의 차이점을 보여줍니다.
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x65, 0x13, // UNIT(Inch,EngLinear)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xb5, 0x04, // PHYSICAL_MAXIMUM (1205)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x8a, 0x03, // PHYSICAL_MAXIMUM (906)
0x09, 0x31, // USAGE (Y)
0x81, 0x02, // INPUT (Data,Var,Abs)
T 및 C를 지원하는 디바이스는 X 및 Y 값을 보고하기 위해 사용 배열을 사용합니다. X 및 Y 모두에 대한 보고서 수는 2입니다.
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x65, 0x13, // UNIT(Inch,EngLinear)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xb5, 0x04, // PHYSICAL_MAXIMUM (1205)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x8a, 0x03, // PHYSICAL_MAXIMUM (906)
0x09, 0x31, // USAGE (Y)
0x81, 0x02,
참고 이러한 예는 전역 항목이 변경될 때까지 모든 주 항목에 대해 동일하게 유지된다는 HID 규칙을 활용합니다. 이렇게 하면 X 및 Y 사용법 모두에서 보고서 수에 대해 하나의 항목만 공유할 수 있습니다.
X 및 Y 사용에 대해 지정해야 하는 전역 항목은 다음과 같습니다.
논리적 최솟값
논리적 최댓값
실제 최솟값
실제 최댓값
단위
단위 지수
디바이스의 실제 범위 및 단위를 정확하게 보고해야 합니다. 정보가 정확하지 않으면 디바이스가 제대로 작동하지 않습니다. 또한 디바이스는 보고서 설명자에 지정된 논리적 범위 내에서 데이터를 보고해야 합니다. 이 범위를 벗어나서 보고된 값은 유효하지 않은 데이터로 간주되고, 해당 값은 가장 가까운 경계 값(논리적 최솟값 또는 논리적 최댓값)으로 변경됩니다.
팁
팁 스위치는 접점이 표면에 있거나 디지타이저 표면을 벗어난 때를 나타내는 데 사용됩니다. 이것은 보고서 크기가 1비트인 주 항목으로 표시됩니다. 접점 보고서를 전달하는 경우 접점이 디지타이저 표면에 있을 때 비트를 설정하고, 접촉이 표면을 벗어날 때 비트를 지워야 합니다.
팁 스위치가 지워진 상태에서 접점이 보고될 때 보고되는 X/Y 위치는 팁 스위치 세트로 보고된 마지막 위치와 동일해야 합니다.
앞의 다이어그램과 같이 두 접촉이 Windows 터치 스크린에 배치됩니다. 얼마 후 첫 번째 접촉은 들어올려지고 두 번째 접촉은 표면에 남습니다. 이 내용은 다음 표에 설명된 대로 보고됩니다.
보고서 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
접촉 수 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
접점 1: 팁 스위치 | 1 | 1 | 1 | 1 | 1 | 0 | NR | NR | NR | NR | NR |
접점 1: X, Y | X₁, Y₁ | X₂, Y₂ | X₃, Y₃ | X₄, Y₄ | X₅, Y₅ | X₆, Y₆ | NR | NR | NR | NR | NR |
접점 2: 팁 스위치 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
접점 2: X, Y | X₁, Y₁ | X₂, Y₂ | X₃, Y₃ | X₄, Y₄ | X₅, Y₅ | X₆, Y₆ | X₇, Y₇ | X₈, Y₈ | X₉, Y₉ | X₁₀, Y₁₀ | X₁₁, Y₁₁ |
앞의 표는 리프트가 분리된 두 접촉(두 손가락 하이브리드)에 대한 보고 순서를 보여줍니다.
신뢰
신뢰도는 터치 접촉이 의도된 접촉인지 우발적인 접촉인지에 대한 디바이스의 제안입니다. 터치가 의도된 것이라고 확신하는 경우 리프트(팁 스위치가 해제된 경우)를 포함하여 상호 작용 기간 동안 신뢰도 사용을 1(true)로 설정합니다. 대기 시간이 필요한 범위 내에서 유지되는 동안 디바이스는 우발적인 터치를 최대한 철저하게 거부해야 합니다. 터치가 의도적인지 확실하지 않고 디바이스가 터치를 우발적인 접촉으로 거부하지 않은 경우에는 신뢰도 사용을 0(false)으로 변경하여 운영 체제가 필요에 따라 터치 접촉을 취소할 수 있도록 합니다. 디바이스가 우발적인 터치를 항상 거부하면 신뢰도 사용을 포함할 필요가 없습니다.
너비 및 높이
너비 및 높이 사용법은 터치 접점 주위의 경계 상자에 대한 너비와 높이를 나타냅니다. 보고된 값은 "UP(위로)" 이벤트가 보고되는 경우를 제외하고는 영(0)이 아니어야 하며, 여기서는 영(0)이어야 합니다.
압력
압력은 손가락이 디지타이저 표면에 가하는 힘을 측정한 것입니다. 압력에 허용되는 범위에는 제한이 없습니다.
방위각
방위각은 전체 원형 범위에서 Z축을 중심으로 커서의 시계 반대 방향 회전을 지정합니다. 실제 범위와 논리적 범위를 지정해야 합니다. 물리적 범위는 0~360 또는 이와 동등한 라디안이어야 하지만 터치 줄임표가 하드웨어 기능에 따라 대칭이라고 가정하면 디바이스에서 전체 범위 또는 절반 범위를 보고할 수 있습니다. 논리적 범위는 소수점 이하 두 자리까지 정확한 데이터를 전달할 수 있을 만큼 커야 합니다.
검사 시간
검사 시간은 상대 디지타이저 시간을 100µs 단위로 보고합니다. 검사 시간은 디바이스에서 비활성 기간 이후에 데이터 보고를 시작한 후 보고된 첫 번째 프레임의 델타를 나타냅니다. 수신된 첫 번째 검사 시간은 이후에 보고된 시간에 대한 기본 시간으로 처리됩니다. 보고된 검사 시간 사이의 델타는 디지타이저의 검사 빈도를 반영해야 합니다. 다른 사용과 달리 호스트는 검사 시간 사용(구현된 경우)에 대한 단위의 유연성을 허용하지 않습니다. 100µs 단위여야 합니다. 2바이트만 카운터에 할당되므로 값을 롤오버해야 합니다.
검사 시간 값은 프레임 내의 모든 접점에 대해 동일해야 합니다.
접촉 수
접점 수는 접촉이 연결된 팁 스위치에 관계없이 지정된 프레임에서 보고되는 접점 수를 나타내는 데 사용됩니다.
Windows 터치 스크린 기능 보고서
호스트는 Windows 터치 스크린 컬렉션을 통해 다음 사용 데이터를 사용하여 입력 보고서에서 접촉 데이터를 추출합니다.
최대 접점 수 기능 보고서
이 보고서는 멀티 터치 디바이스가 지원하는 총 접점 수를 지정합니다. Windows 터치 스크린 디바이스는 최대 접점 수 기능 보고서의 최대 접점 수(페이지 0x0D 사용 0x55) 지정을 통해 이 값을 보고해야 합니다. 데이터를 보고하는 동안 디바이스는 최대 접촉 수보다 많은 접촉을 보고하지 않아야 합니다. 데이터를 보고하는 동안 디바이스가 최대 접점 수보다 많은 접점을 보고하면 안 됩니다. 입력 프레임에 최대값보다 많은 연락처가 포함된 경우 호스트는 이전에 보고된 연락처의 데이터를 포함하여 전체 프레임을 삭제합니다. 최상의 사용자 환경을 위해 디바이스는 기존 연락처가 출발하더라도 새 연락처의 수명 동안 최대 수명에 도달한 후 감지된 새 연락처의 보고를 표시하지 않아야 합니다. 기존 연락처는 계속 보고될 수 있으며, 출국하는 경우 새로 도착한 연락처가 해당 위치를 차지할 수 있습니다.
디바이스 인증 상태 기능 보고서
디바이스가 호환성 요구 사항을 통과하면 Microsoft는 암호화 서명된 이진 Blob(THQA Blob이라고 함)을 디바이스 제조업체에 발급합니다. 제조업체는 프로덕션 전에 이 Blob을 디바이스의 펌웨어에 배치합니다. 터치 디바이스가 연결을 시도하면 Windows 운영 체제가 서명을 확인합니다. Windows는 설명자에서 THQA 기능 보고서를 노출하는 디바이스에 대해서만 이 작업을 수행합니다.
Windows 10에서는 유효한 인증된 Blob을 호스트에 보고하는 것은 선택 사항이지만 Windows 8 및 Windows 8.1과의 호환성을 위해 필요합니다. THQA Blob이 있는 디바이스에는 제어판에 "완전한 Windows Touch 지원"이라는 문구가 포함됩니다. 인증된 THQA Blob이 없는 디바이스는 제어판에 "Windows Touch 지원"이라는 문구가 표시됩니다.
Blob 자체는 256바이트의 이진 데이터로 구성되며 다음 HID 설명자에 설명된 대로 보고해야 합니다. 디바이스 제조업체는 Microsoft에서 서명된 이진 Blob을 발급하기 전에 아래에 제공된 샘플 Blob이 대신 Windows에 제공되는지 확인해야 합니다.
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined)
0x09, 0xC5, // USAGE (Vendor Usage 0xC5)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (0xff)
0x75, 0x08, // REPORT_SIZE (8)
0x96, 0x00, 0x01, // REPORT_COUNT (0x100 (256
다음은 일반 텍스트의 샘플 Blob입니다.
0xfc, 0x28, 0xfe, 0x84, 0x40, 0xcb, 0x9a, 0x87, 0x0d, 0xbe, 0x57, 0x3c, 0xb6, 0x70, 0x09, 0x88,
0x07, 0x97, 0x2d, 0x2b, 0xe3, 0x38, 0x34, 0xb6, 0x6c, 0xed, 0xb0, 0xf7, 0xe5, 0x9c, 0xf6, 0xc2,
0x2e, 0x84, 0x1b, 0xe8, 0xb4, 0x51, 0x78, 0x43, 0x1f, 0x28, 0x4b, 0x7c, 0x2d, 0x53, 0xaf, 0xfc,
0x47, 0x70, 0x1b, 0x59, 0x6f, 0x74, 0x43, 0xc4, 0xf3, 0x47, 0x18, 0x53, 0x1a, 0xa2, 0xa1, 0x71,
0xc7, 0x95, 0x0e, 0x31, 0x55, 0x21, 0xd3, 0xb5, 0x1e, 0xe9, 0x0c, 0xba, 0xec, 0xb8, 0x89, 0x19,
0x3e, 0xb3, 0xaf, 0x75, 0x81, 0x9d, 0x53, 0xb9, 0x41, 0x57, 0xf4, 0x6d, 0x39, 0x25, 0x29, 0x7c,
0x87, 0xd9, 0xb4, 0x98, 0x45, 0x7d, 0xa7, 0x26, 0x9c, 0x65, 0x3b, 0x85, 0x68, 0x89, 0xd7, 0x3b,
0xbd, 0xff, 0x14, 0x67, 0xf2, 0x2b, 0xf0, 0x2a, 0x41, 0x54, 0xf0, 0xfd, 0x2c, 0x66, 0x7c, 0xf8,
0xc0, 0x8f, 0x33, 0x13, 0x03, 0xf1, 0xd3, 0xc1, 0x0b, 0x89, 0xd9, 0x1b, 0x62, 0xcd, 0x51, 0xb7,
0x80, 0xb8, 0xaf, 0x3a, 0x10, 0xc1, 0x8a, 0x5b, 0xe8, 0x8a, 0x56, 0xf0, 0x8c, 0xaa, 0xfa, 0x35,
0xe9, 0x42, 0xc4, 0xd8, 0x55, 0xc3, 0x38, 0xcc, 0x2b, 0x53, 0x5c, 0x69, 0x52, 0xd5, 0xc8, 0x73,
0x02, 0x38, 0x7c, 0x73, 0xb6, 0x41, 0xe7, 0xff, 0x05, 0xd8, 0x2b, 0x79, 0x9a, 0xe2, 0x34, 0x60,
0x8f, 0xa3, 0x32, 0x1f, 0x09, 0x78, 0x62, 0xbc, 0x80, 0xe3, 0x0f, 0xbd, 0x65, 0x20, 0x08, 0x13,
0xc1, 0xe2, 0xee, 0x53, 0x2d, 0x86, 0x7e, 0xa7, 0x5a, 0xc5, 0xd3, 0x7d, 0x98, 0xbe, 0x31, 0x48,
0x1f, 0xfb, 0xda, 0xaf, 0xa2, 0xa8, 0x6a, 0x89, 0xd6, 0xbf, 0xf2, 0xd3, 0x32, 0x2a, 0x9a, 0xe4,
0xcf, 0x17, 0xb7, 0xb8, 0xf4, 0xe1, 0x33, 0x08, 0x24, 0x8b, 0xc4, 0x43, 0xa5, 0xe5, 0x24, 0xc2
대기 시간 모드 기능 보고서
참고 Windows 10 버전 1511 및 이전 운영 체제는 현재 이 HID 기능 보고서를 지원하는 펜 또는 터치 스크린 디바이스에 발급하지 않습니다. 하지만 대기 시간 모드 기능 보고서에 대한 지원을 디바이스에 추가하면 나중에 Windows가 펜 및 터치 스크린 디바이스에서 이런 보고서를 지원하는 경우에 대비하여 디바이스를 준비할 수 있습니다.
대기 시간 모드 기능 보고서는 호스트에서 Windows 터치 스크린 디바이스로 전송되며, 절전을 위해 높은 대기 시간이 필요한 때와 이와 반대로 작동을 위해 정상적인 대기 시간이 필요한 때를 알려줍니다. USB 연결 Windows 터치 스크린 디바이스를 사용하면 디바이스가 비활성(런타임 IDLE)으로 인해 일시 중단되는 것과 시스템이 S3 또는 연결된 대기 상태로 전환되기 때문에 일시 중단되는 것을 구분할 수 있습니다.
대기 시간 모드는 대기 시간 모드 기능 보고서의 대기 시간 모드 사용 값(페이지 0x0D, 사용법 0x60)을 통해 표시해야 합니다.
대기 시간 모드 값 | 대기 시간 모드 |
---|---|
0 | 일반적인 대기 시간 |
1 | 긴 대기 시간 |
펌웨어 업데이트 컬렉션(선택 사항)
Windows 터치 스크린 디바이스는 HID 프로토콜을 사용하여 디바이스 펌웨어 및 공급업체 구성 업데이트를 수행하기 위한 공급업체별 최상위 컬렉션을 제공할 수 있습니다.
공급업체별 펌웨어 업데이트 컬렉션은 호스트에서 디바이스로 펌웨어 페이로드를 전송하기 위한 출력 보고서를 제공할 수 있습니다.
호스트에 드라이버가 없어도 펌웨어 업데이트를 수행할 수 있으므로 매우 편리합니다. 펌웨어 업그레이드 후에는 wVersionID 디바이스 특성이 반드시 증가해야 합니다.
Windows 터치스크린 디바이스는 정전(또는 기타 오류)으로 인해 실패한 펌웨어 업데이트에서 복구할 수 있어야 합니다(전원을 껏다가 전원 공급 장치를 다시 연결하면). 펌웨어 업데이트에 실패한 후에도 기본 기능을 사용할 수 있도록 하는 것이 좋습니다.