微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > cc2540 GATT_Notification

cc2540 GATT_Notification

时间:12-22 整理:3721RD 点击:

官方有没有用GATT_Notification从机向主机发送数据的例程 主从机都是开发板。SimpleBLECentral这个例程用GATT_Notification向主机发送数据需要怎样修改,貌似要向0x2902寄存器写入0x01,怎么写入,还有那个通信许可的handle怎么获取。

hi asdfe,

如果你看simpleBLECentral.c 这个文件, 里面有个函数:simpleBLECentralProcessGATTMsg()

这个函数就是处理各种从peripheral过来的数据.

但是在示例代码中并没有加入通知, 就是notification的接收, 所以你得自己添加代码.

很简单, 类似  if ( ( pMsg->method == ATT_READ_RSP ) || ........),  你添加  else if ( ( pMsg->method == ATT_HANDLE_VALUE_NOTI ) ||......)

0x2902你是指Client Characteristic Configuration, 不是寄存器吧?

你说的这个handle都是紧跟在相应的characteristic value的handle后面一个.你找到相应的characteristic value的handle, 用这个characteristic value的UUID去查找这个characteristic value的attribute handle, 找到后加1, 就是你要的handle了

good luck!

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 ( simpleBLEDiscState != BLE_DISC_STATE_IDLE )
{
simpleBLEGATTDiscoveryEvent( pMsg );
}

}

黄色加亮部分就是你所说的那个功能函数吧

GATT_Notification( 0, &nData, FALSE )有三个参数,第一个是不是一般都为0,第二个ndata。handle数字是不是根据

 // Characteristic Value 1
      {
        { ATT_BT_UUID_SIZE, simpleProfilechar1UUID },
        GATT_PERMIT_READ | GATT_PERMIT_WRITE,
        0,
        &simpleProfileChar1
      },这个函数来的  这里的handle=0所以设定为1.我这样做能够实现发送了。我用20ms的定时器定时发送一包数据,数据包会丢失。

我想问下怎样实现一次连接发送三个数据包?是不是用多个特征值同时发送?这样的话我主机端的接收地址能设置多个么?

我需要1s发送2k的数据。我用的主机也是开发板,如果换成手机是不是会快一点,因为我加快发送速度的时候感觉是主机丢包。

Yan,你好!

请问从peripheral发到主设备的notification,主设备是把这个notification的值存到哪里了呢?我们知道数据的传输有五个通道,主设备接收的notification是存在那个通道?

Hi xie,

请看这个帖子, 有你要的答案

http://www.deyisupport.com/question_answer/analog/wireless_connectivity/f/45/p/23013/77614.aspx#77614

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top