#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 "esp_bt.h" #include "driver/timer.h" #include "cJSON.h" #include "cJSON_Utils.h" #include "esp_gap_ble_api.h" #include "esp_gatts_api.h" #include "esp_bt_defs.h" #include "esp_bt_main.h" #include "esp_gatt_common_api.h" #include "sdkconfig.h" #define GATTS_TAG "GATTS_DEMO" #define GATTS_SERVICE_UUID_TEST_A 0x00FF #define GATTS_CHAR_UUID_TEST_A 0xFF01 #define GATTS_DESCR_UUID_TEST_A 0x3333 #define GATTS_NUM_HANDLE_TEST_A 4 #define GATTS_SERVICE_UUID_TEST_B 0x00EE #define GATTS_CHAR_UUID_TEST_B 0xEE01 #define GATTS_DESCR_UUID_TEST_B 0x2222 #define GATTS_NUM_HANDLE_TEST_B 4 #define TEST_DEVICE_NAME "ESP_GATTS_DEMO" #define TEST_MANUFACTURER_DATA_LEN 17 #define GATTS_DEMO_CHAR_VAL_LEN_MAX 0x40 #define PREPARE_BUF_MAX_SIZE 1024 #define adv_config_flag (1 << 0) #define scan_rsp_config_flag (1 << 1) #define PROFILE_NUM 2 #define PROFILE_A_APP_ID 0 #define PROFILE_B_APP_ID 1 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; }; typedef struct { uint8_t *prepare_buf; int prepare_len; } prepare_type_env_t; typedef struct ble_gatts_str { uint8_t send_gatts_if; uint16_t send_conn_id; uint16_t attr_handle; } ble_gatts_str_t; 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); void example_exec_write_event_env(prepare_type_env_t *prepare_write_env, esp_ble_gatts_cb_param_t *param); void esp_ble_gatts_init(ble_gatts_str_t* ble_gatts_a_str); void gatts_profile_a_constructor(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param);