From 2f9edfebaca53e71c05f3dfb4a67ffe05008d6da Mon Sep 17 00:00:00 2001 From: island Date: Fri, 24 Nov 2017 10:42:08 +0800 Subject: [PATCH] component/bt: Add bluetooth example tutorials --- .../gatt_client_example_walkthrough.md | 718 ++++++++++++++ ...ATT_Security_Client_Example_Walkthrough.md | 119 +++ ...ATT_SECURITY_SERVER_EXAMPLE_WALKTHROUGH.md | 229 +++++ .../GATT_SERVER_EXAMPLE_WALKTHROUGH.md | 934 ++++++++++++++++++ .../tutorial/image/GATT SERVER FIGURE 1.png | Bin 0 -> 149897 bytes .../tutorial/image/GATT SERVER FIGURE 2.jpg | Bin 0 -> 4598622 bytes ...erver_Service_Table_Example_Walkthrough.md | 485 +++++++++ ...re representing the Heart Rate Service.pdf | Bin 0 -> 33702 bytes ...nt_Multi-Connection_Example_Walkthrough.md | 326 ++++++ ...ti-connect Client Application Profiles.pdf | Bin 0 -> 36090 bytes ...Multi-connection GATT Client Flowchart.pdf | Bin 0 -> 16489 bytes 11 files changed, 2811 insertions(+) create mode 100644 examples/bluetooth/gatt_client/tutorial/gatt_client_example_walkthrough.md create mode 100644 examples/bluetooth/gatt_security_client/tutorial/GATT_Security_Client_Example_Walkthrough.md create mode 100644 examples/bluetooth/gatt_security_server/tutorial/GATT_SECURITY_SERVER_EXAMPLE_WALKTHROUGH.md create mode 100644 examples/bluetooth/gatt_server/tutorial/GATT_SERVER_EXAMPLE_WALKTHROUGH.md create mode 100644 examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 1.png create mode 100644 examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 2.jpg create mode 100644 examples/bluetooth/gatt_server_service_table/tutorial/GATT_Server_Service_Table_Example_Walkthrough.md create mode 100644 examples/bluetooth/gatt_server_service_table/tutorial/image/Table-like data structure representing the Heart Rate Service.pdf create mode 100644 examples/bluetooth/gattc_multi_connect/tutorial/GATT_Client_Multi-Connection_Example_Walkthrough.md create mode 100644 examples/bluetooth/gattc_multi_connect/tutorial/image/ESP32 GATT Multi-connect Client Application Profiles.pdf create mode 100644 examples/bluetooth/gattc_multi_connect/tutorial/image/Multi-connection GATT Client Flowchart.pdf diff --git a/examples/bluetooth/gatt_client/tutorial/gatt_client_example_walkthrough.md b/examples/bluetooth/gatt_client/tutorial/gatt_client_example_walkthrough.md new file mode 100644 index 0000000000..b42d3deafb --- /dev/null +++ b/examples/bluetooth/gatt_client/tutorial/gatt_client_example_walkthrough.md @@ -0,0 +1,718 @@ +#GATT CLIENT EXAMPLE WALKTHROUGH + +##INTRODUCTION +In this example, the GATT Client example code for the ESP32 is reviewed. This example implements a Bluetooth Low Energy (BLE) Generic Attribute (GATT) client which scans for nearby peripheral servers and connects to a predefined service. The client then searches for available characteristics and subscribes to a known characteristic in order to receive notifications or indications. The example can register an Application Profile and initializes a sequence of events, which can be used to configure Generic Access Profile (GAP) parameters and to handle events such as scanning, connecting to peripherals and reading and writing characteristics. + +#INCLUDES +This example is located in the examples folder of the ESP-IDF under the bluetooth/gatt_client/main directory. The gattc_demo.c file located in the main folder contains all the functionality that we are going to review. The header files contained in gattc_demo.c are: + +```c +#include +#include +#include +#include +#include "nvs.h" +#include "nvs_flash.h" +#include "controller.h" + +#include "bt.h" +#include "esp_gap_ble_api.h" +#include "esp_gattc_api.h" +#include "esp_gatt_defs.h" +#include "esp_bt_main.h" +#include "esp_gatt_common_api.h" +``` + +These "includes" are required for the FreeRTOS and underlaying system components to run, including the logging functionality and a library to store data in non-volatile flash memory. We are interested in `“bt.h”`, `“esp_bt_main.h”`, `"esp_gap_ble_api.h"` and `“esp_gattc_api.h”`, which expose the BLE APIs required to implement this example. + +* `bt.h`: configures the BT controller and VHCI from the host side. +* `esp_bt_main.h`: initializes and enables the Bluedroid stack. +* `esp_gap_ble_api.h`: implements the GAP configuration, such as advertising and connection parameters. +* `esp_gattc_api.h`: implements the GATT Client configuration, such as connecting to peripherals and searching for services. + +##MAIN ENTRY POINT +The program’s entry point is the app_main() function: + +```c +void app_main() +{ + // Initialize NVS. + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK( ret ); + + esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); + ret = esp_bt_controller_init(&bt_cfg); + if (ret) { + ESP_LOGE(GATTC_TAG, "%s initialize controller failed, error code = %x\n", __func__, ret); + return; + } + + ret = esp_bt_controller_enable(ESP_BT_MODE_BTDM); + if (ret) { + ESP_LOGE(GATTC_TAG, "%s enable controller failed, error code = %x\n", __func__, ret); + return; + } + + ret = esp_bluedroid_init(); + if (ret) { + ESP_LOGE(GATTC_TAG, "%s init bluetooth failed, error code = %x\n", __func__, ret); + return; + } + + ret = esp_bluedroid_enable(); + if (ret) { + ESP_LOGE(GATTC_TAG, "%s enable bluetooth failed, error code = %x\n", __func__, ret); + return; + } + + //register the callback function to the gap module + ret = esp_ble_gap_register_callback(esp_gap_cb); + if (ret){ + ESP_LOGE(GATTC_TAG, "%s gap register failed, error code = %x\n", __func__, ret); + return; + } + + //register the callback function to the gattc module + ret = esp_ble_gattc_register_callback(esp_gattc_cb); + if(ret){ + ESP_LOGE(GATTC_TAG, "%s gattc register failed, error code = %x\n", __func__, ret); + return; + } + + ret = esp_ble_gattc_app_register(PROFILE_A_APP_ID); + if (ret){ + ESP_LOGE(GATTC_TAG, "%s gattc app register failed, error code = %x\n", __func__, ret); + } + + esp_err_t local_mtu_ret = esp_ble_gatt_set_local_mtu(500); + if (local_mtu_ret){ + ESP_LOGE(GATTC_TAG, "set local MTU failed, error code = %x", local_mtu_ret); + } + +} +``` + +The main function starts by initializing the non-volatile storage library. This library allows to save key-value pairs in flash memory and is used by some components such as the Wi-Fi library to save the SSID and password: + +```c + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK( ret ); +``` + +##BT CONTROLLER AND STACK INITIALIZATION + +The main function also initializes the BT controller by first creating a BT controller configuration structure named `esp_bt_controller_config_t` with default settings generated by the `BT_CONTROLLER_INIT_CONFIG_DEFAULT()` macro. The BT controller implements the Host Controller Interface (HCI) on the controller side, the Link Layer (LL) and the Physical Layer (PHY). The BT Controller is invisible to the user applications and deals with the lower layers of the BLE stack. The controller configuration includes setting the BT controller stack size, priority and HCI baud rate. With the settings created, the BT controller is initialized and enabled with the `esp_bt_controller_init()` function: + +```c +esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); + ret = esp_bt_controller_init(&bt_cfg); +``` + +Next, the controller is enabled in Dual Mode (BLE + BT Classic). + +```c +ret = esp_bt_controller_enable(ESP_BT_MODE_BTDM); +``` + +There are four Bluetooth modes supported: +1. `ESP_BT_MODE_IDLE`: Bluetooth not running +2. `ESP_BT_MODE_BLE`: BLE mode +3. `ESP_BT_MODE_CLASSIC_BT`: BT Classic mode +4. `ESP_BT_MODE_BTDM`: Dual mode (BLE + BT Classic) + +After the initialization of the BT controller, the Bluedroid stack, which includes the common definitions and APIs for both BT Classic and BLE, is initialized and enabled by using: + +```c +ret = esp_bluedroid_init(); +ret = esp_bluedroid_enable(); +``` +The main function ends by registering the GAP and GATT event handlers, as well as the Application Profile and set the maximum supported MTU size. + +```c + //register the callback function to the gap module + ret = esp_ble_gap_register_callback(esp_gap_cb); + + //register the callback function to the gattc module + ret = esp_ble_gattc_register_callback(esp_gattc_cb); + + ret = esp_ble_gattc_app_register(PROFILE_A_APP_ID); + + esp_err_t local_mtu_ret = esp_ble_gatt_set_local_mtu(500); + if (local_mtu_ret){ + ESP_LOGE(GATTC_TAG, "set local MTU failed, error code = %x", local_mtu_ret); + } +``` + +The GAP and GATT event handlers are the functions used to catch the events generated by the BLE stack and execute functions to configure parameters of the application. Moreover, the event handlers are also used to handle read and write events coming from the central. The GAP event handler takes care of scanning and connecting to servers and the GATT handler manages events that happen after the client has connected to a server, such as searching for services and writing and reading data. The GAP and GATT event handlers are registered by using: + +```c +esp_ble_gap_register_callback(); +esp_ble_gattc_register_callback(); +``` +The functions `esp_gap_cb()` and `esp_gattc_cb()` handle all the events generated by the BLE stack. + +##APPLICATION PROFILES + +The Application Profiles are a way to group functionalities that are designed for one or more server applications. For example, you can have an Application Profile connected to the Heart Rate Sensors, and another one connected to the Temperature Sensors. Each Application Profile creates a GATT interface to connect to other devices. The Application Profiles in the code are instances of the `gattc_profile_inst` structure, which is defined as: + +```c +struct gattc_profile_inst { + esp_gattc_cb_t gattc_cb; + uint16_t gattc_if; + uint16_t app_id; + uint16_t conn_id; + uint16_t service_start_handle; + uint16_t service_end_handle; + uint16_t char_handle; + esp_bd_addr_t remote_bda; +}; +``` + +The Application Profile structure contains: + * `gattc_cb`: GATT client callback function + * `gattc_if`: GATT client interface number for this profile + * `app_id`: Application Profile ID number + * `conn_id`: Connection ID + * `service_start_handle`: Service start handle + * `service_end_handle`: Service end handle + * `char_handle`: Char handle + * `remote_bda`: Remote device address connected to this client. + +In this example there is one Application Profile and its ID is defined as: + +```c +#define PROFILE_NUM 1 +#define PROFILE_A_APP_ID 0 +``` +The Application Profile are stored in the `gl_profile_tab` array, which is initialized as: + +```c +/* One gatt-based profile one app_id and one gattc_if, this array will store the gattc_if returned by ESP_GATTS_REG_EVT */ +static struct gattc_profile_inst gl_profile_tab[PROFILE_NUM] = { + [PROFILE_A_APP_ID] = { + .gattc_cb = gattc_profile_event_handler, + .gattc_if = ESP_GATT_IF_NONE, /* Not get the gatt_if, so initial is ESP_GATT_IF_NONE */ + }, +}; +``` +The initialization of the Application Profile table array includes defining the callback functions for each Profile. These are `gattc_profile_a_event_handler()` and `gattc_profile_a_event_handler()` respectively. In addition, the GATT interface is initialized to the default value of `ESP_GATT_IF_NONE`. Later on, when the Application Profile is registered, the BLE stack returns a GATT interface instance to use with that Application Profile. + +The profile registration triggers an `ESP_GATTC_REG_EVT` event, which is handled by the `esp_gattc_cb()` event handler. The handler takes the GATT interface returned by the event and stores it in the profile table: + +```c +static void esp_gattc_cb(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param) +{ + ESP_LOGI(GATTC_TAG, "EVT %d, gattc if %d", event, gattc_if); + + /* If event is register event, store the gattc_if for each profile */ + if (event == ESP_GATTC_REG_EVT) { + if (param->reg.status == ESP_GATT_OK) { + gl_profile_tab[param->reg.app_id].gattc_if = gattc_if; + } else { + ESP_LOGI(GATTC_TAG, "reg app failed, app_id %04x, status %d", + param->reg.app_id, + param->reg.status); + return; + } + } +… +``` + +Finally, the callback function invokes the corresponding event handler for each profile in the `gl_profile_tab` table. + +```c +… +/* If the gattc_if equal to profile A, call profile A cb handler, + * so here call each profile's callback */ + do { + int idx; + for (idx = 0; idx < PROFILE_NUM; idx++) { + if (gattc_if == ESP_GATT_IF_NONE || /* ESP_GATT_IF_NONE, not specify a certain gatt_if, need to call every profile cb function */ + gattc_if == gl_profile_tab[idx].gattc_if) { + if (gl_profile_tab[idx].gattc_cb) { + gl_profile_tab[idx].gattc_cb(event, gattc_if, param); + } + } + } + } while (0); +} +``` +##SETTING SCAN PARAMETERS + +The GATT client normally scans for nearby servers and tries connect to them, if interested. However, in order to perform the scanning, first the configuration parameters need to be set. This is done after the registration of the Application Profiles, because the registration, once completed, triggers an `ESP_GATTC_REG_EVT` event. The first time this event is triggered, the GATT event handler captures it and assigns a GATT interface to Profile A, then the event is forwarded to the GATT event handler of Profile A. One in this event handler, the event is used to call the `esp_ble_gap_set_scan_params()` function, which takes a `ble_scan_params` structure instance as parameter. This structure is defined as: + +```c +/// Ble scan parameters +typedef struct { + esp_ble_scan_type_t scan_type; /*!< Scan type */ + esp_ble_addr_type_t own_addr_type; /*!< Owner address type */ + esp_ble_scan_filter_t scan_filter_policy; /*!< Scan filter policy */ + uint16_t scan_interval; /*!< Scan interval. This is defined + as the time interval from + when the Controller started its + last LE scan until it begins the + subsequent LE scan. + Range: 0x0004 to 0x4000 + Default: 0x0010 (10 ms) + Time = N * 0.625 msec + Time Range: 2.5 msec to 10.24 + seconds*/ + uint16_t scan_window; /*!< Scan window. The duration of + the LE scan. LE_Scan_Window + shall be less than or equal to + LE_Scan_Interval + Range: 0x0004 to 0x4000 + Default: 0x0010 (10 ms) + Time = N * 0.625 msec + Time Range: 2.5 msec to 10240 + msec */ +} esp_ble_scan_params_t; +``` +An it is initialized as: + +```c +static esp_ble_scan_params_t ble_scan_params = { + .scan_type = BLE_SCAN_TYPE_ACTIVE, + .own_addr_type = BLE_ADDR_TYPE_PUBLIC, + .scan_filter_policy = BLE_SCAN_FILTER_ALLOW_ALL, + .scan_interval = 0x50, + .scan_window = 0x30 +}; +``` + +The BLE scan parameters are configured so that the type of scanning is active (includes reading the scanning response), it is of public type, allows any advertising device to be read and has a scanning interval of 100 ms (1.25 ms * 0x50) and a scanning window of 60 ms (1.25 ms * 0x30). + +The scan values are set using the `esp_ble_gap_set_scan_params()` function: + +```c +case ESP_GATTC_REG_EVT: + ESP_LOGI(GATTC_TAG, "REG_EVT"); + esp_err_t scan_ret = esp_ble_gap_set_scan_params(&ble_scan_params); + if (scan_ret){ + ESP_LOGE(GATTC_TAG, "set scan params error, error code = %x", scan_ret); + } + break; +``` + +##START SCANNING +Once the scanning parameters are set, an `ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT` event is triggered, which is handled by the GAP event handler `esp_gap_cb()`. This event is used to start the scanning of nearby GATT servers: +```c + case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: { + //the unit of the duration is second + uint32_t duration = 30; + esp_ble_gap_start_scanning(duration); + break; + } +``` +The scanning is started using the `esp_ble_gap_start_scanning()` function which takes a parameter representing the duration of the continuous scanning (in seconds). Once the scanning period is ended, an `ESP_GAP_SEARCH_INQ_CMPL_EVT` event is triggered. + +##GETTING SCAN RESULTS + +The results of the scanning are displayed as soon as they arrive with the `ESP_GAP_BLE_SCAN_RESULT_EVT` event, which includes the following parameters: + +```c + /** + * @brief ESP_GAP_BLE_SCAN_RESULT_EVT + */ + struct ble_scan_result_evt_param { + esp_gap_search_evt_t search_evt; /*!< Search event type */ + esp_bd_addr_t bda; /*!< Bluetooth device address which + has been searched */ + esp_bt_dev_type_t dev_type; /*!< Device type */ + esp_ble_addr_type_t ble_addr_type; /*!< Ble device address type */ + esp_ble_evt_type_t ble_evt_type; /*!< Ble scan result event type */ + int rssi; /*!< Searched device's RSSI */ + uint8_t ble_adv[ESP_BLE_ADV_DATA_LEN_MAX + ESP_BLE_SCAN_RSP_DATA_LEN_MAX]; /*!< Received EIR */ + int flag; /*!< Advertising data flag bit */ + int num_resps; /*!< Scan result number */ + uint8_t adv_data_len; /*!< Adv data length */ + uint8_t scan_rsp_len; /*!< Scan response length */ + } scan_rst; /*!< Event parameter of + ESP_GAP_BLE_SCAN_RESULT_EVT */ +``` + +This event also includes a list of sub events as shown below: + +```c +/// Sub Event of ESP_GAP_BLE_SCAN_RESULT_EVT +typedef enum { + ESP_GAP_SEARCH_INQ_RES_EVT = 0, /*!< Inquiry result for a peer + device. */ + ESP_GAP_SEARCH_INQ_CMPL_EVT = 1, /*!< Inquiry complete. */ + ESP_GAP_SEARCH_DISC_RES_EVT = 2, /*!< Discovery result for a peer + device. */ + ESP_GAP_SEARCH_DISC_BLE_RES_EVT = 3, /*!< Discovery result for BLE GATT + based service on a peer device. + */ + ESP_GAP_SEARCH_DISC_CMPL_EVT = 4, /*!< Discovery complete. */ + ESP_GAP_SEARCH_DI_DISC_CMPL_EVT = 5, /*!< Discovery complete. */ + ESP_GAP_SEARCH_SEARCH_CANCEL_CMPL_EVT = 6, /*!< Search cancelled */ +} esp_gap_search_evt_t; +``` +We are interested in the `ESP_GAP_SEARCH_INQ_RES_EVT` event, which is called every time a new device is found. We are also interested in the `ESP_GAP_SEARCH_INQ_CMPL_EVT`, which is triggered when the duration of the scanning is completed and can be used to restart the scanning procedure: +```c + case ESP_GAP_BLE_SCAN_RESULT_EVT: { + esp_ble_gap_cb_param_t *scan_result = (esp_ble_gap_cb_param_t *)param; + switch (scan_result->scan_rst.search_evt) { + case ESP_GAP_SEARCH_INQ_RES_EVT: + esp_log_buffer_hex(GATTC_TAG, scan_result->scan_rst.bda, 6); + ESP_LOGI(GATTC_TAG, "searched Adv Data Len %d, Scan Response Len %d", scan_result->scan_rst.adv_data_len, scan_result->scan_rst.scan_rsp_len); + adv_name = esp_ble_resolve_adv_data(scan_result->scan_rst.ble_adv, + ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len); + ESP_LOGI(GATTC_TAG, "searched Device Name Len %d", adv_name_len); + esp_log_buffer_char(GATTC_TAG, adv_name, adv_name_len); + ESP_LOGI(GATTC_TAG, "\n"); + if (adv_name != NULL) { + if (strlen(remote_device_name) == adv_name_len && strncmp((char *)adv_name, remote_device_name, adv_name_len) == 0) { + ESP_LOGI(GATTC_TAG, "searched device %s\n", remote_device_name); + if (connect == false) { + connect = true; + ESP_LOGI(GATTC_TAG, "connect to the remote device."); + esp_ble_gap_stop_scanning(); + esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, true); + } + } + } + break; +``` + +First the device name is resolved and compared to the one defined in `remote_device_name`. If it equals to the device name of the GATT Server we are interested in, then the scanning is stopped. + + +##CONNECTING TO A GATT SERVER +Every time we receive a result from the `ESP_GAP_SEARCH_INQ_RES_EVT` event, the code first prints the address of the remote device: + +```c +case ESP_GAP_SEARCH_INQ_RES_EVT: + esp_log_buffer_hex(GATTC_TAG, scan_result->scan_rst.bda, 6); +``` + +The client then prints the advertised data length and the scan response length: + +```c +ESP_LOGI(GATTC_TAG, "searched Adv Data Len %d, Scan Response Len %d", scan_result->scan_rst.adv_data_len, scan_result->scan_rst.scan_rsp_len); +``` + +In order to get the device name, we use the `esp_ble_resolve_adv_data()` function, which takes the advertised data stored in `scan_result->scan_rst.ble_adv`, the type of advertising data and the length, in order to extract the value from the advertising packet frame. Then the device name is printed. + +```c +adv_name = esp_ble_resolve_adv_data(scan_result->scan_rst.ble_adv, + ESP_BLE_AD_TYPE_NAME_CMPL, + &adv_name_len); +ESP_LOGI(GATTC_TAG, "searched Device Name Len %d", adv_name_len); +esp_log_buffer_char(GATTC_TAG, adv_name, adv_name_len); +``` + +Finally if the remote device name is the same as we have defined above, the local device stops scanning and tries to open a connection to the remote device using the `esp_ble_gattc_open()` function. This function takes as parameters the Application Profile GATT interface, the remote server address and a boolean value. The boolean value is used to indicate if the connection is done directly or if it’s done in the background (auto-connection), at the moment this boolean value must be set to true in order to establish the connection. Notice that the client opens a virtual connection to the server. The virtual connection returns a connection ID. The virtual connection is the connection between the Application Profile and the remote server. Since many Application Profiles can run on one ESP32, there could be many virtual connection opened to the same remote server. There is also the physical connection which is the actual BLE link between the client and the server. Therefore, if the physical connection is disconnected with the `esp_ble_gap_disconnect()` function, all other virtual connections are closed as well. In this example, each Application Profile creates a virtual connection to the same server with the `esp_ble_gattc_open()` function, so when the close function is called, only that connection from the Application Profile is closed, while if the gap disconnect function is called, both connections will be closed. In addition, connect events are propagated to all profiles because it relates to the physical connection, while open events are propagated only to the profile that creates the virtual connection. + +##CONFIGURING MTU SIZE + +ATT_MTU is defined as the maximum size of any packet sent between a client and a server. When the client connects to the server, it informs the server which MTU size to use by exchanging MTU Request and Response protocol data units (PDUs). This is done after the opening of a connection. After opening the connection, an `ESP_GATTC_CONNECT_EVT` event is triggered: + +```c + case ESP_GATTC_CONNECT_EVT: + //p_data->connect.status always be ESP_GATT_OK + ESP_LOGI(GATTC_TAG, "ESP_GATTC_CONNECT_EVT conn_id %d, if %d, status %d", conn_id, gattc_if, p_data->connect.status); + conn_id = p_data->connect.conn_id; + gl_profile_tab[PROFILE_A_APP_ID].conn_id = p_data->connect.conn_id; + memcpy(gl_profile_tab[PROFILE_A_APP_ID].remote_bda, p_data->connect.remote_bda, sizeof(esp_bd_addr_t)); + ESP_LOGI(GATTC_TAG, "REMOTE BDA:"); + esp_log_buffer_hex(GATTC_TAG, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, sizeof(esp_bd_addr_t)); + esp_err_t mtu_ret = esp_ble_gattc_send_mtu_req (gattc_if, conn_id); + if (mtu_ret){ + ESP_LOGE(GATTC_TAG, "config MTU error, error code = %x", mtu_ret); + } + break; +``` + +The connection ID and the address of the remote device (server) are stored in the Application Profile table and printed to the console: + +```c +conn_id = p_data->connect.conn_id; +gl_profile_tab[PROFILE_A_APP_ID].conn_id = p_data->connect.conn_id; +memcpy(gl_profile_tab[PROFILE_A_APP_ID].remote_bda, p_data->connect.remote_bda, + sizeof(esp_bd_addr_t)); +ESP_LOGI(GATTC_TAG, "REMOTE BDA:"); +esp_log_buffer_hex(GATTC_TAG, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, + sizeof(esp_bd_addr_t)); +``` + +The typical MTU size for a Bluetooth 4.0 connection is 23 bytes. A client can change the size of MUT, using `esp_ble_gattc_send_mtu_req()` function, which takes the GATT interface and the connection ID. The size of the requested MTU is defined by `esp_ble_gatt_set_local_mtu()`. The server can then accept or reject the request. The ESP32 supports a MTU size of up to 517 bytes, which is defined by the `ESP_GATT_MAX_MTU_SIZE` in `esp_gattc_api.h`. In this example, the MTU size is set to 500 bytes. In case the configuration fails, the returned error is printed: + +```c +esp_err_t mtu_ret = esp_ble_gattc_send_mtu_req (gattc_if, conn_id); +if (mtu_ret){ + ESP_LOGE(GATTC_TAG, "config MTU error, error code = %x", mtu_ret); +} +break; +``` + +The connection opening also triggers an ESP_GATTC_OPEN_EVT, which is used to check that the opening of the connection was done successfully, otherwise print an error and exit. + +```c +case ESP_GATTC_OPEN_EVT: + if (param->open.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "open failed, status %d", p_data->open.status); + break; + } +ESP_LOGI(GATTC_TAG, "open success"); +``` + +When the MTU is exchanged, an `ESP_GATTC_CFG_MTU_EVT` is triggered, which in this example is used to print the new MTU size. + +```c +case ESP_GATTC_CFG_MTU_EVT: + if (param->cfg_mtu.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG,"config mtu failed, error status = %x", param->cfg_mtu.status); + } + ESP_LOGI(GATTC_TAG, "ESP_GATTC_CFG_MTU_EVT, Status %d, MTU %d, conn_id %d", param->cfg_mtu.status, param->cfg_mtu.mtu, param->cfg_mtu.conn_id); +… +``` + +##DISCOVERING SERVICES + +The MTU configuration event is also used to start discovering the services available in the server that the client just connected to. To discover the services, the function `esp_ble_gattc_search_service()` is used. The parameters of the function are the GATT interface, the Application Profile connection ID and the UUID of the service application that the client is interested in. The service we are looking for is defined as: + +```c +static esp_bt_uuid_t remote_filter_service_uuid = { + .len = ESP_UUID_LEN_16, + .uuid = {.uuid16 = REMOTE_SERVICE_UUID,}, +}; +``` +Where, + +```c +#define REMOTE_SERVICE_UUID 0x00FF +``` +The services are then discovered as follows: + +```c +esp_ble_gattc_search_service(gattc_if, param->cfg_mtu.conn_id, &remote_filter_service_uuid); + break; +``` + +The resulting service found, if there is any, will be returned from an `ESP_GATTC_SEARCH_RES_EVT`. For each service found, the event is triggered to print information about the service discovered, depending on the size of the UUID: + +```c + case ESP_GATTC_SEARCH_RES_EVT: { + esp_gatt_srvc_id_t *srvc_id = &p_data->search_res.srvc_id; + conn_id = p_data->search_res.conn_id; + if (srvc_id->id.uuid.len == ESP_UUID_LEN_16 && srvc_id->id.uuid.uuid.uuid16 == +REMOTE_SERVICE_UUID) { + get_server = true; + gl_profile_tab[PROFILE_A_APP_ID].service_start_handle = p_data->search_res.start_handle; + gl_profile_tab[PROFILE_A_APP_ID].service_end_handle = p_data->search_res.end_handle; + ESP_LOGI(GATTC_TAG, "UUID16: %x", srvc_id->id.uuid.uuid.uuid16); + } + break; +``` + +In case that the client finds the service that it is looking for, the flag get_server is set to true, and the start handle value and end handle value, which will be used later to get all the characteristics of that service, are saved. After all service results are returned, the search is completed and an `ESP_GATTC_SEARCH_CMPL_EVT` event is triggered. + +##GETTING CHARACTERISTICS + +This examples implements getting characteristic data from a predefined service. The service that we want the characteristics from has an UUID of 0x00FF, and the characteristic we are interested in has an UUID of 0xFF01: + +```c +#define REMOTE_NOTIFY_CHAR_UUID 0xFF01 +``` +A service is defined using the `esp_gatt_srvc_id_t` structure as: + +```c +/** + * @brief Gatt id, include uuid and instance id + */ +typedef struct { + esp_bt_uuid_t uuid; /*!< UUID */ + uint8_t inst_id; /*!< Instance id */ +} __attribute__((packed)) esp_gatt_id_t; +``` + +In this example, we define the service that we want to get the characteristics from as: + +```c +static esp_gatt_srvc_id_t remote_service_id = { + .id = { + .uuid = { + .len = ESP_UUID_LEN_16, + .uuid = {.uuid16 = REMOTE_SERVICE_UUID,}, + }, + .inst_id = 0, + }, + .is_primary = true, +}; +``` + +Once defined, we can get the characteristics from that service using the `esp_ble_gattc_get_characteristic()` function, which is called in the `ESP_GATTC_SEARCH_CMPL_EVT` event after the search for services is completed and the client has found the service that it was looking for. + +```c + case ESP_GATTC_SEARCH_CMPL_EVT: + if (p_data->search_cmpl.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "search service failed, error status = %x", p_data->search_cmpl.status); + break; + } + conn_id = p_data->search_cmpl.conn_id;h + if (get_server){ + uint16_t count = 0; + esp_gatt_status_t status = esp_ble_gattc_get_attr_count( gattc_if, + p_data->search_cmpl.conn_id,ESP_GATT_DB_CHARACTERISTIC, gl_profile_tab[PROFILE_A_APP_ID].service_start_handle, gl_profile_tab[PROFILE_A_APP_ID].service_end_handle, + INVALID_HANDLE, + &count); + if (status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_attr_count error"); + } + + if (count > 0){ + char_elem_result = (esp_gattc_char_elem_t*)malloc + (sizeof(esp_gattc_char_elem_t) * count); + if (!char_elem_result){ + ESP_LOGE(GATTC_TAG, "gattc no mem"); + }else{ + status = esp_ble_gattc_get_char_by_uuid( gattc_if, + p_data->search_cmpl.conn_id, + gl_profile_tab[PROFILE_A_APP_ID].service_start_handle, + gl_profile_tab[PROFILE_A_APP_ID].service_end_handle, + remote_filter_char_uuid, + char_elem_result, + &count); + if (status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_char_by_uuid error"); + } + + /* Every service have only one char in our 'ESP_GATTS_DEMO' demo, + so we used first 'char_elem_result' */ + if (count > 0 && (char_elem_result[0].properties + &ESP_GATT_CHAR_PROP_BIT_NOTIFY)){ + gl_profile_tab[PROFILE_A_APP_ID].char_handle = + char_elem_result[0].char_handle; + esp_ble_gattc_register_for_notify (gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].remote_bda, + char_elem_result[0].char_handle); + } + } + /* free char_elem_result */ + free(char_elem_result); + }else{ + ESP_LOGE(GATTC_TAG, "no char found"); + } } + break; +``` + +`esp_ble_gattc_get_attr_count()` gets the attribute count with the given service or characteristic in the gattc cache. The parameters of `esp_ble_gattc_get_attr_count()` function are the GATT interface, the connection ID, the attribute type defined in `esp_gatt_db_attr_type_t`, the attribute start handle, the attribute end handle, the characteristic handle (this parameter is only valid when the type is set to `ESP_GATT_DB_DESCRIPTOR`.) and output the number of attribute has been found in the gattc cache with the given attribute type. Then we allocate a buffer to save the char information for `esp_ble_gattc_get_char_by_uuid()` function. The function finds the characteristic with the given characteristic UUID in the gattc cache. It just gets characteristic from local cache, instead of the remote devices. In a server, there might be more than one chars sharing the same UUID. However, in our gatt_server demo, every char has an unique UUID and that’s why we only use the first char in `char_elem_result`, which is the pointer to the characteristic of the service. Count initially stores the number of the characteristics that the client wants to find, and will be updated with the number of the characteristics that have been actually found in the gattc cache with `esp_ble_gattc_get_char_by_uuid`. + +##REGISTERING FOR NOTIFICATIONS + +The client can register to receive notifications from the server every time the characteristic value changes. In this example, we want to register for notifications of the characteristic identified with an UUID of 0xff01. After getting all the characteristics, we check the properties of the received characteristic, then use the `esp_ble_gattc_register_for_notify()` function to register notifications. The function arguments are the GATT interface, the address of the remote server, and the handle we want to register for notifications. + +```c +… +/* Every service have only one char in our 'ESP_GATTS_DEMO' demo, so we used first 'char_elem_result' */ + if(count > 0 && (char_elem_result[0].properties & + ESP_GATT_CHAR_PROP_BIT_NOTIFY)){ + gl_profile_tab[PROFILE_A_APP_ID].char_handle = + char_elem_result[0].char_handle; + esp_ble_gattc_register_for_notify (gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].remote_bda, + char_elem_result[0].char_handle); + } +… +``` + +This procedure registers notifications to the BLE stack, and triggers an `ESP_GATTC_REG_FOR_NOTIFY_EVT`. This event is used to write to the server Client Configuration Descriptor: + +```c + case ESP_GATTC_REG_FOR_NOTIFY_EVT: { + ESP_LOGI(GATTC_TAG, "ESP_GATTC_REG_FOR_NOTIFY_EVT"); + if (p_data->reg_for_notify.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "REG FOR NOTIFY failed: error status = %d", + p_data->reg_for_notify.status); + }else{ + uint16_t count = 0; + uint16_t notify_en = 1; + esp_gatt_status_t ret_status = esp_ble_gattc_get_attr_count( gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].conn_id, + ESP_GATT_DB_DESCRIPTOR, + gl_profile_tab[PROFILE_A_APP_ID].service_start_handle, + gl_profile_tab[PROFILE_A_APP_ID].service_end_handle, + gl_profile_tab[PROFILE_A_APP_ID].char_handle, + &count); + if (ret_status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_attr_count error"); + } + if (count > 0){ + descr_elem_result = malloc(sizeof(esp_gattc_descr_elem_t) * count); + if (!descr_elem_result){ + ESP_LOGE(GATTC_TAG, "malloc error, gattc no mem"); + }else{ + ret_status = esp_ble_gattc_get_descr_by_char_handle( gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].conn_id, + p_data->reg_for_notify.handle, + notify_descr_uuid, + descr_elem_result, + &count); + if (ret_status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_descr_by_char_handle + error"); + } + + /* Erery char have only one descriptor in our 'ESP_GATTS_DEMO' demo, so we used first 'descr_elem_result' */ + if (count > 0 && descr_elem_result[0].uuid.len == ESP_UUID_LEN_16 && +descr_elem_result[0].uuid.uuid.uuid16 == ESP_GATT_UUID_CHAR_CLIENT_CONFIG){ + ret_status = esp_ble_gattc_write_char_descr( gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].conn_id, + descr_elem_result[0].handle, + sizeof(notify_en), + (Uint8 *)¬ify_en, + ESP_GATT_WRITE_TYPE_RSP, + ESP_GATT_AUTH_REQ_NONE); + } + + if (ret_status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "esp_ble_gattc_write_char_descr error"); + } + + /* free descr_elem_result */ + free(descr_elem_result); + } + } + else{ + ESP_LOGE(GATTC_TAG, "decsr not found"); + } + + } + break; + } +``` + +The event is used to first print the notification register status and the service and characteristic UUIDs of the just registered notifications. The client then writes to the Client Configuration Descriptor by using the `esp_ble_gattc_write_char_descr()` function. There are many characteristic descriptors defined in the Bluetooth specification. However, in this case we are interested in writing to the descriptor that deals with enabling notifications, which is the Client Configuration descriptor. In order to pass this descriptor as parameter, we first define it as: + +```c +static esp_gatt_id_t notify_descr_id = { + .uuid = { + .len = ESP_UUID_LEN_16, + .uuid = {.uuid16 = ESP_GATT_UUID_CHAR_CLIENT_CONFIG,}, + }, + .inst_id = 0, +}; +``` +Where `ESP_GATT_UUID_CHAR_CLIENT_CONFIG` is defined with the UUID to identify the Characteristic Client Configuration: + +```c +#define ESP_GATT_UUID_CHAR_CLIENT_CONFIG 0x2902 /* Client Characteristic Configuration */ +``` +The value to write is “1” to enable notifications. We also pass `ESP_GATT_WRITE_TYPE_RSP` to request that the server responds to the request of enabling notifications and `ESP_GATT_AUTH_REQ_NONE` to indicate that the Write request does not need authorization. + + + +##CONCLUSION + +We have reviewed the GATT Client example code for the ESP32. This example scans for nearby devices and searches for services and characteristics of servers of interest. When the server of interest is found, a connection is made with that server and a search for services is performed. Finally, the client looks for a specific characteristic in the services found, if found, gets the characteristic value and registers for notifications to that characteristic. This is done by registering one Application Profile and following a sequence of events to configure the GAP and GATT parameters required. + diff --git a/examples/bluetooth/gatt_security_client/tutorial/GATT_Security_Client_Example_Walkthrough.md b/examples/bluetooth/gatt_security_client/tutorial/GATT_Security_Client_Example_Walkthrough.md new file mode 100644 index 0000000000..ebb9ee59f3 --- /dev/null +++ b/examples/bluetooth/gatt_security_client/tutorial/GATT_Security_Client_Example_Walkthrough.md @@ -0,0 +1,119 @@ +# GATT Security Client Example Walkthrough + + + +## Introduction + +This documents presents a review of the GATT Security Client code example for the ESP32. The GATT Client is capable of scanning for nearby devices and once it has found a device of interest, it requests a secure connection. The GATT client behaves as a master device that initiates a connection to a slave by sending a *Pairing Request* as specified by the [Bluetooth Core Specification Version 4.2](https://www.bluetooth.com/specifications/bluetooth-core-specification). The remote slave device is normally a GATT Server that exposes Services and Characteristics. The slave replies with a *Pairing Response* followed by authentication and exchange of keys. If the bonding process is also executed, the Long Term Keys are stored for subsequent connections. Finally an encrypted channel is established which can support protection against Man-In-The-Middle (MITM) attacks depending on the security configuration. The code is implemented using an Application Profile that upon registration, allows to set the local privacy configuration as events are triggered during the lifetime of the program. + +This document only includes a description of the security aspects of the GATT Client implementation, for a review of how to define the functionality of the GATT client such as scanning parameters and opening connections please refer to **GATT Client Example Walkthrough**. + +## Configuring Local Privacy of the Security Client + +The example registers one Application Profile defined as: + +``` +#define PROFILE_NUM 1 +#define PROFILE_A_APP_ID 0 +``` + +The registration takes place in the ``app_main()`` function by using the ``esp_ble_gattc_app_register()`` function: + +``` +… +ret = esp_ble_gattc_app_register(PROFILE_A_APP_ID); + if (ret){ + ESP_LOGE(GATTC_TAG, "%s gattc app register error, error code = %x\n", __func__, ret); + } +… +``` + +The Application Profile registration triggers an ``ESP_GATTC_REG_EVT`` event which is managed by the ``esp_gattc_cb()`` callback function and forwarded to the Profile A event handler ``gattc_profile_event_handler()``. Here, the event is used to configure the local privacy of the slave device by using the ``esp_ble_gap_config_local_privacy()`` function. + +``` +case ESP_GATTC_REG_EVT: + ESP_LOGI(GATTC_TAG, "REG_EVT"); + esp_ble_gap_config_local_privacy(true); + break; +``` + +This function is a Bluedroid API call for configuring default privacy settings on the local device. Once the privacy is set, an ``ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT`` is triggered which is used to set scan parameters and start scanning for nearby peripherals: + +``` + case ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT: + if (param->local_privacy_cmpl.status != ESP_BT_STATUS_SUCCESS){ + ESP_LOGE(GATTC_TAG, "config local privacy failed, error code =%x", param->local_privacy_cmpl.status); + break; + } + esp_err_t scan_ret = esp_ble_gap_set_scan_params(&ble_scan_params); + if (scan_ret){ + ESP_LOGE(GATTC_TAG, "set scan params error, error code = %x", scan_ret); + } + break; + case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: { + //the unit of the duration is second + uint32_t duration = 30; + esp_ble_gap_start_scanning(duration); + break; + } + case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT: + //scan start complete event to indicate scan start successfully or failed + if (param->scan_start_cmpl.status != ESP_BT_STATUS_SUCCESS) { + ESP_LOGE(GATTC_TAG, "scan start failed, error status = %x", param->scan_start_cmpl.status); + break; + } + ESP_LOGI(GATTC_TAG, "Scan start success"); + break; +``` + +## Configuring and Bonding to a Slave Device + +The rest of the configuration for the GATT Client is performed normally in the same way as the regular GATT Client example. That is, the client finds a device of interest and opens a connection. At this point the GATT client, which is usually the master, initiates the pairing process by sending a Pairing Request to the slave device. This request should be acknowledged with a Pairing Response. The Pairing process is implemented automatically by the stack and no extra user configuration is needed. However, depending on the I/O capabilities of both devices, a passkey might be generated on the ESP32 which is presented to the user with the ``ESP_GAP_BLE_PASSKEY_NOTIF_EVT``: + +``` + case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability. + ///show the passkey number to the user to input it in the peer deivce. + ESP_LOGE(GATTS_TABLE_TAG, "The passkey Notify number:%d", param->ble_security.key_notif.passkey); + break; + +``` +The combination of input and output capabilities that determine which algorithm is used are: + + | Display Only | Display Yes/No|Keyboard Only|No Input No Output|Keyboard Display| +--------------------|------------------|-----------------------|--------------------|------------------|-----------------------| +Display Only | Just Works| Just Works|Passkey Entry|Just Works|Passkey Entry| +Display Yes/No |Just Works|Just Works|Passkey Entry|Just Works|Passkey Entry| +Keyboard Only |Passkey Entry |Passkey Entry|Passkey Entry|Just Works|Passkey Entry| +No Input No Output| Just Works|Just Works|Just Works|Just Works|Just Works| +Keyboard Display|Passkey Entry|Passkey Entry|Passkey Entry|Just Works|Passkey Entry| + +In the Just Works method, the Temporary Key is set to 0. This is a practical way to authenticate devices when no display or keyboards are attached to them, so that there is no way to show or enter a passkey. However, if the ESP32 GATT Client has an LCD, it can present the passkey generated locally so that the user can input it on the other peer device, or if the GATT Client has a keyboard, it can input the passkey generated by the other peer device. Additionally, a numeric comparison can be performed if both devices have a display and yes/no confirm buttons and LE Secure Connections are used, that way an independently generated passkey is displayed on both devices and the user manually checks that both 6-digit confirmation values match. + +## Exchanging Keys + +When the client connects to a remote device and the pairing is done successfully, the initiator and responder keys are exchanged. For each key exchange message, an ``ESP_GAP_BLE_KEY_EVT`` event is triggered which can be used to print the type of key received: + +``` +case ESP_GAP_BLE_KEY_EVT: + //shows the ble key info share with peer device to the user. + ESP_LOGI(GATTS_TABLE_TAG, "key type = %s", esp_key_type_to_str(param->ble_security.ble_key.key_type)); + break; +``` + +When the keys are exchanged successfully, the pairing process is completed and encryption of payload data can be started using the AES-128 engine. This triggers an ``ESP_GAP_BLE_AUTH_CMPL_EVT`` event which is used to print information: + +``` +case ESP_GAP_BLE_AUTH_CMPL_EVT: { + esp_bd_addr_t bd_addr; + memcpy(bd_addr, param->ble_security.auth_cmpl.bd_addr, sizeof(esp_bd_addr_t)); + ESP_LOGI(GATTS_TABLE_TAG, "remote BD_ADDR: %08x%04x",\ + (bd_addr[0] << 24) + (bd_addr[1] << 16) + (bd_addr[2] << 8) + bd_addr[3], + (bd_addr[4] << 8) + bd_addr[5]); + ESP_LOGI(GATTS_TABLE_TAG, "address type = %d", param->ble_security.auth_cmpl.addr_type); + ESP_LOGI(GATTS_TABLE_TAG, "pair status = %s",param->ble_security.auth_cmpl.success ? "success" : "fail"); + break; +``` + +## Conclusion + +In this document, a review of the security aspects of the GATT Client has been realized. BLE security encompasses Pairing, Bonding and Encryption. In order to establish a secure link between a master and a slave device, the local privacy of the GATT client is set, which allows the BLE stack to set necessary security parameters automatically without the need of additional user configuration. The combination of features and capabilities of the peer devices results in the selection of the appropriate pairing method which the BLE stack then executes. Immediately, the required keys are generated and exchanged and the encryption of subsequent messages is started using the AES-128 engine. These steps trigger different events that are managed by the GATT and GAP event handlers which can be used to print useful information such as the types of keys exchanged and the pairing status. The rest of the security GATT client functionality such as registering for notifications of characteristics is implemented in the same way as in **GATT Client Example Walkthrough**. \ No newline at end of file diff --git a/examples/bluetooth/gatt_security_server/tutorial/GATT_SECURITY_SERVER_EXAMPLE_WALKTHROUGH.md b/examples/bluetooth/gatt_security_server/tutorial/GATT_SECURITY_SERVER_EXAMPLE_WALKTHROUGH.md new file mode 100644 index 0000000000..dfedfbd87f --- /dev/null +++ b/examples/bluetooth/gatt_security_server/tutorial/GATT_SECURITY_SERVER_EXAMPLE_WALKTHROUGH.md @@ -0,0 +1,229 @@ +#GATT SECURITY SERVER EXAMPLE WALKTHROUGH + +##INTRODUCTION + +In this document, a description of the security GATT Server BLE example for the ESP32 is presented. The security configuration enables a GATT Server acting as a slave device to bond with a master and establish an encrypted link between them. This functionality is defined by the [Bluetooth Specification version 4.2](https://www.bluetooth.com/specifications/bluetooth-core-specification) and implemented on the ESP-IDF BLE stack, specifically on the Security Manager Protocol (SMP) API. + +BLE security involves three interrelated concepts: pairing, bonding and encryption. Pairing concerns with the exchange of security features and types of keys needed. In addition, the pairing procedure takes care of the generation and exchange of shared keys. The core specification defines the legacy pairing and Secure Connections pairing (introduced in Bluetooth 4.2), which are both supported by ESP32. Once the exchange of shared keys is completed, a temporary encrypted link is established to exchange short term and long term keys. Bonding refers to storing the exchanged keys for subsequent connections so that they do not have to be transmitted again. Finally, encryption pertains to the ciphering of plain text data using the AES-128 engine and the shared keys. Server attributes may also be defined to allow only encrypted write and read messages. At any point of the communication, a slave device can always ask to start encryption by issuing a security request to the other peer device, which returns a security response by calling an API. + +This document only describes the security configuration. The rest of the GATT server functionalities, such as defining the service table, are explained in the GATT Server example walkthrough documentation. For a better understanding of this example workflow, it is recommended that the reader is familiar with the pairing feature exchange and key generation defined in the section 3.5 of the [Bluetooth Specification Version 4.2](https://www.bluetooth.com/specifications/bluetooth-core-specification) [Vol 3, Part H]. + +##SETTING SECURITY PARAMETERS + +The ESP32 requires a series of security parameters in order to define how the pairing request and response are going to be built. The Pairing Response packet built by the GATT Server includes fields such as the input/output capabilities, Secure Connections pairing, authenticated Man-In-The-Middle (MITM) protection or no security requirements (see Section 2.3.1 of the [Bluetooth Specification Version 4.2](https://www.bluetooth.com/specifications/bluetooth-core-specification) [Vol 3, Part H]). In this example, this procedure is done in the `app_main()` function. The pairing request is sent by the initiator which in this case is a remote GATT client. The ESP32 server implemented in this example receives this request and replies with a pairing response, which contains the same security parameters in order for both devices to agree on the resources available and the applicable pairing algorithm (*Just Works* or *Passkey Entry*). Both the pairing request and response commands have the following parameters: + +* *IO Capability*: describes if the device has input/output capabilities such as a display or a keyboard. +* *OOB Flag*: describes if the device supports Out of Band passkey exchange, for example using NFC or Wi-Fi to exchange keys as TKs. Currently, the ESP32 does not support this feature. +* *Authorization Request*: indicates the requested security properties such as Bonding, Secure Connections (SC), MITM protection or none that will be present in the Pairing Request and Response packets. +* *Maximum Encryption Key Size*: maximum encryption key size in octets. +* *Initiator Key Distribution/Generation*: indicates which keys the initiator is requesting to distribute/generate or use during the Transport Specific Key Distribution phase. In the pairing request, these keys are requested, while in the pairing response, these keys are confirmed to be distributed. +* *Responder Key Distribution/Generation*: indicates which keys the initiator is requesting the responder to distribute/generate or use during the Transport Specific Key Distribution phase. In the pairing request, these keys are requested, while in the pairing response, these keys are confirmed to be distributed. + +In code, these parameters are defined as follows: + +* *IO Capability*: + +```c +esp_ble_io_cap_t iocap = ESP_IO_CAP_NONE;//set the IO capability to No Input No Output +``` + +The possible values for *IO Capabilities* are: + +```c +ESP_IO_CAP_OUT 0 /*!< DisplayOnly */ +ESP_IO_CAP_IO 1 /*!< DisplayYesNo */ +ESP_IO_CAP_IN 2 /*!< KeyboardOnly */ +ESP_IO_CAP_NONE 3 /*!< NoInputNoOutput */ +ESP_IO_CAP_KBDISP 4 /*!< Keyboard display */ +``` + +* *Authorization Request*: + +```c +esp_ble_auth_req_t auth_req = ESP_LE_AUTH_BOND; +//bonding with peer device after authentication +``` + +The possible values for *Authorization Request* are a combination of Bonding, MITM protection and Secure Connections requests: + +```c +ESP_LE_AUTH_NO_BOND: No bonding. +ESP_LE_AUTH_BOND: Bonding is performed. +ESP_LE_AUTH_REQ_MITM: MITM Protection is enabled. +ESP_LE_AUTH_REQ_SC_ONLY: Secure Connections without bonding enabled. +ESP_LE_AUTH_REQ_SC_BOND: Secure Connections with bonding enabled. +ESP_LE_AUTH_REQ_SC_MITM: Secure Connections with MITM Protection and no bonding enabled. +ESP_LE_AUTH_REQ_SC_MITM_BOND: Secure Connections with MITM Protection and bonding enabled. +``` + +* *Maximum Encryption Key Size*: + +```c +uint8_t key_size = 16; //the key size should be 7~16 bytes +``` + +* *Initiator Key Distribution/Generation*: + +```c +uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK; +``` + +The initiator distributes the LTK and IRK keys by the setting the EncKey and IdKey masks. + +* *Responder Key Distribution/Generation*: + +```c +uint8_t rsp_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK; +``` + +The responder distributes the LTK and IRK keys by the setting the *EncKey* and *IdKey* masks. + +Once defined, the parameters are set using the `esp_ble_gap_set_security_param()` function. This function sets the parameter type, the parameter value and the parameter length: + +```c +esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t)); +esp_ble_gap_set_security_param(ESP_BLE_SM_IOCAP_MODE, &iocap, sizeof(uint8_t)); +esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_KEY_SIZE, &key_size, sizeof(uint8_t)); +esp_ble_gap_set_security_param(ESP_BLE_SM_SET_INIT_KEY, &init_key, sizeof(uint8_t)); +esp_ble_gap_set_security_param(ESP_BLE_SM_SET_RSP_KEY, &rsp_key, sizeof(uint8_t)); +``` + +This information is enough for the BLE stack to perform the pairing process, including pairing confirmation and key generation. The procedure is invisible to the user and executed automatically by the stack. + +##CONNECTING AND BONDING TO A PEER DEVICE + +The security parameters set previously are stored locally to be used later when the master device connects to the slave. Every time a remote device connects to the local GATT server, the connection event `ESP_GATTS_CONNECT_EVT` is triggered. This event is employed to perform the pairing and bonding process by invoking the `esp_ble_set_encryption()` function which takes as parameters the remote device address and the type of encryption that will be performed. The BLE stack then executes the actual pairing process in the background. In this example, the encryption includes MITM protection. + +```c +case ESP_GATTS_CONNECT_EVT: + //start security connect with peer device when receive the connect event sent by the master. + esp_ble_set_encryption(param->connect.remote_bda, ESP_BLE_SEC_ENCRYPT_MITM); + break; +``` +The types of encryptions available are: + +* `ESP_BLE_SEC_NONE` +* `ESP_BLE_SEC_ENCRYPT` +* `ESP_BLE_SEC_ENCRYPT_NO_MITM` +* `ESP_BLE_SEC_ENCRYPT_MITM` + +The difference between `ESP_BLE_SEC_ENCRYPT` and `ESP_BLE_SEC_ENCRYPT_NO_MITM` lies in the fact that a previous connection might have a security level that needs to be upgraded, therefore requires to exchange keys again. + +In this example, the I/O capabilities are set to *No Input No Output*, therefore the *Just Works* pairing method, which doesn't not require the generation of a random 6-digit passkey, is used(For details, please refer to the the table below.) The user may modify the example to set the I/O capabilities to use other than *No Input No Output*. Therefore, depending on the I/O capabilities of the remote device, a passkey might be generated on the ESP32 which is presented to the user with the `ESP_GAP_BLE_PASSKEY_NOTIF_EVT`: + +```c +case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: + ///the app will receive this evt when the IO has Output capability and the peer device IO has Input capability. + ///show the passkey number to the user to input it in the peer deivce. + ESP_LOGE(GATTS_TABLE_TAG, "The passkey Notify number:%d", param->ble_security.key_notif.passkey); + break; +``` + +The combination of input and output capabilities that determine which algorithm is used are: + + +##EXCHANGING KEYS + +When the client connects to the server and the pairing is done successfully, the keys indicated by the `init_key` and `rsp_key` security parameters are exchanged. In this example the following keys are generated and distributed: + +* Local device LTK +* Local device IRK +* Local device CSRK +* Peer device LTK +* Peer device IRK + +Note that for this example only, the peer device CSRK is not exchanged. For each key exchange message, an `ESP_GAP_BLE_KEY_EVT` event is triggered, which can be used to print the type of key received: + +```c +case ESP_GAP_BLE_KEY_EVT: + //shows the ble key info share with peer device to the user. + ESP_LOGI(GATTS_TABLE_TAG, "key type = %s", esp_key_type_to_str(param->ble_security.ble_key.key_type)); + break; +``` + +When the keys are exchanged successfully, the pairing process is done. This triggers an `ESP_GAP_BLE_AUTH_CMPL_EVT` event, which is used to print information such as remote device, address type and pair status: + +```c +case ESP_GAP_BLE_AUTH_CMPL_EVT: { + esp_bd_addr_t bd_addr; + memcpy(bd_addr, param->ble_security.auth_cmpl.bd_addr, + sizeof(esp_bd_addr_t)); + ESP_LOGI(GATTS_TABLE_TAG, "remote BD_ADDR: %08x%04x",\ + (bd_addr[0] << 24) + (bd_addr[1] << 16) + (bd_addr[2] << 8) + + bd_addr[3], + (bd_addr[4] << 8) + bd_addr[5]); + ESP_LOGI(GATTS_TABLE_TAG, "address type = %d", + param->ble_security.auth_cmpl.addr_type); + ESP_LOGI(GATTS_TABLE_TAG, "pair status = %s", + param->ble_security.auth_cmpl.success ? "success" : "fail"); + break; +} +``` + +##SECURITY PERMISSIONS FOR ATTRIBUTES + +When defining the attributes of the server, different permissions can be set to the write and read events. Attributes permissions can be: + +* Permission to read +* Permission to read with encryption +* Permission to read with encryption and MITM protection +* Permission to write +* Permission to write with encryption +* Permission to write with encryption and MITM protection +* Permission to signed write +* Permission to signed write with MITM protection + +These permissions are defined in the API as: + +* `ESP_GATT_PERM_READ` +* `ESP_GATT_PERM_READ_ENCRYPTED` +* `ESP_GATT_PERM_READ_ENC_MITM` +* `ESP_GATT_PERM_WRITE` +* `ESP_GATT_PERM_WRITE_ENCRYPTED` +* `ESP_GATT_PERM_WRITE_ENC_MITM` +* `ESP_GATT_PERM_WRITE_SIGNED` +* `ESP_GATT_PERM_WRITE_SIGNED_MITM` + +When creating the services table, each attribute can have permissions to read or write, with or without encryption. When an attribute has encrypted permissions and a peer device that does not have the required security clearance tries to read or write to that attribute, the local host sends an Insufficient Authorization Error. In the example, the following attributes are defined with permissions with encryption: + +```c +… +// Body Sensor Location Characteristic Value + [HRS_IDX_BOBY_SENSOR_LOC_VAL] = { + {ESP_GATT_AUTO_RSP}, + {ESP_UUID_LEN_16, + (uint8_t *)&body_sensor_location_uuid, + ESP_GATT_PERM_READ_ENCRYPTED, + sizeof(uint8_t), + sizeof(body_sensor_loc_val), + (uint8_t *)body_sensor_loc_val} + }, +… +// Heart Rate Control Point Characteristic Value + [HRS_IDX_HR_CTNL_PT_VAL] = { + {ESP_GATT_AUTO_RSP}, + {ESP_UUID_LEN_16, + (uint8_t *)&heart_rate_ctrl_point, + ESP_GATT_PERM_WRITE_ENCRYPTED|ESP_GATT_PERM_READ_ENCRYPTED, + sizeof(uint8_t), + sizeof(heart_ctrl_point), + (uint8_t *)heart_ctrl_point} + }, +… +``` + +##SECURITY REQUESTS + +During the communication between a master and a slave device, the slave might request to start encryption at any moment by issuing a security request command. This command will trigger an `ESP_GAP_BLE_SEC_REQ_EVT` event on the master, which will reply a positive (true) security response to the peer device to accept the request or a negative (false) one to reject the request. In this example, this event is used to reply a start encryption response by using the `esp_ble_gap_security_rsp()` API call. + +```c + case ESP_GAP_BLE_SEC_REQ_EVT: + /* send the positive (true) security response to the peer device to accept the security request. + If not accept the security request, should sent the security response with negative(false) accept value*/ + esp_ble_gap_security_rsp(param->ble_security.ble_req.bd_addr, true); + break; +``` +##CONCLUSION + +In this document, a review of the security aspects of the GATT Server has been realized. BLE security encompasses Pairing, Bonding and Encryption. In order to establish a secured link between a master and a slave device, security parameters that define the capabilities and features each device possess are set. The combination of features and capabilities of the peer devices results in the selection of the appropriate pairing method which the BLE stack then executes. Immediately, the required keys are generated and exchanged, and the encryption of subsequent messages is started using the AES-128 engine and these keys. These steps trigger different events that are managed by the GATT and GAP event handlers which can be used to print useful information such as the types of keys exchanged and the pairing status. In addition, attribute permissions are appointed to allow only encrypted read and write events when needed. The rest of the Security GATT server functionalities such as defining services and characteristics are implemented in the same way as presented in the GATT Server example. + diff --git a/examples/bluetooth/gatt_server/tutorial/GATT_SERVER_EXAMPLE_WALKTHROUGH.md b/examples/bluetooth/gatt_server/tutorial/GATT_SERVER_EXAMPLE_WALKTHROUGH.md new file mode 100644 index 0000000000..12ff4e8c63 --- /dev/null +++ b/examples/bluetooth/gatt_server/tutorial/GATT_SERVER_EXAMPLE_WALKTHROUGH.md @@ -0,0 +1,934 @@ +# GATT SERVER EXAMPLE WALKTHROUGH +##INTRODUCTION +In this document, we review the GATT SERVER example code which implements a Bluetooth Low Energy (BLE) Generic Attribute Profile (GATT) Server on the ESP32. This example is designed around two Application Profiles and a series of events that are handled in order to execute a sequence of configuration steps, such as defining advertising parameters, updating connection parameters and creating services and characteristics. In addition, this example handles read and write events, including a Write Long Characteristic request, which divides the incoming data into chunks so that the data can fit in the Attribute Protocol (ATT) message. This document follows the program workflow and breaks down the code in order to make sense of every section and reasoning behind the implementation. + +#INCLUDES +First, let’s take a look at the includes: + +```c +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_system.h" +#include "esp_log.h" +#include "nvs_flash.h" +#include "bt.h" +#include "bta_api.h" +#include "esp_gap_ble_api.h" +#include "esp_gatts_api.h" +#include "esp_bt_defs.h" +#include "esp_bt_main.h" +#include "sdkconfig.h" +``` +These includes are required for the FreeRTOS and underlaying system components to run, including the logging functionality and a library to store data in non-volatile flash memory. We are interested in `"bt.h"`, `"esp_bt_main.h"`, `"esp_gap_ble_api.h"` and `"esp_gatts_api.h"`, which expose the BLE APIs required to implement this example. + +* `bt.h`: implements BT controller and VHCI configuration procedures from the host side. +* `esp_bt_main.h`: implements initialization and enabling of the Bluedroid stack. +* `esp_gap_ble_api.h`: implements GAP configuration, such as advertising and connection parameters. +* `esp_gatts_api.h`: implements GATT configuration, such as creating services and characteristics. + +## MAIN ENTRY POINT +The entry point to this example is the app_main() function: + +```c + void app_main() +{ + esp_err_t ret; + + // Initialize NVS. + ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK(ret); + + esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); + ret = esp_bt_controller_init(&bt_cfg); + if (ret) { + ESP_LOGE(GATTS_TAG, "%s initialize controller failed\n", __func__); + return; + } + + ret = esp_bt_controller_enable(ESP_BT_MODE_BTDM); + if (ret) { + ESP_LOGE(GATTS_TAG, "%s enable controller failed\n", __func__); + return; + } + ret = esp_bluedroid_init(); + if (ret) { + ESP_LOGE(GATTS_TAG, "%s init bluetooth failed\n", __func__); + return; + } + ret = esp_bluedroid_enable(); + if (ret) { + ESP_LOGE(GATTS_TAG, "%s enable bluetooth failed\n", __func__); + return; + } + + ret = esp_ble_gatts_register_callback(gatts_event_handler); + if (ret){ + ESP_LOGE(GATTS_TAG, "gatts register error, error code = %x", ret); + return; + } + ret = esp_ble_gap_register_callback(gap_event_handler); + if (ret){ + ESP_LOGE(GATTS_TAG, "gap register error, error code = %x", ret); + return; + } + ret = esp_ble_gatts_app_register(PROFILE_A_APP_ID); + if (ret){ + ESP_LOGE(GATTS_TAG, "gatts app register error, error code = %x", ret); + return; + } + ret = esp_ble_gatts_app_register(PROFILE_B_APP_ID); + if (ret){ + ESP_LOGE(GATTS_TAG, "gatts app register error, error code = %x", ret); + return; + } + esp_err_t local_mtu_ret = esp_ble_gatt_set_local_mtu(512); + if (local_mtu_ret){ + ESP_LOGE(GATTS_TAG, "set local MTU failed, error code = %x", local_mtu_ret); + } + return; +} +``` +The main function starts by initializing the non-volatile storage library. This library allows to save key-value pairs in flash memory and is used by some components such as the Wi-Fi library to save the SSID and password: + +```c +ret = nvs_flash_init(); +``` +##BT CONTROLLER AND STACK INITIALIZATION +The main function also initializes the BT controller by first creating a BT controller configuration structure named `esp_bt_controller_config_t` with default settings generated by the `BT_CONTROLLER_INIT_CONFIG_DEFAULT()` macro. The BT controller implements the Host Controller Interface (HCI) on the controller side, the Link Layer (LL) and the Physical Layer (PHY). The BT Controller is invisible to the user applications and deals with the lower layers of the BLE stack. The controller configuration includes setting the BT controller stack size, priority and HCI baud rate. With the settings created, the BT controller is initialized and enabled with the `esp_bt_controller_init()` function: + +```c +esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); +ret = esp_bt_controller_init(&bt_cfg); +``` +Next, the controller is enabled in Dual Mode (BLE + BT Classic). + +```c +ret = esp_bt_controller_enable(ESP_BT_MODE_BTDM); +``` + +There are four Bluetooth modes supported: + +1. `ESP_BT_MODE_IDLE`: Bluetooth not running +2. `ESP_BT_MODE_BLE`: BLE mode +3. `ESP_BT_MODE_CLASSIC_BT`: BT Classic mode +4. `ESP_BT_MODE_BTDM`: Dual mode (BLE + BT Classic) + +After the initialization of the BT controller, the Bluedroid stack, which includes the common definitions and APIs for both BT Classic and BLE, is initialized and enabled by using: + +```c +ret = esp_bluedroid_init(); +ret = esp_bluedroid_enable(); +``` +The Bluetooth stack is up and running at this point in the program flow, however the functionality of the application has not been defined yet. The functionality is defined by reacting to events such as what happens when another device tries to read or write parameters and establish a connection. The two main managers of events are the GAP and GATT event handlers. The application needs to register a callback function for each event handler in order to let the application know which functions are going to handle the GAP and GATT events: + +```c +esp_ble_gatts_register_callback(gatts_event_handler); +esp_ble_gap_register_callback(gap_event_handler); +``` +The functions `gatts_event_handler()` and `gap_event_handler()` handle all the events that are pushed to the application from the BLE stack. + +##APPLICATION PROFILES +The GATT Server example application is organized by using Application Profiles as shown in Fig 1. Each Application Profile describes a way to group functionalities that are designed for one client application, such as a mobile app running on a smartphone or tablet. In this way, a single design, enabled by different Application Profiles, can behave differently when used by different smartphone apps, allowing the server to react differently according to the client app that is being used. In practice, each profile is seen by the client as an independent BLE service. It is up to the client to discriminate the services that it is interested in. + +![](image/GATT SERVER FIGURE 1.png) +

Fig.1. Application Profiles are used to organize a BLE application in order to implement different functionality for different clients.

+ + +Each profile is defined as a struct where the struct members depend on the services and characteristics that are implemented in that Application Profile. The members also include a GATT interface, Application ID, Connection ID and a callback function to handle profile events. In this example, each profile is composed by: + +* GATT interface +* Application ID +* Connection ID +* Service handle +* Service ID +* Characteristic handle +* Characteristic UUID +* Attribute permissions +* Characteristic properties +* Client Characteristic Configuration descriptor handle +* Client Characteristic Configuration descriptor UUID + +It can be observed from this structure that this profile was designed to have one service and one characteristic, and that the characteristic has one descriptor. The service has a handle and an ID, in the same manner that each characteristic has a handle, an UUID, attribute permissions and properties. In addition, if the characteristic supports notifications or indications, it must implement a Client Characteristic Configuration descriptor (CCCD), which is an additional attribute that describes if the notifications or indications are enabled and defines how the characteristic may be configured by a specific client. This descriptor also has a handle and an UUID. + +The structure implementation is: + +```c +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; +}; +``` +The Application Profiles are stored in an array and corresponding callback functions `gatts_profile_a_event_handler()` and `gatts_profile_b_event_handler()` are assigned. Different applications on the GATT client use different interfaces, represented by the gatts_if parameter. For initialization, this parameter is set to `ESP_GATT_IF_NONE`, which means that the Application Profile is not linked to any client yet. + +```c +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, + }, +}; +``` +Finally, the Application Profiles are registered using the Application ID, which is an user-assigned number to identify each profile. In this way, multiple Application Profiles can run in one server. + +```c +esp_ble_gatts_app_register(PROFILE_A_APP_ID); +esp_ble_gatts_app_register(PROFILE_B_APP_ID); +``` + +##SETTING GAP PARAMETERS +The register application event is the first one that is triggered during the lifetime of the program, this example uses the Profile A GATT event handle to configure the advertising parameters upon registration. This example has the option to use both standard Bluetooth Core Specification advertising parameters or a customized raw buffer. The option can be selected with the `CONFIG_SET_RAW_ADV_DATA` define. The raw advertising data can be used to implement iBeacons, Eddystone or other proprietaries, and custom frame types such as the ones used for Indoor Location Services that are different from the standard specifications. + +The function used to configure standard Bluetooth Specification advertisement parameters is `esp_ble_gap_config_adv_data()`, which takes a pointer to an `esp_ble_adv_data_t` structure. The `esp_ble_adv_data_t` data structure for advertising data has the following definition: + +```c +typedef struct { + bool set_scan_rsp; /*!< Set this advertising data as scan response or not*/ + bool include_name; /*!< Advertising data include device name or not */ + bool include_txpower; /*!< Advertising data include TX power */ + int min_interval; /*!< Advertising data show advertising min interval */ + int max_interval; /*!< Advertising data show advertising max interval */ + int appearance; /*!< External appearance of device */ + uint16_t manufacturer_len; /*!< Manufacturer data length */ + uint8_t *p_manufacturer_data; /*!< Manufacturer data point */ + uint16_t service_data_len; /*!< Service data length */ + uint8_t *p_service_data; /*!< Service data point */ + uint16_t service_uuid_len; /*!< Service uuid length */ + uint8_t *p_service_uuid; /*!< Service uuid array point */ + uint8_t flag; /*!< Advertising flag of discovery mode, see BLE_ADV_DATA_FLAG detail */ +} esp_ble_adv_data_t; +``` +In this example, the structure is initialized as follows: + +```c +static esp_ble_adv_data_t adv_data = { + .set_scan_rsp = false, + .include_name = true, + .include_txpower = true, + .min_interval = 0x20, + .max_interval = 0x40, + .appearance = 0x00, + .manufacturer_len = 0, //TEST_MANUFACTURER_DATA_LEN, + .p_manufacturer_data = NULL, //&test_manufacturer[0], + .service_data_len = 0, + .p_service_data = NULL, + .service_uuid_len = 32, + .p_service_uuid = test_service_uuid128, + .flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT), +}; +``` +The minimum and maximum advertisement intervals are set as multiples of 1.25 ms. In this example, the minimum advertisement interval is defined as 0x20 * 1.25 ms = 40 ms, and the maximum advertisement interval is initialized as 0x40 * 1.25 ms = 80 ms. + +An advertising payload can be up to 31 bytes of data. It is possible the parameter data is large enough to surpass the 31-byte advertisement packet limit, which causes the stack to cut the advertisement packet and leave some of the parameters out. This behavior can be demonstrated in this example if the manufacturer length and data are uncommented, which makes the services to not be advertised after recompiling and testing. + +It is possible to also advertise customized raw data using the `esp_ble_gap_config_adv_data_raw()` +and `esp_ble_gap_config_scan_rsp_data_raw()` functions, which require to create and pass a buffer for both advertising data and scanning response data. In this example, the raw data is represented by the `raw_adv_data[]` and `raw_scan_rsp_data[]` arrays. + +Finally, to set the device name, the `esp_ble_gap_set_device_name()` function is used. The registering event handler is shown as follows: + +```c +static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) { + switch (event) { + case ESP_GATTS_REG_EVT: + ESP_LOGI(GATTS_TAG, "REGISTER_APP_EVT, status %d, app_id %d\n", param->reg.status, param->reg.app_id); + gl_profile_tab[PROFILE_A_APP_ID].service_id.is_primary = true; + gl_profile_tab[PROFILE_A_APP_ID].service_id.id.inst_id = 0x00; + gl_profile_tab[PROFILE_A_APP_ID].service_id.id.uuid.len = ESP_UUID_LEN_16; + gl_profile_tab[PROFILE_A_APP_ID].service_id.id.uuid.uuid.uuid16 = GATTS_SERVICE_UUID_TEST_A; + + esp_ble_gap_set_device_name(TEST_DEVICE_NAME); +#ifdef CONFIG_SET_RAW_ADV_DATA + esp_err_t raw_adv_ret = esp_ble_gap_config_adv_data_raw(raw_adv_data, sizeof(raw_adv_data)); + if (raw_adv_ret){ + ESP_LOGE(GATTS_TAG, "config raw adv data failed, error code = %x ", raw_adv_ret); + } + adv_config_done |= adv_config_flag; + esp_err_t raw_scan_ret = esp_ble_gap_config_scan_rsp_data_raw(raw_scan_rsp_data, sizeof(raw_scan_rsp_data)); + if (raw_scan_ret){ + ESP_LOGE(GATTS_TAG, "config raw scan rsp data failed, error code = %x", raw_scan_ret); + } + adv_config_done |= scan_rsp_config_flag; +#else + //config adv data + esp_err_t ret = esp_ble_gap_config_adv_data(&adv_data); + if (ret){ + ESP_LOGE(GATTS_TAG, "config adv data failed, error code = %x", ret); + } + adv_config_done |= adv_config_flag; + //config scan response data + ret = esp_ble_gap_config_adv_data(&scan_rsp_data); + if (ret){ + ESP_LOGE(GATTS_TAG, "config scan response data failed, error code = %x", ret); + } + adv_config_done |= scan_rsp_config_flag; +#endif +``` +##GAP EVENT HANDLER +Once the advertising data have been set, the GAP event `ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT` is triggered. For the case of raw advertising data set, the event triggered is `ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT`. Additionally when the raw scan response data is set, `ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT` event is triggered. + +```c +static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) +{ + switch (event) { + #ifdef CONFIG_SET_RAW_ADV_DATA + case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT: + adv_config_done &= (~adv_config_flag); + if (adv_config_done==0){ + esp_ble_gap_start_advertising(&adv_params); + } + break; + case ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT: + adv_config_done &= (~scan_rsp_config_flag); + if (adv_config_done==0){ + esp_ble_gap_start_advertising(&adv_params); + } + break; +#else + case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: + adv_config_done &= (~adv_config_flag); + if (adv_config_done == 0){ + esp_ble_gap_start_advertising(&adv_params); + } + break; + case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT: + adv_config_done &= (~scan_rsp_config_flag); + if (adv_config_done == 0){ + esp_ble_gap_start_advertising(&adv_params); + } + break; +#endif +… +``` +In any case, the server can start advertising using the `esp_ble_gap_start_advertising()` function, which takes a structure of type `esp_ble_adv_params_t` with the advertising parameters required by the stack to operate: + +```c +/// Advertising parameters +typedef struct { + uint16_t adv_int_min; + /*!< Minimum advertising interval for undirected and low duty cycle directed advertising. + Range: 0x0020 to 0x4000 + Default: N = 0x0800 (1.28 second) + Time = N * 0.625 msec + Time Range: 20 ms to 10.24 sec */ + uint16_t adv_int_max; + /*!< Maximum advertising interval for undirected and low duty + cycle directed advertising. + Range: 0x0020 to 0x4000 + Default: N = 0x0800 (1.28 second) + Time = N * 0.625 msec + Time Range: 20 ms to 10.24 sec */ + esp_ble_adv_type_t adv_type; /*!< Advertising type */ + esp_ble_addr_type_t own_addr_type; /*!< Owner bluetooth device address type */ + esp_bd_addr_t peer_addr; /*!< Peer device bluetooth device address */ + esp_ble_addr_type_t peer_addr_type; /*!< Peer device bluetooth device address type */ + esp_ble_adv_channel_t channel_map; /*!< Advertising channel map */ + esp_ble_adv_filter_t adv_filter_policy; /*!< Advertising filter policy */ +} +esp_ble_adv_params_t; +``` + +Note that `esp_ble_gap_config_adv_data()` configures the data that will be advertised to the client and takes an `esp_ble_adv_data_t` structure, while `esp_ble_gap_start_advertising()` makes the server to actually start advertising and takes an `esp_ble_adv_params_t` structure. The advertising data is the information that is shown to the client, while the advertising parameters are the configuration required by the GAP to execute. + +For this example, the advertisement parameters are initialized as follows: + +```c +static esp_ble_adv_params_t test_adv_params = { + .adv_int_min = 0x20, + .adv_int_max = 0x40, + .adv_type = ADV_TYPE_IND, + .own_addr_type = BLE_ADDR_TYPE_PUBLIC, + //.peer_addr = + //.peer_addr_type = + .channel_map = ADV_CHNL_ALL, + .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY, +}; +``` + +These parameters configure the advertising interval between 40 ms to 80 ms. The advertisement is `ADV_IND`, which is a generic, not directed to a particular central device and connectable type. The address type is public, uses all channels and allows both scan and connection requests from any central. + +If the advertising started successfully, an `ESP_GAP_BLE_ADV_START_COMPLETE_EVT` event is generated, which in this example is used to check if the advertising status is indeed advertising. Otherwise, an error message is printed. + +```c +… + case ESP_GAP_BLE_ADV_START_COMPLETE_EVT: + //advertising start complete event to indicate advertising start successfully or failed + if (param->adv_start_cmpl.status != ESP_BT_STATUS_SUCCESS) { + ESP_LOGE(GATTS_TAG, "Advertising start failed\n"); + } + break; +… +``` + +##GATT EVENT HANDLERS +When an Application Profile is registered, an `ESP_GATTS_REG_EVT` event is triggered. The parameters of the `ESP_GATTS_REG_EVT` are: + +* `esp_gatt_status_t status; /*!< Operation status */` +* `uint16_t app_id;       /*!< Application id which input in register API */` + +In addition to the previous parameters, the event also contains the GATT interface assigned by the BLE stack. The event is captured by the `gatts_event_handler()`, which used to store the generated interface in the profile table, and then the event is forwarded to the corresponding profile event handler. + +```c +static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) +{ + /* If event is register event, store the gatts_if for each profile */ + if (event == ESP_GATTS_REG_EVT) { + if (param->reg.status == ESP_GATT_OK) { + gl_profile_tab[param->reg.app_id].gatts_if = gatts_if; + } else { + ESP_LOGI(GATTS_TAG, "Reg app failed, app_id %04x, status %d\n", + param->reg.app_id, + param->reg.status); + return; + } + } + +/* If the gatts_if equal to profile A, call profile A cb handler, + * so here call each profile's callback */ + do { + int idx; + for (idx = 0; idx < PROFILE_NUM; idx++) { + if (gatts_if == ESP_GATT_IF_NONE||gatts_if == gl_profile_tab[idx].gatts_if) { + if (gl_profile_tab[idx].gatts_cb) { + gl_profile_tab[idx].gatts_cb(event, gatts_if, param); + } + } + } + } while (0); +} +``` + +##CREATING SERVICES +The register event is also used to create a profile attributes table by using the `esp_ble_gatts_create_attr_tab()` function, which takes an `esp_gatts_attr_db_t` type structure that has all the information of the service table. The way to create this table is: + +```c +… +esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_A_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_A); +break; +… +``` +The number of handles is defined as 4: + +```c +#define GATTS_NUM_HANDLE_TEST_A 4 +``` + +The handles are: + +1. Service handle +2. Characteristic handle +3. Characteristic value handle +4. Characteristic descriptor handle + +The service is defined as a primary service with a UUID length of 16 bits. The service ID is initialized with instance ID = 0 and UUID defined by `GATTS_SERVICE_UUID_TEST_A`. + +The service instance ID can be used to differentiate multiple services with the same UUID. In this example, since there is only one service for each Application Profiles and the services have different UUIDs, the service instance ID can be defined as 0 in both profile A and B. However if there was only one Application Profile with two services using the same UUID, then it would be necessary to use different instance IDs to refer to one service or the other. + +Application Profile B creates the service in the same way as Profile A: + +```c +static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) { + switch (event) { + case ESP_GATTS_REG_EVT: + ESP_LOGI(GATTS_TAG, "REGISTER_APP_EVT, status %d, app_id %d\n", param->reg.status, param->reg.app_id); + gl_profile_tab[PROFILE_B_APP_ID].service_id.is_primary = true; + gl_profile_tab[PROFILE_B_APP_ID].service_id.id.inst_id = 0x00; + gl_profile_tab[PROFILE_B_APP_ID].service_id.id.uuid.len = ESP_UUID_LEN_16; + gl_profile_tab[PROFILE_B_APP_ID].service_id.id.uuid.uuid.uuid16 = GATTS_SERVICE_UUID_TEST_B; + + esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_B_APP_ID].service_id, GATTS_NUM_HANDLE_TEST_B); + break; +… +} +``` + +##STARTING SERVICES AND CREATING CHARACTERISTICS +When a service is created successfully, an `ESP_GATTS_CREATE_EVT` event managed by the profile GATT handler is triggered, and can be used to start the service and add characteristics to the service. For the case of Profile A, the service is started and the characteristics are added as follows: + +```c +case ESP_GATTS_CREATE_EVT: + ESP_LOGI(GATTS_TAG, "CREATE_SERVICE_EVT, status %d, service_handle %d\n", 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_16; + gl_profile_tab[PROFILE_A_APP_ID].char_uuid.uuid.uuid16 = GATTS_CHAR_UUID_TEST_A; + + esp_ble_gatts_start_service(gl_profile_tab[PROFILE_A_APP_ID].service_handle); + a_property = 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_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); + } + break; +``` + +First, the service handle generated by the BLE stack is stored in the profile table, which will be used later by the application layer to refer to this service. Then, the UUID of the characteristic and its UUID length are set. The length of the characteristic UUID is again 16 bits. The service is started using the `esp_ble_gatts_start_service()` function with the service handle previously generated. An `ESP_GATTS_START_EVT` event, which is used to print information, is triggered. The characteristic is added to the service by the `esp_ble_gatts_start_service()` function in conjunction with the characteristics permissions and properties. In this example, the characteristics in both profiles are set up as follows: + +Permissions: + +* `ESP_GATT_PERM_READ`: To read characteristic value is permitted +* `ESP_GATT_PERM_WRITE`: To write characteristic value is permitted + +Properties: + +* `ESP_GATT_CHAR_PROP_BIT_READ`: Characteristic can be read +* `ESP_GATT_CHAR_PROP_BIT_WRITE`: Characteristic can be written +* `ESP_GATT_CHAR_PROP_BIT_NOTIFY`: Characteristic can notify value changes + +It might seem redundant to have both permissions and properties for read and write. However, the read and write properties of an attribute are information that is shown to the client in order to let the client know if the server accepts read and write requests. In that sense, the properties serve as a hint to the client to properly access the server resources. On the other hand, permissions are the authorization that is given to the client to either read or write that attribute. For example, if a client tries to write an attribute for which it does not have the write permission, the server will reject that request, even if the write property is set. + +In addition, this example gives an initial value to the characteristic represented by `gatts_demo_char1_val`. The initial value is defined as follows: + +```c +esp_attr_value_t gatts_demo_char1_val = +{ + .attr_max_len = GATTS_DEMO_CHAR_VAL_LEN_MAX, + .attr_len = sizeof(char1_str), + .attr_value = char1_str, +}; +``` +Where `char1_str` is dummy data: + +```c +uint8_t char1_str[] = {0x11,0x22,0x33}; +``` + +and the characteristic length is defined as: + +```c +#define GATTS_DEMO_CHAR_VAL_LEN_MAX 0x40 +``` + +The characteristic initial value must be a non-null object and the characteristic length must always be greater than zero, otherwise the stack will return an error. + +Finally, the characteristic is configured in a way that it is required to send a response manually every time the characteristic is read or written, instead of letting the stack auto respond. This is configured by setting the last parameter of the `esp_ble_gatts_add_char()` function, representing the attribute response control parameter, to `ESP_GATT_RSP_BY_APP` or NULL. + +##CREATING THE CHARACTERISTIC DESCRIPTOR + +Adding a characteristic to a service triggers an `ESP_GATTS_ADD_CHAR_EVT` event, which returns the handle generated by the stack for the characteristic just added. The event includes the following parameters: + +* `esp_gatt_status_t status;     /*!< Operation status */` +* `uint16_t attr_handle;       /*!< Characteristic attribute handle */` +* `uint16_t service_handle;     /*!< Service attribute handle */` +* `esp_bt_uuid_t char_uuid;     /*!< Characteristic uuid */` + +The attribute handle returned by the event is stored in the profile table and the characteristic descriptor length and UUID are set as well. The characteristic length and value are read using the `esp_ble_gatts_get_attr_value()` function, and then printed for information purposes. Finally, the characteristic description is added using the `esp_ble_gatts_add_char_descr()` function. The parameters used are the service handle, the descriptor UUID, write and read permissions, an initial value and the auto response setting. The initial value for the characteristic descriptor can be a NULL pointer and the auto response parameter is set to NULL as well, which means that requests that require responses have to be replied manually. + +```c + case ESP_GATTS_ADD_CHAR_EVT: { + uint16_t length = 0; + const uint8_t *prf_char; + + ESP_LOGI(GATTS_TAG, "ADD_CHAR_EVT, status %d, attr_handle %d, service_handle %d\n", + param->add_char.status, param->add_char.attr_handle, param->add_char.service_handle); + gl_profile_tab[PROFILE_A_APP_ID].char_handle = param->add_char.attr_handle; + gl_profile_tab[PROFILE_A_APP_ID].descr_uuid.len = ESP_UUID_LEN_16; + gl_profile_tab[PROFILE_A_APP_ID].descr_uuid.uuid.uuid16 = ESP_GATT_UUID_CHAR_CLIENT_CONFIG; + esp_err_t get_attr_ret = esp_ble_gatts_get_attr_value(param->add_char.attr_handle, &length, &prf_char); + if (get_attr_ret == ESP_FAIL){ + ESP_LOGE(GATTS_TAG, "ILLEGAL HANDLE"); + } + ESP_LOGI(GATTS_TAG, "the gatts demo char length = %x\n", length); + for(int i = 0; i < length; i++){ + ESP_LOGI(GATTS_TAG, "prf_char[%x] = %x\n",i,prf_char[i]); + } + esp_err_t add_descr_ret = esp_ble_gatts_add_char_descr( + gl_profile_tab[PROFILE_A_APP_ID].service_handle, + &gl_profile_tab[PROFILE_A_APP_ID].descr_uuid, + ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, + NULL,NULL); + if (add_descr_ret){ + ESP_LOGE(GATTS_TAG, "add char descr failed, error code = %x", add_descr_ret); + } + break; + } +``` + +Once the descriptor is added, the `ESP_GATTS_ADD_CHAR_DESCR_EVT` event is triggered, which in this example is used to print an information message. + +```c + case ESP_GATTS_ADD_CHAR_DESCR_EVT: + ESP_LOGI(GATTS_TAG, "ADD_DESCR_EVT, status %d, attr_handle %d, service_handle %d\n", + param->add_char.status, param->add_char.attr_handle, + param->add_char.service_handle); + break; +``` +This procedure is repeated in the Profile B event handler, in order to create the services and characteristics for that profile. + +##CONNECTION EVENT +An `ESP_GATTS_CONNECT_EVT` is triggered when a client has connected to the GATT server. This event is used to update the connection parameters, such as latency, minimum connection interval, maximum connection interval and time out. The connection parameters are stored into an `esp_ble_conn_update_params_t` structure, and then passed to the `esp_ble_gap_update_conn_params()` function. The update connection parameters procedure needs to be done only once, therefore the Profile B connection event handler does not include the `esp_ble_gap_update_conn_params()` function. Finally, the connection ID returned by the event is stored in the profile table. + +Profile A connection event: + +```c +case ESP_GATTS_CONNECT_EVT: { + esp_ble_conn_update_params_t conn_params = {0}; + memcpy(conn_params.bda, param->connect.remote_bda, sizeof(esp_bd_addr_t)); + /* For the IOS system, please reference the apple official documents about the ble connection parameters restrictions. */ + conn_params.latency = 0; + conn_params.max_int = 0x30; // max_int = 0x30*1.25ms = 40ms + conn_params.min_int = 0x10; // min_int = 0x10*1.25ms = 20ms + conn_params.timeout = 400; // timeout = 400*10ms = 4000ms + ESP_LOGI(GATTS_TAG, "ESP_GATTS_CONNECT_EVT, conn_id %d, remote %02x:%02x:%02x:%02x:%02x:%02x:, is_conn %d", + param->connect.conn_id, + param->connect.remote_bda[0], + param->connect.remote_bda[1], + param->connect.remote_bda[2], + param->connect.remote_bda[3], + param->connect.remote_bda[4], + param->connect.remote_bda[5], + param->connect.is_connected); + gl_profile_tab[PROFILE_A_APP_ID].conn_id = param->connect.conn_id; + //start sent the update connection parameters to the peer device. + esp_ble_gap_update_conn_params(&conn_params); + break; + } +``` + +Profile B connection event: + +```c +case ESP_GATTS_CONNECT_EVT: + ESP_LOGI(GATTS_TAG, "CONNECT_EVT, conn_id %d, remote %02x:%02x:%02x:%02x:%02x:%02x:, is_conn %d\n", + param->connect.conn_id, + param->connect.remote_bda[0], + param->connect.remote_bda[1], + param->connect.remote_bda[2], + param->connect.remote_bda[3], + param->connect.remote_bda[4], + param->connect.remote_bda[5], + param->connect.is_connected); + gl_profile_tab[PROFILE_B_APP_ID].conn_id = param->connect.conn_id; + break; +``` + +The `esp_ble_gap_update_conn_params()` function triggers a GAP event `ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT`, which is used to print the connection information: + +```c + case ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT: + ESP_LOGI(GATTS_TAG, "update connetion params status = %d, min_int = %d, max_int = %d, + conn_int = %d,latency = %d, timeout = %d", + param->update_conn_params.status, + param->update_conn_params.min_int, + param->update_conn_params.max_int, + param->update_conn_params.conn_int, + param->update_conn_params.latency, + param->update_conn_params.timeout); + break; +``` + +##MANAGING READ EVENTS + +Now that the services and characteristics are created and started, the program can receive read and write events. The read operations are represented by the `ESP_GATTS_READ_EVT` event, which has the following parameters: + +* `uint16_t conn_id;     /*!< Connection id */` +* `uint32_t trans_id;     /*!< Transfer id */` +* `esp_bd_addr_t bda;     /*!< The bluetooth device address which been read */` +* `uint16_t handle;      /*!< The attribute handle */` +* `uint16_t offset;      /*!< Offset of the value, if the value is too long */` +* `bool is_long;        /*!< The value is too long or not */` +* `bool need_rsp;       /*!< The read operation need to do response */` + +In this example, a response is constructed with dummy data and sent back to the host using the same handle given by the event. In addition to the response, the GATT interface, the connection ID and the transfer ID are also included as parameters in the `esp_ble_gatts_send_response()` function. This function is necessary if the auto response byte is set to NULL when creating the characteristic or descriptor. + +```c +case ESP_GATTS_READ_EVT: { + ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %d, handle %d\n", + param->read.conn_id, param->read.trans_id, param->read.handle); + esp_gatt_rsp_t rsp; + memset(&rsp, 0, sizeof(esp_gatt_rsp_t)); + rsp.attr_value.handle = param->read.handle; + rsp.attr_value.len = 4; + rsp.attr_value.value[0] = 0xde; + rsp.attr_value.value[1] = 0xed; + rsp.attr_value.value[2] = 0xbe; + rsp.attr_value.value[3] = 0xef; + esp_ble_gatts_send_response(gatts_if, + param->read.conn_id, + param->read.trans_id, + ESP_GATT_OK, &rsp); + break; + } +``` + +##MANAGING WRITE EVENTS +The write events are represented by the `ESP_GATTS_WRITE_EVT` event, which has the following parameters: + +* `uint16_t conn_id;     /*!< Connection id */` +* `uint32_t trans_id;    /*!< Transfer id */` +* `esp_bd_addr_t bda;    /*!< The bluetooth device address which been written */` +* `uint16_t handle;     /*!< The attribute handle */` +* `uint16_t offset;     /*!< Offset of the value, if the value is too long */` +* `bool need_rsp;      /*!< The write operation need to do response */` +* `bool is_prep;       /*!< This write operation is prepare write */` +* `uint16_t len;       /*!< The write attribute value length */` +* `uint8_t *value;      /*!< The write attribute value */` + +There are two types of write events implemented in this example, write characteristic value and write long characteristic value. The first type of write is used when the characteristic value can fit in one Attribute Protocol Maximum Transmission Unit (ATT MTU), which is usually 23 bytes long. The second type is used when the attribute to write is longer than what can be sent in one single ATT message by dividing the data into multiple chunks using Prepare Write Responses, after which an Executive Write Request is used to confirm or cancel the complete write request. This behavior is defined in the [Bluetooth Specification Version 4.2](https://www.bluetooth.com/specifications/bluetooth-core-specification), Vol 3, Part G, section 4.9. The write long characteristic message flow is shown in Fig. 2. + +When a write event is triggered, this example prints logging messages, and then executes the `example_write_event_env()` function. + +```c +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; +} +``` + +![](image/GATT SERVER FIGURE 2.jpg) +

Fig.2. Message flow for Write Long Characteristic

+ +The `example_write_event_env()` function contains the logic for the write long characteristic procedure: + +```c +void example_write_event_env(esp_gatt_if_t gatts_if, prepare_type_env_t *prepare_write_env, esp_ble_gatts_cb_param_t *param){ + esp_gatt_status_t status = ESP_GATT_OK; + if (param->write.need_rsp){ + if (param->write.is_prep){ + if (prepare_write_env->prepare_buf == NULL){ + prepare_write_env->prepare_buf = (uint8_t *)malloc(PREPARE_BUF_MAX_SIZE*sizeof(uint8_t)); + prepare_write_env->prepare_len = 0; + if (prepare_write_env->prepare_buf == NULL) { + ESP_LOGE(GATTS_TAG, "Gatt_server prep no mem\n"); + status = ESP_GATT_NO_RESOURCES; + } + } else { + if(param->write.offset > PREPARE_BUF_MAX_SIZE) { + status = ESP_GATT_INVALID_OFFSET; + } + else if ((param->write.offset + param->write.len) > PREPARE_BUF_MAX_SIZE) { + status = ESP_GATT_INVALID_ATTR_LEN; + } + } + + esp_gatt_rsp_t *gatt_rsp = (esp_gatt_rsp_t *)malloc(sizeof(esp_gatt_rsp_t)); + gatt_rsp->attr_value.len = param->write.len; + gatt_rsp->attr_value.handle = param->write.handle; + gatt_rsp->attr_value.offset = param->write.offset; + gatt_rsp->attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE; + memcpy(gatt_rsp->attr_value.value, param->write.value, param->write.len); + esp_err_t response_err = esp_ble_gatts_send_response(gatts_if, param->write.conn_id, + param->write.trans_id, status, gatt_rsp); + if (response_err != ESP_OK){ + ESP_LOGE(GATTS_TAG, "Send response error\n"); + } + free(gatt_rsp); + if (status != ESP_GATT_OK){ + return; + } + memcpy(prepare_write_env->prepare_buf + param->write.offset, + param->write.value, + param->write.len); + prepare_write_env->prepare_len += param->write.len; + + }else{ + esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, status, NULL); + } + } +} +``` + +When the client sends a Write Request or a Prepare Write Request, the server shall respond. However, if the client sends a Write Without Response command, the server does not need to reply back a response. This is checked in the write procedure by examining the value of the `write.need_rsp parameter`. If a response is needed, the procedure continues doing the response preparation, if not present, the client does not need a response and therefore the procedure is ended. + +```c +void example_write_event_env(esp_gatt_if_t gatts_if, prepare_type_env_t *prepare_write_env, + esp_ble_gatts_cb_param_t *param){ + esp_gatt_status_t status = ESP_GATT_OK; + if (param->write.need_rsp){ +… +``` + +The function then checks if the Prepare Write Request parameter represented by the `write.is_prep` is set, which means that the client is requesting a Write Long Characteristic. If present, the procedure continues with the preparation of multiple write responses, if not present, then the server simply sends a single write response back. + +```c +… +if (param->write.is_prep){ +… +}else{ + esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, status, NULL); +} +… +``` +To handle long characteristic write, a prepare buffer structure is defined and instantiated: + +```c +typedef struct { + uint8_t *prepare_buf; + int prepare_len; +} prepare_type_env_t; + +static prepare_type_env_t a_prepare_write_env; +static prepare_type_env_t b_prepare_write_env; +``` +In order to use the prepare buffer, some memory space is allocated for it. In case the allocation fails due to a lack of memory, an error is printed: + +```c +if (prepare_write_env->prepare_buf == NULL) { + prepare_write_env->prepare_buf = + (uint8_t*)malloc(PREPARE_BUF_MAX_SIZE*sizeof(uint8_t)); + prepare_write_env->prepare_len = 0; + if (prepare_write_env->prepare_buf == NULL) { + ESP_LOGE(GATTS_TAG, "Gatt_server prep no mem\n"); + status = ESP_GATT_NO_RESOURCES; + } +} +``` + +If the buffer is not NULL, which means initialization completed, the procedure then checks if the offset and message length of the incoming write fit the buffer. + +```c +else { + if(param->write.offset > PREPARE_BUF_MAX_SIZE) { + status = ESP_GATT_INVALID_OFFSET; + } + else if ((param->write.offset + param->write.len) > PREPARE_BUF_MAX_SIZE) { + status = ESP_GATT_INVALID_ATTR_LEN; + } +} +``` + +The procedure now prepares the response of type `esp_gatt_rsp_t` to be sent back to the client. The response it constructed using the same parameters of the write request, such as length, handle and offset. In addition, the GATT authentication type needed to write to this characteristic is set with `ESP_GATT_AUTH_REQ_NONE`, which means that the client can write to this characteristic without needing to authenticate first. Once the response is sent, the memory allocated for its use is freed. + +```c +esp_gatt_rsp_t *gatt_rsp = (esp_gatt_rsp_t *)malloc(sizeof(esp_gatt_rsp_t)); +gatt_rsp->attr_value.len = param->write.len; +gatt_rsp->attr_value.handle = param->write.handle; +gatt_rsp->attr_value.offset = param->write.offset; +gatt_rsp->attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE; +memcpy(gatt_rsp->attr_value.value, param->write.value, param->write.len); +esp_err_t response_err = esp_ble_gatts_send_response(gatts_if, param->write.conn_id, + param->write.trans_id, status, gatt_rsp); +if (response_err != ESP_OK){ + ESP_LOGE(GATTS_TAG, "Send response error\n"); +} +free(gatt_rsp); +if (status != ESP_GATT_OK){ + return; +} +``` +Finally, the incoming data is copied to the buffer created and its length is incremented by the offset: + +```c +memcpy(prepare_write_env->prepare_buf + param->write.offset, + param->write.value, + param->write.len); +prepare_write_env->prepare_len += param->write.len; +``` +The client finishes the long write sequence by sending an Executive Write Request. This command triggers an `ESP_GATTS_EXEC_WRITE_EVT` event. The server handles this event by sending a response and executing the `example_exec_write_event_env()` function: + +```c +case ESP_GATTS_EXEC_WRITE_EVT: + ESP_LOGI(GATTS_TAG,"ESP_GATTS_EXEC_WRITE_EVT"); + esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, NULL); + example_exec_write_event_env(&a_prepare_write_env, param); + break; +``` +Let’s take a look at the Executive Write function: + +```c +void example_exec_write_event_env(prepare_type_env_t *prepare_write_env, esp_ble_gatts_cb_param_t *param){ + if (param->exec_write.exec_write_flag == ESP_GATT_PREP_WRITE_EXEC){ + esp_log_buffer_hex(GATTS_TAG, prepare_write_env->prepare_buf, prepare_write_env->prepare_len); + } + else{ + ESP_LOGI(GATTS_TAG,"ESP_GATT_PREP_WRITE_CANCEL"); + } + if (prepare_write_env->prepare_buf) { + free(prepare_write_env->prepare_buf); + prepare_write_env->prepare_buf = NULL; + } + prepare_write_env->prepare_len = 0; +} +``` +The executive write is used to either confirm or cancel the write procedure done before, by the Long Characteristic Write procedure. In order to do this, the function checks for the `exec_write_flag` in the parameters received with the event. If the flag equals the execute flag represented by `exec_write_flag`, the write is confirmed and the buffer is printed in the log; if not, then it means the write is canceled and all the data that has been written is deleted. + +```c +if (param->exec_write.exec_write_flag == ESP_GATT_PREP_WRITE_EXEC){ + esp_log_buffer_hex(GATTS_TAG, + prepare_write_env->prepare_buf, + prepare_write_env->prepare_len); + } +else{ + ESP_LOGI(GATTS_TAG,"ESP_GATT_PREP_WRITE_CANCEL"); + } +``` +Finally, the buffer structure that was created to store the chunks of data from the long write operation is freed and its pointer is set to NULL to leave it ready for the next long write procedure. + +```c +if (prepare_write_env->prepare_buf) { + free(prepare_write_env->prepare_buf); + prepare_write_env->prepare_buf = NULL; +} +prepare_write_env->prepare_len = 0; +``` + +##CONCLUSION +In this document, we have gone through the GATT SERVER example code describing each section. The application is designed around the concept of Application Profiles. In addition, the procedures that this example uses to register event handlers are explained. The events follow a sequence of configuration steps, such as defining advertising parameters, updating connection parameters and creating services and characteristics. Finally, the way in which read and write events are handled, including Write Long characteristics by dividing the write into chunks that can fit the Attribute Protocol message is explained. + + diff --git a/examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 1.png b/examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 1.png new file mode 100644 index 0000000000000000000000000000000000000000..17111a93bcc40fae3b7e86aecfd0a3b81664b510 GIT binary patch literal 149897 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 C*g_Wo literal 0 HcmV?d00001 diff --git a/examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 2.jpg b/examples/bluetooth/gatt_server/tutorial/image/GATT SERVER FIGURE 2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc5b14a18b869f59228f2261fd53044a2a99b839 GIT binary patch literal 4598622 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 CeWxb? literal 0 HcmV?d00001 diff --git a/examples/bluetooth/gatt_server_service_table/tutorial/GATT_Server_Service_Table_Example_Walkthrough.md b/examples/bluetooth/gatt_server_service_table/tutorial/GATT_Server_Service_Table_Example_Walkthrough.md new file mode 100644 index 0000000000..1eed9c67bc --- /dev/null +++ b/examples/bluetooth/gatt_server_service_table/tutorial/GATT_Server_Service_Table_Example_Walkthrough.md @@ -0,0 +1,485 @@ +# GATT Server Service Table Example Walkthrough + +## Introduction + +This document presents a walkthrough of the GATT Server Service Table example code for the ESP32. This example implements a Bluetooth Low Energy (BLE) Generic Attribute (GATT) Server using a table-like data structure to define the server services and characteristics such as the one shown in Fig. 1. Therefore, it demonstrates a practical way to define the server functionality in one place instead of adding services and characteristics one by one. +This example implements the *Heart Rate Profile* as defined by the [Traditional Profile Specifications](https://www.bluetooth.com/specifications/profiles-overview). + +![Table-like data structure representing the Heart Rate Service](image/Table-like data structure representing the Heart Rate Service.pdf) + +## Includes +Let’s start by taking a look at the included headers in the ``gatts_table_creat_demo.c`` file: + +``` +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_system.h" +#include "esp_log.h" +#include "nvs_flash.h" +#include "bt.h" +#include "bta_api.h" + +#include "esp_gap_ble_api.h" +#include "esp_gatts_api.h" +#include "esp_bt_defs.h" +#include "esp_bt_main.h" +#include "esp_bt_main.h" +#include “gatts_table_creat_demo.h" +``` +These includes are required for the *FreeRTOS* and underlaying system components to run, including logging functionality and a library to store data in non-volatile flash memory. We are interested in ``bt.h``, ``esp_bt_main.h``, ``esp_gap_ble_api.h`` and ``esp_gatts_api.h`` which expose the BLE APIs required to implement this example. + +* ``bt.h``: implements BT controller and VHCI configuration procedures from the host side. +* ``esp_bt_main.h``: implements initialization and enabling of the Bluedroid stack. +* ``esp_gap_ble_api.h``: implements GAP configuration such as advertising and connection parameters. +* ``esp_gatts_api.h``: implements GATT Server configuration such as creating services and characteristics. + +## Service Table +The header file ``gatts_table_creat_demo.h`` is where an enumeration of the services and characteristics is created: + +``` +enum +{ + HRS_IDX_SVC, + + HRS_IDX_HR_MEAS_CHAR, + HRS_IDX_HR_MEAS_VAL, + HRS_IDX_HR_MEAS_NTF_CFG, + + HRS_IDX_BOBY_SENSOR_LOC_CHAR, + HRS_IDX_BOBY_SENSOR_LOC_VAL, + + HRS_IDX_HR_CTNL_PT_CHAR, + HRS_IDX_HR_CTNL_PT_VAL, + + HRS_IDX_NB, +}; +``` +The enumeration elements are set up in the same order as the Heart Rate Profile attributes, starting with the service followed by the characteristics of that service. In addition, the Heart Rate Measurement characteristic has a Client Characteristic Configuration (CCC) descriptor which is an additional attribute that describes if the characteristic has notifications enabled. The enumeration index can be used to identify each element later when creating the actual attributes table. In summary, the elements are described as follows: + +* HRS_IDX_SVC: Heart Rate Service index +* HRS_IDX_HR_MEAS_CHAR: Heart Rate Measurement characteristic index +* HRS_IDX_HR_MEAS_VAL: Heart Rate Measurement characteristic value index +* HRS_IDX_HR_MEAS_NTF_CFG: Heart Rate Measurement notifications configuration (CCC) index +* HRS_IDX_BOBY_SENSOR_LOC_CHAR: Heart Rate Body Sensor Location characteristic index +* HRS_IDX_BOBY_SENSOR_LOC_VAL: Heart Rate Body Sensor Location characteristic value index +* HRS_IDX_HR_CTNL_PT_CHAR: Heart Rate Control Point characteristic index +* HRS_IDX_HR_CTNL_PT_VAL: Heart Rate Control Point characteristic value index +* HRS_IDX_NB: Number of table elements. + +## Main Entry Point +The entry point to this example is the ``app_main()`` function: + +``` +void app_main() +{ + esp_err_t ret; + + // Initialize NVS. + ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK( ret ); + + esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); + ret = esp_bt_controller_init(&bt_cfg); + if (ret) { + ESP_LOGE(GATTS_TABLE_TAG, "%s enable controller failed\n", __func__); + return; + } + + ret = esp_bt_controller_enable(ESP_BT_MODE_BTDM); + if (ret) { + ESP_LOGE(GATTS_TABLE_TAG, "%s enable controller failed\n", __func__); + return; + } + + ESP_LOGI(GATTS_TABLE_TAG, "%s init bluetooth\n", __func__); + ret = esp_bluedroid_init(); + if (ret) { + ESP_LOGE(GATTS_TABLE_TAG, "%s init bluetooth failed\n", __func__); + return; + } + ret = esp_bluedroid_enable(); + if (ret) { + ESP_LOGE(GATTS_TABLE_TAG, "%s enable bluetooth failed\n", __func__); + return; + } + + esp_ble_gatts_register_callback(gatts_event_handler); + esp_ble_gap_register_callback(gap_event_handler); + esp_ble_gatts_app_register(ESP_HEART_RATE_APP_ID); + return; +} +``` + +The main function starts by initializing the non-volatile storage library in order to be able to save parameters in flash memory. + +``` +ret = nvs_flash_init(); +``` + +## BT Controller and Stack Initialization + +See this section in **GATT Server Example Walkthrough**. + + +## Application Profiles + +This example implements one Application Profile for the Heart Rate Service. An Application Profile is a way to group functionality which is designed to be used by one client application, for example one smartphone mobile app. In this way, different types of profiles can be accommodated in one server. The Application Profile ID, which is an user-assigned number to identify each profile, is used to register the profile in the stack, in this example the ID is 0x55. + +``` +#define HEART_PROFILE_NUM 1 +#define HEART_PROFILE_APP_IDX 0 +#define ESP_HEART_RATE_APP_ID 0x55 +``` + +The profiles are stored in the ``heart_rate_profile_tab`` array. Since there is only one profile in this example, one element is stored in the array with index zero as defined by the ``HEART_PROFILE_APP_IDX``. Additionally, the profile event handler callback function is initialized. Each application on the GATT server uses a different interface, represented by the gatts_if parameter. For initialization, this parameter is set to ``ESP_GATT_IF_NONE``, later when the application is registered, the gatts_if parameter is updated with the corresponding interface generated by the stack. + +``` +/* One gatt-based profile one app_id and one gatts_if, this array will store the gatts_if returned by ESP_GATTS_REG_EVT */ +static struct gatts_profile_inst heart_rate_profile_tab[HEART_PROFILE_NUM] = { + [HEART_PROFILE_APP_IDX] = { + .gatts_cb = gatts_profile_event_handler, + .gatts_if = ESP_GATT_IF_NONE, /* Not get the gatt_if, so initial is ESP_GATT_IF_NONE */ + }, + +}; +``` + +The application registration takes place inside ``app_main()`` using the ``esp_ble_gatts_app_register()`` function: + +``` +esp_ble_gatts_app_register(ESP_HEART_RATE_APP_ID); +``` + +## Setting GAP Parameters +The register application event is the first one that is triggered during the lifetime of the program. This example uses this event to configure advertising parameters upon registration in the profile event handler. The functions used to achieve this are: + +* ``esp_ble_gap_set_device_name()``: used to set the advertised device name. +* ``esp_ble_gap_config_adv_data()``: used to configure standard advertising data. + +The function used to configure standard Bluetooth Specification advertisement parameters is ``esp_ble_gap_config_adv_data()`` which takes a pointer to an ``esp_ble_adv_data_t`` structure. The ``esp_ble_adv_data_t`` data structure for advertising data has the following definition: + +``` +typedef struct { + bool set_scan_rsp; /*!< Set this advertising data as scan response or not*/ + bool include_name; /*!< Advertising data include device name or not */ + bool include_txpower; /*!< Advertising data include TX power */ + int min_interval; /*!< Advertising data show advertising min interval */ + int max_interval; /*!< Advertising data show advertising max interval */ + int appearance; /*!< External appearance of device */ + uint16_t manufacturer_len; /*!< Manufacturer data length */ + uint8_t *p_manufacturer_data; /*!< Manufacturer data point */ + uint16_t service_data_len; /*!< Service data length */ + uint8_t *p_service_data; /*!< Service data point */ + uint16_t service_uuid_len; /*!< Service uuid length */ + uint8_t *p_service_uuid; /*!< Service uuid array point */ + uint8_t flag; /*!< Advertising flag of discovery mode, see BLE_ADV_DATA_FLAG detail */ +} esp_ble_adv_data_t; +``` + +In this example, the structure is initialized as follows: + +``` +static esp_ble_adv_data_t heart_rate_adv_config = { + .set_scan_rsp = false, + .include_name = true, + .include_txpower = true, + .min_interval = 0x20, + .max_interval = 0x40, + .appearance = 0x00, + .manufacturer_len = 0, //TEST_MANUFACTURER_DATA_LEN, + .p_manufacturer_data = NULL, //&test_manufacturer[0], + .service_data_len = 0, + .p_service_data = NULL, + .service_uuid_len = sizeof(heart_rate_service_uuid), + .p_service_uuid = heart_rate_service_uuid, + .flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT), +}; +``` + +The minimum and maximum advertisement intervals are set in units of 0.625 ms. In this example, the minimum advertisement interval is defined as 0x20 * 0.625 ms = 20 ms and the maximum advertisement interval is initialized as 0x40 * 0.625 ms = 40 ms. + +An advertising payload can be up to 31 bytes of data. It is possible that some of the parameters surpass the 31-byte advertisement packet limit which causes the stack to cut the message and leave some of the parameters out. To solve this, usually the longer parameters are stored in the scan response, which can be configured using the same ``esp_ble_gap_config_adv_data()`` function and an additional esp_ble_adv_data_t type structure with the .set_scan_rsp parameter is set to true. Finally, to set the device name the ``esp_ble_gap_set_device_name()`` function is used. The registering event handler is shown as follows: + +``` +static void gatts_profile_event_handler(esp_gatts_cb_event_t event, + esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) +{ + ESP_LOGE(GATTS_TABLE_TAG, "event = %x\n",event); + switch (event) { + case ESP_GATTS_REG_EVT: + ESP_LOGI(GATTS_TABLE_TAG, "%s %d\n", __func__, __LINE__); + esp_ble_gap_set_device_name(SAMPLE_DEVICE_NAME); + ESP_LOGI(GATTS_TABLE_TAG, "%s %d\n", __func__, __LINE__); + esp_ble_gap_config_adv_data(&heart_rate_adv_config); + + ESP_LOGI(GATTS_TABLE_TAG, "%s %d\n", __func__, __LINE__); +… +``` + +## GAP Event Handler +Once the advertising data have been set, the ``ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT`` is triggered and managed by the GAP event handler. Moreover, an ``ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT`` is triggered as well if the scan response is also set. Once the configuration of the advertising and scan response data has been set, the handler can use any of these events to start advertising, which is done using the ``esp_ble_gap_start_advertising()`` function: + +``` +static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) +{ + ESP_LOGE(GATTS_TABLE_TAG, "GAP_EVT, event %d\n", event); + + switch (event) { + case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: + esp_ble_gap_start_advertising(&heart_rate_adv_params); + break; + case ESP_GAP_BLE_ADV_START_COMPLETE_EVT: + //advertising start complete event to indicate advertising start successfully or failed + if (param->adv_start_cmpl.status != ESP_BT_STATUS_SUCCESS) { + ESP_LOGE(GATTS_TABLE_TAG, "Advertising start failed\n"); + } + break; + default: + break; + } +} +``` + +The function to start advertising takes a structure of type ``esp_ble_adv_params_t`` with the advertising parameters required. + +``` +/// Advertising parameters +typedef struct { + uint16_t adv_int_min; /*!< Minimum advertising interval for + undirected and low duty cycle directed advertising. + Range: 0x0020 to 0x4000 + Default: N = 0x0800 (1.28 second) + Time = N * 0.625 msec + Time Range: 20 ms to 10.24 sec */ + uint16_t adv_int_max; /*!< Maximum advertising interval for undirected and low duty + cycle directed advertising. + Range: 0x0020 to 0x4000 + Default: N = 0x0800 (1.28 second) + Time = N * 0.625 msec + Time Range: 20 ms to 10.24 sec */ + esp_ble_adv_type_t adv_type; /*!< Advertising type */ + esp_ble_addr_type_t own_addr_type; /*!< Owner bluetooth device address type */ + esp_bd_addr_t peer_addr; /*!< Peer device bluetooth device address */ + esp_ble_addr_type_t peer_addr_type;/*!< Peer device bluetooth device address type */ + esp_ble_adv_channel_t channel_map; /*!< Advertising channel map */ + esp_ble_adv_filter_t adv_filter_policy; /*!< Advertising filter policy */ +} esp_ble_adv_params_t; +``` + +Note that ``esp_ble_gap_config_adv_data()`` configures the data that is advertised to the client and takes an ``esp_ble_adv_data_t structure``, while ``esp_ble_gap_start_advertising()`` makes the server to actually start advertising and takes an ``esp_ble_adv_params_t`` structure. The advertising data is the information that is shown to the client, while the advertising parameters are the configuration required by the BLE stack to execute. + +For this example, the advertisement parameters are initialized as follows: + +``` +static esp_ble_adv_params_t heart_rate_adv_params = { + .adv_int_min = 0x20, + .adv_int_max = 0x40, + .adv_type = ADV_TYPE_IND, + .own_addr_type = BLE_ADDR_TYPE_PUBLIC, + //.peer_addr = + //.peer_addr_type = + .channel_map = ADV_CHNL_ALL, + .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY, +}; +``` + +These parameters configure the advertising interval between 20 ms to 40 ms. The advertisement is of type ADV_IND, which is generic, not directed to a particular central device and advertises the server as connectable. The address type is public, uses all channels and allows both scan and connection requests from any central. + +If the advertising started successfully, an ``ESP_GAP_BLE_ADV_START_COMPLETE_EVT`` event is generated which in this example is used to check if the advertising status is indeed advertising or otherwise print an error message. + +``` +… + case ESP_GAP_BLE_ADV_START_COMPLETE_EVT: + //advertising start complete event to indicate advertising start successfully or failed + if (param->adv_start_cmpl.status != ESP_BT_STATUS_SUCCESS) { + ESP_LOGE(GATTS_TABLE_TAG, "Advertising start failed\n"); + } + break; +… +``` + +## GATT Event Handlers +When an Application Profile is registered, an ``ESP_GATTS_REG_EVT`` event is triggered. The parameters of the ``ESP_GATTS_REG_EVT`` are: + +* esp_gatt_status_t status; /*!< Operation status */ +* uint16_t app_id; /*!< Application id which input in register API */ + +In addition to the previous parameters, the event also contains the GATT interface assigned by the BLE stack. The event is captured by the ``gatts_event_handler()`` which stores the generated interface in the profile table and then forwards it to the corresponding profile event handler. + +``` +static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, + esp_ble_gatts_cb_param_t *param) +{ + ESP_LOGI(GATTS_TABLE_TAG, "EVT %d, gatts if %d\n", event, gatts_if); + + /* If event is register event, store the gatts_if for each profile */ + if (event == ESP_GATTS_REG_EVT) { + if (param->reg.status == ESP_GATT_OK) { + heart_rate_profile_tab[HEART_PROFILE_APP_IDX].gatts_if = gatts_if; + } else { + ESP_LOGI(GATTS_TABLE_TAG, "Reg app failed, app_id %04x, status %d\n", + param->reg.app_id, + param->reg.status); + return; + } + } + + do { + int idx; + for (idx = 0; idx < HEART_PROFILE_NUM; idx++) { + if (gatts_if == ESP_GATT_IF_NONE || /* ESP_GATT_IF_NONE, not specify a certain gatt_if, need to call every profile cb function */ + gatts_if == heart_rate_profile_tab[idx].gatts_if) { + if (heart_rate_profile_tab[idx].gatts_cb) { + heart_rate_profile_tab[idx].gatts_cb(event, gatts_if, param); + } + } + } + } while (0); +} +``` + +## Creating Services and Characteristics with the Attribute Table + +The register event is used to create a table of profile attributes by employing the ``esp_ble_gatts_create_attr_tab()`` function. This function takes an argument of type ``esp_gatts_attr_db_t`` which corresponds to a look up table keyed by the enumeration values defined in the header file. + +The ``esp_gatts_attr_db_t`` structure has two members: + +* esp_attr_control_t attr_control; /*!< The attribute control type*/ +* esp_attr_desc_t att_desc; /*!< The attribute type*/ + +The attr_control is the auto-respond parameter which can be set as ``ESP_GATT_AUTO_RSP`` to allow the BLE stack to take care of responding messages when read or write events arrive. The other option is ``ESP_GATT_RSP_BY_APP`` which allows to manually respond to messages using the ``esp_ble_gatts_send_response()`` function. + +The ``att_desc`` is the attribute description which is made of: + +* ``uint16_t uuid_length``; /*!< UUID length */ +* ``uint8_t *uuid_p``; /*!< UUID value */ +* ``uint16_t perm``; /*!< Attribute permission */ +* ``uint16_t max_length``; /*!< Maximum length of the element*/ +* ``uint16_t length``; /*!< Current length of the element*/ +* ``uint8_t *value``; /*!< Element value array*/ + +For example, the first element of the table in this example is the service attribute: + +``` +[HRS_IDX_SVC] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ, + sizeof(uint16_t), sizeof(heart_rate_svc), (uint8_t *)&heart_rate_svc}}, +``` + +The initialization values are: + +* ``[HRS_IDX_SVC]``: Named or designated initializer in the enum table. +* ``ESP_GATT_AUTO_RSP``: Auto respond configuration, set to respond automatically by the stack. +* ``ESP_UUID_LEN_16``: UUID length set to 16 bits. +* ``(uint8_t *)&primary_service_uuid``: UUID to identify the service as a primary one (0x2800). +* ``ESP_GATT_PERM_READ``: Read Permission for the service. +* ``sizeof(uint16_t)``: Maximum length of the service UUID (16 bits). +* ``sizeof(heart_rate_svc)``: Current service length set to the size of the variable *heart_rate_svc*, which is 16 bits. +* ``(uint8_t *)&heart_rate_svc``: Service attribute value set to the variable *heart_rate_svc* which contains the Heart Rate Service UUID (0x180D). + +The rest of the attributes is initialized in the same way. Some attributes also have the *NOTIFY* property which is set by ``&char_prop_notify``. The complete table structure is initialized as follows: + +``` +/// Full HRS Database Description - Used to add attributes into the database +static const esp_gatts_attr_db_t heart_rate_gatt_db[HRS_IDX_NB] = +{ + // Heart Rate Service Declaration + [HRS_IDX_SVC] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ, + sizeof(uint16_t), sizeof(heart_rate_svc), (uint8_t *)&heart_rate_svc}}, + + // Heart Rate Measurement Characteristic Declaration + [HRS_IDX_HR_MEAS_CHAR] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, + CHAR_DECLARATION_SIZE,CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_notify}}, + + // Heart Rate Measurement Characteristic Value + [HRS_IDX_HR_MEAS_VAL] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&heart_rate_meas_uuid, ESP_GATT_PERM_READ, + HRPS_HT_MEAS_MAX_LEN,0, NULL}}, + + // Heart Rate Measurement Characteristic - Client Characteristic Configuration Descriptor + [HRS_IDX_HR_MEAS_NTF_CFG] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_client_config_uuid, ESP_GATT_PERM_READ|ESP_GATT_PERM_WRITE, + sizeof(uint16_t),sizeof(heart_measurement_ccc), (uint8_t *)heart_measurement_ccc}}, + + // Body Sensor Location Characteristic Declaration + [HRS_IDX_BOBY_SENSOR_LOC_CHAR] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, + CHAR_DECLARATION_SIZE,CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read}}, + + // Body Sensor Location Characteristic Value + [HRS_IDX_BOBY_SENSOR_LOC_VAL] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&body_sensor_location_uuid, ESP_GATT_PERM_READ, + sizeof(uint8_t), sizeof(body_sensor_loc_val), (uint8_t *)body_sensor_loc_val}}, + + // Heart Rate Control Point Characteristic Declaration + [HRS_IDX_HR_CTNL_PT_CHAR] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, + CHAR_DECLARATION_SIZE,CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_write}}, + + // Heart Rate Control Point Characteristic Value + [HRS_IDX_HR_CTNL_PT_VAL] = + {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&heart_rate_ctrl_point, ESP_GATT_PERM_WRITE|ESP_GATT_PERM_READ, + sizeof(uint8_t), sizeof(heart_ctrl_point), (uint8_t *)heart_ctrl_point}}, +}; +``` + +## Starting the Service +When the attribute table is created, an ``ESP_GATTS_CREAT_ATTR_TAB_EVT`` event is triggered. This event has the following parameters: + +* ``esp_gatt_status_t status``; /*!< Operation status */ +* ``esp_bt_uuid_t svc_uuid``; /*!< Service uuid type */ +* ``uint16_t num_handle``; /*!< The number of the attribute handle to be added to the gatts database */ +* ``uint16_t *handles``; /*!< The number to the handles */ + +This example uses this event to print information and to check that the size of the created table equals the number of elements in the enumeration HRS_IDX_NB. If the table is correctly created, the attribute handles are copied into the handle table heart_rate_handle_table and the service is started using the ``esp_ble_gatts_start_service()`` function: + +``` +case ESP_GATTS_CREAT_ATTR_TAB_EVT:{ + ESP_LOGI(GATTS_TABLE_TAG, "The number handle =%x\n",param->add_attr_tab.num_handle); + if (param->add_attr_tab.status != ESP_GATT_OK){ + ESP_LOGE(GATTS_TABLE_TAG, "Create attribute table failed, error code=0x%x", param->add_attr_tab.status); + } + else if (param->add_attr_tab.num_handle != HRS_IDX_NB){ + ESP_LOGE(GATTS_TABLE_TAG, "Create attribute table abnormally, num_handle (%d) \ + doesn't equal to HRS_IDX_NB(%d)", param->add_attr_tab.num_handle, HRS_IDX_NB); + } + else { + memcpy(heart_rate_handle_table, param->add_attr_tab.handles, sizeof(heart_rate_handle_table)); + esp_ble_gatts_start_service(heart_rate_handle_table[HRS_IDX_SVC]); + } + break; +``` + +The handles stored in the handles pointer of the event parameters are numbers that identify each attribute. The handles can be used to know which characteristic is being read or written to, therefore they can be passed around and to upper layers of the application to handle different actions. + +Finally, the heart_rate_handle_table contains the Application Profile in the form of a structure with information about the attribute parameters as well as GATT interface, connection ID, permissions and application ID. The profile structure is shown as follows, note that not all members are used in this example: + +``` +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; +}; +``` + +## Conclusion +This document explains the work flow of the GATT Server Service Table example code that implements a Heart Rate Profile. This example begins by defining a table of attributes which include all the services and characteristics of the server, then it registers the Application Profile which triggers events that are used to configure GAP parameters and to create the service table. A service table is initialized with all the parameters required for each attribute and the service is started. This example shows a practical way of defining the server attributes by using a table instead of adding characteristic one by one. + + + diff --git a/examples/bluetooth/gatt_server_service_table/tutorial/image/Table-like data structure representing the Heart Rate Service.pdf b/examples/bluetooth/gatt_server_service_table/tutorial/image/Table-like data structure representing the Heart Rate Service.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b69769f2e52d1ab4f31768e9278f06d8a0f4b9a0 GIT binary patch literal 33702 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 literal 0 HcmV?d00001 diff --git a/examples/bluetooth/gattc_multi_connect/tutorial/GATT_Client_Multi-Connection_Example_Walkthrough.md b/examples/bluetooth/gattc_multi_connect/tutorial/GATT_Client_Multi-Connection_Example_Walkthrough.md new file mode 100644 index 0000000000..b39bdc0a6a --- /dev/null +++ b/examples/bluetooth/gattc_multi_connect/tutorial/GATT_Client_Multi-Connection_Example_Walkthrough.md @@ -0,0 +1,326 @@ +# GATT Client Multi-Connection Example Walkthrough + +## Introduction +This document presents a description of the multi-connection BLE GATT client example for the ESP32. In this implementation, a single ESP32 working as a GATT client connects to three different GATT servers at the same time. This set up illustrates the use case of an ESP32 device acting in a way so that it receives data from different BLE sensors. The unique combination of ESP32’s BLE + Wi-Fi capabilities in addition to connection to multiple peripherals makes it a great candidate to serve as an IoT gateway. + +This example’s workflow is similar to the **GATT Client Example Walkthrough** and is shown in Fig. 1. However, in the multi-connection implementation, a GATT client searches for three specific server names and once that it has found them it opens a connection to all three of them one after the other. In code, each connection is handled separately with one Application Profile. + +Four ESP32 devices are needed in order to demonstrate this example, among which: + +* one would be employed as a GATT Client flashed with the ``gattc_multi_connect`` demo, and, +* the rest run as GATT servers flashed with the ``gatt_server`` demo of the ESP-IDF Bluetooth examples folder. + +![Multi-Connection GATT Client Flowchart](image/Multi-connection GATT Client Flowchart.pdf) + +## Includes +The multi-connection example’s main source file is ``gattc_multi_connect.c``. For details, see Section **Includes** in **GATT Client Example Walkthrough**. + +## Main Entry Point +See Section **Main Entry Point** in **GATT Client Example Walkthrough**. + +## Implementation Procedure +The GATT Client implementation includes the following steps: + +* system initialization, +* scanning configuration, +* scanning of nearby devices, +* connection to devices of interest, +* registering for notifications. + +### Initializing +See Section **Main Entry Point** in **GATT Client Example Walkthrough**. + +#### Application Profiles +Application Profiles are a way to group functionality. They are designed so that each Application Profile connects to one peer device, that way the same ESP32 can connect to multiple devices by assigning one Application Profile to each one, as Fig. 2 shows. Each Application Profile creates a GATT interface to connect to other devices. The Application Profiles are defined by an ID number, there are three profiles in this example: + +``` +#define PROFILE_NUM 3 +#define PROFILE_A_APP_ID 0 +#define PROFILE_B_APP_ID 1 +#define PROFILE_C_APP_ID 2 +``` +![ESP32 GATT Multi-Connect Client Application Profiles](image/ESP32 GATT Multi-connect Client Application Profiles.pdf) + +The ``esp_ble_gattc_app_register()`` function is used to register each Application Profile to the BLE stack. The registration operation generates a GATT interface that is returned as a parameter in a registration event. In addition, each Application Profile is also defined by a structure that can be used to keep the state of the application and update its parameters when new data is propagated by the stack. + +The Application Profiles in code are instances of a ``gattc_profile_inst`` structure. For details, see Section **Application Profiles** in **GATT Client Example Walkthrough**. + +### Scanning + +#### Setting Scan Parameters +See Section **Setting Scan Parameters** in **GATT Client Example Walkthrough**. + +#### Starting to Scan +See Section **Start Scanning** in **GATT Client Example Walkthrough**. + +#### Getting Scan Results +See Section **Getting Scan Results** in **GATT Client Example Walkthrough**. + +#### Name Comparison + +* First, the name of the device is extracted from the advertised data and stored in the ``adv_name`` variable: + + ``` + adv_name = esp_ble_resolve_adv_data(scan_result->scan_rst.ble_adv, + ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len); + ``` + +* Then, the device name found is compared to the server names that the client wants to connect to. The server names are defined in the ``remote_device_name`` array: + + ``` +static const char remote_device_name[3][20] = {"ESP_GATTS_DEMO_1", "ESP_GATTS_DEMO_2", “ESP_GATTS_DEMO_3"}; + ``` + + The name comparison takes places as follows: + + ``` +if (strlen(remote_device_name[0]) == adv_name_len && strncmp((char *)adv_name, remote_device_name[0], adv_name_len) == 0) { + if (find_device_1 == false) { + find_device_1 = true; + ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[0]); + memcpy(gl_profile_tab[PROFILE_A_APP_ID].remote_bda, scan_result->scan_rst.bda, 6); + } + break; + } + else if (strlen(remote_device_name[1]) == adv_name_len && strncmp((char *)adv_name, remote_device_name[1], adv_name_len) == 0) { + if (find_device_2 == false) { + find_device_2 = true; + ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[1]); + memcpy(gl_profile_tab[PROFILE_B_APP_ID].remote_bda, scan_result->scan_rst.bda, 6); + } + } + else if (strlen(remote_device_name[2]) == adv_name_len && strncmp((char *)adv_name, remote_device_name[2], adv_name_len) == 0) { + if (find_device_3 == false) { + find_device_3 = true; + ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[2]); + memcpy(gl_profile_tab[PROFILE_C_APP_ID].remote_bda, scan_result->scan_rst.bda, 6); + } + break; + } + ``` + +* If any of the device names found corresponds to a remote device name, the ``find_device_X`` flag is set and the address of the remote device is stored in the ``gl_profile_tab`` table. When all flags are set, the client stops scanning and connects to the remote devices. + +### Connecting to Remote Devices + +#### Connecting to the First Remote Device +Once all devices have been found, the client stops scanning: + +``` +if (find_device_1 && find_device_2 && find_device_3 && stop_scan == false) + { + stop_scan = true; + esp_ble_gap_stop_scanning(); + } +``` + +The scan stop triggers an ``ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT`` event which is used to open a connection to the first remote device. The second and third devices get connected once the client searches for services, gets characteristics and registers for notifications on the first device. This workflow is designed to test that the communication between each remote device is working correctly before trying to connect to the next device or in case of error, skip to the next device. + +``` +case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT: + if (param->scan_stop_cmpl.status != ESP_BT_STATUS_SUCCESS){ + ESP_LOGE(GATTC_TAG, "Scan stop failed"); + break; + } + ESP_LOGI(GATTC_TAG, "Stop scan successfully"); + if (!stop_scan){ + ESP_LOGE(GATTC_TAG, "Did not find all devices"); + } + if (find_device_1){ + esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, true); + } + break; +``` + +* The connection is opened with the ``esp_ble_gattc_open()`` function which takes the GATT interface, the remote device address and a boolean value set to true for direct connection or false for background auto connection. To disconnect the physical connection, the GAP API function ``esp_ble_gap_disconnect()`` is used. + + When connecting to the first device, an ``ESP_GATTC_CONNECT_EVT`` event is generated which is forwarded to all profiles. It also triggers an ``ESP_GATTC_OPEN_EVT`` event that is forwarded to the Profile A event handler only, or ``gattc_profile_a_event_handler()`` function. The event checks that the connection is opened successfully, if not, the device is ignored and the client tries to open a connection to the second device: + + ``` + case ESP_GATTC_OPEN_EVT: + if (p_data->open.status != ESP_GATT_OK){ + //open failed, ignore the first device, connect the second device + ESP_LOGE(GATTC_TAG, "connect device failed, status %d", p_data->open.status); + if (find_device_2){ + esp_ble_gattc_open(gl_profile_tab[PROFILE_B_APP_ID].gattc_if, gl_profile_tab[PROFILE_B_APP_ID].remote_bda, true); + } + break; + } + ``` + + If the connection is successful the client saves the connection ID, prints the remote device information and configures the MTU size to 200 bytes. + + ``` +gl_profile_tab[PROFILE_A_APP_ID].conn_id = p_data->open.conn_id; + ESP_LOGI(GATTC_TAG, "ESP_GATTC_OPEN_EVT conn_id %d, if %d, status %d, mtu %d", p_data->open.conn_id, gattc_if, p_data->open.status, p_data->open.mtu); + ESP_LOGI(GATTC_TAG, "REMOTE BDA:"); + esp_log_buffer_hex(GATTC_TAG, p_data->open.remote_bda, sizeof(esp_bd_addr_t)); + esp_err_t mtu_ret = esp_ble_gattc_config_mtu (gattc_if, p_data->open.conn_id, 200); + if (mtu_ret){ + ESP_LOGE(GATTC_TAG, "config MTU error, error code = %x", mtu_ret); + } + break; + ``` + +* After configuration of the MTU size, an ``ESP_GATTC_CFG_MTU_EVT`` is generated. This event is used to search for available known services on the remote device. The search is performed by using the ``esp_ble_gattc_search_service()`` function and a service ID defined by: + + ``` +static esp_bt_uuid_t remote_filter_service_uuid = { + .len = ESP_UUID_LEN_16, + .uuid = {.uuid16 = REMOTE_SERVICE_UUID,}, +}; + ``` + +* The handler then searches for the service: + + ``` +case ESP_GATTC_CFG_MTU_EVT: + if (param->cfg_mtu.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG,"Config mtu failed"); + } + ESP_LOGI(GATTC_TAG, "Status %d, MTU %d, conn_id %d", param->cfg_mtu.status, param->cfg_mtu.mtu, param->cfg_mtu.conn_id); + esp_ble_gattc_search_service(gattc_if, param->cfg_mtu.conn_id, &remote_filter_service_uuid); + break; + ``` + + If the service is found, an ``ESP_GATTC_SEARCH_RES_EVT`` event is triggered which allows to set the ``get_service_1 flag`` to true. This flag is used to print information and later get the characteristic that the client is interested in. + +* Once the search for all services is completed, an ``ESP_GATTC_SEARCH_CMPL_EVT`` event is generated which is used to get the characteristics of the service just discovered. This is done with the ``esp_ble_gattc_get_characteristic()`` function: + + ``` + case ESP_GATTC_SEARCH_CMPL_EVT: + if (p_data->search_cmpl.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "search service failed, error status = %x", p_data->search_cmpl.status); + break; + } + if (get_service_1){ + esp_ble_gattc_get_characteristic(gattc_if, p_data->search_cmpl.conn_id, &remote_service_id, NULL); + } + break; + ``` + The ``esp_ble_gattc_get_characteristic()`` function takes the GATT interface, the connection ID and the remote service ID as parameters. In addition, a NULL value is passed to indicate that we want all the characteristics starting from the first one. If the client is interested in a specific characteristic it could pass the characteristic ID in this field to specify that. + + An ``ESP_GATTC_GET_CHAR_EVT`` event is triggered when a characteristic is discovered. This event is used to print information about the characteristic. + +* If the characteristic ID is the same as the one defined by ``REMOTE_NOTIFY_CHAR_UUID``, the client registers for notifications on that characteristic value. + +* Finally, the next characteristic is requested using the same ``esp_ble_gattc_get_characteristic()`` function, this time, the last parameter is set to the current characteristic. This triggers another ``ESP_GATTC_GET_CHAR_EVT`` and the process is repeated until all characteristics are obtained. + + ``` +case ESP_GATTC_GET_CHAR_EVT: + if (p_data->get_char.status != ESP_GATT_OK) { + break; + } + ESP_LOGI(GATTC_TAG, "GET CHAR: conn_id = %x, status %d", p_data->get_char.conn_id, p_data->get_char.status); + ESP_LOGI(GATTC_TAG, "GET CHAR: srvc_id = %04x, char_id = %04x", p_data->get_char.srvc_id.id.uuid.uuid.uuid16, p_data->get_char.char_id.uuid.uuid.uuid16); + + if (p_data->get_char.char_id.uuid.uuid.uuid16 == REMOTE_NOTIFY_CHAR_UUID) { + ESP_LOGI(GATTC_TAG, "register notify"); + esp_ble_gattc_register_for_notify(gattc_if, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, &remote_service_id, &p_data->get_char.char_id); + } + + esp_ble_gattc_get_characteristic(gattc_if, p_data->get_char.conn_id, &remote_service_id, &p_data->get_char.char_id); + break; + ``` + +At this point the client has acquired all characteristics from the remote device and has subscribed for notifications on the characteristics of interest. Every time a client registers for notifications, an ``ESP_GATTC_REG_FOR_NOTIFY_EVT`` event is triggered. In this example, this event is set to write to the remote device Client Configuration Characteristic (CCC) using the ``esp_ble_gattc_write_char_descr()`` function. In turn, this function is used to write to characteristic descriptors. There are many characteristic descriptors defined by the Bluetooth specification, however, for this example, the descriptor of interest is the one that deals with enabling notifications, that is the Client Configuration descriptor. + +#### Connecting to the Next Remote Device +* In order to pass this descriptor as a parameter we first define it as: + + ``` +static esp_gatt_id_t notify_descr_id = { + .uuid = { + .len = ESP_UUID_LEN_16, + .uuid = {.uuid16 = ESP_GATT_UUID_CHAR_CLIENT_CONFIG,}, + }, + .inst_id = 0, +}; + ``` + + Where ``ESP_GATT_UUID_CHAR_CLIENT_CONFIG`` is defined as the UUID to identify the CCC: + + ``` + #define ESP_GATT_UUID_CHAR_CLIENT_CONFIG 0x2902 /* Client Characteristic Configuration */ + ``` + + The value to write is “1” to enable notifications. The parameter ``ESP_GATT_WRITE_TYPE_RSP`` is also passed to request that the server responds to the write request, as well as the ``ESP_GATT_AUTH_REQ_NONE`` parameter to indicate that the write request does not need authorization: + + ``` + case ESP_GATTC_REG_FOR_NOTIFY_EVT: { + if (p_data->reg_for_notify.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "reg notify failed, error status =%x", p_data->reg_for_notify.status); + break; + } + uint16_t notify_en = 1; + ESP_LOGI(GATTC_TAG, "REG FOR NOTIFY: status %d, srvc_id = %04x, char_id = %04x", + p_data->reg_for_notify.status, + p_data->reg_for_notify.srvc_id.id.uuid.uuid.uuid16, + p_data->reg_for_notify.char_id.uuid.uuid.uuid16); + + esp_ble_gattc_write_char_descr(gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].conn_id, + &remote_service_id, + &p_data->reg_for_notify.char_id, + ¬ify_descr_id, + sizeof(notify_en), + (uint8_t *)¬ify_en, + ESP_GATT_WRITE_TYPE_RSP, + ESP_GATT_AUTH_REQ_NONE); + break; + } + + ``` +* Once notifications are enabled, the remote device sends a notification which triggers the ``ESP_GATTC_NOTIFY_EVT`` event on the client. This event is handled to write back to the characteristic using the ``esp_ble_gattc_write_char()`` function: + + ``` +case ESP_GATTC_NOTIFY_EVT: + ESP_LOGI(GATTC_TAG, "ESP_GATTC_NOTIFY_EVT, Receive notify value:"); + esp_log_buffer_hex(GATTC_TAG, p_data->notify.value, p_data->notify.value_len); + //write back + esp_ble_gattc_write_char(gattc_if, + gl_profile_tab[PROFILE_A_APP_ID].conn_id, + &remote_service_id, + &p_data->notify.char_id, + p_data->notify.value_len, + p_data->notify.value, + ESP_GATT_WRITE_TYPE_RSP, + ESP_GATT_AUTH_REQ_NONE); + break; + ``` + +* If the writing procedure is acknowledged then the remote device has connected successfully and communication is established without error. Immediately, the write procedure generates an ``ESP_GATTC_WRITE_CHAR_EVT`` event which in this example is used to print information and connect to the second remote device: + + ``` +case ESP_GATTC_WRITE_CHAR_EVT: + if (p_data->write.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "write char failed, error status = %x", p_data->write.status); + }else{ + ESP_LOGI(GATTC_TAG, "write char success"); + } + //connect the second device + if (find_device_2){ + esp_ble_gattc_open(gl_profile_tab[PROFILE_B_APP_ID].gattc_if, gl_profile_tab[PROFILE_B_APP_ID].remote_bda, true); + } + break; + ``` +* This triggers an open event which is handled by the Profile B event handler. This handler follows the same steps to search for services, get characteristics, register for notifications and write to the characteristic as the first device. The sequence for the second device also ends with an ``ESP_GATTC_WRITE_CHAR_EVT`` event which in turn is used to connect to the third device: + + ``` + case ESP_GATTC_WRITE_CHAR_EVT: + if (p_data->write.status != ESP_GATT_OK){ + ESP_LOGE(GATTC_TAG, "Write char failed, error status = %x", p_data->write.status); + }else{ + ESP_LOGI(GATTC_TAG, "Write char success"); + } + //connect the third device + if (find_device_3){ + esp_ble_gattc_open(gl_profile_tab[PROFILE_C_APP_ID].gattc_if, gl_profile_tab[PROFILE_C_APP_ID].remote_bda, true); + } + break; + ``` + +* The third devices also performs the same configuration and communication steps in identical form as the first and second devices. Upon successful completion, all three remote devices are simultaneously connected appropriately and receiving notifications without error. + +## Conclusion +In this example we have reviewed the example code for the multi-connection GATT client. The client connects to three remote BLE peripherals and searches for services of interest. If the services are found, the characteristics of those services are discovered and subscribed to. The connections to the remote devices are done in order, starting from the first one and making sure that remote device has connected successfully and is notifying before trying to connect to the next device. This example shows a practical way to use the ESP32 as a central device that can read multiple BLE sensors at the same time. diff --git a/examples/bluetooth/gattc_multi_connect/tutorial/image/ESP32 GATT Multi-connect Client Application Profiles.pdf b/examples/bluetooth/gattc_multi_connect/tutorial/image/ESP32 GATT Multi-connect Client Application Profiles.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7cdf10f1f1d2886989c6ea204d7c72d0dd663050 GIT binary patch literal 36090 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 KRn^tsjSB!pnH(Pg literal 0 HcmV?d00001 diff --git a/examples/bluetooth/gattc_multi_connect/tutorial/image/Multi-connection GATT Client Flowchart.pdf b/examples/bluetooth/gattc_multi_connect/tutorial/image/Multi-connection GATT Client Flowchart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..41aa3fcd2ad142eb0d3cadca7d2476c152594300 GIT binary patch literal 16489 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 BpUMCL literal 0 HcmV?d00001