目前使用的方法是按照USB HID,也就是修改了hidReportMap,在里面新增了report id。不過(guò)沒(méi)有用,只能按照BLE keyborad用。
該問(wèn)題已經(jīng)解決,現(xiàn)在有一個(gè)新的問(wèn)題,藍(lán)牙會(huì)不定期的斷連。
Disconnected.. Reason:8
對(duì)于這個(gè)reason是否有文檔可以說(shuō)明具體原因。
8是超時(shí)斷開(kāi),這個(gè)是主從機(jī)連續(xù)幾個(gè)包交互失敗導(dǎo)致的,大概率是程序阻塞,導(dǎo)致藍(lán)牙任務(wù)無(wú)法按時(shí)執(zhí)行?;蛘哂捎诟蓴_或者硬件本身導(dǎo)致通訊失敗。錯(cuò)誤代碼在ble標(biāo)準(zhǔn)協(xié)議文檔里面有的,網(wǎng)上可以找到。
目前根據(jù)現(xiàn)象來(lái)看,應(yīng)該和程序阻塞有關(guān)。我的代碼邏輯如下:
if (events & USB_LOOP_EVENT){
? ? ? ? usbhandle();
? ? ? ? tmos_start_task(USBTaskID, USB_LOOP_EVENT, 15);
? ? ? ? return (events ^ USB_LOOP_EVENT);
}
usbhandle()函數(shù)中會(huì)去讀取USB收到的數(shù)據(jù),數(shù)據(jù)直接通過(guò)調(diào)用HidDev_Report函數(shù)通過(guò)藍(lán)牙傳輸出去。我現(xiàn)在有幾個(gè)問(wèn)題需要請(qǐng)教一下:
1,在這個(gè)15ms中之內(nèi)如果有大量的USB數(shù)據(jù),是否會(huì)導(dǎo)致USB的buffer裝滿,使得程序阻塞。
2,USB中實(shí)際上收到的是鼠標(biāo)HID數(shù)據(jù),也就是一次會(huì)有4byte的數(shù)據(jù)。假設(shè)在15ms之內(nèi)有多次鼠標(biāo)數(shù)據(jù),那么這個(gè)數(shù)據(jù)是一次性從USB buffer中讀出來(lái),還是每次只讀4byte,分多次讀?。?/p>
3,如果15ms內(nèi)有多次鼠標(biāo)操作,那么是不是會(huì)多次調(diào)用藍(lán)牙發(fā)送函數(shù)造成程序阻塞。
4,又或者直接把藍(lán)牙的buffer用滿了,造成程序阻塞。
問(wèn)題比較多,希望得到解答,謝謝。