CH579無法發(fā)送長包的問題

用CH579分別做藍(lán)牙的主從機,無論修改config里的MTU最大長度和特征值值可以接受的數(shù)據(jù)長度都無效,寫函數(shù)也用了writelongchar,都不能發(fā)送超過17個字節(jié)的包


debug發(fā)現(xiàn)原因在于

?if ( pMsg->method == ATT_READ_BY_TYPE_RSP &&?

? ? ? ? ?pMsg->msg.readByTypeRsp.numPairs > 0 )

? ? {

? ? ? centralCharHdl = BUILD_UINT16( pMsg->msg.readByTypeRsp.pDataList[0],

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?pMsg->msg.readByTypeRsp.pDataList[1] );

? ? ??

? ? ? // Start do read or write

? ? ? tmos_start_task( centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY);

? ? ??

? ? ? // Display Characteristic 1 handle

? ? ? PRINT("Found Characteristic 1 handle : %x \n",centralCharHdl);? ? ??

? ? }



?pMsg->method這個參數(shù)等于ATT_ERROR_RSP導(dǎo)致程序無法進(jìn)行讀特征值句柄

有人來解釋一下嗎?


郵箱聯(lián)系沁恒的技術(shù)支持,跟人間蒸發(fā)了一樣

使用我們的例程主機應(yīng)該是可以發(fā)送19個字節(jié),從機可以發(fā)送20字節(jié),如果想要更大,那么可以在主機端調(diào)用GATT_ExchangeMTU,config.h中也相應(yīng)修改為251,此時mtu為247。如果沒有成功可以發(fā)送郵件至hy@wch.cn獲取。




GATT_ExchangeMTU也調(diào)用了,這個函數(shù)在centralHciMTUChangeCB這個里面

直接這樣寫的? ?centralHciMTUChangeCB(LINK_CONNECTED,244,244);,然而并沒有用

在conncted之后調(diào)用了,直接連服務(wù)句柄都讀不到了,在讀到服務(wù)句柄后調(diào)用依舊是讀不到特征值句柄的

請問發(fā)送至hy@wch.cn 郵箱獲取什么呢?


郵件已發(fā)送,請查收,可獲取實現(xiàn)長包的例程。


我的也是?pMsg->method 一直是? ATT_ERROR_RSP ,導(dǎo)致不進(jìn)入讀寫任務(wù)。但我沒有發(fā)長包,例程主機找到 Service handle 后 就不行了


static void centralGATTDiscoveryEvent(gattMsgEvent_t *pMsg)

{

? ? attReadByTypeReq_t req;


? ? if(centralDiscState == BLE_DISC_STATE_SVC)

? ? {

? ? ? ? printf("%d\r\n",pMsg->method);

? ? ? ? // Service found, store handles

? ? ? ? if(pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP &&

? ? ? ? ? ?pMsg->msg.findByTypeValueRsp.numInfo > 0)

? ? ? ? {

? ? ? ? ? ? centralSvcStartHdl = ATT_ATTR_HANDLE(pMsg->msg.findByTypeValueRsp.pHandlesInfo, 0);

? ? ? ? ? ? centralSvcEndHdl = ATT_GRP_END_HANDLE(pMsg->msg.findByTypeValueRsp.pHandlesInfo, 0);


? ? ? ? ? ? // Display Profile Service handle range

? ? ? ? ? ? PRINT("Found Profile Service handle : %x ~ %x \n", centralSvcStartHdl, centralSvcEndHdl);

? ? ? ? }

? ? ? ? // If procedure complete

? ? ? ? if((pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP &&

? ? ? ? ? ? pMsg->hdr.status == bleProcedureComplete) ||

? ? ? ? ? ?(pMsg->method == ATT_ERROR_RSP))

? ? ? ? {

? ? ? ? ? ? if(centralSvcStartHdl != 0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? // Discover characteristic

? ? ? ? ? ? ? ? centralDiscState = BLE_DISC_STATE_CHAR;

? ? ? ? ? ? ? ? req.startHandle = centralSvcStartHdl;

? ? ? ? ? ? ? ? req.endHandle = centralSvcEndHdl;

? ? ? ? ? ? ? ? req.type.len = ATT_BT_UUID_SIZE;

? ? ? ? ? ? ? ? req.type.uuid[0] = LO_UINT16(SIMPLEPROFILE_CHAR2_UUID);

? ? ? ? ? ? ? ? req.type.uuid[1] = HI_UINT16(SIMPLEPROFILE_CHAR2_UUID);


? ? ? ? ? ? ? ? GATT_ReadUsingCharUUID(centralConnHandle, &req, centralTaskId);

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? else if(centralDiscState == BLE_DISC_STATE_CHAR)

? ? {

? ? ? ? printf("%d\r\n",pMsg->method);

? ? ? ? // Characteristic found, store handle

? ? ? ? if(pMsg->method == ATT_READ_BY_TYPE_RSP &&

? ? ? ? ? ?pMsg->msg.readByTypeRsp.numPairs > 0)

? ? ? ? {

? ? ? ? ? ? centralCharHdl = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pMsg->msg.readByTypeRsp.pDataList[1]);


? ? ? ? ? ? // Start do read or write

? ? ? ? ? ? tmos_start_task(centralTaskId, START_READ_OR_WRITE_EVT, DEFAULT_READ_OR_WRITE_DELAY);


? ? ? ? ? ? // Display Characteristic 1 handle

? ? ? ? ? ? PRINT("Found Characteristic 1 handle : %x \n", centralCharHdl);

? ? ? ? }

? ? ? ? if((pMsg->method == ATT_READ_BY_TYPE_RSP &&

? ? ? ? ? ? pMsg->hdr.status == bleProcedureComplete) ||

? ? ? ? ? ?(pMsg->method == ATT_ERROR_RSP))

? ? ? ? {

? ? ? ? ? ? // Discover characteristic

? ? ? ? ? ? centralDiscState = BLE_DISC_STATE_CCCD;

? ? ? ? ? ? req.startHandle = centralSvcStartHdl;

? ? ? ? ? ? req.endHandle = centralSvcEndHdl;

? ? ? ? ? ? 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);


? ? ? ? ? ? GATT_ReadUsingCharUUID(centralConnHandle, &req, centralTaskId);

? ? ? ? }

? ? }


image.png


你這里只獲取到了范圍,可以看下主機填寫的uuid是否符合從機的uuid。

提供了一份枚舉所有服務(wù)的demo,可以參考。

或者直接參考該博客的枚舉服務(wù)函數(shù)也可以:

藍(lán)牙BLE主機Central講解三(服務(wù)枚舉) - SweetTea_lllpc - 博客園 (cnblogs.com)


好的,十分感謝


ATT_ERR_INSUFFICIENT_AUTHEN(0x05):該屬性需要進(jìn)行身份驗證才能被讀取或?qū)?/span>入。

已經(jīng)配對密碼成功,應(yīng)該如何進(jìn)行屬性身份驗證

這是串口打印的信息

image.png

image.png


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

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