SensorTile: 作為藍(lán)牙HID鼠標(biāo)和鍵盤(pán)

把進(jìn)展記錄下來(lái)吧塞绿,編譯了這個(gè)帖子提供的程序惨撇,SensorTile可以分別當(dāng)成藍(lán)牙鍵盤(pán)或者鼠標(biāo)了虐秦,這一點(diǎn)讓我對(duì)藍(lán)牙的HID有了深入的了解创坞。

藍(lán)牙4.0以上的HID是基于HID-over-GATT碗短,如果藍(lán)牙IC支持GATT,那么就可以通過(guò)修改固件來(lái)實(shí)現(xiàn)作為藍(lán)牙HID設(shè)備(例如常見(jiàn)的鼠標(biāo)或者鍵盤(pán)题涨,以及不常見(jiàn)的TouchScreen)偎谁。SensorTile上帶的藍(lán)牙IC是BlueNRG-MS奔坟,其數(shù)據(jù)手冊(cè)上寫(xiě)的已經(jīng)支持的協(xié)議有:

Embedded Bluetooth low energy protocol stack: GAP, GATT, SM, L2CAP, LL, RFPHY

確實(shí)已經(jīng)包含了GATT

當(dāng)我把鍵盤(pán)和鼠標(biāo)的例子跑起來(lái)的后搭盾,開(kāi)始深入了解HID reports描述符相關(guān)知識(shí),在這之前我只會(huì)使用Android里的getevent去抓取輸入事件婉支;使用lsusb -vvv查看USB設(shè)備描述符鸯隅。覺(jué)得這已經(jīng)是最底層了,了解了HID reports描述符后向挖,底層就更底了一層蝌以,從設(shè)備上的實(shí)現(xiàn)方式也了解了一下。

關(guān)于抓取HID設(shè)備描述符何之,這個(gè)文章USB與BT HID reports描述符實(shí)踐與抓包分析里講得比較詳細(xì)了跟畅,教會(huì)我通過(guò)查看/sys/kernel/debug/hid/xxx/rdesc獲取USB或者BT的HID reports描述符以及使用usbhid-dumphidrd-convert查看。

HID reports描述符描述符比較深?yuàn)W溶推,找到了一些中文資料USB HID協(xié)議中文版——USB接口HID設(shè)備(英文原版資料在這里)徊件,讀起來(lái)還比較易懂一些,但是還難以理解透徹蒜危。

HID Usage Digitizer(0Dh)

在一個(gè)hid-multitouch設(shè)備的HID reports描述符看到了一些官方還沒(méi)有定義的Usage虱痕,比如Digitizer(0Dh)下的47h, 51h, 54h, 55h等,一直沒(méi)有查到相關(guān)資料辐赞,在Linux內(nèi)核中查到了部翘,這些已經(jīng)被Windows超前使用了,并且已經(jīng)成為規(guī)范响委。如下所示:

/*
 * as of May 20, 2009 the usages below are not yet in the official USB spec
 * but are being pushed by Microsft as described in their paper "Digitizer
 * Drivers for Windows Touch and Pen-Based Computers"
 */
#define HID_DG_CONFIDENCE   0x000d0047
#define HID_DG_WIDTH        0x000d0048
#define HID_DG_HEIGHT       0x000d0049
#define HID_DG_CONTACTID    0x000d0051
#define HID_DG_INPUTMODE    0x000d0052
#define HID_DG_DEVICEINDEX  0x000d0053
#define HID_DG_CONTACTCOUNT 0x000d0054
#define HID_DG_CONTACTMAX   0x000d0055

來(lái)源:https://elixir.bootlin.com/linux/v4.4/source/include/linux/hid.h#L338
分別代表了不同的意義新思。

Android

宿主機(jī)選用Android,比較開(kāi)源且更新快赘风,方便調(diào)試夹囚。
Android中關(guān)于藍(lán)牙HID,分兩塊邀窃,藍(lán)牙由bluedroid實(shí)現(xiàn)崔兴,HID則又經(jīng)uhid轉(zhuǎn)回到Linux內(nèi)核中處理,所以具體到Android上的藍(lán)牙HID蛔翅,只需要深入到的內(nèi)核中看就可以了敲茄,bluedroid只是實(shí)現(xiàn)了一個(gè)藍(lán)牙設(shè)備到內(nèi)核的通道,不過(guò)濾不處理任何具體的HID事件山析,全權(quán)交給內(nèi)核的HID子系統(tǒng)處理堰燎。

[ 4014.929387] input: HID as /devices/virtual/misc/uhid/input6
[ 4014.929725] generic-bluetooth 0005:0000:0000.0003: input: BLUETOOTH HID vfa.db Keyboard [HID] on

Linux內(nèi)核

Linux內(nèi)核最終會(huì)拿到HID reports描述符,Linux內(nèi)核中將HID設(shè)備分了4個(gè)各類笋轨,根據(jù)HID reports描述符進(jìn)行劃分秆剪,鍵盤(pán)鼠標(biāo)都屬于GENERIC(對(duì)應(yīng)Usage Desktop)赊淑,而最近流行的觸控筆觸摸屏屬于MULTITOUCH設(shè)備(對(duì)應(yīng)Usage Digitizer)。

/*
 * HID device groups
 *
 * Note: HID_GROUP_ANY is declared in linux/mod_devicetable.h
 * and has a value of 0x0000
 */
#define HID_GROUP_GENERIC               0x0001
#define HID_GROUP_MULTITOUCH            0x0002
#define HID_GROUP_SENSOR_HUB            0x0003
#define HID_GROUP_MULTITOUCH_WIN_8      0x0004

這里就不貼圖了仅讽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陶缺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洁灵,更是在濱河造成了極大的恐慌饱岸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徽千,死亡現(xiàn)場(chǎng)離奇詭異苫费,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)双抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)百框,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人牍汹,你說(shuō)我怎么就攤上這事铐维。” “怎么了慎菲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵方椎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我钧嘶,道長(zhǎng)棠众,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任有决,我火速辦了婚禮闸拿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘书幕。我一直安慰自己新荤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布台汇。 她就那樣靜靜地躺著苛骨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苟呐。 梳的紋絲不亂的頭發(fā)上痒芝,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音牵素,去河邊找鬼严衬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笆呆,可吹牛的內(nèi)容都是我干的请琳。 我是一名探鬼主播粱挡,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俄精!你這毒婦竟也來(lái)了询筏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤竖慧,失蹤者是張志新(化名)和其女友劉穎嫌套,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體测蘑,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年康二,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碳胳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沫勿,死狀恐怖挨约,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情产雹,我是刑警寧澤诫惭,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蔓挖,受9級(jí)特大地震影響夕土,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瘟判,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一怨绣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拷获,春花似錦篮撑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驮吱,卻和暖如春茧妒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背左冬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工嘶伟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人又碌。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓九昧,卻偏偏與公主長(zhǎng)得像绊袋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铸鹰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容