參照甜甜的大香瓜的博客文章增加特征值6只成功一半

我參考甜甜的大香瓜的博客文章給沁恒579增加特征值6,只成功了一半。

icon_jpg.gif1.jpg

其中我感覺有兩個(gè)地方可能有問題:

博客中第9步:

9、增加 char6 的發(fā)送通知數(shù)據(jù)的函數(shù) 1)定義 char6 的發(fā)送通知數(shù)據(jù)的函數(shù)(simpleGATTprofile.c 中) ?//******************************************************************************?

?//name: GUA_SimpleGATTprofile_Char6_Notify ?

//introduce: 發(fā)送 char6 通道的數(shù)據(jù) ?

//parameter: nGUA_ConnHandle: 連接句柄

// npGUA_Value: 要通知的數(shù)據(jù),范圍為 0~SIMPLEPROFILE_CHAR6,最多 20 個(gè)字節(jié)

// nGUA_Len: 要通知的數(shù)據(jù)的長度 ?

//return: none ?

//author: 甜甜的大香瓜 ?

//email: 個(gè)人信息保護(hù),已隱藏 ?

//QQ group 香瓜 BLE 之 CC2541(127442605)?

?//changetime: 2016.12.29 ?

//******************************************************************************?

?void GUA_SimpleGATTprofile_Char6_Notify(uint16 nGUA_ConnHandle, uint8 *pGUA_Value, uint8 ?nGUA_Len)?

{ ??

????attHandleValueNoti_t stGUA_Noti; ??

????uint16 nGUA_Return; ? //讀出 CCC 的值?

????nGUA_Return = GATTServApp_ReadCharCfg(nGUA_ConnHandle, simpleProfileChar6Config); ? //判斷是否打開通知開關(guān),打開了則發(fā)送數(shù)據(jù) ?

????if (nGUA_Return & GATT_CLIENT_CFG_NOTIFY) ??

????{ ??

????????????//填充數(shù)據(jù)?

????????????stGUA_Noti.handle = simpleProfileAttrTbl[GUA_ATTRTBL_CHAR6_VALUE_IDX].handle; ??

????????????stGUA_Noti.len = nGUA_Len; ??

????????????osal_memcpy(stGUA_Noti.value, pGUA_Value, nGUA_Len); //發(fā)送數(shù)據(jù)?

????????????GATT_Notification(nGUA_ConnHandle, &stGUA_Noti, FALSE); ??

????} ?

}?

注意,本函數(shù)僅適用于協(xié)議棧 1.3.2 和 1.4.0 版本。

1.4.2 版本的 attHandleValueNoti_t 結(jié)構(gòu)體發(fā)生變化,需要多一條分配發(fā)送數(shù)據(jù)緩沖區(qū)的 代碼??梢詤⒖肌禖C2640 之自定義服務(wù)》的 notify 代碼(不一定完全一樣):?

?//分配發(fā)送數(shù)據(jù)緩沖區(qū) ?stGUA_Noti.pValue = GATT_bm_alloc(nGUA_ConnHandle, ATT_HANDLE_VALUE_NOTI, GUAPROFILE_CHAR6_LEN, NULL);

我改的沁恒代碼如下:

void GUA_SimpleGATTprofile_Char6_Notify(uint16 nGUA_ConnHandle, uint8 *pGUA_Value, uint8 nGUA_Len)?

{?

?attHandleValueNoti_t stGUA_Noti;?

?uint16 nGUA_Return;?

?

?//讀出 CCC 的值

?nGUA_Return = GATTServApp_ReadCharCfg(nGUA_ConnHandle, simpleProfileChar6Config);?

?

?//判斷是否打開通知開關(guān),打開了則發(fā)送數(shù)據(jù)?

?if (nGUA_Return & GATT_CLIENT_CFG_NOTIFY)?

?{?

?//填充數(shù)據(jù)

?stGUA_Noti.handle = simpleProfileAttrTbl[GUA_ATTRTBL_CHAR6_VALUE_IDX].handle;?

?stGUA_Noti.len = nGUA_Len;?


?//分配發(fā)送數(shù)據(jù)緩沖區(qū)?

stGUA_Noti.pValue = GATT_bm_alloc(nGUA_ConnHandle, ATT_HANDLE_VALUE_NOTI, SIMPLEPROFILE_CHAR6_LEN, NULL,0);


?tmos_memcpy(stGUA_Noti.pValue, pGUA_Value, nGUA_Len);

?//發(fā)送數(shù)據(jù)


if( simpleProfile_Notify( nGUA_ConnHandle, &stGUA_Noti ) != SUCCESS )

? {

? ? GATT_bm_free( (gattMsg_t *)&stGUA_Noti, ATT_HANDLE_VALUE_NOTI );

? }

?}?

}

另一個(gè)地方:

香瓜博客為:

2)修改應(yīng)用層的回調(diào)函數(shù)(simpleBLEPeripheral.c 的 simpleProfileChangeCB 函數(shù)中)

static void simpleProfileChangeCB( uint8 paramID )?

{?

????uint16 nGUA_ConnHandle;?

????uint8 nbGUA_Char6[20] = {0}; ??

????switch( paramID ) { //char1 case SIMPLEPROFILE_CHAR1:

????以下從略。。。。。


//char6?

????case SIMPLEPROFILE_CHAR6: ?

????{?

????????//獲取連接句柄?

????????GAPRole_GetParameter(GAPROLE_CONNHANDLE, &nGUA_ConnHandle);?

????????//讀取 char6 的數(shù)值?

????????SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6, &nbGUA_Char6);

????????//發(fā)送數(shù)據(jù) ??

????????GUA_SimpleGATTprofile_Char6_Notify(nGUA_ConnHandle, nbGUA_Char6, 20);?

????????break; ??

????}

。。。。。。。。。。。。。。。

我改的沁恒代碼:

//char6

case SIMPLEPROFILE_CHAR6:?

{

//獲取連接句柄

GAPRole_GetParameter(paramID, &nGUA_ConnHandle);

//讀取 char6 的數(shù)值

SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6, &nbGUA_Char6);

//發(fā)送數(shù)據(jù)?

GUA_SimpleGATTprofile_Char6_Notify(nGUA_ConnHandle, nbGUA_Char6, 20);

?

break;?

}

下面說說實(shí)際效果

icon_jpg.gif2.jpg

①紅框?yàn)?app 主動(dòng)讀取到的數(shù)值,為默認(rèn)的 1~20(hex 顯示)。

②藍(lán)框?yàn)?app 主動(dòng)寫入 cc2541 的數(shù)值。?

③紫框?yàn)閏c2541接收到app的數(shù)值后,再將char6的數(shù)值通過通知發(fā)送出來,可見當(dāng)前char6 的數(shù)值已被 app 改變。

上述3步,第一步已實(shí)現(xiàn)。

第二步可以主動(dòng)寫入,但是第三步?jīng)]實(shí)現(xiàn)。

用CC2541試驗(yàn),主動(dòng)寫入后,很快就能收到數(shù)據(jù),不用手動(dòng)讀取。

用沁恒板子,主動(dòng)寫入后,收不到數(shù)據(jù)。需要手動(dòng)讀取。

請(qǐng)大神給看看,哪里出錯(cuò)了?謝謝

GAPRole_GetParameter(paramID, &nGUA_ConnHandle);

這一句貌似有問題

打不開通知開關(guān)。

我直接:

nGUA_ConnHandle=1;

就可以打開通使能了。

可是還是不能自動(dòng)回復(fù)。


大佬幫我,謝謝


附件,你可以直接先燒錄hex 文件,

使用的是128bit的uuid,可以write, 可以read,可以notify

write 會(huì)有打印,

read 沒有做處理

notify 手機(jī)會(huì)有 提示,手機(jī)要先使能對(duì)應(yīng)的cccd 才會(huì)notify,


編譯的話丟到官網(wǎng)ch579 EVT 1.9里面對(duì)應(yīng)的ble的exmaple 路徑下編譯,

使用的keil5的工程,

icon_rar.gifPeripheral_add_char6_use_128bit_uuid.zip



謝謝!我試試


寫有了。

notify 手機(jī)會(huì)有 提示,手機(jī)要先使能對(duì)應(yīng)的cccd 才會(huì)notify,

請(qǐng)問手機(jī)有什么提示?手機(jī)如何使能對(duì)應(yīng)的ccid?具體如何操作?謝謝


看到了,那個(gè)123456789就是notify


搞好了


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

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