我使用 Launchpad 中的 simple peripheral 示例、并在 simple_peripheral.syscfg 文件中将"传统事件属性选项"设置为"可连接和可扫描的不定向"、终端上会显示一个设备地址、如图1所示、该设备可由其他 BLE 器件检测到。
当将其转换为 "不可连接和不可扫描的非定向"模式时、终端上不会显示任何地址、如图2所示、并且其他 BLE 设备也无法检测到它。
我想计算中心设备在特定时间从广播设备接收到的数据包数量、为此我需要标识广播设备。
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.
我使用 Launchpad 中的 simple peripheral 示例、并在 simple_peripheral.syscfg 文件中将"传统事件属性选项"设置为"可连接和可扫描的不定向"、终端上会显示一个设备地址、如图1所示、该设备可由其他 BLE 器件检测到。
当将其转换为 "不可连接和不可扫描的非定向"模式时、终端上不会显示任何地址、如图2所示、并且其他 BLE 设备也无法检测到它。
我想计算中心设备在特定时间从广播设备接收到的数据包数量、为此我需要标识广播设备。
您好!
感谢您与我们联系。 如果广播更改为不可扫描的未连接、则以扫描角色运行的低功耗蓝牙器件都不会扫描或报告广播。 这是预期行为、因为广告会指定不应扫描它们或将其用于建立连接。 如果您希望通过广播测量器件的吞吐量、则需要将广播设置为至少可扫描。 然后、您可以修改中心项目、以持续扫描和检查某个广播是否属于您的外设、并测量数据包之间的间隔时间以及数据包有效载荷的大小。
如果您对连接吞吐量感兴趣、我建议参考我们在 ble_examples gitHub 上提供的蓝牙5吞吐量演示项目。
此致、
1月
Garvit、您好、
没问题! 通过查看这些代码、我们似乎在默认情况下过滤掉了任何不可连接的数据包、如下所示:

要捕获不可连接的数据包,您需要从 temp16变量中删除 scan_FLT_PDU_connectable_only 定义。 我不确定具体要筛选哪些数据包、因此建议参考 gap_scanner.h 文件。 具体来说、是列出以下滤波器类型的部分:

您可以添加要应用到扫描仪的任何过滤器(前提是它们不会相互冲突),扫描仪只能处理这些数据包。 让我知道您在对滤波器参数进行修改后是否能够看到所需的数据包。
此致、
1月
大家好、Jan、
非常感谢 Jan 在之前的回复中分享的见解。
我将 temp16修改为 temp16 = SCAN_FLT_PDU_NONCONNECTABLE_ONLY | SCAN_FLT_PDU_COMPLETE_ONLY;
我现在面临的问题是-
1)如何修改 simple_peripheral 代码以在不可连接和不可扫描模式下为器件分配一个地址? 即使 simple_central 项目正在扫描不可连接的广播、它也需要某种方法来识别器件、但目前 simple_peripheral 未在该模式下为器件分配任何地址。
2) 2)在修改 simple_central 代码时、它正在将 error.c 文件输入到以下位置并停止执行。

谢谢。
加尔维特
Garvit、您好、
我认为 simple_peripheral 项目仍有一个地址(即使未打印)、 因此、如果我们修改 simple_peripheral 代码以打印地址、或添加一些可在 simple_central 侧查找的唯一广播数据、我们可以确定哪一个是正确的设备。 您是否具有蓝牙监听器的访问权限? 如果是、这将帮助我们确定是否正确发送数据包。
对于2),当你在错误函数处暂停执行时,你能提供 GapScan_SetParam()的返回代码以及调用堆栈吗? 我希望确切地了解该程序是如何到达该区域的。
此致、
1月
大家好、Jan、
很抱歉响应延迟。 我当时在学习数据包监听器、在我看来、我们需要一些特定的硬件来使用它、而我目前还没有这些硬件。
当我现在尝试调试代码时、它既没有进入 error.c 文件、也没有检测到外设。 我只能听到电脑定期发出的错误声音。 声音与我们 在 CCS 中使用 Ctrl+F 查找字符串时得到的声音类似、但代码中不存在。 当我退出 term 终端时、声音也会停止。
我还在努力弄清楚原因。 如果您有任何建议、请告诉我。
谢谢
大家好、Jan、
删除 print 语句后已解决此错误问题、但我仍然无法检测到外围设备。 我已经通过以下方式为外围器件添加了计数器-
静态 uint32_t counter = 0;
uint8_t temp[6]={0xCA、0x00、0x00、0x00、0x00、0xCA};//我给外设器件的随机静态地址
// SimpleCentral_processAppMsg 函数的情况 SC_EVT_ADV_REPORT 下的计数器设置
if (memcmp (temp , pAdvRpt->addr , 6 )== 0){
计数器=计数器+1;
Display_Print1 (dispHandle、4、0、"counter %d"、
计数器);
}
我已经在计数器上设置了一个断点、但代码永远不会在这里停止。