This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2541读取主机RSSI的问题

Other Parts Discussed in Thread: CC2541

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);来设置;

    而上面这句要放在连接建立之后。