@@ -27,7 +27,9 @@ extern "C" {
27
27
static esp_attr_value_t gatts_demo_char1_val;
28
28
static uint8_t char1_str[] = {0x11 ,0x22 ,0x33 };
29
29
30
-
30
+ /* *
31
+ * Construct a BLE Server
32
+ */
31
33
BLEServer::BLEServer (uint16_t appId, std::string deviceName) {
32
34
m_appId = appId;
33
35
m_deviceName = deviceName;
@@ -48,18 +50,45 @@ BLEServer::BLEServer(uint16_t appId, std::string deviceName) {
48
50
0xfb , 0x34 , 0x9b , 0x5f , 0x80 , 0x00 , 0x00 , 0x80 , 0x00 , 0x10 , 0x00 , 0x00 , 0xAB , 0xCD , 0xAB , 0xCD ,
49
51
};
50
52
setUUID (test_service_uuid128);
51
- esp_ble_gatts_app_register (m_appId);
52
- }
53
+ :: esp_ble_gatts_app_register (m_appId);
54
+ } // BLEServer
53
55
54
56
BLEServer::~BLEServer () {
55
- // TODO Auto-generated destructor stub
56
57
}
57
58
58
- void BLEServer::handleGATTServerEvent (esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if,
59
- esp_ble_gatts_cb_param_t * param) {
60
- ESP_LOGD (tag, " BLEServer ... handling GATT Server event!" );
59
+
60
+ /* *
61
+ * @brief setDeviceName
62
+ * @param [in] deviceName
63
+ */
64
+ void BLEServer::setDeviceName (std::string deviceName) {
65
+ m_deviceName = deviceName;
66
+ } // setDeviceName
67
+
68
+
69
+ /* *
70
+ * @brief setUUID
71
+ * @param [in] uuid
72
+ */
73
+ void BLEServer::setUUID (uint8_t uuid[32 ]) {
74
+ memcpy (m_uuid, uuid, 32 );
75
+ } // setUUID
76
+
77
+ /* *
78
+ * @brief Handle a GATT Server Event.
79
+ * @param [in] event
80
+ * @param [in] gatts_if
81
+ * @param [in] param
82
+ *
83
+ */
84
+ void BLEServer::handleGATTServerEvent (
85
+ esp_gatts_cb_event_t event,
86
+ esp_gatt_if_t gatts_if,
87
+ esp_ble_gatts_cb_param_t *param) {
88
+ ESP_LOGD (tag, " handleGATTServerEvent: BLEServer ... handling GATT Server event!" );
61
89
62
90
switch (event) {
91
+ // ESP_GATTS_REG_EVT
63
92
case ESP_GATTS_REG_EVT: {
64
93
m_profile.gatts_if = gatts_if;
65
94
ESP_LOGD (tag, " Registering device name: %s" , m_deviceName.c_str ());
@@ -82,34 +111,35 @@ void BLEServer::handleGATTServerEvent(esp_gatts_cb_event_t event, esp_gatt_if_t
82
111
m_adv_data.service_uuid_len = 32 ;
83
112
m_adv_data.p_service_uuid = m_uuid;
84
113
m_adv_data.flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT);
85
- ESP_LOGD (tag, " Setting advertizing data" );
86
- errRc = esp_ble_gap_config_adv_data (&m_adv_data);
114
+ ESP_LOGD (tag, " Setting advertising data" );
115
+ errRc = :: esp_ble_gap_config_adv_data (&m_adv_data);
87
116
if (errRc != ESP_OK) {
88
117
ESP_LOGE (tag, " esp_ble_gap_config_adv_data: rc=%d %s" , errRc, espToString (errRc));
89
118
return ;
90
119
}
91
120
92
121
ESP_LOGD (tag, " Creating service" );
93
- errRc = esp_ble_gatts_create_service (gatts_if, &m_profile.service_id , 4 );
122
+ errRc = :: esp_ble_gatts_create_service (gatts_if, &m_profile.service_id , 4 );
94
123
if (errRc != ESP_OK) {
95
124
ESP_LOGE (tag, " esp_ble_gatts_create_service: rc=%d %s" , errRc, espToString (errRc));
96
125
return ;
97
126
}
98
127
break ;
99
128
} // ESP_GATTS_REG_EVT
100
129
130
+ // ESP_GATTS_CREATE_EVT
101
131
case ESP_GATTS_CREATE_EVT: {
102
132
m_profile.service_handle = param->create .service_handle ;
103
133
m_profile.char_uuid .len = ESP_UUID_LEN_16;
104
134
m_profile.char_uuid .uuid .uuid16 = 0x99AA ;
105
135
ESP_LOGD (tag, " Starting service" );
106
- esp_err_t errRc = esp_ble_gatts_start_service (m_profile.service_handle );
136
+ esp_err_t errRc = :: esp_ble_gatts_start_service (m_profile.service_handle );
107
137
if (errRc != ESP_OK) {
108
138
ESP_LOGE (tag, " esp_ble_gatts_start_service: rc=%d %s" , errRc, espToString (errRc));
109
139
return ;
110
140
}
111
141
ESP_LOGD (tag, " Adding characteristic" );
112
- errRc = esp_ble_gatts_add_char (
142
+ errRc = :: esp_ble_gatts_add_char (
113
143
m_profile.service_handle ,
114
144
&m_profile.char_uuid ,
115
145
(esp_gatt_perm_t )(ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE),
@@ -122,14 +152,41 @@ void BLEServer::handleGATTServerEvent(esp_gatts_cb_event_t event, esp_gatt_if_t
122
152
}
123
153
break ;
124
154
} // ESP_GATTS_CREATE_EVT
155
+
156
+
157
+ // ESP_GATTS_READ_EVT - A request to read the value of a characteristic has arrived.
158
+ case ESP_GATTS_READ_EVT: {
159
+ ESP_LOGD (tag, " Sending a response" );
160
+ if (param->read .need_rsp ) {
161
+ esp_gatt_rsp_t rsp;
162
+ rsp.attr_value .len = 1 ;
163
+ rsp.attr_value .handle = param->read .handle ;
164
+ rsp.attr_value .offset = 0 ;
165
+ rsp.attr_value .auth_req = ESP_GATT_AUTH_REQ_NONE;
166
+ rsp.attr_value .value [0 ] = ' X' ;
167
+ esp_err_t errRc = ::esp_ble_gatts_send_response (gatts_if, param->read .conn_id , param->read .trans_id , ESP_GATT_OK, &rsp);
168
+ if (errRc != ESP_OK) {
169
+ ESP_LOGE (tag, " esp_ble_gatts_add_char: rc=%d %s" , errRc, espToString (errRc));
170
+ }
171
+ }
172
+ break ;
173
+ } // ESP_GATTS_READ_EVT
174
+
175
+
125
176
default :
126
177
break ;
127
178
}
128
179
} // handleGATTServerEvent
129
180
130
181
131
- void BLEServer::handleGAPEvent (esp_gap_ble_cb_event_t event,
132
- esp_ble_gap_cb_param_t * param) {
182
+ /* *
183
+ * @brief handleGAPEvent
184
+ * @param [in] event
185
+ * @param [in] param
186
+ */
187
+ void BLEServer::handleGAPEvent (
188
+ esp_gap_ble_cb_event_t event,
189
+ esp_ble_gap_cb_param_t *param) {
133
190
ESP_LOGD (tag, " BLEServer ... handling GAP event!" );
134
191
switch (event) {
135
192
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: {
@@ -140,8 +197,8 @@ void BLEServer::handleGAPEvent(esp_gap_ble_cb_event_t event,
140
197
adv_params.own_addr_type = BLE_ADDR_TYPE_PUBLIC;
141
198
adv_params.channel_map = ADV_CHNL_ALL;
142
199
adv_params.adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY;
143
- ESP_LOGD (tag, " Starting advertizing " );
144
- esp_err_t errRc = esp_ble_gap_start_advertising (&adv_params);
200
+ ESP_LOGD (tag, " Starting advertising " );
201
+ esp_err_t errRc = :: esp_ble_gap_start_advertising (&adv_params);
145
202
if (errRc != ESP_OK) {
146
203
ESP_LOGE (tag, " esp_ble_gap_start_advertising: rc=%d %s" , errRc, espToString (errRc));
147
204
return ;
0 commit comments