关于主机去读取notify
时间:10-02
整理:3721RD
点击:
现有一款蓝牙温度计(ifever),有电量服务,连接状态,温度。用GATT_ReadCharValue读出了电量和连接状态,温度的数据用GATT_ReadCharValue没读出来,在lightblue中点击Listen for otifications 会不停地显示Characteristic Notified (0x4800C00FE2C),像这样的notify主机应该如何读取,还请告知,谢谢。
主机用的是CC2541
如下述代码所示,加入处理notify和indicate的分支
else if ( pMsg->method == ATT_HANDLE_VALUE_NOTI ||
pMsg->method == ATT_HANDLE_VALUE_IND )
static void simpleBLECentralProcessGATTMsg( gattMsgEvent_t *pMsg )
{
if ( simpleBLEState != BLE_STATE_CONNECTED )
{
// In case a GATT message came after a connection has dropped,
// ignore the message
return;
}
if ( ( pMsg->method == ATT_READ_RSP ) ||
( ( pMsg->method == ATT_ERROR_RSP ) &&
( pMsg->msg.errorRsp.reqOpcode == ATT_READ_REQ ) ) )
{
if ( pMsg->method == ATT_ERROR_RSP )
{
uint8 status = pMsg->msg.errorRsp.errCode;
//LCD_WRITE_STRING_VALUE( "Read Error", status, 10, HAL_LCD_LINE_1 );
}
else
{
// After a successful read, display the read value
uint8 valueRead = pMsg->msg.readRsp.value[0];
//LCD_WRITE_STRING_VALUE( "Read rsp:", valueRead, 10, HAL_LCD_LINE_1 );
}
simpleBLEProcedureInProgress = FALSE;
}
else if ( ( pMsg->method == ATT_WRITE_RSP ) ||
( ( pMsg->method == ATT_ERROR_RSP ) &&
( pMsg->msg.errorRsp.reqOpcode == ATT_WRITE_REQ ) ) )
{
if ( pMsg->method == ATT_ERROR_RSP == ATT_ERROR_RSP )
{
uint8 status = pMsg->msg.errorRsp.errCode;
//LCD_WRITE_STRING_VALUE( "Write Error", status, 10, HAL_LCD_LINE_1 );
}
else
{
// After a succesful write, display the value that was written and increment value
//LCD_WRITE_STRING_VALUE( "Write sent:", simpleBLECharVal++, 10, HAL_LCD_LINE_1 );
}
simpleBLEProcedureInProgress = FALSE;
}
else if ( pMsg->method == ATT_HANDLE_VALUE_NOTI ||
pMsg->method == ATT_HANDLE_VALUE_IND )
{
if(pMsg->msg.handleValueNoti.handle == 0x001B)
{
//在此处处理notify,注意对应的handle替换成正确的值
}
else if(pMsg->msg.handleValueInd.handle == 0x001F)
{
//在此处处理indicate,注意对应的handle替换成正确的值
ATT_HandleValueCfm(simpleBLEConnHandle);
}
}
else if ( simpleBLEDiscState != BLE_DISC_STATE_IDLE )
{
simpleBLEGATTDiscoveryEvent( pMsg );
}
}
问题解决了,非常感谢~
请问一下,为什么会这样呢?
还有个问题咨询下,主机通过从机notify对应的handle+1 去写入0x0001打开notify,这个是协议规定的还是可以随意修改的?
