主题中讨论的其他器件:CC2340R5、 SysConfig
工具/软件:
大家好、我正在使用 CC2340R5和 ble SDK 版本: simplelink_lowpower_f3_SDK_8_40_02_01。
我希望我的中心扫描所有附近的广告商,但只发送一个扫描请求到广告商,我动态地添加到允许列表。
是否有以这种特定方式进行扫描的过滤器策略?
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.
工具/软件:
大家好、我正在使用 CC2340R5和 ble SDK 版本: simplelink_lowpower_f3_SDK_8_40_02_01。
我希望我的中心扫描所有附近的广告商,但只发送一个扫描请求到广告商,我动态地添加到允许列表。
是否有以这种特定方式进行扫描的过滤器策略?
您好:
感谢您联系我们! 为此、您需要将过滤器策略设置为 SCAN_FLT_POLICY_AL。 我还包括了下面的筛选器策略选项的链接。
我希望这对您有所帮助!
此致、
Tarek
尊敬的 Tarek:
感谢您的快速答复。
我实际上知道接受列表扫描筛选器、但我要寻找的是:
中心将扫描所有广告主、但仅向接受列表中的设备发送扫描请求。
仅接受来自广播器地址位于接受列表中的设备的广播包。 应忽略未发送到此设备的定向广播包。
正如上述声明明确指出,只有属于接受列表一部分 的设备会被中心扫描,但我要寻找的是,中心应该听所有的广告商,但只发送扫描请求到一个是接受列表的一部分。
我希望我的疑问现在对你来说是清楚的。
您好:
感谢您的澄清! 根据您所描述的内容、您似乎希望中心被动扫描、直到它从接受列表中扫描广告。 遗憾的是、BLE 栈没有条件有源扫描选项(BLE 规范中未指定)。
实现所需行为的一种方法是首先将中央设备设置为被动扫描、然后在扫描所需设备的广播时、将设备地址添加到接受列表中。 之后、使用过滤器策略 SCAN_FLT_POLICY_AL 动态设置器件以执行主动扫描
为此、请执行以下操作:
BLEAppUtil_EventHandler_t centralScanHandler = { .handlerType = BLEAPPUTIL_GAP_SCAN_TYPE, .pEventHandler = Central_ScanEventHandler, .eventMask = BLEAPPUTIL_SCAN_ENABLED | BLEAPPUTIL_SCAN_DISABLED | BLEAPPUTIL_ADV_REPORT // ADD THIS };
case BLEAPPUTIL_ADV_REPORT: { bleStk_GapScan_Evt_AdvRpt_t *pScanRpt = &scanMsg->pBuf->pAdvReport; if (pScanRpt->pData != NULL) { uint8_t indx = 0; for (; indx < pScanRpt->dataLen; indx++) { MenuModule_printf(APP_MENU_SCAN_EVENT + indx, 0, "Data: %d", pScanRpt->pData[indx]); } } break; }
更多有关我们的扫描和广播的信息、请通过以下链接查看我们的 SimpleLink Academy 培训:
dev.ti.com/.../node
我希望这能回答您的问题!
此致、
Tarek
首先感谢 Tarek D 这样一个详细的解释。
我完全得到你建议的方法,但这里的问题是我的应用程序,其中所有设备的第一手将是中央,他们将模式切换到广告商作为一个回退机制,这是完全随机的,即它可以发生在任何特定的时刻实时。
现在保持我的中心被动扫描,并使所需的广告主添加到接受列表,然后手动更改扫描过滤器,只扫描在接受列表中的广告主,将不是一个适合我的变通办法.
因为可能有任何其他中心会回退到广播器、现在无法由中心扫描、因为中心仅扫描属于接受列表一部分的设备。
如果您对此有权变措施、请告诉我。 这会很有帮助。
唯一可能的方法是使我的中央扫描所有广告商,这反过来会使我的中央发送扫描请求给所有广告商,甚至那些不是我感兴趣的.
这里的主要议程是,使我的中央发送扫描请求只对我感兴趣的设备,因为它肯定会帮助我不被多个扫描响应轰击.
您好、Tarek!
首先感谢您的支持。 我确实在考虑所有 BLE 规范的情况下设计了一个架构、在此之前我需要进行少量确认。
对于扫描请求、将有一个由外设发送的扫描响应。 为扫描请求的外设触发的事件将是 BLEAPPUTIL_SCAN_REQ_RECEIVED。
现在我的问题是、我是否可以为每个扫描请求自定义我的扫描响应、因为附近的设备将有多个扫描请求、我想为每个特定设备自定义扫描响应。 这会是可能的吗?
您好、Sushant、
BLE 规范未具体包含允许用户根据扫描请求自定义扫描响应的过程。 根据 BLE 规范:
"有效载荷由 Adva 和 ScanRspData 字段组成。 Adva 字段应包含广播器的公共或随机器件地址、如 TxAdd 所示。 ScanRspData 字段可能包含来自广播器主机的任何数据。" BLE 规范 v.54、第6卷、B 部分、第2.3.2.2节
虽然没有特别提及、 扫描响应可以 包含与广播器主机相关的特定信息、但无法进行自定义。
我建议尝试的一种方法是使用扩展广告、因为它们允许更大的有效负载、所以您可以发送所需的信息、然后在中心端解析该数据。
我希望这能回答您的问题!
此致、
Tarek