完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我正在使用 esp idf 4.4 和 Nimble 1.3.0
第一次我能够配对插入密钥客户端的 android 设备。一旦设备配对并绑定,我就可以永远读取和写入加密的关贸协定。 绑定在重新启动和限制最大可绑定设备大小后仍然存在。 如果我在客户端取消配对 esp32,就像通过蓝牙 Android 选项取消配对一样,我将无法读取/写入加密的 gapps。 要查看 characteristics 和 r/w over gatts svr,我使用“BLE tester”apk 这是 ble_hs_cfg。 代码: ble_hs_cfg.sm_io_cap = 4; ble_hs_cfg.sm_bonding = 1; ble_hs_cfg.sm_our_key_dist = BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID; ble_hs_cfg.sm_their_key_dist = BLE_SM_PAIR_KEY_DIST_ENC| BLE_SM_PAIR_KEY_DIST_ID; ble_hs_cfg.sm_mitm = 1; ble_hs_cfg.sm_sc = 1; 这是我的同步回调: 代码: void sync_cb(void) { // determine best adress type ble_hs_id_infer_auto(0, &addr_type); uint8_t addr_val[6]; ble_hs_id_copy_addr(addr_type, addr_val, NULL); printf(" 33[0;36m"); printf("Indirizzo host:n"); for (int j = 0; j < 6; j++) { printf(" 33[0;36m"); printf("%d ",addr_val[j]); } printf("n"); ESP_LOGI("BLE_Sync", "Device address type %i", addr_type); advertise(); // start avertising } 密码注入是由我的间隙事件处理程序回调的这种情况执行的(在主广告函数中作为 cb 插入): 代码: #if SECU case BLE_GAP_EVENT_PASSKEY_ACTION: ESP_LOGI(tag, "PASSKEY_ACTION_EVENT started n"); struct ble_sm_io pkey = {0}; int key = 0; if (event->passkey.params.action == BLE_SM_IOACT_DISP { ESP_LOGI(tag, "BLE_SM_IOACT_DISP"); pkey.action = event->passkey.params.action; pkey.passkey = 123456; // This is the passkey to be entered on peer ESP_LOGI(tag, "Enter passkey %d on the peer side", pkey.passkey); rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey); ESP_LOGI(tag, "ble_sm_inject_io result: %dn", rc); } 我能够捕捉到的是,如果我像前面提到的那样取消配对客户端,则下一对连接(假设是新的客户端)不要像服务器已经识别对等点那样要求密码,但调试让我看到代码卡在 ble_sm.c 的这里 此代码来自 ble_sm.c 标准库 代码: static int ble_sm_chk_repeat_pairing(uint16_t conn_handle, ble_sm_proc_flags proc_flags, uint8_t key_size) { struct ble_gap_repeat_pairing rp; struct ble_store_value_sec bond; int rc; do { /* If the peer isn't bonded, indicate that the pairing procedure should * continue. */ rc = ble_sm_read_bond(conn_handle, &bond); switch (rc) { case 0: break; case BLE_HS_ENOENT: return 0; default: return rc; } /* Peer is already bonded. Ask the application what to do about it. */ rp.conn_handle = conn_handle; rp.cur_key_size = bond.key_size; rp.cur_authenticated = bond.authenticated; rp.cur_sc = bond.sc; rp.new_key_size = key_size; rp.new_authenticated = !!(proc_flags & BLE_SM_PROC_F_AUTHENTICATED); rp.new_sc = !!(proc_flags & BLE_SM_PROC_F_SC); rp.new_bonding = !!(proc_flags & BLE_SM_PROC_F_BONDING); rc = ble_gap_repeat_pairing_event(&rp); } while (rc == BLE_GAP_REPEAT_PAIRING_RETRY); BLE_HS_LOG(DEBUG, "silently ignoring pair request from bonded peer"); //THE ATTEMPT, IS STUCK HERE I'M ABLE TO SEE THE PRINT BUT I CAN'T READ OR WRITE ENCRYPTED GATTS. return BLE_HS_EALREADY; } 仅当我解除对等客户端的连接时才会发生这种情况。 |
|
相关推荐
1个回答
|
|
|
密钥似乎存储在 nvs 中,就像 our_sec、pee_sec 和 p_dev_sec 一样。cccds_sec 订阅也很好用。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
944 浏览 0 评论
1671 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1330 浏览 1 评论
1233 浏览 1 评论
5015 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1250浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2329浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2525浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1051浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:56 , Processed in 0.596079 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
429
