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.

[参考译文] RTOS:[CC2640]从 cc2640读取 RSSI

Guru**** 2576215 points
Other Parts Discussed in Thread: CC2640

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/588190/rtos-cc2640-read-rssi-from-cc2640

主题中讨论的其他器件:CC2640

工具/软件:TI-RTOS

大家好
我希望当 cc2640从 PC 软件狗获取 cmd 时、在 simpleBLEPerphy 中读取 cc2640的 RSSI。
我运行了 HCI_ReadRssiCmd(),但 cc2640没有反馈“HCI_GAP_EVENT_EVENT”事件。
我不知道我的代码有什么问题?

<simpleBLEPerpheral.c>

静态空 SimpleBLEPeripheral_taskFxn (UARg a0、UARg A1)
{
uint16_t rssiReadRate = 3000;
GAPRole_SetParameter (GAPROLE_RSSI_READ_RATE、sizeof (uint16_t)、&rssiReadRate);
}



bStatus_t GAPRole_SetParameter (uint16_t param、uint8_t len、void * pValue)
{
…………μ A
案例 GAPROLE_RSSI_READ_RATE:
如果(len =sizeof (uint16_t))
{
gapRole_RSSIReadRate =*((uint16_t*) pValue);
if ((gapRole_RSSIReadRate)&&(gapRole_state = GAPROLE_Connected))
{
Util_restartClock (&rssiReadClock、gapRole_RSSIReadRate);
}
}
其他
{
RET = bleInvalidRange;
}
中断;
…………
}
静态空 gapRole_init (void)
{
GAP_RegisterForMsgs (self 实体);
Util_constructClock (&rsReadClock、gapRole_clockHandler、0、0、 false、RSSI_READ_EVT);
}
静态 void gapRole_taskFxn (Uarg a0、Uarg A1)
{
………
if (events & RSSI_READ_EVT)
{
events &=~RSSI_READ_EVT;
//在连接
中仅获取 RSSI if ((gapRole_state == GAPROLE_CONNECTED)||(gapRole_state == GAPROLE_CONNECTED _ADV)
){
//要求获取 RSSI HandhciStatus_CONNECT_NULT

状态= GAPRole_Status = GAPRON_CLUS_ON_CLUSH;mConnection_CLUSH = NULL_Connection_ON_ON_ONF; 












 return succe//设置下一个事件 if (gapRole_RSSIReadRate &&!status){ Util_restartClock (&rssiReadClock,gapRole_RSSIReadRate;} static void gapRole_processStackMsg (iCall_HDR *pMsg ){=pcmpcmp_evt = pcmp_event_event_(pcmt_r)=pcmp_event_en_pcmp_p_event=pcmp_event=pnipt_en_event=(pcmt_event=pcmt_en_event_r_p_p_p_pcmt_event=p_event=pcmt_each_p_e=p&r&r&r&r&r&r&r&r&r=pcmt_pcmpcmt_pcmt_r&r&r&r&r&r&r&r&r&






if (((gapRole_state =GAPROLE_Connected)||(gapRole_state =GAPROLE_Connected_ADV)&&(RSSI!=_NOT_Available))
{
//将 RSSI 报告到 APP
IF (pGapRoles_AppCRSSI && pGapRoles_AppCgs)
};{>psiRsprue->rspruags->pssnrgspruags->rfrs/snrgssnrgssrad&pdsp}







}



typedef void (* gapRolesRssiRead_t)(int8_t newRSSI);

typedef 结构
{
gapRolesStateNotify_t pfnStateChange;
gapRolesRssiRad_t pfnRssiRead;
}gapRolesCBs_t; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的郭先生/女士:

    您能否将读取 RSSI 的实现与 simple_central 中的实现进行比较?

    就我所能说的、您似乎正在执行这些步骤。

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经尝试过相同的方法并得到类似的结果- HCI_GAP_EVENT_EVENT 永远不会触发。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我应该解决以下问题:

    当使用 simpleBLEPeripheral 示例时,SimpleBLEPeripheral_init()函数会为事件注册:

    //使用 GAP 注册 HCI/主机消息
    GAP_RegisterForMsgs (self Entity); 

    但不用于任何目的:

    静态 uint8_t SimpleBLEPeripheral_processStackMsg (iCall_HDR *pMsg)
    {
    uint8_t safeToDealloc = true;
    
    switch (pMsg->event)
    {
    案例 GATT_MSG_EVENT:
    //处理 GATT 消息
    SAFeToDealloc = SimpleBLEPeripheral_processGATTMsg (((gattMsgEvent_t *) pMsg);
    中断;
    
    案例 HCI_GAP_EVENT_EVENT:
    {
    //处理 HCI 消息
    switch (pMsg->status)
    {
    案例 HCI_COMMAND_COMPLET_EVENT_CODE:
    //处理 HCI 命令完成事件
    中断;
    
    默认值:
    中断;
    }
    }
    中断;
    
    默认值:
    //不执行任何操作
    break;
    }
    
    return (safeToDealloc);
    } 

    我假设当您调用 GAP_RegisterForMsgs()代码中的两个位置(都是 simple_peripheral.c 和 peripheral.c)时,一个被称为最后的"wins"。 因此在我们的案例中,事件通知将转到 SimpleBLEPeripheral_processStackMsg()而不是 gapRole_processStackMsg()。

    如果随后在 simple_peripheral.c 中删除 GAP_RegisterForMsgs()调用,则事件会转到正确的位置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的。
    我现在可以获得 RSSI、非常感谢。

    但我有疑问
    我使用"HCI_ReadRssiCmd"来设置 HCI cmd。
    HCI_ReadRssiCmd ():
    hciStatus_t HCI_ReadRssiCmd (uint16 connHandle)

    返回 hciSendParamsCmd (HCI_READ_RSSI、connHandle、0、0、matchHciReadRssiCS); <=#define HCI_READ_RSSI 0x1010

    SimpleBLEPeripheral_processStackMsg ():
    hciEvt_CmdComplete_t * pPktt =(hciEvt_CmdComplete_t *) pMsg;
    案例 HCI_GAP_EVENT_EVENT:
    案例 HCI_COMMAND_COMPLET_EVENT_CODE:
    ======================================================================================================================== 我可以获得 RSSI
    if (pkt->cmdlPCode =HCI_READ_RSSI)

    ======================================================== 我不知道为什么 pkt->cmdlopcode != HCI_READ_RSSI????
    我得到 pkt->cmdlopcode 的值为0x1405、而不是0x1010