兩個CH582M主從通信,數(shù)據(jù)發(fā)送問題

Hi,

我在使用兩個CH582M進行通信時,一主一從,


從機在藍牙接收到0xFF時會執(zhí)行相應(yīng)的動作,我使用手機作為主機進行HEX發(fā)送時,從機可以執(zhí)行正常的動作(手機藍牙助手看到的UUID是0xFFF2),比如打印以下這一段

case BLE_USB_EVT_BLE_DATA_RECIEVED:

? ? ? ? ? ? PRINT("BLE RX DATA len:%d\r\n", p_evt->data.length);

但是我使用CH582M主機向從機發(fā)送0xFF時,從機一直在執(zhí)行的是

PRINT("profile ChangeCB CHAR1.. \n");


是因為存儲的characteristic 1 handle錯誤了導(dǎo)致數(shù)據(jù)一直發(fā)送不正常嗎?


主機的發(fā)送設(shè)置如下:


寫函數(shù)

if (centralDoWrite)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? // Do a write

? ? ? ? ? ? ? ? attWriteReq_t req;


? ? ? ? ? ? ? ? req.cmd = FALSE;

? ? ? ? ? ? ? ? req.sig = FALSE;

? ? ? ? ? ? ? ? req.handle = centralCharHdl;

? ? ? ? ? ? ? ? req.len = 1;

? ? ? ? ? ? ? ? req.pValue = GATT_bm_alloc(centralConnHandle, ATT_WRITE_REQ, req.len, NULL, 0);

? ? ? ? ? ? ? ? if (req.pValue != NULL)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? *req.pValue = centralCharVal;


? ? ? ? ? ? ? ? ? ? if (GATT_WriteCharValue(centralConnHandle, &req, centralTaskId) == SUCCESS)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? centralProcedureInProgress = TRUE;

? ? ? ? ? ? ? ? ? ? ? ? centralDoWrite = !centralDoWrite;

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

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? GATT_bm_free((gattMsg_t*)&req, ATT_WRITE_REQ);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


handle的存儲:

else if(centralDiscState == BLE_DISC_STATE_CHAR)

? ? {

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

? ? ? ? }

? ? }


看下是否用的peripheral,如果是已經(jīng)接收到了數(shù)據(jù),將value打印出來即可。

image.png


搞定刪掉


例程是基于回調(diào)函數(shù),藍牙收到數(shù)據(jù)再通過USB發(fā)送出去(看起來是這樣處理的)。如果你需要該藍牙轉(zhuǎn)USB功能,那就直接在char1接收到數(shù)據(jù)的地方做一個緩存,及時發(fā)送出去即可。


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

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