CC2541读取主机RSSI的问题
TI的大牛们:
我想在CC2541(外设)读取主机的RSSI值,目前做法如下,通过RSSI_READ_EVT读取,然后在HCI_GAP_EVENT_EVENT中利用回调查看RSSI的值。
现遇到一个问题,就是开始读取后,RSSI的值不会根据距离的变化而变化,始终为开始采集时的值,即使变化也是很微小的变化。如果断开连接,再次重连,则RSSI值会恢复正常,但是和之前一样,距离变化其值不改变。大概的表现如下:
1. 外设放在与DONGLE很近的位置A,连接,外设读取RSSI值为-47,当外设远离DONGLE到达一个比较远的位置B时,这个过程RSSI读取值始终为-47不变,即使变化也很小,正负2左右。
2.外设放在位置B与DONGLE连接,外设读取RSSI值为-83,当外设移至位置A时,RSSI值也不变化。
我看HCI_ReadRssiCmd函数说明,This BT API is used to read the RSSI of the last packet received on a connection given by the connection handle. 他会读取上一个包里的RSSI的值,那么RSSI值应该是会实时变化的。
问题出在哪里我目前无法找到,希望得到你的帮助。
Hi TracyMcgrady
我也遇到过这个问题。
这个问题的现象是:在传输数据时会更新RSSI值,而没有传输数据时(保持连接)则无法更新RSSI——一直保持在连接更新时的数值。
你可以这么做来解决你的问题:定义一组特征值,每隔一定时间间隔,主机就对其进行读写,这样就可以更新RSSI值。
你确定设置读取速率了吗?
在peripheral中,代码是:
/******************************************************************************************************/
if ( events & RSSI_READ_EVT )
{
// Only get RSSI when in a connection
if ( gapRole_state == GAPROLE_CONNECTED )
{
// Ask for RSSI
VOID HCI_ReadRssiCmd( gapRole_ConnectionHandle );
// Setup next event
if ( gapRole_RSSIReadRate )
{
VOID osal_start_timerEx( gapRole_TaskID, RSSI_READ_EVT, gapRole_RSSIReadRate );
}
}
return ( events ^ RSSI_READ_EVT );
}
/******************************************************************************************************/
VOID osal_start_timerEx( gapRole_TaskID, RSSI_READ_EVT, gapRole_RSSIReadRate );的执行条件是gapRole_RSSIReadRate不为0;
而gapRole_RSSIReadRate的设置是通过GAPRole_SetParameter(GAPROLE_RSSI_READ_RATE, sizeof(uint16), &desired_rssi_read_rate);来设置;
而上面这句要放在连接建立之后。
