2016-08-22 59 views
0

我試圖通過藍牙從Sony PS4控制器捕獲HID描述符。我已經設法使用下面的代碼建立連接。從遊戲控制器捕獲HID描述符流通過藍牙

void findController() { 
    int[] deviceIds = mInputManager.getInputDeviceIds(); 
    for (int deviceId : deviceIds) { 
     InputDevice dev = mInputManager.getInputDevice(deviceId); 
     int sources = dev.getSources(); 
     if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) || 
       ((sources & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK)) { 
      // Device is a gamepad or joystick 
      listStr = "Controller Found: \r\n"; 
      listTxt.setText(listStr); 
     } 
    } 
} 

我然後使用偵聽尋找一個按鍵或運動事件,但現在我已經被告知,我需要尋找從含有不同的描述控制器的數據流。數據以二進制數據包發送,需要轉換爲字符串數據。我今天大部分時間都在谷歌,雖然有大量有關HID描述符的信息,但我仍不清楚如何收集數據。 如果有人已經做了一些這方面的工作,並可以幫助指向正確的方向或提供任何有用的鏈接,以幫助我解決這個問題,將不勝感激。

回答

0

我試圖捕捉HID描述符...

確保您要收集HID DescriptorsHID data event。藍牙HID(BR/EDR或HOGP)的工作方式如下: 1)HID主機使用SDP來檢測HID設備的描述符,即找出HID設備是什麼(例如鼠標,鍵盤)並解析描述符找出哪個鍵代表哪個事件。此過程主要發生在主機和設備的第一次連接時。 2)HID主機將該設備註冊到本地系統。 3)一旦連接了HID主機和HID設備,HID主機將解析HID數據流或者說出從HID設備發送的事件,然後將該事件鏡像到系統事件,例如,點擊彈出到系統。

所以,如果你想找出描述符,你最好先解開設備,然後嗅探日誌(對於Android來說,btsnoop.log應該工作),以便在兩個開始處找到描述符設備的連接。

+0

謝謝郭,這聽起來像一個解決方案。你有沒有任何示例代碼。由於Stackoverflow提供了一個賞金選項,這很重要,我很樂意爲您付出時間,請告訴我。 – user616076

+0

非常感謝你的慷慨:-)你想要什麼樣的「示例代碼」?所以你只是想要描述符是正確的? –

+0

是的,涵蓋您列出的三點的任何代碼。我已經設法使用藍牙類來識別設備,但之後我使用的是聽者,這是錯誤的。如果您可以提供代碼來檢測描述符和註冊設備,然後解析數據,這將有極大的幫助。由於我們有預算,報價是真實的,所以如果任何時候需要您,我會很樂意爲您付款。如果你可以加載代碼作爲你最好的答案的補充。 – user616076