你好,
是否有一种方法来检测先前配对的设备?
我正在使用这件事scan_request追踪的例子,ble_app_security.而且我能够打印出已发送扫描请求的设备的地址。但是,我想检查这个地址并知道何时配对并断开连接,请发送扫描请求。
是否有办法验证一个设备之前是否已经与之配对?
问候,
哈米德
嗨哈米德,
请查看SDK的ble_app_security示例。该示例使用SPI Flash或EEPROM存储绑定数据。一旦设备已经配对,所有配对/绑定信息都存储在非易失性存储器中,所以你可以在那里检查设备是否已经被配对。
谢谢,PM_DIALOG.
是的,我可以看到这个例子存储了之前配对的设备的数据。但是,我的问题是,在只有扫描仪地址的情况下,如何在扫描请求中检查这些数据?
一旦得到了对端设备的BD地址,就应该检查存储在非易失性存储器中的配对信息。您能告诉我您有什么要求吗?您是否需要阻止对未配对的设备进行扫描?
为了提高服务质量,我们希望在配对用户发送扫描请求时触发一个事件。换句话说,我们不想阻止其他设备的扫描,我们只需要在配对的设备发送扫描请求时得到通知。下面的代码是我为此目的而使用的,但我不确定这是否是正确的方法。(特别是对于遗留结对)
bool user_check_bonding(struct bd_addr peer_addr, uint8_t addr_type) {const struct app_sec_bond_data_env_tag *pbd = NULL;uint8_t bdaddr_type;//检查对等体的BD地址是否为公共或随机静态bdaddr_type = app_get_address_type(addr_type, peer_addr);if ((bdaddr_type == APP_PUBLIC_ADDR_TYPE) || (bdaddr_type == APP_RANDOM_STATIC_ADDR_TYPE) || (bdaddr_type == APP_ID_ADDR_TYPE)) {if (bdaddr_type == APP_ID_ADDR_TYPE){//根据对等体的BD地址搜索DB pbd = app_easy_security_bdb_search_entry(SEARCH_BY_ID_TYPE, (void *) peer_addr. addr_type);addr, BD_ADDR_LEN);} else{//根据对等体的BD地址搜索DB。pbd = app_easy_security_bdb_search_entry(SEARCH_BY_BDA_TYPE, (void *) peer_addr. db_search_entry);addr, BD_ADDR_LEN);} //如果在DB中找到peer如果(pbd){//存储设备绑定数据到安全环境//接受加密返回true;} //如果在DB中没有找到peer else{//拒绝加密,断开返回false;}} //检查对等体的BD地址是否为Resolvable Private address else if(bdaddr_type == APP_RANDOM_PRIVATE_RESOLV_ADDR_TYPE){//开始BD地址解析过程if(!user_app_easy_security_resolve_bdaddr(peer_addr)) {return false;}返回true;} //检查对等体的BD地址是否为不可解析的私有地址,否则{//拒绝加密,断开返回false; } }
您认为这将涵盖配对的所有情况(我们可能必须更改配对方法和安全级别,因此我希望此功能更通用)?
现在我可以搜索设备了,但我有一个新问题。如何识别扫描仪的地址类型?
您是否意味着如何拍摄对等设备的BD地址?请参阅app_get_address_type()API,因为它返回BD地址的类型。
是的,我想知道扫描仪的地址类型。如前所述,我们可以在scan_request_track中获得扫描仪的地址。但是,我应该如何确定地址类型。
我实际上尝试过使用这个API,但是我被app_get_address_type()的输入参数卡住了,因为我应该向这个函数传递一个地址类型。
枚举app_addr_types app_get_address_type(uint8_t addr_type, struct bd_addr addr){类型定义枚举app_addr_types (* app_get_address_type_t)(uint8_t addr_type, struct bd_addr addr);if (addr_type == ADDR_RPA_PUBLIC) || (addr_type == ADDR_RPA_RAND) {return APP_ID_ADDR_TYPE;} else {app_get_address_type_t f = (app_get_address_type_t) (app_get_address_type_ROM);返回f (addr_type addr);}}
当我想知道地址时,我应该在这种地址类型中写什么?
很抱歉耽搁了。中央大厦使用什么样的屋宇署地址?这视乎屋宇署的中央地址而定。
嗨哈米德,
请查看SDK的ble_app_security示例。该示例使用SPI Flash或EEPROM存储绑定数据。一旦设备已经配对,所有配对/绑定信息都存储在非易失性存储器中,所以你可以在那里检查设备是否已经被配对。
谢谢,PM_DIALOG.
是的,我可以看到这个例子存储了之前配对的设备的数据。但是,我的问题是,在只有扫描仪地址的情况下,如何在扫描请求中检查这些数据?
嗨哈米德,
一旦得到了对端设备的BD地址,就应该检查存储在非易失性存储器中的配对信息。您能告诉我您有什么要求吗?您是否需要阻止对未配对的设备进行扫描?
谢谢,PM_DIALOG.
你好,
为了提高服务质量,我们希望在配对用户发送扫描请求时触发一个事件。换句话说,我们不想阻止其他设备的扫描,我们只需要在配对的设备发送扫描请求时得到通知。
下面的代码是我为此目的而使用的,但我不确定这是否是正确的方法。(特别是对于遗留结对)
您认为这将涵盖配对的所有情况(我们可能必须更改配对方法和安全级别,因此我希望此功能更通用)?
问候,
哈米德
现在我可以搜索设备了,但我有一个新问题。如何识别扫描仪的地址类型?
嗨哈米德,
您是否意味着如何拍摄对等设备的BD地址?请参阅app_get_address_type()API,因为它返回BD地址的类型。
谢谢,PM_DIALOG.
是的,我想知道扫描仪的地址类型。如前所述,我们可以在scan_request_track中获得扫描仪的地址。但是,我应该如何确定地址类型。
我实际上尝试过使用这个API,但是我被app_get_address_type()的输入参数卡住了,因为我应该向这个函数传递一个地址类型。
当我想知道地址时,我应该在这种地址类型中写什么?
嗨哈米德,
很抱歉耽搁了。中央大厦使用什么样的屋宇署地址?这视乎屋宇署的中央地址而定。
谢谢,PM_DIALOG.