對(duì)CH592 Peripheral例程的一些疑問(wèn)

在Peripheral例程中,有一個(gè)特征值(characteristic)使用了Notify,通過(guò)linkDB_Register注冊(cè)了一個(gè)回調(diào)函數(shù)用于重置CCCD的狀態(tài)。

????//?Register?with?Link?DB?to?receive?link?status?change?callback
????linkDB_Register(simpleProfile_HandleConnStatusCB);
?
/*.........*/
static?void?simpleProfile_HandleConnStatusCB(uint16_t?connHandle,?uint8_t?changeType)
{
????//?Make?sure?this?is?not?loopback?connection
????if(connHandle?!=?LOOPBACK_CONNHANDLE)
????{
????????//?Reset?Client?Char?Config?if?connection?has?dropped
????????if((changeType?==?LINKDB_STATUS_UPDATE_REMOVED)?||
???????????((changeType?==?LINKDB_STATUS_UPDATE_STATEFLAGS)?&&
????????????(!linkDB_Up(connHandle))))
????????{
????????????GATTServApp_InitCharCfg(connHandle,?simpleProfileChar4Config);
????????}
????}
}

請(qǐng)問(wèn)如果有多個(gè)特征值需要使用Notify,他們不全在在同一個(gè)service中,但要實(shí)現(xiàn)和示例代碼一樣的自動(dòng)重置CCCD狀態(tài)的功能。該如何實(shí)現(xiàn)?linkDB_Register能注冊(cè)多個(gè)回調(diào)函數(shù)嗎?


還有另一個(gè)疑問(wèn),代碼出自同一個(gè)例程,請(qǐng)問(wèn)為什么GATT_bm_free只在失敗的情況下調(diào)用,成功的情況下不需要釋放嗎?

noti的pValue必須是GATT_bm_alloc分配出來(lái)的嗎?

static?void?peripheralChar4Notify(uint8_t?*pValue,?uint16_t?len)
{
????attHandleValueNoti_t?noti;
????if(len?>?(peripheralMTU?-?3))
????{
????????PRINT("Too?large?noti\n");
????????return;
????}
????noti.len?=?len;
????noti.pValue?=?GATT_bm_alloc(peripheralConnList.connHandle,?ATT_HANDLE_VALUE_NOTI,?noti.len,?NULL,?0);
????if(noti.pValue)
????{
????????tmos_memcpy(noti.pValue,?pValue,?noti.len);
????????if(simpleProfile_Notify(peripheralConnList.connHandle,?&noti)?!=?SUCCESS)
????????{
????????????GATT_bm_free((gattMsg_t?*)&noti,?ATT_HANDLE_VALUE_NOTI);
????????}
????}
}



注冊(cè)服務(wù)用的,每新注冊(cè)一個(gè)服務(wù)就需要添加這個(gè)函數(shù)。

例如:image.png

數(shù)據(jù)發(fā)送成功會(huì)由協(xié)議棧進(jìn)行釋放緩存,發(fā)送失敗需要手動(dòng)釋放緩存。



我看了HID_Keyborad的例程,在那個(gè)例程中是沒(méi)有使用linkDB_Register注冊(cè)回調(diào)來(lái)處理這個(gè)事情的,我是否可以理解為HID_Keyboard例程中的做法是更“正確”的做法?


第二個(gè)問(wèn)題怪我之前沒(méi)看手冊(cè),我在開(kāi)發(fā)參考手冊(cè)的API說(shuō)明里看到了失敗時(shí)需要釋放的說(shuō)明。


題外話(huà),個(gè)人建議這類(lèi)與內(nèi)存分配和釋放相關(guān)的信息還是要描述的清楚一些,畢竟藍(lán)牙庫(kù)代碼不開(kāi)源,如果代碼注釋里沒(méi)有說(shuō)明,用這個(gè)庫(kù)的人要怎么知道調(diào)用某個(gè)API之前要用什么API去分配內(nèi)存,什么情況下需要釋放,什么情況下不需要釋放呢?函數(shù)注釋看起來(lái)詳細(xì),但這種關(guān)鍵信息卻只在文檔里提了一下失敗時(shí)需要釋放。我覺(jué)得代碼注釋中也進(jìn)行說(shuō)明是更合理的做法。


上面截圖的是在HID例程添加透?jìng)鞣?wù)的代碼,截圖進(jìn)行講解用的。

針對(duì)一些庫(kù)函數(shù)的使用可以參考BLE文件夾下面的PDF文件或者函數(shù)的注釋。如果還有一些用法問(wèn)題也可以直接發(fā)送至lpc@wch.cn,我們這里可以進(jìn)行講解。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频