Adding more than characteristic to same service
-
- Posts: 6
- Joined: Wed Apr 04, 2018 1:44 am
Adding more than characteristic to same service
Hello, I am using esp32 esp-idf GATT server example, I would like to add more than one service to the same profile and more than characteristic to the same service, is there is an example how can this be done?
Re: Adding more than characteristic to same service
This is great info about creating BLE server:
https://github.com/espressif/esp-idf/bl ... through.md
Except this code, because its worst code ever:
https://github.com/espressif/esp-idf/bl ... ite-events
https://github.com/espressif/esp-idf/bl ... through.md
Except this code, because its worst code ever:
https://github.com/espressif/esp-idf/bl ... ite-events
Code: Select all
case ESP_GATTS_WRITE_EVT: {
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %d, handle %d\n", param->write.conn_id, param->write.trans_id, param->write.handle);
if (!param->write.is_prep){
ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len);
if (gl_profile_tab[PROFILE_B_APP_ID].descr_handle == param->write.handle && param->write.len == 2){
uint16_t descr_value= param->write.value[1]<<8 | param->write.value[0];
if (descr_value == 0x0001){
if (b_property & ESP_GATT_CHAR_PROP_BIT_NOTIFY){
ESP_LOGI(GATTS_TAG, "notify enable");
uint8_t notify_data[15];
for (int i = 0; i < sizeof(notify_data); ++i)
{
notify_data[i] = i%0xff;
}
//the size of notify_data[] need less than MTU size
esp_ble_gatts_send_indicate(gatts_if, param->write.conn_id,
gl_profile_tab[PROFILE_B_APP_ID].char_handle,
sizeof(notify_data),
notify_data, false);
}
}else if (descr_value == 0x0002){
if (b_property & ESP_GATT_CHAR_PROP_BIT_INDICATE){
ESP_LOGI(GATTS_TAG, "indicate enable");
uint8_t indicate_data[15];
for (int i = 0; i < sizeof(indicate_data); ++i)
{
indicate_data[i] = i % 0xff;
}
//the size of indicate_data[] need less than MTU size
esp_ble_gatts_send_indicate(gatts_if, param->write.conn_id,
gl_profile_tab[PROFILE_B_APP_ID].char_handle,
sizeof(indicate_data),
indicate_data, true);
}
}
else if (descr_value == 0x0000){
ESP_LOGI(GATTS_TAG, "notify/indicate disable ");
}else{
ESP_LOGE(GATTS_TAG, "unknown value");
}
}
}
example_write_event_env(gatts_if, &a_prepare_write_env, param);
break;
}
-
- Posts: 6
- Joined: Wed Apr 04, 2018 1:44 am
Re: Adding more than characteristic to same service
Thanks so much, I had a look but still can't find how to add several service to the same profile
```
struct gatts_profile_inst {
esp_gatts_cb_t gatts_cb;
uint16_t gatts_if;
uint16_t app_id;
uint16_t conn_id;
uint16_t service_handle;
esp_gatt_srvc_id_t service_id;
uint16_t char_handle;
esp_bt_uuid_t char_uuid;
esp_gatt_perm_t perm;
esp_gatt_char_prop_t property;
uint16_t descr_handle;
esp_bt_uuid_t descr_uuid;
};
```
for a profile there is only one service can be defined in the structure, I think I am missing something
```
struct gatts_profile_inst {
esp_gatts_cb_t gatts_cb;
uint16_t gatts_if;
uint16_t app_id;
uint16_t conn_id;
uint16_t service_handle;
esp_gatt_srvc_id_t service_id;
uint16_t char_handle;
esp_bt_uuid_t char_uuid;
esp_gatt_perm_t perm;
esp_gatt_char_prop_t property;
uint16_t descr_handle;
esp_bt_uuid_t descr_uuid;
};
```
for a profile there is only one service can be defined in the structure, I think I am missing something
Re: Adding more than characteristic to same service
https://github.com/espressif/esp-idf/bl ... n-profiles
Profile is a single service and you can have more than one profile. Two profiles means 2 services:
with callback handler registered for each profile (service).
Profile is a single service and you can have more than one profile. Two profiles means 2 services:
Code: Select all
static struct gatts_profile_inst gl_profile_tab[PROFILE_NUM] = {
[PROFILE_A_APP_ID] = {
.gatts_cb = gatts_profile_a_event_handler,
.gatts_if = ESP_GATT_IF_NONE,
[PROFILE_B_APP_ID] = {
.gatts_cb = gatts_profile_b_event_handler,
.gatts_if = ESP_GATT_IF_NONE,
},
};
-
- Posts: 6
- Joined: Wed Apr 04, 2018 1:44 am
Re: Adding more than characteristic to same service
but shouldn't a profile according the BLE standard can hold more than one service?
Who is online
Users browsing this forum: adarsh-k and 100 guests