验证扫描仪的身份

学到更多常见问题解答教程

9个帖子/ 0新
最后一篇
Hamiddhosseini
离线
最后一次露面:2个月2周前
加入:2020-05-12 12:04
验证扫描仪的身份

你好呀,

有没有办法检测先前配对的设备?

我正在使用这件事scan_request跟踪器示例和ble_app_security.而且我能够打印出已发送扫描请求的设备的地址。但是,我想检查这个地址并知道何时配对并断开连接,请发送扫描请求。

有没有办法验证设备是否先前是否配对?

问候,

汉米德

设备:
PM_DIALOG.
离线
最后一次露面:11小时44分钟前
职员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

请检查SDK的BLE_APP_SECURY示例。该示例使用SPI闪存或EEPROM来存储绑定数据。一旦设备配对,所有配对/绑定信息都存储在非易失性存储器中,因此如果设备先前已配对,则可以检查此处。

谢谢,PM_DIALOG.

Hamiddhosseini
离线
最后一次露面:2个月2周前
加入:2020-05-12 12:04
是的,我可以看到

是的,我可以看到该示例存储先前配对设备的数据。但是,我的问题是如何在扫描请求上检查这些数据,在那里我们只有扫描仪的地址?

PM_DIALOG.
离线
最后一次露面:11小时44分钟前
职员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

获取对等设备的BD地址后,您应检查存储到非易失性存储器中的配对信息。你能告诉我你的要求是什么吗?您是否需要阻止从不配对的设备扫描?

谢谢,PM_DIALOG.

Hamiddhosseini
离线
最后一次露面:2个月2周前
加入:2020-05-12 12:04
你好呀,

你好呀,

为了提高服务质量,我们希望一旦配对的用户发送扫描请求,我们就想要触发事件。换句话说,我们不想阻止从其他设备扫描,一旦配对设备发送了扫描请求,我们才需要通知。
以下代码是我为此目的使用的是什么,但我不确定这是正确的方法。(特别是遗留配对)

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);如果((bdaddr_type == APP_PUBLIC_ADDR_TYPE)||(bdaddr_type == APP_RANDOM_STATIC_ADDR_TYPE)||(bdaddr_type == APP_ID_ADDR_TYPE)){如果(bdaddr_type == APP_ID_ADDR_TYPE){//搜索DB由对等的BD地址PBD = app_easy_security_bdb_search_entry(SEARCH_BY_ID_TYPE,(空隙*)peer_addr.addr,bd_addr_len);} else {//搜索db by peer的bd地址pbd = app_easy_security_bdb_search_entry(search_by_bda_type,(void *)peer_addr.addr,bd_addr_len);如果在DB(PBD){//存储设备绑定数据到安全环境//接受加密返回true;} //如果在DB else {//拒绝加密中未找到对等体,则断开连接返回false;检查对等体的BD地址是否是可解析的私有地址else others(bdaddr_type == app_random_private_resolv_addr_type){// start bd地址解析过程(!u​​ser_app_easy_security_resolve_bdaddr(peer_addr)){return false;} return true; } // Check if peer's BD address is non-Resolvable Private Address else { // Reject encryption, disconnect return false; } }

您认为这将涵盖配对的所有情况(我们可能必须更改配对方法和安全级别,因此我希望此功能更通用)?

问候,

汉米德

Hamiddhosseini
离线
最后一次露面:2个月2周前
加入:2020-05-12 12:04
好的,现在我能搜索

好的,现在我能搜索设备,但我有一个新问题。如何识别扫描仪的地址类型?

PM_DIALOG.
离线
最后一次露面:11小时44分钟前
职员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

您是否意味着如何拍摄对等设备的BD地址?请参阅app_get_address_type()API,因为它返回BD地址的类型。

谢谢,PM_DIALOG.

Hamiddhosseini
离线
最后一次露面:2个月2周前
加入:2020-05-12 12:04
是的,我想知道

是的,我想知道扫描仪的地址类型。正如我们之前讨论的那样,我们可以在scan_request_track中拥有扫描仪的地址。但是,我应该如何确定地址类型。

我实际上尝试过使用此API,但我陷入了App_Get_address_type()的输入参数,因为我应该将地址类型传递给此函数。

enum app_addr_types app_get_address_type(uint8_t addr_type,struct bd_addr addr){typedef enum 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);}}

当我想知道地址时,我应该为此地址类型提供什么?

PM_DIALOG.
离线
最后一次露面:11小时44分钟前
职员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

为延迟道歉。中央使用是什么样的BD地址?这取决于中央BD地址。

谢谢,PM_DIALOG.