다음을 통해 공유


디지타이저 보고서 설명자의 사용법 지원

사용법은 HID 보고서의 값, 단추 또는 컬렉션의 이름입니다. 호스트는 펜 또는 터치 디바이스에서 데이터를 추출할 때 다음 사용법을 사용합니다.

멤버 Description 페이지 ID 디바이스
X 접점 위치의 X 좌표 바탕 화면 0x30 펜, 터치
Y 접점 위치의 Y 좌표 바탕 화면 0x31 펜, 터치
손가락 또는 펜이 디지타이저 표면에 있는 경우 설정합니다. 디지타이저 0x42 펜, 터치
범위 내 마우스로 디지타이저 위를 가리키거나 디지타이저 표면에 닿으면서 손가락 또는 펜이 감지되는 경우 설정합니다. 디지타이저 0x32 펜, 터치
신뢰도 접점이 손가락인 경우 설정합니다(손가락 입력을 트리거하지 않아야 하는 손바닥 또는 손의 다른 부분이 아님). 디지타이저 0x47 터치
너비 접점의 너비 디지타이저 0x48 터치
높이 접점의 높이 디지타이저 0x49 터치
검사 시간 상대 검사 시간입니다. 디지타이저 0x56 터치
압력 사용자가 접점에 적용하는 압력의 양 디지타이저 0x30 펜, 터치
스타일러스의 통에 있는 단추를 누르는 경우 설정합니다. 디지타이저 0x44
방위각 Z축에 대한 커서의 시계 반대 방향 회전 디지타이저 0x3f 펜, 터치
반전 펜의 반대쪽 끝이 디지타이저 위를 가리키는 경우 설정합니다. 디지타이저 0x3c
지우개 펜의 반대쪽 끝이 디지타이저 표면에 있는 경우 설정합니다. 디지타이저 0x45
X 기울기 Y-Z 평면과 포인터 디바이스 축 및 Y 축을 포함하는 평면 사이의 각도입니다. 디지타이저 0x3d
Y 기울기 X-Z 평면과 포인터 디바이스 평면 사이의 각도입니다. 양의 Y 기울기는 사용자를 향합니다. 디지타이저 0x3e
비틀기 자체 축에 대한 커서의 시계 방향 회전입니다. 디지타이저 0x41

참고 위 표에 나열된 사용법은 Windows에 알려져 있으며 WM_POINTER 메시지를 사용하여 애플리케이션에 전달됩니다.

참고 포인터 디바이스는 추가 사용법(공급업체별 사용 포함)을 무료로 지원할 수 있습니다. 추가 사용법은 WM_POINTER 메시지의 애플리케이션에 전달되지 않습니다. 이러한 사용법 값은 GetRawPointerDeviceData 함수를 사용하여 검색할 수 있습니다. GetRawPointerDeviceData 함수에서 사용법에 액세스할 수 있도록 하려면 사용법이 X 및 Y 사용법과 동일한 보고서에 있어야 합니다.

디지타이저에 대한 HID 설명자

Windows 8부터 터치 디지타이저는 터치 스크린으로 표시되어야 합니다(페이지 = 0x0D, 사용법 = 0x04). 스타일러스 디지타이저는 통합 펜(페이지 = 0x0D, 사용법 = 0x02) 또는 외부 펜(페이지 = 0x0D, 사용법 = 0x01)으로 표시되어야 합니다. 통합 터치 및 펜 디바이스는 실제로 연결된 디스플레이에 매핑됩니다. 외부 펜 디바이스는 가상 데스크톱에 매핑됩니다.

디지타이저에 필요한 HID 사용법

모든 디지타이저에는 다음과 같은 사용법이 필요합니다. 모든 필수 사용법을 지원하지 않는 디바이스는 Windows 8에서 작동하지 않습니다.

XY
XY는 접점 좌표를 보고합니다. Windows 8에서 디바이스는 각 접점에 대해 두 지점을 보고할 수 있습니다. 첫 번째 점(T라고 함)은 사용자가 터치하려는 지점으로 간주되고, 두 번째 지점(C라고 함)은 접점의 중심으로 간주됩니다. T 및 C를 보고할 수 있는 디바이스에는 두 개의 X 값과 두 개의 Y 값으로 구성된 사용법 배열이 있어야 합니다. 배열의 첫 번째 위치에 있는 값은 T의 좌표로 해석되고 두 번째 위치에 있는 값은 C의 좌표로 해석됩니다. (두 사용법에 대한 보고서 수는 사용법 배열의 존재를 나타내기 위해 2입니다.) C를 보고하는 디바이스는 너비높이 사용법도 보고해야 합니다. 호스트는 C를 사용하여 접점 주위에 경계 사각형을 빌드합니다. 디바이스에서 하나의 X 및 Y 쌍만 보고하는 경우 호스트는 해당 쌍을 T 및 C에 사용합니다. 샘플 터치 설명자는 XY 모두에 대한 사용법 배열을 포함합니다. 샘플 설명자에서 추출한 다음 섹션에서는 T만 지원하는 디바이스와 T 및 C를 지원하는 디바이스의 차이점을 보여 줍니다.

T만 보고하는 디바이스에는 X 및 Y 속성에 대한 사용법 배열이 없어야 합니다(즉, 다음과 같이 각 사용법에 대한 보고서 수는 1입니다.)

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 값을 보고하기 위해 사용법 배열을 사용합니다. XY 모두에 대한 보고서 수는 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,                         //       INPUT (Data,Var,Abs)

참고 이러한 예제에서는 전역 항목이 변경될 때까지 모든 주 항목에 대해 동일하게 유지된다는 HID 규칙을 활용합니다. 이렇게 하면 XY 사용법 모두에서 보고서 수에 대해 하나의 항목만 공유할 수 있습니다.

C는 이러한 디바이스와 관련이 없으므로 펜 디바이스에서 첫 번째 예제를 설명자에 사용해야 합니다.

XY 사용법에 대해 지정해야 하는 전역 항목은 다음과 같습니다.

  • 논리적 최솟값
  • 논리적 최댓값
  • 실제 최솟값
  • 실제 최댓값
  • 단위
  • 단위 지수

디바이스의 실제 범위 및 단위를 정확하게 보고해야 합니다. 정보가 정확하지 않으면 디바이스가 제대로 작동하지 않습니다. 또한 디바이스는 보고서 설명자에 지정된 논리적 범위 내에서 데이터를 보고해야 합니다. 이 범위를 벗어나서 보고된 값은 유효하지 않은 데이터로 간주되고, 해당 값은 가장 가까운 경계 값(논리적 최솟값 또는 논리적 최댓값)으로 변경됩니다.


스위치를 사용하여 손가락 또는 펜 접점을 표시하고 디지타이저 표면에서 뗍니다. 보고서 크기가 1인 주 항목이 있어야 합니다. 보고서를 전달하는 경우 손가락 또는 펜이 디지타이저 표면에 닿을 때 비트 위치를 설정해야 합니다. 그렇지 않으면 비트를 지워야 합니다.

검사 시간
검사 시간은 100마이크로초 단위의 상대 시간을 보고합니다. 검사 시간은 디바이스에서 비활성 기간 이후에 데이터 보고를 시작한 후 보고된 첫 번째 프레임의 델타를 나타냅니다. 수신된 첫 번째 검사 시간은 이후에 보고된 시간에 대한 기본 시간으로 처리됩니다. 보고된 검사 시간 사이의 델타는 디지타이저의 검사 빈도를 반영해야 합니다. 다른 사용법과 달리 호스트는 검사 시간 사용법에 대한 단위의 유연성을 허용하지 않습니다. 1바이트만 카운터에 할당되므로 값을 롤오버해야 합니다. 검사 시간 값은 프레임 내의 모든 접점에 대해 동일해야 합니다. 이 요구 사항은 하이브리드 모드를 사용하여 데이터를 보고하는 디바이스에도 적용됩니다.

참고 이 사용법은 터치 디바이스에만 필요합니다.

범위 내
디바이스에서 Z축 감지를 지원하는 경우 변환기가 디지타이징이 가능한 영역 내에 있을 때 디지타이저는 입력 보고서에서 범위 내 사용법을 설정해야 합니다. 디바이스에서 Z축 감지를 지원하지 않는 경우 드라이버는 범위 내 사용법을 보고서 설명자에 포함하지 않아야 합니다.

이전 버전의 Windows에는 터치 디지타이저 드라이버에서 범위 내 보고를 처리하는 방법에 대한 다른 지침이 있습니다.

펜 및 터치를 지원하는 디바이스는 펜에 대한 최상위 컬렉션에서 XY 사용법에 대해 NULL 상태를 지원해야 합니다. 펜이 X 및 Y 값을 정확하게 감지할 수 없는 높이에서 감지되면 디바이스에서 X 및 Y에 대해 NULL 값을 보고하고 범위 내 사용법을 설정해야 합니다. 디바이스에서 관련 사용법에 대해 NULL을 지원한다고 표시한 경우 NULL 값은 이러한 사용법에 대해 지정된 논리적 범위를 벗어난 값을 의미합니다. 그런 다음, 스타일러스가 이를 가능하게 할 만큼 표면에 충분히 가까우면 디바이스에서 정확한 X 및 Y 값을 보고할 수 있습니다. 이 프로토콜을 사용하면 펜이 범위 내에 있을 때 호스트에서 팜 거부를 구현할 수 있습니다.

보고서 설명자에서 X 및 Y가 NULL 상태를 지원한다는 사실을 나타내는 비트를 구체적으로 포함하는 경우에만 호스트는 논리적 범위를 벗어난 값을 이 프로토콜의 구현을 나타내는 것으로 인식합니다. 그렇지 않은 경우 논리적 범위를 벗어난 값은 단순히 가장 가까운 경계 값으로 이동합니다. 샘플 설명자에서 추출한 다음 섹션에서는 X 및 Y에 대해 NULL을 지원하는 디바이스와 지원하지 않는 디바이스의 차이점을 보여 줍니다. NULL 지원은 펜 최상위 컬렉션에서만 필요합니다. 터치 최상위 컬렉션은 이를 위해 X 및 Y에 대해 NULL을 지원할 필요가 없습니다.

X 및 Y에 대해 NULL을 지원하는 보고서 추출:

0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 42
    0x09, 0x30,                         //     USAGE (X)                    44
    0x75, 0x10,                         //     REPORT_SIZE (16)             46
    0x95, 0x01,                         //     REPORT_COUNT (1)             48
    0xa4,                               //     PUSH                         50
    0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           51
    0x65, 0x13,                         //     UNIT (Inch,EngLinear)        53
    0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)         55
    0x46, 0x3a, 0x20,                   //     PHYSICAL_MAXIMUM (8250)      57
    0x26, 0xf8, 0x52,                   //     LOGICAL_MAXIMUM (21240)      60
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         63
    0x09, 0x31,                         //     USAGE (Y)                    65
    0x46, 0x2c, 0x18,                   //     PHYSICAL_MAXIMUM (6188)      67
    0x26, 0x6c, 0x3e,                   //     LOGICAL_MAXIMUM (15980)      70
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         73

X 및 Y에 대해 NULL을 지원하지 않는 보고서 추출:

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)

XY에 대해 NULL 값을 지원하는 펜 디바이스의 전체 설명자는 '터치 및 펜 지원' 섹션을 참조하세요.

참고 이 사용법은 모든 펜 디바이스에 필수이지만 터치 디바이스에서는 선택 사항입니다.

선택적 HID 사용법

다음 사용법은 선택 사항이지만 디지타이저 하드웨어에서 지원하는 경우 구현해야 합니다. 이러한 사용법을 지원하지 않는 디지타이저는 이러한 사용법을 보고서 설명자에 포함하지 않아야 합니다.

너비높이
너비높이 사용법은 터치 접점 주위의 경계 상자에 대한 너비와 높이를 나타냅니다. 보고된 값은 "UP(위로)" 이벤트가 보고되는 경우를 제외하고는 0이 아니어야 하며, 여기서는 0이어야 합니다.

또한 너비높이는 WM_POINTER 메시지를 통해 애플리케이션 개발자에게 표시됩니다.

신뢰도
신뢰도는 터치 접점이 의도된 접점인지 아니면 우발적인 접점인지에 대한 디바이스의 제안입니다. 터치가 의도된 것이라고 확신하는 경우 신뢰도 사용법을 1(true)로 설정합니다. 대기 시간이 필요한 범위 내에서 유지되는 동안 디바이스는 우발적인 터치를 최대한 철저하게 거부해야 합니다. 터치가 의도된 것인지 확실하지 않고 디바이스에서 실수로 터치를 거부하지 않은 경우 신뢰도 사용법을 0(false)으로 설정합니다. 디바이스가 우발적인 터치를 항상 거부하면 신뢰도 사용을 포함할 필요가 없습니다.

압력
압력은 손가락 또는 펜이 디지타이저 표면에 가하는 힘의 측정값입니다. 압력에 허용되는 범위에는 제한이 없습니다. 그러나 디바이스에서 지정한 범위는 클라이언트 애플리케이션에 데이터를 전달할 때 0~1024 범위로 정규화됩니다.


펜 배럴 단추를 누르는 경우 배럴을 설정해야 합니다. 그렇지 않은 경우 다시 설정해야 합니다. 통은 Windows에서 기본 동작(탭핑, 끌기) 또는 보조 동작(오른쪽 탭핑, 오른쪽 끌기)에 대한 팁의 기능을 수정하는 데 사용됩니다.

압력은 선택적 사용법이지만 펜 디지타이저에 구현하는 것이 좋습니다. 이러한 사용법에 대한 추가 값이 추가되었습니다. 압력은 펜 스트로크 너비를 정의하여 더 현실적으로 만들고, 통 스위치는 펜을 사용할 때 마우스 오른쪽 단추 기능을 허용합니다.

X 기울기
X 기울기는 Y-Z 평면, 변환기 축을 포함하는 평면 및 Y 축 사이의 평면 각도를 나타냅니다.

실제 범위와 논리적 범위를 지정해야 합니다. 실제 범위는 -90~90이어야 합니다. 논리적 범위는 소수점 이하 두 자리까지 정확한 데이터를 전달할 수 있을 만큼 커야 합니다. 또한 실제 범위에는 라디안을 사용할 수 있습니다. 다음 목록에서는 일반적인 논리적 조합 및 실제 조합을 보여 줍니다.

  • 논리적 최솟값: -9000
  • 논리적 최댓값: 9000
  • 단위: 도
  • 단위 지수: -2
  • 실제 최솟값: -9000
  • 실제 최댓값: 9000

Y 기울기
Y 기울기는 X-Z 평면과 변환기 X 평면을 포함하는 평면 사이의 평면 각도를 나타냅니다.

실제 범위와 논리적 범위를 지정해야 합니다. 실제 범위는 -90~90이어야 합니다. 논리적 범위는 소수점 이하 두 자리까지 정확한 데이터를 전달할 수 있을 만큼 커야 합니다. 또한 실제 범위에는 라디안을 사용할 수 있습니다. 다음 목록에서는 일반적인 논리적 조합 및 실제 조합을 보여 줍니다.

  • 논리적 최솟값: 0
  • 논리적 최댓값: 18000
  • 단위: 도
  • 단위 지수: -2
  • 실제 최솟값: -9000
  • 실제 최댓값: 9000

비틀기
비틀기는 자체 주 축을 중심으로 커서의 시계 방향 회전을 지정합니다.

실제 범위와 논리적 범위를 지정해야 합니다. 실제 범위는 0~360이어야 합니다. 논리적 범위는 소수점 이하 두 자리까지 정확한 데이터를 전달할 수 있을 만큼 커야 합니다. 또한 실제 범위에는 라디안을 사용할 수 있습니다. 이 경우 논리적 범위는 소수점 이하 네 자리까지 정확한 값을 보고할 수 있을 만큼 커야 합니다. 다음 목록에서는 일반적인 논리적 조합 및 실제 조합을 보여 줍니다.

  • 논리적 최솟값: 0
  • 논리적 최댓값: 62831
  • 단위: 라디안
  • 단위 지수: -4
  • 실제 최솟값: 0
  • 실제 최댓값: 62831

방위각
방위각은 전체 원형 범위에서 Z축을 중심으로 커서의 시계 반대 방향 회전을 지정합니다. 실제 범위와 논리적 범위를 지정해야 합니다. 물리적 범위는 0~360이어야 하지만 터치 줄임표가 하드웨어 기능에 따라 대칭이라고 가정하면 디바이스에서 전체 범위 또는 절반 범위를 보고할 수 있습니다. 논리적 범위는 소수점 이하 두 자리까지 정확한 데이터를 전달할 수 있을 만큼 커야 합니다. 또한 실제 범위에는 라디안을 사용할 수 있습니다. 이 경우 논리적 범위는 소수점 이하 4자리까지 정확한 값을 보고할 수 있을 만큼 커야 합니다. 다음 목록에서는 일반적인 논리적 조합 및 실제 조합을 보여 줍니다.

  • 논리적 최솟값: 0
  • 논리적 최댓값: 36000
  • 단위: 도
  • 단위 지수: -2
  • 실제 최솟값: 0
  • 실제 최댓값: 36000

참고 단위 지수는 단위가 도인 경우 -2이고 단위가 라디안인 경우 -4여야 합니다.