else if ( simpleBLEState == BLE_STATE_CONNECTED &&
GUA_CHAR1_Hdl != 0 )
{
//香瓜
uint8 status;
// Do a read or write as long as no other read or write is in progress
if ( simpleBLEDoWrite )
{
// Do a write
attWriteReq_t req;
req.handle = GUA_CHAR1_Hdl; //simpleBLECharHdl;
req.len = 1;
req.value[0] = simpleBLECharVal;
req.sig = 0;
req.cmd = 0;
status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
NPI_PrintString("Write OK!");
}
// else
// {
// // Do a read
// attReadReq_t req;
//// req.handle = simpleBLECharHdl;
// status = GATT_ReadCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
// }
if ( status == SUCCESS )
{
//simpleBLEProcedureInProgress = TRUE;
simpleBLEDoWrite = simpleBLEDoWrite;
}
//香瓜 }
我主机CC2541开发板用Notify方式发送数据给蓝牙模块(从机),
代码如上。可是只有第一次管用。
就是蓝牙模块收到数据,指示灯取反,第一次发送取反。第二次第三次则不反应。
判断应该是蓝牙模块没有收到。
因为用手机发送给蓝牙模块,每次指示灯都取反。
大神看看,哪里有问题?谢谢!
ccb bcc:
//开启notify的CCC attWriteReq_t req; req.handle = GUA_CHAR1_CCC_Hdl; //char1的CCC的特征值句柄,这里写死0x1C,可通过btool获取到 req.len = 2; req.value[0] = LO_UINT16(GATT_CLIENT_CFG_NOTIFY); //0x0001为开notify req.value[1] = HI_UINT16(GATT_CLIENT_CFG_NOTIFY); req.sig = 0; req.cmd = 0; GATT_WriteCharValue( 0, &req, simpleBLETaskId ); NPI_PrintString("Notify OK!");
我以为是没有开启notify CCC,加上以上代码,谁知指示灯一次也不取反。
去掉这段,就取反一次。
ccb bcc:
回复 YiKai Chen:
发现问题了。
第一次发的是0x43,第二次发的是0x44,以此类推。
为什么会这样呢?我每次都赋值了。谢谢!
YiKai Chen:
回复 ccb bcc:
調試一下你的源碼盤查囉
ccb bcc:
回复 YiKai Chen:
搞好啦,把0x43写死就OK啦。