作者sbshank (季)
看板C_and_CPP
標題[問題] keyboard hid 通訊
時間Fri Nov 6 15:43:49 2015
小弟使用vc++ 在windows 10 64bit平台上
寫一個可以接受usb鍵盤按下與彈起event的程式
由於我的usb鍵盤是特殊製造的3*5鍵盤
所以使用的HID Usage ID全部都是保留未使用的(0xE8到0xFFFF)
例如 此特殊鍵盤的第一個鍵
HID Usage ID是0xE8 第二個鍵是0xE9
其餘依此類推
問題是 我發現使用raw input的api 只能接收到正常的鍵盤訊號(例如a鍵 0x04)
保留未使用的HID Usage ID一律接收不到.
接下來我嘗試使用hidapi (
http://www.signal11.us/oss/hidapi/)
這個更慘
雖然可以辨識鍵盤 但是接收不到鍵盤output的任何訊號
主要程式碼是
handle = hid_open(0x056E, 0x0811, NULL); //前一個是VID,後一個是PID
res = hid_read(handle, buf, sizeof(buf)); //blocking-mode
然後就block在hid_read了,我也試過hid_set_nonblocking(handle, 1);
但也收不到訊號..
後來我改用mac os x 10.10 完全同樣的程式碼 竟然可以接收到鍵盤的訊號!
不知道各位有何種解法可以讓我的windows 10收到usb keyboard訊號
謝謝各位!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.217.112
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1446795832.A.858.html
推 stupid0319: 你的USB鍵盤是arduino做的嗎? 11/06 15:57
推 stupid0319: 也許內建的HID驅動,考量到系統穩定度,把有的KEYCODE 11/06 16:13
→ stupid0319: 過濾掉了 11/06 16:14
→ stupid0319: 也許要寫個驅動,掛在內建的驅動前面 11/06 16:16
這是廠商給我的鍵盤 應該不是arduino
他接上去的時候 不需要特別的驅動程式
windows偵測到就是一般鍵盤 hid keyboard device
結果我發現 hidapi在mac os x上竟然可以偵測到鍵盤的動作
即使是保留未使用的HID Usage ID也可以偵測到!
看來是windows的問題? 這要怎麼解決呢?
※ 編輯: sbshank (220.136.217.112), 11/06/2015 16:45:03
※ 編輯: sbshank (220.136.217.112), 11/06/2015 16:46:04
推 stupid0319: 把HID Keyboard Device改成HID-compliant device 11/06 17:56
可是我還是希望它仍是一台keyboard
(我這台鍵盤可以隨時更換任一鍵的HID Usage ID )
不知道有沒有辦法在HID Keyboard Device仍可以攔截其訊號?
我用usblyzer之類的usb分析工具 可以成功攔截他傳進來的訊號耶
例如這是當我把HID Usage ID設為0x04(也就是鍵盤A)的訊號
http://i.stack.imgur.com/fCGoE.png
這個則是保留未使用ID 0xE8的訊號
http://i.stack.imgur.com/olw9D.png
※ 編輯: sbshank (140.112.71.183), 11/06/2015 20:25:24
※ 編輯: sbshank (140.112.71.183), 11/06/2015 20:25:55
推 stupid0319: 你下載IRPTrace看看,看看是不是被過濾掉了? 11/06 21:08