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.

[参考译文] CC2652R:我是否可以使用 HCI 接口而不是 RTLS 来完成连接 CTE?

Guru**** 1774980 points
Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1368496/cc2652r-can-i-use-the-hci-interface-instead-of-rtls-to-complete-the-connection-cte

器件型号:CC2652R
主题中讨论的其他器件:LAUNCHXL-CC26X2R1

工具与软件:

您好!  

SW: simplelink_cc13xx_cc26xx_sdk_5_40_00_40

硬件: LAUNCHXL-CC26X2R1 + BOOSTXL-AOA

我正在使用连接 CTE 开发我自己的 AOA 项目。  我在看 RTLS 例程、但我认为它过于臃肿。 我使用 simple_central 演示。  连接 从器件后、我将进行配置

ConnectionCteReceiveParams 和 ConnectionCteRequestEnable、 然后从 HCI_BLE_CONNECTION_IQ_REPORT_EVENT 事件获取 IQ。  遗憾的是、配置成功后不会生成任何事件。
这是我的函数:
   在与从设备。hci_BLE_connection_iq_report_event 等待 SimpleCentral_processStackMsg Call_Hdr (35*200pMsg)建立连接后、将调用该函数。
我可以在 ICall 架构中调用 HCI 接口吗?  为什么  不触发 HCI_BLE_CONNECTION_IQ_REPORT_EVENT?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您联系我们。 我们将仔细研究您的问题、并尽快与您联系。

    此致、

    1月

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

    您好!

    我已经捕获了无线数据包数据、没有看到 LL_CTE_REQ、 所以应该有两条 HCI 指令不起作用

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

    您好!

        在调用 HCI_LE_SetConnectionCteRequestEnableCmd ()之前、需要等待 HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMS 事件信号 HCI_LE_SetConnectionCteReceiveParamsCmd ()完成

    有关更多详细信息、请参阅 API 文档。

    我希望这将有所帮助、
    Tanguy

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

     Tanguy、您好!

    我试了一下。 当 HCI_LE_SetConnectionCteReceiveParamsCmd 工作时、我 在 SimpleCentral_processStackMsg ()中侦听 HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMS 事件、但没有接收到事件。  我怀疑 HCI 命令在运行时是否能生成 Call_Hdr *30cpMsg

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

    尊敬的 Ethan:

    对不起、混淆不清、命令完成事件(HCI_COMMAND_COMPLETE_EVENT_CODE) 应与 cmdOpcode HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMS 一起发送 

    有关更多文档、请参阅 用户指南中的接收 HCI 事件部分。

    此致、
    Tanguy

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

    Tanguy、您好!

    我查看了用户指南发现它很有用、并对照它验证了我的项目。  
    1.包含 HCI 传输层头文件。

    #include "HCI_TL.h"

    #include "iCall_hci_tl.h"
    2.  GAP_RegisterForMsgs(selfEntity);已注册
    3.使用  HCI_LE_SetConnectionCteReceiveParamsCmd()
    4. 根据您的说法,我应该等待   xx_processStackMsg 中的 HCI 事件(appMsg Call_Hdr ) >>   Case HCI_GAP_EVENT_EVENT >>   
    案例 HCI_COMMAND_COMPLETE_EVENT_CODE >> 案例 HCI_LE_SET_CONNECTION_CTE_RECEIVE_PARAMS  是吗?  
    我在发送 HCI_LE_SetConnectionCteReceiveParamsCmd 之后使用了上述配置、但未产生任何 HCI_GAP_EVENT_EVENT。  您能为我测试一下吗?  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ethan:

    很抱歉我的回答延迟、对于完整性检查、您能否确认  HCI_LE_SetConnectionCteReceiveParamsCmd ()返回成功。 此外、您正在使用旧的 SDK、您能否将代码迁移到 最新的 SDK (7.41.00.17)并再次测试?

    最后、您会介意共享您的 processStackMsg 函数吗?

    此致、
    Tanguy

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

     Tanguy、您好!

    1. 我对 HCI_LE_SetConnectionCteReceiveParamsCmd 的返回值做了判断,还可以。  尽管我注意到该 函数会返回固定值 HCI 成功

    static cmd_ack_t cmdCTERxCommand(uint8_t *s, uint16_t len, uint16_t id)
    {
    
        BT_PRINT(("cte ENABLE ! \r\n"));
    
        conn_ctx_t *p_conn_ctx = mible_linkdb_get_info_by_conn_index(0);
            if(p_conn_ctx == NULL)
                return cmd_ack_invalid_param;
        BT_DUMP_HEX(p_conn_ctx->connect.peer_addr,6);
        uint8_t ant_pattern[] = {0,1,2};
    
       uint8_t ret = HCI_LE_SetConnectionCteReceiveParamsCmd(p_conn_ctx->conn_handle,1,2,sizeof(ant_pattern),ant_pattern);
        /*Configure AoA receiver parameters */
    
       if(ret!= 0)
       {
            BT_PRINT(("cte config error !"));
       }
       else
        {
            BT_PRINT(("cte config ok ! \r\n"));
        }
        
        BT_PRINT(("end,ok,return !"));
        return cmd_ack_ok;
    }

    2. 我的项目是早期开发的,所以 我使用的是旧版本,稍后我会在新版本中进行测试

    3、 这里是我的函数、 我根据外设演示来实现主从函数。  顺便说一下、在 SimplePeripheral_processStackMsg 函数之前、我会有自己的函数处理某 msg 消息、因此 SimplePeripheral_processStackMsg 中的某些情况将为空

    static uint8_t SimplePeripheral_processStackMsg(ICall_Hdr *pMsg)
    {
      // Always dealloc pMsg unless set otherwise
      uint8_t safeToDealloc = TRUE;
    
      BT_PRINT((" MSG Event type is %02x !!!!  \r\n",pMsg->event));
    
      switch (pMsg->event)
      {
        case GAP_MSG_EVENT:
          SimplePeripheral_processGapMessage((gapEventHdr_t*) pMsg);
          break;
    
        case GATT_MSG_EVENT:
          // Process GATT message
          safeToDealloc = SimplePeripheral_processGATTMsg((gattMsgEvent_t *)pMsg);
          break;
    
        case HCI_GAP_EVENT_EVENT:
        {
            BT_PRINT((" hci message is %02x\r\n",pMsg->status));
          // Process HCI message
          switch(pMsg->status)
          {
            case HCI_COMMAND_COMPLETE_EVENT_CODE:
            // Process HCI Command Complete Events here
            {
              SimplePeripheral_processCmdCompleteEvt((hciEvt_CmdComplete_t *) pMsg);
              break;
            }
    
            case HCI_BLE_HARDWARE_ERROR_EVENT_CODE:
              AssertHandler(HAL_ASSERT_CAUSE_HARDWARE_ERROR,0);
              break;
    
            // HCI Commands Events
            case HCI_COMMAND_STATUS_EVENT_CODE:
            {
    
              break;
            }
    
            // LE Events
            case HCI_LE_EVENT_CODE:
            {
              break;
            }
            case HCI_BLE_CONNECTION_IQ_REPORT_EVENT:
              BT_PRINT((" HCI CONNECTION IQ REPORT !!!!  \r\n"));
            break;
            default:
              break;
          }
    
          break;
        }
    
        case L2CAP_SIGNAL_EVENT:
          // Process L2CAP signal
          //safeToDealloc = SimplePeripheral_processL2CAPMsg((l2capSignalEvent_t *)pMsg);
          RTLSCoordinator_processL2CAPSignalEvent((l2capSignalEvent_t *)pMsg);
          break;
    
        case L2CAP_DATA_EVENT:
          RTLSCoordinator_processL2CAPDataEvent((l2capDataEvent_t *)pMsg);
          break;
    
        default:
          // do nothing
          break;
      }
    
      return (safeToDealloc);
    }

    以下是一些日志:

    [16:57:56.684]发→◇AT+LECCONN=DF6AD712E6DC1
    □
    [16:57:56.684]收←◆
    OK
    
    [16:57:56.729]收←◆ MSG Event type is 91 !!!!  
     hci message is 3E
     MSG Event type is D0 !!!!  
    
    [16:57:56.749]收←◆ MSG Event type is B0 !!!!  
     MSG Event type is B0 !!!!  
     MSG Event type is 91 !!!!  
     hci message is 3E
     MSG Event type is B0 !!!!  
     MSG Event type is B0 !!!!  
    
    [16:57:56.987]收←◆ MSG Event type is 91 !!!!  
     hci message is 3E
    
    [16:58:07.377]发→◇AT+CTE_RX
    □
    [16:58:07.380]收←◆cte ENABLE ! 
    DC E6 12 D7 6A DF cte config ok ! 
    end,ok,return !
    OK

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

    您好!

    我看到您使用  RTLSSRV API (+)为 RTLS 打开了一个新的 e2e 主题:使用 Connection CTE 使用 RTLS API 构建项目基于 simple_peripheral - Bluetooth 论坛- BluetoothRegistered︎- TI E2E 支持论坛、该主题是否仍然与您相关?

    此致、
    Tanguy

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

     Tanguy、您好!

    我正在尝试另一种方法。 如果当前问题未能很快解决、可能可以暂停此问题。