完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
蓝牙中开启自定义服务之后,添加了一个子服务,怎么添加第二子服务啊
按照我的理解,在创建第一个子服务时候,改变属性以及UUID后再添加一次就可以,但是不行啊; case ESP_GATTS_CREATE_EVT: ESP_LOGE(GATTS_TAG, "CREATE_SERVICE_EVT, status %d, service_handle %dn", param->create.status, param->create.service_handle); // ESP_LOGI(GATTS_TAG, "CREATE_SERVICE_EVT, status %d, service_handle %dn", param->create.status, param->create.service_handle); gl_profile_tab[PROFILE_A_APP_ID].service_handle = param->create.service_handle; gl_profile_tab[PROFILE_A_APP_ID].char_uuid.len = ESP_UUID_LEN_128; // gl_profile_tab[PROFILE_A_APP_ID].char_uuid.uuid.uuid16 = GATTS_CHAR_UUID_TEST_A; for (int i = 0; i < 16; i++) { /* code */ gl_profile_tab[PROFILE_A_APP_ID].char_uuid.uuid.uuid128 = adv_service_uuid128; } esp_ble_gatts_start_service(gl_profile_tab[PROFILE_A_APP_ID].service_handle); a_property = ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_NOtiFY;//ESP_GATT_CHAR_PROP_BIT_READ | ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_NOTIFY; esp_err_t add_char_ret = esp_ble_gatts_add_char(gl_profile_tab[PROFILE_A_APP_ID].service_handle, &gl_profile_tab[PROFILE_A_APP_ID].char_uuid, ESP_GATT_PERM_WRITE,///ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, a_property, &gatts_demo_char1_val, NULL); if (add_char_ret){ ESP_LOGE(GATTS_TAG, "add char failed, error code =%x",add_char_ret); } |
|
相关推荐
1个回答
|
|
在蓝牙中,创建自定义服务和子服务的过程通常涉及到几个关键步骤。根据您的描述,您已经成功创建了一个子服务,现在想要添加第二个子服务。以下是详细的步骤和解释:
1. 首先,确保您已经创建了一个自定义服务。在ESP_GATTS_CREATE_EVT事件中,您应该已经获得了服务句柄(service_handle)。 2. 创建第一个子服务。在创建子服务时,您需要为子服务分配一个唯一的UUID,并设置相应的属性。这可以通过调用`esp_ble_gatts_add_char()`函数来实现。例如: ```c esp_attr_value_t char1_val = { .attr_max_len = CHAR1_LEN, .attr_len = CHAR1_LEN, .value = char1_data, }; esp_err_t add_char1_ret = esp_ble_gatts_add_char(service_handle, &char1_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, &char1_val, NULL, NULL); ``` 3. 现在,要添加第二个子服务,您需要为第二个子服务分配一个新的UUID,并设置相应的属性。您可以使用与创建第一个子服务相同的函数,但需要更改UUID和属性。例如: ```c esp_attr_value_t char2_val = { .attr_max_len = CHAR2_LEN, .attr_len = CHAR2_LEN, .value = char2_data, }; esp_err_t add_char2_ret = esp_ble_gatts_add_char(service_handle, &char2_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, &char2_val, NULL, NULL); ``` 请注意,`char2_uuid`应该是一个与`char1_uuid`不同的唯一标识符。 4. 在ESP_GATTS_ADD_CHAR_EVT事件中,检查第二个子服务的创建状态。如果状态为成功,您将获得第二个子服务的句柄。您可以使用这个句柄来进一步操作或设置通知等。 5. 如果您遇到问题,确保检查ESP_LOGE(GATTS_TAG, ...)中的日志信息,以获取有关错误的详细信息。这将帮助您诊断问题并找到解决方案。 总之,要添加第二个子服务,您需要为它分配一个新的UUID,并使用相同的函数(如`esp_ble_gatts_add_char()`)来创建子服务。确保在创建子服务时更改UUID和属性,以便正确地创建和管理多个子服务。 |
|
|
|
只有小组成员才能发言,加入小组>>
920 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 21:00 , Processed in 0.854972 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号