CH592F作為ble主機 如何打開從機的通知使能

主機使用CH592F的MultiCentral 例程

從機用沁恒的BLE調(diào)試助手模擬
使用BLE調(diào)試助手向主機發(fā)送數(shù)據(jù)時提示通知未打開.
代碼格式有問題,代碼里面的空格會被替換成未知符號,我上傳了工程了

icon_rar.gifMultiCentral.zip

微信圖片_20240722100156.jpg



//遍歷/打開通知的代碼如下,使用代碼格式有問題,我換成文本看一下

//通知遍歷/打開任務
//staticvoidcentralGATTDiscoveryEvent(uint8_tconnItem,gattMsgEvent_t*pMsg)
elseif(centralConnList[connItem].discState==BLE_DISC_STATE_CHAR)
{

log_i("charpMsg->method:%dandlen%d",pMsg->method,pMsg->msg.readByTypeRsp.numPairs);

//Characteristicfound,storehandle
if(pMsg->method==ATT_READ_BY_TYPE_RSP&&
pMsg->msg.readByTypeRsp.numPairs>0)
{
log_i("Found%d,Characteristic1handle:%d",pMsg->msg.readByTypeRsp.numPairs,centralConnList[0].charHdl);
for(unsignedchari=0;imsg.readByTypeRsp.numPairs;i++)
{
//characteristicproperties
uint8_tchar_properties=pMsg->msg.readByTypeRsp.pDataList[pMsg->msg.readByTypeRsp.len*i+2];
uint16_tchar_value_handle=BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[pMsg->msg.readByTypeRsp.len*i+3],\
pMsg->msg.readByTypeRsp.pDataList[pMsg->msg.readByTypeRsp.len*i+4]);

//characteristicuuidlength
uint8_tchar_uuid_length=pMsg->msg.readByGrpTypeRsp.len-5;
//uuid
uint8_t*char_uuid=&(pMsg->msg.readByGrpTypeRsp.pDataList[pMsg->msg.readByGrpTypeRsp.len*i+5]);

log_i("char_properties:%02x,%s",char_properties,(char_properties&(GATT_PROP_WRITE|GATT_PROP_WRITE_NO_RSP))?"witehandle":"");
log_i("char_value_handle:%04x",char_value_handle);
log_i("char_uuid_length:%02d",char_uuid_length);
log_i("char_uuid:");
MODUL_PRINTF_HEX(LOG_TAG,8,char_uuid,char_uuid_length);

if(char_properties&(GATT_PROP_WRITE|GATT_PROP_WRITE_NO_RSP))
{
log_i("wtitehandle:%04x\r\n",char_value_handle);
}

if(char_properties&GATT_PROP_NOTIFY)
{
log_i("notifyhandle:%04x\r\n",char_value_handle);
}
}
}

if((pMsg->method==ATT_READ_BY_TYPE_RSP&&
pMsg->hdr.status==bleProcedureComplete)||
(pMsg->method==ATT_ERROR_RSP))
{
//Discovercharacteristic
centralConnList[connItem].discState=BLE_DISC_STATE_CCCD;
req.startHandle=centralConnList[connItem].svcStartHdl;
req.endHandle=centralConnList[connItem].svcEndHdl;
req.type.len=ATT_BT_UUID_SIZE;
req.type.uuid[0]=LO_UINT16(GATT_CLIENT_CHAR_CFG_UUID);
req.type.uuid[1]=HI_UINT16(GATT_CLIENT_CHAR_CFG_UUID);

//bStatus_tack=GATT_ReadUsingCharUUID(centralConnList[connItem].connHandle,&req,centralTaskId);
bStatus_tack=GATT_DiscCharsByUUID(centralConnList[connItem].connHandle,&req,centralTaskId);
log_i("starttoreadcccdack:%d,s:%d,e:%d",ack,req.startHandle,req.endHandle);
}
}
elseif(centralConnList[connItem].discState==BLE_DISC_STATE_CCCD)
{
log_i("CCCDpMsg->method:%dandlen%d",pMsg->method,pMsg->msg.readByTypeRsp.numPairs);

//Characteristicfound,storehandle
if(pMsg->method==ATT_READ_BY_TYPE_RSP&&
pMsg->msg.readByTypeRsp.numPairs>0)
{
centralConnList[connItem].cccHdl=BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],
pMsg->msg.readByTypeRsp.pDataList[1]);;
centralConnList[connItem].procedureInProgress=FALSE;
//StartdowriteCCCD
tmos_start_task(centralConnList[connItem].taskID,START_WRITE_CCCD_EVT,DEFAULT_WRITE_CCCD_DELAY);
//DisplayCharacteristic1handle
log_i("Foundclientcharacteristicconfigurationhandle:%x\n",centralConnList[connItem].cccHdl);
}
centralConnList[connItem].discState=BLE_DISC_STATE_IDLE;

}





//CCCD任務
//static?uint16_t?connect0_ProcessEvent(uint8_t?task_id,?uint16_t?events)

if(events&START_WRITE_CCCD_EVT)
{
if(centralConnList[CONNECT0_ITEM].procedureInProgress==FALSE)
{
//Doawrite
attWriteReq_treq;

req.cmd=FALSE;
req.sig=FALSE;
req.handle=centralConnList[CONNECT0_ITEM].cccHdl;
req.len=2;
req.pValue=GATT_bm_alloc(centralConnList[CONNECT0_ITEM].connHandle,ATT_WRITE_REQ,req.len,NULL,0);
if(req.pValue!=NULL)
{
req.pValue[0]=1;
req.pValue[1]=0;

bStatus_tack=GATT_WriteCharValue(centralConnList[CONNECT0_ITEM].connHandle,&req,centralTaskId);

if(ack==SUCCESS)
{
centralConnList[CONNECT0_ITEM].procedureInProgress=TRUE;
log_i("WriteCCCDsuccess\n");
}
else
{
GATT_bm_free((gattMsg_t*)&req,ATT_WRITE_REQ);
log_e("WriteCCCDfailed:%x\n",ack);
}
}
}
return(events^START_WRITE_CCCD_EVT);
}








查看主機打開通知的函數(shù)返回值是否為成功,如果不成功,可以查看handle值是否正確。

image.png

可以留下一個郵箱,提供一份通過設備名稱建立連接并枚舉所有服務,連接BLE調(diào)試助手從機的代碼參考。


這是我的郵箱.? ? ?個人信息保護,已隱藏


已發(fā)送至郵箱,請查收。


使用您的工程,問題依舊,
在BLE調(diào)試助手上點擊發(fā)送數(shù)據(jù),彈出以下
ef5ebb9cbba130bce64cf97534b2f98.png
這是我的ble助手,是不是ble工具的版本有差異.
9217e8c36628efea41a3502022657ef.jpg


使用2款測試機,都是這個現(xiàn)象.
1.galaxy m30s
2.HUAWEI P50 pro


你需要去查看noti的函數(shù):cccd使能是否成功,也就是返回值是否為成功,如果不成功則一定使能不成功。

發(fā)給你的代碼,cccd的handle值是寫的固定的,你可以檢查枚舉出來的handle是否為該固定值,如果不是該值,可以自行修改。

image.png


請問問題解決了嗎,我也遇到了同樣問題想要一份參考代碼


請描述需要的功能,并發(fā)送郵件至lpc@wch.cn,我們這邊進行查看。


已發(fā)送至郵箱


CH592f 配置為主機,如何接收來自ble調(diào)試助手從機模式發(fā)送來的消息 - 沁恒微電子社區(qū)


只有登錄才能回復,可以選擇微信賬號登錄

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