main/ble_gatts.c

Mon, 17 Apr 2023 16:20:58 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 17 Apr 2023 16:20:58 +0200
changeset 32
84e54b14e7db
parent 31
ec5c7794dcd6
permissions
-rw-r--r--

Version 0.4.1 Measure internal chip temperature, range -10 to 80. Result available in mqtt json payload.

31
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file ble_gatts.c
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief BLE GATTS services.
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 #include "config.h"
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 static const char *TAG = "ble_gatts";
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 #define PROFILE_NUM 1
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 #define PROFILE_RGB_APP_ID 0
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 #define PROFILE_RGB_NUM_HANDLE 3
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 #ifdef USE_BATTERY
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 /// characteristic presentation information
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 struct char_pres_fmt
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 uint16_t unit; ///< Unit (The Unit is a UUID)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 uint16_t description; ///< Description
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 uint8_t format;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 uint8_t exponent;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 uint8_t name_space; ///< Name space
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 };
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 static const uint16_t primary_service_uuid = ESP_GATT_UUID_PRI_SERVICE;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 static const uint16_t character_declaration_uuid = ESP_GATT_UUID_CHAR_DECLARE;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 static const uint16_t character_client_config_uuid = ESP_GATT_UUID_CHAR_CLIENT_CONFIG;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30 static const uint8_t char_prop_notify = ESP_GATT_CHAR_PROP_BIT_NOTIFY;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 static const uint8_t char_prop_read = ESP_GATT_CHAR_PROP_BIT_READ;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 static const uint8_t char_prop_read_notify = ESP_GATT_CHAR_PROP_BIT_READ|ESP_GATT_CHAR_PROP_BIT_NOTIFY;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33 #endif
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 uint8_t rgb_service_uuid[ESP_UUID_LEN_128] = {0x00, 0x56, 0xa5, 0x97, 0xd2, 0xb7, 0x2e, 0x81, 0x57, 0x49, 0x00, 0x47, 0x6c, 0x55, 0x02, 0x3b};
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 uint8_t rgb_characteristic_uuid[ESP_UUID_LEN_128] = {0x00, 0x56, 0xa5, 0x97, 0xd2, 0xb7, 0x2e, 0x81, 0x57, 0x49, 0x00, 0x47, 0x6c, 0x55, 0x02, 0x3c};
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38 static void gatts_profile_rgb_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40 struct gatts_profile_inst {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 esp_gatts_cb_t gatts_cb;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 uint16_t gatts_if;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 uint16_t app_id;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 uint16_t conn_id;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 uint16_t service_handle;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 esp_gatt_srvc_id_t service_id;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 uint16_t char_handle;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 esp_bt_uuid_t char_uuid;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 esp_gatt_perm_t perm;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 esp_gatt_char_prop_t property;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 };
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 /********************/
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 #ifdef USE_BATTERY
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 /// battery Service
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 static const uint16_t battary_svc = ESP_GATT_UUID_BATTERY_SERVICE_SVC;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 static const uint16_t bat_lev_uuid = ESP_GATT_UUID_BATTERY_LEVEL;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 static const uint8_t bat_lev_ccc[2] ={ 0x00, 0x00};
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 static const uint16_t char_format_uuid = ESP_GATT_UUID_CHAR_PRESENT_FORMAT;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 static uint8_t battary_lev = 50;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 /// Full HRS Database Description - Used to add attributes into the database
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 static const esp_gatts_attr_db_t bas_att_db[BAS_IDX_NB] =
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 // Battary Service Declaration
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70 [BAS_IDX_SVC] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 sizeof(uint16_t), sizeof(battary_svc), (uint8_t *)&battary_svc}},
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 // Battary level Characteristic Declaration
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 [BAS_IDX_BATT_LVL_CHAR] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 sizeof(uint8_t),sizeof(uint8_t), (uint8_t *)&char_prop_read_notify}},
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77 // Battary level Characteristic Value
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 [BAS_IDX_BATT_LVL_VAL] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&bat_lev_uuid, ESP_GATT_PERM_READ,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 sizeof(uint8_t),sizeof(uint8_t), &battary_lev}},
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 // Battary level Characteristic - Client Characteristic Configuration Descriptor
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 [BAS_IDX_BATT_LVL_NTF_CFG] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_client_config_uuid, ESP_GATT_PERM_READ|ESP_GATT_PERM_WRITE,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 sizeof(uint16_t),sizeof(bat_lev_ccc), (uint8_t *)bat_lev_ccc}},
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 // Battary level report Characteristic Declaration
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 [BAS_IDX_BATT_LVL_PRES_FMT] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&char_format_uuid, ESP_GATT_PERM_READ,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 sizeof(struct char_pres_fmt), 0, NULL}},
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 };
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 #endif
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 /*******************/
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 /* One gatt-based profile one app_id and one gatts_if, this array will store the gatts_if returned by ESP_GATTS_REG_EVT */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97 static struct gatts_profile_inst gl_profile_tab[PROFILE_NUM] = {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 [PROFILE_RGB_APP_ID] = {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 .gatts_cb = gatts_profile_rgb_event_handler,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 .gatts_if = ESP_GATT_IF_NONE, /* Not get the gatt_if, so initial is ESP_GATT_IF_NONE */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 };
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 static void create_rgb_service(esp_gatt_if_t gatts_if)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 gl_profile_tab[PROFILE_RGB_APP_ID].service_id.is_primary = true;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 gl_profile_tab[PROFILE_RGB_APP_ID].service_id.id.inst_id = 0x00;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 gl_profile_tab[PROFILE_RGB_APP_ID].service_id.id.uuid.len = ESP_UUID_LEN_128;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 memcpy(gl_profile_tab[PROFILE_RGB_APP_ID].service_id.id.uuid.uuid.uuid128, rgb_service_uuid, ESP_UUID_LEN_128);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 esp_ble_gatts_create_service(gatts_if, &gl_profile_tab[PROFILE_RGB_APP_ID].service_id, PROFILE_RGB_NUM_HANDLE);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 static void start_rgb_service(esp_ble_gatts_cb_param_t *param)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 gl_profile_tab[PROFILE_RGB_APP_ID].service_handle = param->create.service_handle;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 esp_ble_gatts_start_service(gl_profile_tab[PROFILE_RGB_APP_ID].service_handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120 static void add_rgb_characteristic(void)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 uint8_t char_value[] = {0x00};
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 esp_attr_value_t rgb_char_val =
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 .attr_max_len = sizeof(char_value),
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 .attr_len = sizeof(char_value),
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 .attr_value = char_value,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 };
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 gl_profile_tab[PROFILE_RGB_APP_ID].char_uuid.len = ESP_UUID_LEN_128;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 memcpy(gl_profile_tab[PROFILE_RGB_APP_ID].char_uuid.uuid.uuid128, rgb_characteristic_uuid, ESP_UUID_LEN_128);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 esp_err_t add_char_ret = esp_ble_gatts_add_char(gl_profile_tab[PROFILE_RGB_APP_ID].service_handle, &gl_profile_tab[PROFILE_RGB_APP_ID].char_uuid,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 ESP_GATT_CHAR_PROP_BIT_WRITE,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 &rgb_char_val, NULL);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138 if (add_char_ret){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 ESP_LOGE(TAG, "add char failed, error code =%x",add_char_ret);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 static void handle_write_event(uint8_t * p_data, uint16_t len)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 uint8_t opcode = p_data[0];
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 ESP_LOGI(TAG, "opcode = 0x%x", opcode);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 switch (opcode)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 case 1:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 // rgb_ctrl(RGB_RED, RGB_ON);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 // rgb_ctrl(RGB_GREEN, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 // rgb_ctrl(RGB_BLUE, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 case 2:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 // rgb_ctrl(RGB_RED, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156 // rgb_ctrl(RGB_GREEN, RGB_ON);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 // rgb_ctrl(RGB_BLUE, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 case 3:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 // rgb_ctrl(RGB_RED, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 // rgb_ctrl(RGB_GREEN, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 // rgb_ctrl(RGB_BLUE, RGB_ON);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 case 4:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 // rgb_ctrl(RGB_RED, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 // rgb_ctrl(RGB_GREEN, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167 // rgb_ctrl(RGB_BLUE, RGB_OFF);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 default:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 static void gatts_profile_rgb_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 ESP_LOGI(TAG, "gatts_profile_rgb_event_handler()");
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 switch (event) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 case ESP_GATTS_REG_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 ESP_LOGI(TAG, "REGISTER_APP_EVT, status %d, app_id %d", param->reg.status, param->reg.app_id);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 ble_balkon_adv_config();
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 create_rgb_service(gatts_if);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 case ESP_GATTS_READ_EVT: {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 ESP_LOGI(TAG, "GATT_READ_EVT, conn_id %d, trans_id %lu, handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 case ESP_GATTS_WRITE_EVT: {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 ESP_LOGI(TAG, "GATT_WRITE_EVT, conn_id %d, trans_id %lu, handle %d", param->write.conn_id, param->write.trans_id, param->write.handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 if (!param->write.is_prep){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 ESP_LOGI(TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 esp_log_buffer_hex(TAG, param->write.value, param->write.len);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 handle_write_event(param->write.value, param->write.len);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 esp_gatt_status_t status = ESP_GATT_OK;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 if (param->write.need_rsp){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 if (!param->write.is_prep){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, status, NULL);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 case ESP_GATTS_EXEC_WRITE_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 ESP_LOGI(TAG,"ESP_GATTS_EXEC_WRITE_EVT");
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 case ESP_GATTS_MTU_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 ESP_LOGI(TAG, "ESP_GATTS_MTU_EVT, MTU %d", param->mtu.mtu);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 case ESP_GATTS_UNREG_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 case ESP_GATTS_CREATE_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 ESP_LOGI(TAG, "CREATE_SERVICE_EVT, status %d, service_handle %d", param->create.status, param->create.service_handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 start_rgb_service(param);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 add_rgb_characteristic();
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 case ESP_GATTS_ADD_INCL_SRVC_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 case ESP_GATTS_ADD_CHAR_EVT: {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 ESP_LOGI(TAG, "ADD_CHAR_EVT, status %d, attr_handle %d, service_handle %d",
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 param->add_char.status, param->add_char.attr_handle, param->add_char.service_handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 case ESP_GATTS_ADD_CHAR_DESCR_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 ESP_LOGI(TAG, "ADD_DESCR_EVT, status %d, attr_handle %d, service_handle %d",
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 param->add_char_descr.status, param->add_char_descr.attr_handle, param->add_char_descr.service_handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 case ESP_GATTS_DELETE_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 case ESP_GATTS_START_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 ESP_LOGI(TAG, "SERVICE_START_EVT, status %d, service_handle %d", param->start.status, param->start.service_handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 case ESP_GATTS_STOP_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 case ESP_GATTS_CONNECT_EVT: {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 esp_ble_conn_update_params_t conn_params = {0};
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 memcpy(conn_params.bda, param->connect.remote_bda, sizeof(esp_bd_addr_t));
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 /* For the IOS system, please reference the apple official documents about the ble connection parameters restrictions. */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 conn_params.latency = 0;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 conn_params.max_int = 0x20; // max_int = 0x20*1.25ms = 40ms
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 conn_params.min_int = 0x10; // min_int = 0x10*1.25ms = 20ms
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 conn_params.timeout = 400; // timeout = 400*10ms = 4000ms
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 ESP_LOGI(TAG, "ESP_GATTS_CONNECT_EVT, conn_id %d, remote %02x:%02x:%02x:%02x:%02x:%02x:",
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 param->connect.conn_id,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 param->connect.remote_bda[0], param->connect.remote_bda[1], param->connect.remote_bda[2],
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 param->connect.remote_bda[3], param->connect.remote_bda[4], param->connect.remote_bda[5]);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 gl_profile_tab[PROFILE_RGB_APP_ID].conn_id = param->connect.conn_id;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 //start sent the update connection parameters to the peer device.
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 esp_ble_gap_update_conn_params(&conn_params);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 case ESP_GATTS_DISCONNECT_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 ESP_LOGI(TAG, "ESP_GATTS_DISCONNECT_EVT, disconnect reason 0x%x", param->disconnect.reason);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 ble_balkon_adv_start();
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 case ESP_GATTS_CONF_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 ESP_LOGI(TAG, "ESP_GATTS_CONF_EVT, status %d attr_handle %d", param->conf.status, param->conf.handle);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 if (param->conf.status != ESP_GATT_OK){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 esp_log_buffer_hex(TAG, param->conf.value, param->conf.len);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 case ESP_GATTS_OPEN_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 case ESP_GATTS_CANCEL_OPEN_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 case ESP_GATTS_CLOSE_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 case ESP_GATTS_LISTEN_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 case ESP_GATTS_CONGEST_EVT:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 default:
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 break;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 ESP_LOGI(TAG, "gatts_event_handler(%x)", event);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 /* If event is register event, store the gatts_if for each profile */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 if (event == ESP_GATTS_REG_EVT) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 if (param->reg.status == ESP_GATT_OK) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 gl_profile_tab[param->reg.app_id].gatts_if = gatts_if;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 } else {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 ESP_LOGI(TAG, "Reg app failed, app_id %04x, status %d", param->reg.app_id, param->reg.status);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 return;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 /* If the gatts_if equal to profile A, call profile A cb handler,
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288 * so here call each profile's callback */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 do {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 int idx;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291 for (idx = 0; idx < PROFILE_NUM; idx++) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 if (gatts_if == ESP_GATT_IF_NONE || /* ESP_GATT_IF_NONE, not specify a certain gatt_if, need to call every profile cb function */
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 gatts_if == gl_profile_tab[idx].gatts_if) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294 if (gl_profile_tab[idx].gatts_cb) {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295 gl_profile_tab[idx].gatts_cb(event, gatts_if, param);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
297 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
298 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
299 } while (0);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 /***************************************************************************************************************************/
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305 esp_err_t ble_balkon_gatts_register(void)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
306 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
307 esp_err_t ret = esp_ble_gatts_register_callback(gatts_event_handler);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
308 if (ret){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
309 ESP_LOGE(TAG, "gatts register error, error code = %x", ret);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312 return ret;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
313 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
314
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
315
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
316 esp_err_t ble_balkon_gatts_app_register(void)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 esp_err_t ret = esp_ble_gatts_app_register(PROFILE_RGB_APP_ID);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319 if (ret){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320 ESP_LOGE(TAG, "gatts app register error, error code = %x", ret);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 return ret;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 esp_err_t ble_balkon_gatts_set_mtu(void)
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328 {
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 esp_err_t local_mtu_ret = esp_ble_gatt_set_local_mtu(500);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330 if (local_mtu_ret){
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331 ESP_LOGE(TAG, "set local MTU failed, error code = %x", local_mtu_ret);
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334 return local_mtu_ret;
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335 }
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336
ec5c7794dcd6 Added basic BLE code.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337

mercurial