Skip to content

Commit cd685b6

Browse files
Deomid Ryabkovcesantabot
authored andcommitted
Minor BT improvements
* Save interface id in the clinet connect struct * Configure MTU on newly established connections * Add mgos_bt_gap_parse_name() CL: Add mgos_bt_gap_parse_name() PUBLISHED_FROM=82d13bf0a779141d6febc3b4edba96db2574b0f3
1 parent 9bac184 commit cd685b6

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

include/mgos_bt_gap.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ enum mgos_bt_gap_eir_type {
5252
struct mg_str mgos_bt_gap_parse_adv_data(const uint8_t *data,
5353
enum mgos_bt_gap_eir_type);
5454

55+
/* Either LONG or, if not provided, SHORT_NAME. */
56+
struct mg_str mgos_bt_gap_parse_name(const uint8_t *data);
57+
5558
struct mgos_bt_gap_scan_result {
5659
uint8_t adv_data[MGOS_BT_GAP_ADV_DATA_LEN];
5760
uint8_t scan_rsp[MGOS_BT_GAP_ADV_DATA_LEN];

src/esp32/esp32_bt_gap.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,12 @@ static void esp32_gap_ev_handler(esp_gap_ble_cb_event_t ev,
201201
struct mgos_bt_gap_scan_result data = {.rssi = p->rssi};
202202
if (p->search_evt == ESP_GAP_SEARCH_INQ_RES_EVT) {
203203
char buf[BT_ADDR_STR_LEN], hexbuf[MGOS_BT_GAP_ADV_DATA_LEN * 2 + 1];
204+
const struct mg_str name = mgos_bt_gap_parse_name(p->ble_adv);
204205
cs_to_hex(hexbuf, p->ble_adv, MGOS_BT_GAP_ADV_DATA_LEN);
205-
LOG(LL_DEBUG, ("SCAN_RESULT %d %s rssi %d srl %d adl %d [%s]",
206-
p->search_evt, esp32_bt_addr_to_str(p->bda, buf),
207-
p->rssi, p->scan_rsp_len, p->adv_data_len, hexbuf));
206+
LOG(LL_DEBUG,
207+
("SCAN_RESULT %d %s [%.*s] rssi %d srl %d adl %d [%s]",
208+
p->search_evt, esp32_bt_addr_to_str(p->bda, buf), (int) name.len,
209+
name.p, p->rssi, p->scan_rsp_len, p->adv_data_len, hexbuf));
208210
memcpy(data.addr.addr, p->bda, sizeof(data.addr.addr));
209211
memcpy(data.adv_data, p->ble_adv, sizeof(data.adv_data));
210212
memcpy(data.scan_rsp, p->ble_adv + sizeof(data.adv_data),

src/esp32/esp32_bt_gattc.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,19 @@ static void esp32_bt_gattc_ev(esp_gattc_cb_event_t ev, esp_gatt_if_t iface,
130130
case ESP_GATTC_OPEN_EVT: {
131131
const struct gattc_open_evt_param *p = &ep->open;
132132
enum cs_log_level ll = ll_from_status(p->status);
133-
LOG(ll, ("OPEN if %d st %#hx conn %d %s", iface, p->status, p->conn_id,
134-
esp32_bt_addr_to_str(p->remote_bda, buf)));
133+
LOG(ll, ("OPEN if %d cid %u addr %s st %#hx mtu %d", iface, p->conn_id,
134+
esp32_bt_addr_to_str(p->remote_bda, buf), p->status, p->mtu));
135135
if (p->status == ESP_GATT_OK) {
136136
struct conn *conn = find_by_addr(p->remote_bda);
137137
if (conn == NULL) {
138138
conn = calloc(1, sizeof(*conn));
139+
conn->iface = iface;
139140
memcpy(conn->c.addr.addr, p->remote_bda, sizeof(conn->c.addr.addr));
141+
esp_ble_gattc_send_mtu_req(iface, p->conn_id);
140142
SLIST_INSERT_HEAD(&s_conns, conn, next);
141143
}
142144
conn->c.conn_id = p->conn_id;
143145
conn->c.mtu = p->mtu;
144-
mgos_event_trigger_schedule(MGOS_BT_GATTC_EVENT_CONNECT, &conn->c,
145-
sizeof(conn->c));
146146
} else {
147147
esp_ble_gattc_close(iface, p->conn_id);
148148
disconnect(p->conn_id, p->remote_bda);
@@ -281,6 +281,12 @@ static void esp32_bt_gattc_ev(esp_gattc_cb_event_t ev, esp_gatt_if_t iface,
281281
const struct gattc_cfg_mtu_evt_param *p = &ep->cfg_mtu;
282282
enum cs_log_level ll = ll_from_status(p->status);
283283
LOG(ll, ("CFG_MTU st %d cid %u mtu %d", p->status, p->conn_id, p->mtu));
284+
struct conn *conn = find_by_conn_id(p->conn_id);
285+
if (conn != NULL) {
286+
conn->c.mtu = p->mtu;
287+
mgos_event_trigger_schedule(MGOS_BT_GATTC_EVENT_CONNECT, &conn->c,
288+
sizeof(conn->c));
289+
}
284290
break;
285291
}
286292
case ESP_GATTC_ADV_DATA_EVT: {

src/mgos_bt_gap.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,11 @@ struct mg_str mgos_bt_gap_parse_adv_data(const uint8_t *data,
1212
}
1313
return res;
1414
}
15+
16+
struct mg_str mgos_bt_gap_parse_name(const uint8_t *data) {
17+
struct mg_str s = mgos_bt_gap_parse_adv_data(data, MGOS_BT_GAP_EIR_FULL_NAME);
18+
if (s.len == 0) {
19+
s = mgos_bt_gap_parse_adv_data(data, MGOS_BT_GAP_EIR_SHORT_NAME);
20+
}
21+
return s;
22+
}

0 commit comments

Comments
 (0)