int32_t aciga_connect_adv_start(void) { int err; struct ble_gap_adv_params adv_param = { .conn_mode = (BLE_GAP_CONN_MODE_UND), .disc_mode = (BLE_GAP_DISC_MODE_GEN), }; if (conn_count == CONFIG_BT_MAX_CONN) { return 0; } BT_DBG("bt_mesh_is_provisioned=%d", bt_mesh_is_provisioned()); if (is_aciga_lowpower_enable()) { adv_param.itvl_min = ADV_SCAN_UNIT(lp_interval); adv_param.itvl_max = ADV_SCAN_UNIT(lp_interval); } else { adv_param.itvl_min = ADV_SCAN_UNIT(100); adv_param.itvl_max = ADV_SCAN_UNIT(100); } aciga_adv_data[ACIGA_FLAG_OFFSET] = bt_mesh_is_provisioned() ? 1 : 0; aciga_ble_gap_adv_set_data(aciga_adv_data, ACIGA_ADV_LEN); if (aciga_rsp_data[0] > 0) { aciga_ble_gap_adv_rsp_set_data(aciga_rsp_data, aciga_rsp_data[0] + 1); } err = aciga_ble_gap_adv_start(0, NULL, INT32_MAX, &adv_param); if (err) { BT_ERR("Advertising failed: err %d", err); return 0; } aciga_adv_started = true; return INT32_MAX; }
时间: 2023-10-27 16:04:42 浏览: 175
这段代码是用于启动 BLE 广播的函数。其中,通过 BLE_GAP_ADV_PARAMS 结构体设置了广播参数,包括连接模式、发现模式以及广播间隔。如果已经连接的设备数量等于最大连接数,则直接返回 0。根据当前是否已经完成了设备配网,设置 ACIGA 标志位。最后调用 aciga_ble_gap_adv_start() 函数启动广播,并返回广播的最大时间。如果广播启动失败,记录错误信息并返回 0。
相关问题
int aciga_service_init(void) { const struct aciga_ble_gatt_svc_def aciga_svc[] = { { .uuid = GATT_UUID_ACIGA_SERVICE, .n_char = 2, .chars = (struct aciga_ble_gatt_chr_def[]){ { .uuid = GATT_UUID_ACIGA_CHAR_WRITE, .access_cb = aciga_service_recv, .flags = ACIGA_BLE_GATT_CHR_F_WRITE_NO_RSP, }, { .uuid = GATT_UUID_ACIGA_CHAR_NOTIFY, .access_cb = NULL, .flags = ACIGA_BLE_GATT_CHR_F_NOTIFY, }, { 0, /* No more characteristics in this service. */ } }, }, { 0, /* No more services. */ }, }; BT_INFO(""); aciga_ble_gap_event_listener_register(&aciga_listener, aciga_connection_event_recv, NULL); k_delayed_work_init(&idle_detect, idle_status_detect); return aciga_ble_gatts_svc_register(aciga_svc, 1); }这段代码的功能是什么
这段代码的功能是初始化ACIGA服务,注册GATT服务定义,包含了两个特征。其中,第一个特征是写特征,当客户端写入数据时,会调用`aciga_service_recv`函数进行数据接收和处理;第二个特征是通知特征,用于向客户端发送数据。`GATT_UUID_ACIGA_SERVICE`是ACIGA服务的UUID,`GATT_UUID_ACIGA_CHAR_WRITE`和`GATT_UUID_ACIGA_CHAR_NOTIFY`是两个特征的UUID。函数还注册了一个GAP事件监听器`aciga_listener`,用于处理连接事件;初始化了一个延时工作项`idle_detect`,并注册了一个空闲状态检测函数`idle_status_detect`。函数返回值为0表示操作成功。
int main(void) { aciga_system_cbs_t cbs = { .ble_stack_inited = ble_stack_inited, .prov_result = prov_result, .platform_io_event = platform_io_event, }; aciga_system_init(&cbs); aciga_app_init(); const device_info_t *_pstdevice_info = aciga_device_strorage_get_device_info(); uint8_t _au8device_mac[6]; aciga_common_str_to_hex( _pstdevice_info->stdid_info.szmac, _au8device_mac, sizeof(_au8device_mac) ); aciga_common_reversal_byte((char *) _au8device_mac, sizeof(_au8device_mac) ); BT_INFO("adv pid=%d", _pstdevice_info->stpid_info.device_pid); uint32_t pid = _pstdevice_info->stpid_info.device_pid; if(pid == 0){ BT_ERR("pid error,use default pid=%d",DEFAULT_PID); pid = DEFAULT_PID; } aciga_connect_adv_config_data(_au8device_mac, pid, _pstdevice_info->stdid_info.szdid); char adv_name[31]; aciga_get_broadcast_name(&adv_name,pid); aciga_connect_adv_config_name(adv_name); aciga_connect_adv_set_lowpoer_interval(ADV_LOWPOWER_INTERVAL); aciga_connect_adv_set_enable(true); uint8_t secret[16]; aciga_common_str_to_hex(_pstdevice_info->stdid_info.szkey, secret, sizeof(secret)); aciga_system_set_conf(ACIGA_SYS_CONF_DEV_SECRET, (void *)secret); bool lowpower_support = true; aciga_system_set_conf(ACIGA_SYS_CONF_LOW_POWER_SUPPORT, (void *)&lowpower_support); pwr_mgr_init(); aciga_host_ota_init(); //test_write_default_key(); // aciga_system_run(0, NULL, NULL); return 0; }
这是一个C语言程序的主函数,程序的功能是初始化系统并启动连接广告。程序首先定义了一个aciga_system_cbs_t类型的结构体变量cbs,并给其中的三个成员变量赋值,这些成员变量分别是ble_stack_inited、prov_result和platform_io_event。然后程序调用aciga_system_init函数和aciga_app_init函数来初始化系统和应用程序。接下来程序调用aciga_device_strorage_get_device_info函数来获取设备信息,并将其存储在一个名为_pstdevice_info的指针所指向的常量中。程序接着将设备MAC地址转换成16进制表示,并将其反转。然后程序根据设备信息设置连接广告的参数,并将其启用。程序接着将设备秘钥转换成16进制表示,并将其存储在系统配置中。程序最后启动系统并返回0。
阅读全文