支援數位板報告描述項中的使用方式
Usage是 HID 報表中值、按鈕或集合的名稱。 主機會在從畫筆或觸控裝置擷取資料時,使用下列用法。
member | 描述 | 頁面 | 識別碼 | 裝置 |
---|---|---|---|---|
X | 接觸位置的 X 座標。 | 桌面 | 0x30 | 手寫筆、觸控 |
Y | 連絡人位置的 Y 座標。 | 桌面 | 0x31 | 手寫筆、觸控 |
提示 | 如果手指或手寫筆位於數位板表面,請設定 。 | 數位化 | 0x42 | 手寫筆、觸控 |
範圍內 | 在將游標停留在數位板或與數位板表面接觸時,設定偵測到手指或手寫筆。 | 數位化 | 0x32 | 手寫筆、觸控 |
信賴度 | 當接觸是手指 (不是手掌或任何其他不應該觸發手指輸入) 的手部時設定。 | 數位化 | 0x47 | 觸控 |
寬度 | 連絡人寬度。 | 數位化 | 0x48 | 觸控 |
高度 | 連絡人的高度。 | 數位化 | 0x49 | 觸控 |
掃描時間 | 相對掃描時間。 | 數位化 | 0x56 | 觸控 |
壓力 | 使用者套用至連絡點的壓力量。 | 數位化 | 0x30 | 手寫筆、觸控 |
桶 | 如果按下手寫筆的滾筒按鈕,請設定 | 數位化 | 0x44 | 手寫筆 |
方位 | 關於 Z 軸之游標的逆時針旋轉。 | 數位化 | 0x3f | 手寫筆、觸控 |
Invert | 設定當手寫筆的相反端停留在數位板上時。 | 數位化 | 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上運作:
X 和 Y
X 和 Y 會報告連絡人的座標。 在Windows 8中,裝置可以報告每個連絡人的兩個點。 第一個點 (稱為 T) ,會被視為使用者想要觸控的點,而第二個點 (稱為 C) 會被視為連絡人的中心。 能夠報告 T 和 C 的裝置應該有兩個 X 值和兩個 Y 值的使用陣列。 陣列中第一個位置的值會解譯為 T 的座標,而第二個位置中的值會解譯為 C 的座標。 (這兩個使用方式的報表計數為 2,表示使用陣列) 是否存在。 報告 C 的裝置也必須報告 Width 和 Height 使用量。 主機會使用 C 在接觸周圍建置周框。 如果裝置只報告一個 X 和 Y 配對,主機會針對 T 和 C 使用該配對。範例觸控描述項包含 X 和 Y的使用陣列。下列擷取自範例描述項,說明僅支援 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 值。 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, // INPUT (Data,Var,Abs)
注意 這些範例會利用 HID 規則,讓全域專案在每個主要專案都維持不變,直到變更為止。 這可讓 X 和 Y 使用方式只共用報表計數的一個專案。
手寫筆裝置應該使用其描述元的第一個範例,因為 C 與這些裝置無關。
必須針對 X 和 Y 使用方式指定下列全域專案:
- 邏輯最小值
- 邏輯最大值
- 實體最小值
- 實體最大值
- 單位
- 單位指數
裝置和單位的實體範圍必須正確報告。 如果資訊不正確,裝置將無法正常運作。 裝置也必須報告報表描述元中所指定邏輯範圍內的資料。 超出此範圍的任何報告值都會被視為不正確資料,而且值會變更為最接近的界限值, (邏輯最小值或邏輯最大值) 。
提示
使用 [小費 ] 開關可指示手指或手寫筆接觸,並從數位板表面隨即轉移。 報表大小應為 1 的主要專案。 傳遞報表時,當手指或手寫筆與數位板表面接觸時,應該設定位位置。 否則,應該清除位。
掃描時間
掃描時間 會以 100 毫秒為單位報告相對時間。 它代表裝置開始在閒置期間之後報告資料的第一個畫面的差異。 第一次收到的掃描時間會被視為後續報告時間的基底時間。 報告掃描時間之間的差異應該反映數位板的掃描頻率。 請務必注意,不同于其他使用方式,主機不允許針對掃描時間使用量的單位提供任何彈性。 值預期會變換,因為只有 1 個位元組配置給計數器。 畫面內所有連絡人的掃描時間值應該相同。 此需求也適用于使用混合模式報告資料的裝置
注意 只有觸控裝置才需要此使用方式。
範圍內
如果裝置支援 Z 軸偵測,數位板必須在數位板可能位於數位板區域內時,在輸入報告中設定範圍內使用量。 如果裝置不支援 Z 軸偵測,驅動程式不應在其報表描述項中包含 範圍 內使用方式。
舊版 Windows 有不同的指導方針,說明觸控數位板驅動程式應如何處理範圍內報告。
支援畫筆和觸控的裝置應該支援畫筆最上層集合中 X 和 Y 使用方式的 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)
如需支援 X 和 Y Null 值的畫筆裝置完整描述項,請參閱 Touch and Pen Support 一節。
注意 所有手寫筆裝置都需要此使用方式,但對觸控裝置而言是選擇性的。
選擇性 HID 使用方式
下列使用方式是選擇性的,但如果數位板硬體支援它們,您應該實作它們。 不支援這些使用方式的數位板不應將它們包含在報表描述元中。
寬度 和 高度
[寬度] 和 [高度] 使用方式代表觸控接觸點周圍周框方塊的寬度和高度。 報告的值絕對不應該是 0,除非報告了 「UP」 事件,在此情況下應該為 0。
寬度 和 高度 也會透過WM_POINTER訊息向應用程式開發人員公開。
信心
來自 裝置的信賴度是關於觸控接觸是預定還是意外觸控的建議。 如果您確信觸控是預期的,請將信賴使用量設定為 1 (true) 。 您的裝置應該盡可能徹底拒絕意外的觸控,而延遲會保留在所需的範圍內。 如果您不確定觸控是否預期,且您的裝置未意外拒絕觸控,請將信賴使用量設定為 0 (false) 。 如果您的裝置一律拒絕意外的觸控,您就不需要包含信賴使用量。
壓力
壓力 是手指或手寫筆對數位板表面執行的力測量。 壓力允許的範圍沒有任何限制。 不過,當將資料傳遞至用戶端應用程式時,裝置所指定的範圍會正規化為 0 – 1024 的範圍。
桶
按下手寫筆筆筒按鈕時,應該設定筆筒。 否則,它應該重設。 Windows 會使用管子來修改主要動作的提示函式, (點選、拖曳) 或次要動作 (右點選、向右拖曳) 。
雖然 壓力 和 水筒 是選擇性的使用方式,但建議針對手寫筆數位板實作它們。 針對這些使用方式新增額外的值:壓力會定義筆刷筆觸寬度,使其更逼真,而滾筒切換可在使用手寫筆時允許滑鼠右鍵功能。
X 傾斜
X Tilt 代表 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
方位
Azimuth 會指定繞 Z 軸繞 Z 軸的順時針旋轉角度,透過完整的圓形範圍。 必須指定實體範圍和邏輯範圍。 實體範圍必須是 0 到 360,不過裝置可能會報告完整範圍或一半的範圍,假設觸控省略號是對稱式硬體功能。 邏輯範圍必須夠大,才能提供精確到至少兩個小數位數的資料。 弧度也可用於實體範圍。 在此情況下,邏輯範圍必須夠大,才能報告精確度至少為 4 個小數位數的值。 下列清單顯示典型的邏輯和實體組合。
- 邏輯最小值:0
- 邏輯最大值:36000
- 單位:度
- 單位指數:-2
- 實體最小值:0
- 實體最大值:36000
注意 當單位為 Degrees 時,單位指數必須是 -2,當 Unit 為 Radians 時則為 -4。