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