//枚举已绑定设备 void peer_moudle_enumerate_bonded_devices(void) { pm_peer_id_t peer_id; uint32_t peers_to_copy; peer_bonded_info_t *p_latest_bonded_info = &m_peer_module_mgr.latest_bonded_info; p_latest_bonded_info->peer_id = PM_PEER_ID_INVALID; peers_to_copy = pm_peer_count(); PEER_MODULE_PRINT("Bonds: %d\r\n", peers_to_copy); peer_id = pm_next_peer_id_get(PM_PEER_ID_INVALID); while ((peer_id != PM_PEER_ID_INVALID) && (peers_to_copy--)) { if(NRF_SUCCESS == pm_peer_data_bonding_load(peer_id, &p_latest_bonded_info->peer_data)) { p_latest_bonded_info->peer_id = peer_id; PEER_MODULE_PRINT("MAC(%d):%02X-%02X-%02X-%02X-%02X-%02X\r\n", peer_id, p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[0], //little endian p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[1], p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[2], p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[3], p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[4], p_latest_bonded_info->peer_data.peer_ble_id.id_addr_info.addr[5]); } peer_id = pm_next_peer_id_get(peer_id); } }
时间: 2023-08-14 19:06:21 浏览: 177
这段代码是用于枚举已绑定设备的函数,它会遍历所有已绑定的设备并输出它们的 MAC 地址。具体来说,它首先获取最近绑定设备的信息,然后使用 pm_peer_count() 函数获取已绑定设备的数量。接着,使用 pm_next_peer_id_get() 函数获取下一个已绑定设备的 ID,并且一直循环直到遍历完所有已绑定设备。在循环中,它会使用 pm_peer_data_bonding_load() 函数加载设备的绑定数据,如果成功加载,则输出设备的 MAC 地址。
相关问题
void peer_module_init(void) { peer_manager_init(); #if 0 { ret_code_t err_code; err_code = pm_peers_delete(); APP_ERROR_CHECK(err_code); } #endif peer_moudle_enumerate_bonded_devices(); }
这段代码是一个函数实现,函数名为peer_module_init(),它的作用是初始化一些数据结构和模块,同时枚举已绑定的设备。下面对其中的每一行代码进行解释:
1. peer_manager_init();
这一行代码调用peer_manager_init()函数,用于初始化peer_manager模块。peer_manager是一个BLE连接管理模块,用于管理BLE设备的连接和绑定。
2. #if 0
这一行代码是一个条件编译的标记,表示下面的代码不会被编译执行。通常是用于调试或者注释掉一段代码。
3. {
这一行代码标志着一个代码块的开始。
4. ret_code_t err_code;
这一行代码定义了一个ret_code_t类型的变量err_code,用于存放返回的错误码。
5. err_code = pm_peers_delete();
这一行代码调用pm_peers_delete()函数,用于删除已存储的peer_manager模块中的连接信息。这里将返回值赋值给err_code变量。
6. APP_ERROR_CHECK(err_code);
这一行代码调用APP_ERROR_CHECK()函数,用于检查错误码err_code是否为NRF_SUCCESS,如果不是则会触发错误处理函数。这里是为了确保pm_peers_delete()函数的执行是否成功。
7. }
这一行代码标志着一个代码块的结束。
8. peer_moudle_enumerate_bonded_devices();
这一行代码调用peer_moudle_enumerate_bonded_devices()函数,用于枚举已绑定的设备。peer_moudle_enumerate_bonded_devices()函数会遍历peer_manager模块中已存储的连接信息,获取已绑定设备的信息,并将其存储在相应的数据结构中。
总的来说,这段代码的作用是初始化peer_manager模块,并枚举已绑定的设备。其中#if 0包含的代码块用于删除已存储的连接信息,但是被注释掉了,不会被执行。
typedef struct aciga_dev_model_srv_cbs { void (*dev_prop_write_cb)(aciga_peer_device_t *src, uint8_t n_svc, aciga_service_data_t svc[]); void (*dev_prop_read_cb)(aciga_peer_device_t *src, uint8_t msgid, uint8_t n_svc, aciga_service_read_param_t svc[]); void (*dev_action_in_cb)(aciga_peer_device_t *src, uint8_t msgid, uint32_t runid, uint8_t aiid, aciga_service_data_t *svc); void (*dev_reset_cb)(aciga_peer_device_t *src, uint8_t flag); //flag 0: unbind without clear user data, 1: unbind and clear user data void (*dev_time_sync_data_cb)(aciga_peer_device_t *src, uint64_t utc_timestamp, int tz_offset_minutes); void (*dev_wifi_conf_cb)(aciga_peer_device_t *src, const char *ssid, const char *psk); void (*dev_group_add_cb)(aciga_peer_device_t *src, uint8_t msgid, int n_group, uint16_t groups[]); void (*dev_group_del_cb)(aciga_peer_device_t *src, uint8_t msgid, int n_group, uint16_t groups[]); void (*dev_group_get_cb)(aciga_peer_device_t *src, uint8_t msgid); void (*dev_relay_set_cb)(aciga_peer_device_t *src, uint8_t msgid, uint8_t enable); void (*dev_relay_get_cb)(aciga_peer_device_t *src, uint8_t msgid); void (*dev_factory_test_cmd_cb)(aciga_peer_device_t *src, const uint8_t *payload, size_t len); void (*dev_scene_conf_cb)(aciga_peer_device_t *src, uint8_t msgid, const uint8_t *payload, size_t len); } aciga_dev_model_srv_cbs_t;
这是一个定义了多个函数指针的结构体类型,用于存储设备模型服务的回调函数。具体来说,这些回调函数包括:
1. `dev_prop_write_cb`: 设备属性写入回调函数,当设备属性有变化时被调用。
2. `dev_prop_read_cb`: 设备属性读取回调函数,当云端需要读取设备属性时被调用。
3. `dev_action_in_cb`: 设备内部请求回调函数,当设备需要执行某些操作时被调用。
4. `dev_reset_cb`: 设备重置回调函数,当设备需要重置时被调用,可以选择是否清除用户数据。
5. `dev_time_sync_data_cb`: 设备时间同步回调函数,当设备需要与云端进行时间同步时被调用。
6. `dev_wifi_conf_cb`: 设备 WiFi 配置回调函数,当设备需要更新 WiFi 配置时被调用。
7. `dev_group_add_cb`: 设备添加分组回调函数,当设备需要添加分组时被调用。
8. `dev_group_del_cb`: 设备删除分组回调函数,当设备需要删除分组时被调用。
9. `dev_group_get_cb`: 设备获取分组回调函数,当设备需要获取分组信息时被调用。
10. `dev_relay_set_cb`: 设备继电器设置回调函数,当设备需要控制继电器时被调用。
11. `dev_relay_get_cb`: 设备继电器获取回调函数,当设备需要获取继电器状态时被调用。
12. `dev_factory_test_cmd_cb`: 设备工厂测试命令回调函数,当设备需要执行工厂测试命令时被调用。
13. `dev_scene_conf_cb`: 设备场景配置回调函数,当设备需要更新场景配置时被调用。
这些回调函数都是针对设备模型服务的具体实现,通过注册这些回调函数,设备可以与云端进行通信和交互。
阅读全文