HOGP概述
HOGP(HID over GATT)是由Bluetooth SIG維護(hù)的藍(lán)牙配置文件規(guī)范,通過(guò)低功耗藍(lán)牙實(shí)現(xiàn)HID的配置文件并作為與計(jì)算器之間的接口,消除HID中對(duì)電線或物理連接的需求。
HID角色
在HID中,以及在HOGP的延伸中,定義了兩個(gè)角色,這些角色是HID主機(jī)和HID設(shè)備。HID設(shè)備一次只能主動(dòng)連接到單個(gè)HID主機(jī);然而一個(gè)HID主機(jī)可以連接到多個(gè)HID設(shè)備。有關(guān)主機(jī)和設(shè)備如何交互的細(xì)節(jié),請(qǐng)參閱HOGP規(guī)范中的第3章HID設(shè)備需求和第4章HID主機(jī)需求和行為。
一、HID主機(jī)
HID主機(jī)實(shí)現(xiàn)藍(lán)牙GAP中的中心(Central)角色,接收輸入訊息并使用提供的數(shù)據(jù)進(jìn)行更進(jìn)一步的處理。例如,計(jì)算器會(huì)是HID主機(jī),因?yàn)檫@是接收HID數(shù)據(jù)的設(shè)備。HID主機(jī)對(duì)HID功能的正確執(zhí)行有許多責(zé)任與需求,但在此開(kāi)發(fā)指南中所提供的范例僅實(shí)現(xiàn)了HID設(shè)備,因此本文檔不涉及這些內(nèi)容。想要了解HID主機(jī)的職責(zé)和需求,請(qǐng)參閱HOGP規(guī)范中的第2章配置、第4章HID主機(jī)需求和行為、第5章連線建立。
二、HID設(shè)備HID設(shè)備實(shí)現(xiàn)藍(lán)牙GAP中的外設(shè)(Peripheral)角色,負(fù)責(zé)將輸入信息傳輸?shù)街醒胗?jì)算器。例如,鼠標(biāo)或鍵盤(pán)會(huì)是HID設(shè)備,因?yàn)樗鼈儗⑤斎霐?shù)據(jù)發(fā)送到計(jì)算器設(shè)備。
Bluetooth Profile
要透過(guò)藍(lán)牙實(shí)現(xiàn)HID功能,那就必須要事先定義好規(guī)范,如此主機(jī)及裝置雙方才能夠順利通信,由于本開(kāi)發(fā)指南是針對(duì)裝置的部份進(jìn)行說(shuō)明,故此處只列出裝置所需的服務(wù)。
表1. HID裝置的必須服務(wù)

這邊要注意到Device Information Service中的PnP特征,如果是開(kāi)發(fā)一個(gè)標(biāo)準(zhǔn)的鍵盤(pán)或鼠標(biāo),請(qǐng)根據(jù)已經(jīng)注冊(cè)的Vendor ID及Product ID填入其中。
例 HID裝置實(shí)做
HOGP 工程是一個(gè)在 AT32WB415 上實(shí)現(xiàn) HOGP 規(guī)范的低功耗藍(lán)牙工程,該工程使用 HOGP 規(guī)范指定的藍(lán)牙外設(shè)角色,演示了 HOGP 的鍵盤(pán)及鼠標(biāo)。通過(guò)使用通知(Notification)和 GATT 配置文件,該項(xiàng)目能夠通過(guò)低功耗藍(lán)牙 HID 裝置并與 HID 主機(jī)正確連接。HOGP 工程中有幾個(gè)復(fù)雜的部份,在本文檔中進(jìn)行了討論,這些部份組合在一起以實(shí)現(xiàn)整體功能。
報(bào)告映射討論
HOGP工程依賴于報(bào)告映像,報(bào)告映射是HOGP用于實(shí)現(xiàn)低功耗藍(lán)牙HID功能的結(jié)構(gòu)。報(bào)告映像用于告訴主機(jī)許要從HID設(shè)備獲得什么功能和什么樣的數(shù)據(jù),在原始的HID USB規(guī)范中,報(bào)告映射稱為報(bào)告描述符,報(bào)告映射和報(bào)告描述符是相同的,它們之間唯一的區(qū)別是報(bào)告映射用于HOGP,報(bào)告描述符用于HID USB。該工程使用的報(bào)告映像可以在app_hid.c文件中找到,并且包含在gHIDReportDescriptor變量中,此工程中的報(bào)告映像包含鍵盤(pán)的輸入信息。該結(jié)構(gòu)分為多個(gè)部份,應(yīng)用程序以及HID主機(jī)能夠通過(guò)使用報(bào)告ID字段找到所需的部份。可以輕松修改報(bào)告映像以包含不同的輸入或修改已經(jīng)存在的輸入,USB實(shí)現(xiàn)者論壇的設(shè)備工作組有一個(gè)報(bào)告描述符建構(gòu)器工具,可以用于輕松創(chuàng)建報(bào)告映射。下面的程序代碼顯示了報(bào)告映像結(jié)構(gòu)片段,所有字段都有標(biāo)簽,可以輕松修改。例如,如果需要不同數(shù)量的鍵盤(pán)按鍵,則可以輕松修改相關(guān)字段。
- HID Report

修改裝置類型
只有當(dāng)開(kāi)發(fā)者正確地填入裝置類型參數(shù),主機(jī)端才能顯示出合適的裝置圖標(biāo),即便在廣播的時(shí)候能夠正確辨識(shí)出裝置的類型,但如果沒(méi)有修改GAP中的Appearance數(shù)值,聯(lián)機(jī)后的裝置圖標(biāo)依然會(huì)顯示異常,以下特別列出在開(kāi)發(fā)時(shí)容易疏忽的地方:1. 廣播時(shí)的Appearance,主機(jī)掃描到時(shí)就會(huì)將裝置類型顯示出來(lái),比如說(shuō)鍵盤(pán)或是鼠標(biāo),在代碼中位于user_config.h里面的宏定義APP_HID_ADV_DATA_APPEARANCE, 0x03C2代表鼠標(biāo), 0x03C1代表鍵盤(pán),更詳細(xì)的內(nèi)容可以參考SIG的Spec.圖1. Appearance Part of ADV Data
2.?聯(lián)機(jī)建立后,主機(jī)會(huì)來(lái)讀取裝置的GAP, 這個(gè)時(shí)候就會(huì)得到這個(gè)裝置是屬于哪一種類型,如果沒(méi)有正確填寫(xiě),在主機(jī)端的驅(qū)動(dòng)安裝完成后,顯示的裝置類型會(huì)與預(yù)期的不同。這個(gè)部份的代碼位于app_task.c中的gapc_get_dev_info_req_ind_handler函式,代碼中已將鍵盤(pán)及鼠標(biāo)的Appearance給定義起來(lái),使用者可以依據(jù)需求擴(kuò)充。圖2. GAP Client Gets Device Apperance
3.?在新增HID Profile時(shí),填入當(dāng)前的應(yīng)用類型,這位于app_hid.c中的app_hid_add_hids函式,使用者可以根據(jù)當(dāng)前需求填入鍵盤(pán)或是鼠標(biāo)的宏定義,但要記得一定要有Protocol Mode才能正常使用。圖3. GAP Client Gets Device Apperance
資源類型
1) 硬件環(huán)境:對(duì)應(yīng)產(chǎn)品型號(hào)的AT-START BOARD2) 軟件環(huán)境wb415_hogp_bt_demo\projects\ble_app_remotewb415_hogp_mcu_demo\utilities\wb415_hogp_mcu_demo\mdk_v5
軟件設(shè)計(jì)
1) 配置流程a) MCU端
- 配置USER KEY作為擊鍵
- 編寫(xiě)USART3通訊函數(shù)
- 輪詢USER KEY是否按下
- 根據(jù)需求去配置USER KEY按下后發(fā)出的AT command
b) BT端
- 將HOGP的Profile加入database
- 編寫(xiě)應(yīng)用層與GATT之間的界面
- 在應(yīng)用層中輪詢AT command
- 透過(guò)HOGP將不同的key function發(fā)給host端
2) 代碼介紹a)MCU端
- main函數(shù)代碼描述
b)?BT端
原則上不需要去修改Profile層的內(nèi)容,由APP層去設(shè)定HID裝置的內(nèi)容即可
- 初始化HOGP裝置變量

- 將HOGP加入database
在main函數(shù)之中的while loop不斷輪詢app_user_entry()來(lái)確認(rèn)有無(wú)收到AT command,如果收到有收到AT command則執(zhí)行該命令的內(nèi)容。
- 解析AT command并執(zhí)行對(duì)應(yīng)的程序

實(shí)驗(yàn)效果
- 按下AT-START板上的USER KEY發(fā)送www back按鍵,則瀏覽器頁(yè)面返回上一頁(yè)
- 按下AT-START板上的USER KEY發(fā)送volume up按鍵,則音量提高(需要修改ATcommand)
- 按下AT-START板上的USER KEY發(fā)送volume down按鍵,則音量降低(需要修改AT command)
按鍵定義
本應(yīng)用指南以多媒體按鍵為例,在代碼中定義了多媒體按鍵值的數(shù)組,用戶可以在app_key.c中找到以下代碼:
- 多媒體按鍵值定義
在app.c中的app_user_entry函數(shù),每當(dāng)添加一個(gè)新的按鍵實(shí)例,必須透過(guò)app_hid_send_report這個(gè)函數(shù),將按鍵值及長(zhǎng)度發(fā)送給主機(jī)端,主機(jī)才能根據(jù)按鍵值做出對(duì)應(yīng)的行為;舉例來(lái)說(shuō),要發(fā)出降低音量的按鍵功能,從上面的注釋可以看到volume down對(duì)應(yīng)到第九列,是整個(gè)數(shù)組的第18個(gè)數(shù),因此調(diào)用發(fā)送函數(shù)時(shí)寫(xiě)成app_hid_send_report(&key_copy[18], 2),其他按鍵也是如此使用。
HOGP相關(guān)AT command
本應(yīng)用指南中,已經(jīng)建立部分的AT command,如下表:表2. HOGP相關(guān)AT command

用戶自行添加AT command時(shí),需要在MCU端及BT端同時(shí)增加對(duì)應(yīng)的實(shí)例;MCU端要在at_cmd.h中新增AT command的請(qǐng)求及期待的響應(yīng);BT端要在app.h中新增要解析的AT command字符串、command的枚舉以及回復(fù)的枚舉,數(shù)量上如果對(duì)不上的話則發(fā)出的按鍵功能可能會(huì)不正常。另外鼠目標(biāo)AT command及位移都是填入Dummy Data, 使用者如果要反應(yīng)真實(shí)的位移及實(shí)作按鍵、滾輪等功能,需要自己由傳感器讀取數(shù)據(jù),并修改鼠標(biāo)的AT command讓它可以攜帶真實(shí)參數(shù),接收AT command的部份也要實(shí)做解析函數(shù)去取出AT command中的參數(shù)內(nèi)容,并填入Notification之中。關(guān)于雅特力雅特力科技于2016年成立,是一家致力于推動(dòng)全球市場(chǎng)32位微控制器(MCU)創(chuàng)新趨勢(shì)的芯片設(shè)計(jì)公司,專注于ARM Cortex-M4/M0+的32位微控制器研發(fā)與創(chuàng)新,全系列采用55nm先進(jìn)工藝及ARM Cortex-M4高效能或M0+低功耗內(nèi)核,締造M4業(yè)界最高主頻288MHz運(yùn)算效能,并支持工業(yè)級(jí)別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當(dāng)多元的終端產(chǎn)品成功案例:如微型打印機(jī)、掃地機(jī)、光流無(wú)人機(jī)、熱成像儀、激光雷達(dá)、工業(yè)縫紉機(jī)、伺服驅(qū)控、電競(jìng)周邊市場(chǎng)、斷路器、ADAS、T-BOX、數(shù)字電源、電動(dòng)工具等終端設(shè)備應(yīng)用,廣泛地覆蓋5G、物聯(lián)網(wǎng)、消費(fèi)、商務(wù)及工控等領(lǐng)域。
-
mcu
+關(guān)注
關(guān)注
147文章
18924瀏覽量
398061 -
雅特力
+關(guān)注
關(guān)注
1文章
195瀏覽量
9380 -
AT32
+關(guān)注
關(guān)注
1文章
121瀏覽量
3155
發(fā)布評(píng)論請(qǐng)先 登錄
AT32 HOGP開(kāi)發(fā)指南
AT32 MCU SDIO入門(mén)指南
AT32 HOGP開(kāi)發(fā)指南
雅特力攜高效能AT32 MCU“芯”動(dòng)亮相ICCAD 2020
雅特力攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會(huì)
雅特力攜高性能AT32 MCU精彩亮相D Forum 2021 微控制器論壇
雅特力攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會(huì)
雅特力展臺(tái)首日速遞,AT32 MCU精彩亮相
雅特力AT32 MCU實(shí)現(xiàn)高效電機(jī)驅(qū)動(dòng)控制與應(yīng)用
雅特力AT32 MCU與SEGGER攜手合作,開(kāi)發(fā)量產(chǎn)事半功倍
雅特力AT32 MCU與SEGGER攜手合作,開(kāi)發(fā)量產(chǎn)事半功倍
雅特力AT32 MCU推動(dòng)低空經(jīng)濟(jì)發(fā)展
雅特力AT32 MCU HOGP開(kāi)發(fā)指南
評(píng)論