你(们)好
我正在尝试读取目标信道上 Tx 音调的 RSSI。 此设置由两个电路板组成,一个电路板在目标通道上发出 Tx 音调,另一个器件在同一通道上设置 Rx 音调命令,并在调用 Rx 音调命令后调用 HCI_ReadRSSI(),但该 API 始终返回值0。
此外、我还在 GAP_DEVICE_INFO 事件下接收扫描的信标的 RSSI、但无法使用该事件查找 Tx 音调的 RSSI。
有关如何在任何预期通道上读取 Tx 音调的 RSSI 的任何建议。
此致
苏山州
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.
你(们)好
我正在尝试读取目标信道上 Tx 音调的 RSSI。 此设置由两个电路板组成,一个电路板在目标通道上发出 Tx 音调,另一个器件在同一通道上设置 Rx 音调命令,并在调用 Rx 音调命令后调用 HCI_ReadRSSI(),但该 API 始终返回值0。
此外、我还在 GAP_DEVICE_INFO 事件下接收扫描的信标的 RSSI、但无法使用该事件查找 Tx 音调的 RSSI。
有关如何在任何预期通道上读取 Tx 音调的 RSSI 的任何建议。
此致
苏山州
您好、Sudhanshu、
您可能需要查看 simple_central 示例。 此示例展示了如何测量传入数据包的 RSSI。
如您所见,首先发出命令 HCI_ReadRssiCmd()。 然后、您从堆栈接收一个 HCI_GAP_EVENT_EVENT、其状态为 HCI_COMMAND_COMPLETE _EVENT_CODE、操作码 HCI_READ_RSSI。 在这里、您可以得到 RSSI 的值。
我希望这将有所帮助、
此致、
您好!
我想您正在寻找 HCI_EXT_ModemTestRxCmd()。
此致、
你(们)好
在 HCI_GAP_EVENT_EVENT 下 ,我是否需要通过(pEvent->deviceInfo.RSSI)访问 RSSI?
此外、如何使用操作码 HCI_READ_RSSI 来获取该值?
案例 HCI_GAP_EVENT_EVENT: { switch( pMsg->status ) { 案例 HCI_BLE_hardware_error_event_code: { AssertHandler (HAL_assert_cause_hardware_error、 0U); } 中断; 案例 HCI_COMMAND_COMPLET_EVENT_CODE: /*使用操作码 HCI_READ_RSSI 获取 RSSI */ // HCI_READ_RSSI; 中断; 默认值: { ;/*不执行任何操作*/ } 中断;
此致
苏山州
您好!
请查看我们的 simple_peripheral 示例。 在输出示例中,使用函数 SimplePeripheral_processCmdCompleteEvt()处理 HCI_COMMAND_COMPLETE_EVENT_CODE。
案例 HCI_GAP_EVENT_EVENT: { //处理 HCI 消息 switch (pMsg->status) { 案例 HCI_COMMAND_COMPLET_EVENT_CODE: //在此处处理 HCI 命令完成事件 { SimplePeripheral_processCmdCompleteEvt ((hciEvt_CmdComplete_t *) pMsg); 中断; } 静态空 SimplePeripheral_processCmdCompleteEvt (hciEvt_CmdComplete_t *pMsg) { uint8_t status = pMsg->pReturnParam[0]; //查找此命令完成用于 switch (pMsg->cmdOpcode) { HCI_READ_RSSI 案例: { INT8 RSSI =(INT8) pMsg->pReturnParam[3]; //显示 RSSI 值、如果 RSSI 高于阈值、更改为更快的 PHY if (status == Success){ //... } // if 末尾(status == Success) 中断; } //... 默认值: break; }//开关结束(pMsg->cmdOpcode) }
我希望这将有所帮助、
此致、
你(们)好
INT8 RSSI =(INT8) pMsg->pReturnParam[3];
索引3表示什么?
在调用 HCI_ReadRssi()之前,上述代码始终返回值0,我调用 HCI_EXT_ModemTestRxCmd()。
此致
苏山州
你(们)好
对输入错误表示歉意。
我只调用 HCI_ReadRssiCmd(),并且在操作码 HCI_READ_RSSI 断点也会被命中。 但我得到的值始终为0。
此致
苏山州
您好!
堆栈似乎返回一个与 HCI_ERROR_CODE_UNKNOWN_CONN_ID 相对应的错误代码。
您能否提供一个代码片段来显示如何调用 HCI_ReadRssiCmd()? 此外、是否建立了一些连接? 器件是否处于测试模式? 在启动 HCI_ReadRssiCmd()之前,是否给栈一些时间来“启用”HCI_EXT_ModemTestRxCmd()?
此致、
你(们)好
读取 RSSI 时没有建立连接、但是我的器件处于连续扫描模式。 没有、我的器件未处于测试模式。
是的、我在 HCI_EXT_ModemTestRxCmd ()和 HCI_ReadRssiCmd ()之间提供一些延迟。
静态 eMfgErrType RxToneEnbl( StructData * pMsg ) { eMfgErrType Status = eInvalidCmd; hciStatus_t TestStatus = false; tUI8 ChnlNo = pMsg->pData[ 3]; if ( ChnlNo <= 39u ) { TestStatus = HCI_EXT_ModemTestRxCmd ( ChnlNo );//通道0 -成为命令的一部分*/ if (TestStatus == HCI_Success) { memcpy( pMsg->pData、TstPass、cSizeOfRsp ); pMsg->len =( cSizeOfRsp - cDataOffset ); 状态= eSuccessful; } 其他 { 状态= eFailure; } } 否则 { /*无效的命令*/ } 返回状态; }/* --------------------------------------------------------------- 静态 eMfgErrType ReadRssi( StructData * pMsg ) { eMfgErrType Status = eInvalidCmd; tUI8 RssiVal = 0; HCI_ReadRssiCmd( 0); RssiVal = FetchRSSI_g();tUrsOfSize= 0;RsMssMssq>RssiStatus =&FetchRSSI= eOffsOfSizeN;RspruSizeN = eSizeN;RspruSizeN = eSizeN = eSizeN;RspruSizeN = eSizeN = eSizeN
PFA 代码片段。
我的获取 RSSI 函数从我的 SimpleCentral.c 获取 RSSI 值
此致
苏山州
您好 Clement
您能否分享一些有关测试模式的文档、例如如何使用。
我的用例如下所示
我的器件将在中央模式下工作。 因此、在生产制造过程中、我需要测试 BLE 模块的 Tx 和 Rx。
我计划的方法是我的器件1、它将从 固定通道上的 HCI_EXT_ModemTestTxCmd ()开始、例如通道20。
同时,我的器件2 (仅配置为简单中央)将调用 HCI_EXT_ModemTestRxCmd (),经过一段延迟后,我将调用 HCI_ReadRssiCmd ()。
如果 RSSI 在所需范围内、我将通过测试、否则测试将失败。
在互换器件1和器件2的功能后,将重复相同的过程。 这样、我就可以检查我的 Tx 和 Rx 是否正常工作。
因为我的器件无法进行广播、所以我规划了这种方法。
您能不能建议在生产配置为简单中央的器件时使用其他方法来测试我的射频的 Tx 和 Rx。
此致
苏山州