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.

[参考译文] LP-EM-CC2340R5:扫描来自中央器件的广播器的请求

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1505989/lp-em-cc2340r5-scan-request-for-advertisers-from-central-device

器件型号:LP-EM-CC2340R5
主题中讨论的其他器件:CC2340R5SysConfig

工具/软件:

大家好、我正在使用 CC2340R5和 ble SDK 版本: simplelink_lowpower_f3_SDK_8_40_02_01。  

我希望我的中心扫描所有附近的广告商,但只发送一个扫描请求到广告商,我动态地添加到允许列表。  

是否有以这种特定方式进行扫描的过滤器策略?  

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

    您好:

    感谢您联系我们! 为此、您需要将过滤器策略设置为  SCAN_FLT_POLICY_AL。 我还包括了下面的筛选器策略选项的链接。

    https://dev.ti.com/tirex/explore/content/simplelink_lowpower_f3_sdk_8_40_02_01/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___gap_scan___structs.html#ga5be84ddb41dcf5fd6ba2e5e1fda1b2b3

    我希望这对您有所帮助!

    此致、

    Tarek

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

     尊敬的 Tarek:  

    感谢您的快速答复。

    我实际上知道接受列表扫描筛选器、但我要寻找的是:  

    中心将扫描所有广告主、但仅向接受列表中的设备发送扫描请求。  

    仅接受来自广播器地址位于接受列表中的设备的广播包。 应忽略未发送到此设备的定向广播包。

    正如上述声明明确指出,只有属于接受列表一部分 的设备会被中心扫描,但我要寻找的是,中心应该听所有的广告商,但只发送扫描请求到一个是接受列表的一部分。

    我希望我的疑问现在对你来说是清楚的。  

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

    您好:

    感谢您的澄清! 根据您所描述的内容、您似乎希望中心被动扫描、直到它从接受列表中扫描广告。 遗憾的是、BLE 栈没有条件有源扫描选项(BLE 规范中未指定)。

    实现所需行为的一种方法是首先将中央设备设置为被动扫描、然后在扫描所需设备的广播时、将设备地址添加到接受列表中。 之后、使用过滤器策略 SCAN_FLT_POLICY_AL 动态设置器件以执行主动扫描  

    为此、请执行以下操作:

    1. 转到工程的 SysConfig 文件
    2. 在 BLE 菜单中、向下滚动并选择 Observer Configuration
    3. 将"Scan Type"设置为"Passive"
    4. 转到 app_central.c 文件
    5. 将以下事件添加到集中 ScanHandler 事件处理程序:
      BLEAppUtil_EventHandler_t centralScanHandler =
      {
          .handlerType    = BLEAPPUTIL_GAP_SCAN_TYPE,
          .pEventHandler  = Central_ScanEventHandler,
          .eventMask      = BLEAPPUTIL_SCAN_ENABLED |
                            BLEAPPUTIL_SCAN_DISABLED |
                            BLEAPPUTIL_ADV_REPORT // ADD THIS
      };
    6. 向下滚动到 BLEAPUTIL_ADV_REPORT ()并为 Central_Scan 添加一个案例,如下所示:
      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;
      }
    7. 按您的意愿处理 pScanRpt->addr (这是扫描的每个广播器的地址)、当您找到要添加到接受列表中的设备地址时、请使用函数 HCI_LE_AddAcceptListCmd() 将地址动态添加到接受列表中。
    8.  使用 Gap Scan_Set ()将过滤器策略设置为 SCAN_FLT_POLICY_AL
    9. 将扫描类型设置为 编程 通过使用 GapScan_setPhyParams()

    更多有关我们的扫描和广播的信息、请通过以下链接查看我们的 SimpleLink Academy 培训:
    dev.ti.com/.../node

    我希望这能回答您的问题!

    此致、

    Tarek

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

    首先感谢 Tarek D 这样一个详细的解释。  

    我完全得到你建议的方法,但这里的问题是我的应用程序,其中所有设备的第一手将是中央,他们将模式切换到广告商作为一个回退机制,这是完全随机的,即它可以发生在任何特定的时刻实时。  

    现在保持我的中心被动扫描,并使所需的广告主添加到接受列表,然后手动更改扫描过滤器,只扫描在接受列表中的广告主,将不是一个适合我的变通办法.  

    因为可能有任何其他中心会回退到广播器、现在无法由中心扫描、因为中心仅扫描属于接受列表一部分的设备。

    如果您对此有权变措施、请告诉我。 这会很有帮助。  

    唯一可能的方法是使我的中央扫描所有广告商,这反过来会使我的中央发送扫描请求给所有广告商,甚至那些不是我感兴趣的.  

    这里的主要议程是,使我的中央发送扫描请求只对我感兴趣的设备,因为它肯定会帮助我不被多个扫描响应轰击.

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

    您好:

    感谢您的澄清! 遗憾的是、BLE 规范未描述特定的流程来实现这种行为。 您可以尝试执行上述步骤、然后在与已添加到接受列表的设备建立连接后、动态地将过滤器策略更改回 scan_FLT_POLICY_ALL、并将扫描类型更改回被动、直到看到要添加到接受列表的另一个地址。

    我希望这对您有所帮助!

    此致、

    Tarek

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

    您好、Tarek!  

    首先感谢您的支持。 我确实在考虑所有 BLE 规范的情况下设计了一个架构、在此之前我需要进行少量确认。  

    对于扫描请求、将有一个由外设发送的扫描响应。 为扫描请求的外设触发的事件将是 BLEAPPUTIL_SCAN_REQ_RECEIVED。

    现在我的问题是、我是否可以为每个扫描请求自定义我的扫描响应、因为附近的设备将有多个扫描请求、我想为每个特定设备自定义扫描响应。 这会是可能的吗?  

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

    您好、Sushant、

    BLE 规范未具体包含允许用户根据扫描请求自定义扫描响应的过程。 根据 BLE 规范:

    "有效载荷由 Adva 和 ScanRspData 字段组成。 Adva 字段应包含广播器的公共或随机器件地址、如 TxAdd 所示。 ScanRspData 字段可能包含来自广播器主机的任何数据。" BLE 规范 v.54、第6卷、B 部分、第2.3.2.2节

    虽然没有特别提及、 扫描响应可以 包含与广播器主机相关的特定信息、但无法进行自定义。

    我建议尝试的一种方法是使用扩展广告、因为它们允许更大的有效负载、所以您可以发送所需的信息、然后在中心端解析该数据。  

    我希望这能回答您的问题!

    此致、

    Tarek