? ? ? ? ? ?
//?定義長(zhǎng)特征值寫入請(qǐng)求 ????????????attPrepareWriteReq_t?req; ????????????uint8_t?taskId?=?centralTaskId;?//?任務(wù)ID,用于接收通知 ????????????//?初始化數(shù)據(jù) ????????????uint8_t?data[22]; ????????????snprintf((char?*)data,?sizeof(data),?"%02X%02X%02X%02X%02X%02X", ?????????????????????macAddress[0],?macAddress[1],?macAddress[2], ?????????????????????macAddress[3],?macAddress[4],?macAddress[5]); ????????????for?(int?i?=?0;?i?<?6;?i++) ????????????{ ????????????????data[i?+?12]?=?formatted[i]; ????????????} ????????????for?(int?i?=?0;?i?<?3;?i++) ????????????{ ????????????????data[i?+?18]?=?c_bat[i]; ????????????} ????????????uint16_t?data_len?=?sizeof(data)?-?1;????//?獲取數(shù)據(jù)長(zhǎng)度(去掉末尾的'\0') ????????????uint16_t?offset?=?0;?????????????????????//?偏移量初始為0 ????????????uint16_t?connHandle?=?centralConnHandle;?//?連接句柄 ????????????//?分段寫入,直至數(shù)據(jù)全部發(fā)送完 ????????????while?(offset?<?data_len) ????????????{ ?????????????????DelayMs(2000); ????????????????//?設(shè)置請(qǐng)求參數(shù) ????????????????req.handle?=?centralCCCDHdl;?????????????????????????????????????????????????????????????????//?目標(biāo)句柄 ????????????????req.offset?=?offset;?????????????????????????????????????????????????????????????????????????//?當(dāng)前片段的偏移量 ????????????????req.len?=?(data_len?-?offset?>?ATT_MTU_SIZE?-?5)???(ATT_MTU_SIZE?-?5)?:?(data_len?-?offset);?//?每次發(fā)送最大為?ATT_MTU_SIZE?-?5 ????????????????req.pValue?=?&data[data_len];??????????????????????????????????????????????????????????????????//?指向當(dāng)前偏移的數(shù)據(jù) ????????????????printf("Request?Handle:?%u\r\n",?req.handle); ????????????????printf("Request?Offset:?%u\r\n",?req.offset); ????????????????printf("Request?Length:?%u\r\n",?req.len); ????????????????//?打印指向的數(shù)據(jù)內(nèi)容,根據(jù)數(shù)據(jù)長(zhǎng)度逐字節(jié)輸出 ????????????????printf("Request?Data:?"); ????????????????for?(int?i?=?0;?i?<?req.len;?i++) ????????????????{ ????????????????????printf("%02X?",?req.pValue[i]); ????????????????} ????????????????printf("\r\n"); ????????????????//?發(fā)送寫請(qǐng)求 ????????????????bStatus_t?status?=?GATT_WriteLongCharDesc(connHandle,?&req,?taskId); ????????????????switch?(status) ????????????????{ ????????????????case?SUCCESS: ????????????????????printf("請(qǐng)求已成功發(fā)送。\r\n"); ????????????????????break; ????????????????case?INVALIDPARAMETER: ????????????????????printf("參數(shù)無(wú)效:請(qǐng)檢查連接句柄和請(qǐng)求字段。\r\n"); ????????????????????//?可以在此處進(jìn)行參數(shù)檢查或調(diào)試 ????????????????????break; ????????????????case?MSG_BUFFER_NOT_AVAIL: ????????????????????printf("沒(méi)有可用的HCI緩沖區(qū):可能需要重試或釋放資源。\r\n"); ????????????????????//?可以在此處添加重試機(jī)制或釋放資源 ????????????????????break; ????????????????case?bleNotConnected: ????????????????????printf("連接已斷開:確保連接已建立后再發(fā)送請(qǐng)求。\r\n"); ????????????????????//?重新建立連接或通知上層連接問(wèn)題 ????????????????????break; ????????????????case?blePending: ????????????????????printf("服務(wù)器已存在未完成的響應(yīng):請(qǐng)等待之前的響應(yīng)完成。\r\n"); ????????????????????//?等待或添加隊(duì)列機(jī)制來(lái)處理請(qǐng)求 ????????????????????break; ????????????????case?bleMemAllocError: ????????????????????printf("內(nèi)存分配錯(cuò)誤:請(qǐng)檢查系統(tǒng)內(nèi)存情況。\r\n"); ????????????????????//?檢查內(nèi)存使用,可能需要清理內(nèi)存 ????????????????????break; ????????????????case?bleTimeout: ????????????????????printf("之前的事務(wù)超時(shí):可能需要重試或檢查連接穩(wěn)定性。\r\n"); ????????????????????//?增加重試邏輯或檢查連接狀態(tài) ????????????????????break; ????????????????default: ????????????????????printf("未知錯(cuò)誤狀態(tài):%d\r\n",?status); ????????????????????//?捕獲其他未知狀態(tài) ????????????????????break; ????????????????} ????????????????if?(status?==?SUCCESS) ????????????????{ ????????????????????//?更新偏移量 ????????????????????offset?+=?req.len; ????????????????} ????????????????else ????????????????{ ????????????????????//?如果寫請(qǐng)求失敗,退出循環(huán) ????????????????????break; ????????????????} ????????????}
代碼如上,20s觸發(fā)一次發(fā)送事件,這個(gè)data長(zhǎng)度可以連續(xù)發(fā)送兩次GATT_WriteLongCharDesc,反正每次發(fā)送事件第一次執(zhí)行GATT_WriteLongCharDesc成功發(fā)送數(shù)據(jù),第二次執(zhí)行GATT_WriteLongCharDesc異常blePending,我也沒(méi)找到這個(gè)函數(shù)的使用示例