2016-11-23 71 views
0

因此,我目前正在規劃藍牙低耗能設備的代碼,該藍牙低功耗設備將使用藍牙規範中的HID over GATT配置文件進行操作。我已經閱讀了HID規範1.11和使用表格1.12,但我找不到任何關於Usage_pages和Usages的最低要求使用情況。在報告描述符中HID用法的裸要求是什麼?

由於我們正在實施主機和設備,因此我們的計劃是爲報告描述符使用供應商定義的使用頁面,但由於我們的目標是快速連接和低功耗,因此我不想在GATT上的HID的報告定義階段發送比我必須多的字節。因此,我正在考慮刪除通常會標記輸入/輸出的所有用法,因爲它們看起來只有語義。

這裏是我考慮的一個樣本:

Usage_Page(Vendor Defined) 
    Usage(Vendor 1) 
    Collection(Application) 
     Collection(Logical) ; First Collection and Report 
     Report_ID(1) 
     Usage_Page(Button) ; This is what the Specification seems to encourage 
     Usage_Minimum(Button 1) 
     Usage_Maximum(Button 3) 
     Logical_Minimum(0)   ; Logical Limits 
     Logical_Maximum(1) 
     Report_Size(3)  ; 3 Bits corresponding to the Buttons 
     Report_Count(1)  ; 1 of the 3 Bit set 
     Input(Data, Variable, Absolute) ;Make it an input 
     Report_Size(5) 
     Report_Count(1) 
     Input(Constant)  ; Pad the transmitted Byte 
     Collection End 
    Collection End 

當我看這個,我看到了很多,因爲我不使用本地解析器,什麼也不做額外的字節。這些範圍從用途到甚至邏輯最小/最大值。 業內人士或者對標準有更好的認識(無論是HID或GATT還是USB HID)都會告訴我,如果我只是將報告描述符定義爲僅使用頂級用法並且不使用邏輯最高配置?

回答

0

柔順解析器應接受下列優化的描述符:

0x85, 0x01,     // ReportID (1) 
0x05, 0xff,     // UsagePage (255) 
0x09, 0x01,     // Usage (1) 
0xa1, 0x01,     // Collection (Application) 
0x25, 0x01,     //  LogicalMaximum (1) 
0x75, 0x01,     //  ReportSize (1) 
0x05, 0x09,     //  UsagePage (Button) 
0x19, 0x01,     //  UsageMinimum (Button(1)) 
0x29, 0x03,     //  UsageMaximum (Button(3)) 
0x95, 0x03,     //  ReportCount (3) 
0x81, 0x02,     //  Input (Variable) 
0xc0,       // EndCollection 
  • 邏輯最小缺省值爲0,
  • 填充在最後字節的結束來免費的。

另請注意,HoG的所有中央端實現(Win,Bluez,CoreBluetooth,Bluedroid)實際上在配對發生時緩存報告描述符,以最大限度地減少重新連接時間。因此,報告描述符的實際大小並不那麼重要:配對只需要一次,並且可能永遠不會再次(直到設備再次配對)。

還要考慮報告描述符讀取代表中央和外圍設備之間交換的一些數據包(每20個字節有1個默認MTU),每往返花費2個間隔(如果兩個堆棧實現都不算太差),這將圍繞60ms(大多數中央連接的默認間隔爲〜30ms)。因此,當您的報告描述符長度超過60個字節時,實際的發現延遲時間將會少於200毫秒......對於在設備生命週期中僅發生一次的事情而言,這並不重要。

最後,附註:您應該不要使用特定於供應商的集合類型,而是嘗試使用標準類型。在大多數情況下,它將允許您的設備無人駕駛操作。

不要忘記,即使您只預見了您的硬件的應用程序特定用法,但有些人可能真的很樂意將其用於其他用途,如果是這樣,無人駕駛更好,除非您想禁止第三方使用所有,但首先使用HID沒有意義。 (HID是爲無人駕駛操作而設計的,我仍然不明白因爲製造商的懶惰而看到鼠標和遊戲手柄,遙控器和按鈕的驅動程序。)

+0

謝謝!這裏所關心的是儘量減少配對時間,所以這完全回答了我關於報告描述符的問題。作爲一個方面說明,我不介意使用預先定義的使用說明,但是,因爲我真的想爲單個指示器LED發送RGB數據,所以我沒有發現任何內容(除了字母數字使用情況頁面)預期的情況。如果有一種解決方法不涉及在數據中傳輸矩陣索引,我很樂意聽到它。 – hanseltime

+0

事實上,RGB LED在95年似乎是科幻小說。太糟糕了,他們沒有把它包含在Led頁面中。我的旁註與上面發佈的報告描述符相關,只有3個按鈕。我必須同意字母數字顯示看起來像過去沒有人實現過的規範,即使[HUTRR29b](http://www.usb.org/developers/hidpage/HUTRR29b.pdf)可能允許聲明一個1x1顯示器,我不會推薦它。 – Nipo