我無(wú)論怎么改主機(jī)端的req.pValue這個(gè)值,服務(wù)端收到的第一位數(shù)據(jù)永遠(yuǎn)都是0x5a。服務(wù)端跟客戶端代碼都是官方例子
這里的客戶端使用的是手機(jī)還是MCU呢,
如果使用的是手機(jī)需要在手機(jī)端主動(dòng)使能notify的功能;如果想要從機(jī)自己使能notify的功能可以添加這樣一個(gè)函數(shù):
uint8 enable_notify(uint16 connection_handle,uint8 enable) {
uint16 cccd = 0;
if(enable) {
cccd |= GATT_CLIENT_CFG_NOTIFY;
}else {
cccd &= ~GATT_CLIENT_CFG_NOTIFY;
}
return GATTServApp_WriteCharCfg( connection_handle, simpleProfileChar4Config, cccd );
}
在連接后此函數(shù)(Peripheral_LinkEstablished)調(diào)用就可以了。?
enable_notify( peripheralConnList.connHandle,ENABLE);
如果使用的是我們的CH582充當(dāng)主機(jī);可以在Central例程中,連接成功后會(huì)去找服務(wù)的句柄,找到notify的句柄后進(jìn)行一個(gè)寫操作就可以了:
else if(centralDiscState == BLE_DISC_STATE_CCCD)
{
if(pMsg->method == ATT_READ_BY_TYPE_RSP &&
pMsg->msg.readByTypeRsp.numPairs > 0)
{
centralCCCDHdl = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],
pMsg->msg.readByTypeRsp.pDataList[1]);
centralProcedureInProgress = FALSE;
// Start do write CCCD
tmos_start_task(centralTaskId, START_WRITE_CCCD_EVT, DEFAULT_WRITE_CCCD_DELAY);? ? ? ? ? ?//通過(guò)這個(gè)寫任務(wù)打開(kāi)notify
// Display Characteristic 1 handle
PRINT("Found client characteristic configuration handle : %x \n", centralCCCDHdl);
}
centralDiscState = BLE_DISC_STATE_IDLE;
}
主機(jī)代碼獲取notify數(shù)據(jù)位置:
else if(pMsg->method == ATT_HANDLE_VALUE_NOTI)
{
PRINT("Receive noti: %x\n", *pMsg->msg.handleValueNoti.pValue);
}
已解決