針對 乙個陌生的裝置,可能你無法提前獲得到該裝置設計規範,
但是仍有幾種方法可以在使用期間獲得到對映資訊(report description)
hogp/hid裝置需要遵守 usb-hid usge table,按鍵發出的物理編碼叫做scan code,與紅外遙控器一樣。
通常情況下滿足標準的usb-hid usge table 的按鍵,不需要特殊處理,無論是android 還是linux,上層都能有對應的event 相應。
但是往往有很多大廠,會自定義一些專用按鍵,啟動特殊功能,針對特殊型別的鍵值需要在uhid kernel 和input kernel 層做特別處理,才不至於key 被kernel 層丟掉。
回歸正題,怎麼獲取到未知裝置的對映資訊? 以便於我們找到該裝置的自定義按鍵。
將該裝置與任意平台(linux或android 都行)配對,然後有如下兩種方法:
1.hci log 中有完整的對映資訊,可以直接提取(另一篇做過介紹,本文不累述)
2.通過裝置節點,獲取rdesc,
cd sys/kernel/debug/hid
lscd ******xx
裝置節點中有完整的對映資訊,內容如下:
第一行就是完整的解析前的資料,根據usb hid usage table 去解析按鍵定義。
檔案後面也會完成自動解析的結果。
在上述rdesc中,0x06 vendor special define ,允許廠商自定義一些按鍵,往往出問題,沒有起作用的就是這些按鍵,例如
bt 收到的scan code 會經過一次對映,轉為input 層的key code,
對映表一般正常情況,都是在kernel 註冊input driver 和hid driver 時 決定
例如常見的keyboard 型別,對映資訊在下面陣列裡:
但是客戶自定義型別的按鍵,並沒有現成的對映表,需要在
函式 hidinput_configure_usage()中針對特殊型別,新增event 型別,
將收到的特殊按鍵,轉為已經存在的input key code
如下一些操作:
在android 平台中,input kernel 收到一些 key code 之後,可能並沒有對應的event 去處理這些特殊案件,這時候需要修改或新增key code 對應的event。
這時需要修改 對應kl 檔案。
此時已經是常規操作了,有感興趣的可以繼續交流
針對特殊裝置按鍵的處理流程,重點是搞清楚bt 到kernel 的兩次對映轉換
scan code --> input kernel --> input framwork
第一次通常使用標準的usb hid usage table ,特殊按鍵需要額外處理
第二次對映使用kl檔案
如有紕漏,歡迎指正。
hidraw裝置自定義裝置節點
之前我們的手柄使用的都是 dev hidrawx節點,自己寫了乙個service通過這個結點和手柄互動。最近發現,同樣使用 dev hidrawx節點的手柄,要是被我自己寫的service open一次後,會無法被系統正常識別。所以便想 我們自己的手柄是不是可以根據pid vid去建立乙個私有的結點...
android自定義控制項新增自定義屬性
1 如果是自定義控制項,請在style.xml中或attrs.xml中宣告屬性 attr declare styleable 2 在theme中使用自定義的屬性,可以再多個主題中定義不同的屬性值 customize your theme here.color colorprimaryitem col...
新增自定義模板
模板 當增加一些,固定,特有組伺服器的時候,增加一些特定的監控專案,這些專案就可以加到自定義的模板裡,再將機器加到這個模板裡。每次增加類似的機器,就可以加到這個模板裡。思路 建立模板 名字自定義 模板要歸屬到模板組裡。也可以鏈結其他的模板。建立出的模板,所有的都為空。可以增加一些監控專案。可以在其他...