@@ -53,8 +53,8 @@ static EventGroupHandle_t _spp_event_group = NULL;
53
53
static boolean secondConnectionAttempt;
54
54
static esp_spp_cb_t * custom_spp_callback = NULL ;
55
55
56
- #define INQ_LEN 30
57
- #define INQ_NUM_RSPS 0
56
+ #define INQ_LEN 0x10
57
+ #define INQ_NUM_RSPS 20
58
58
#define READY_TIMEOUT 5000
59
59
static esp_bd_addr_t _peer_bd_addr;
60
60
static char _remote_name[ESP_BT_GAP_MAX_BDNAME_LEN + 1 ];
@@ -75,12 +75,29 @@ typedef struct {
75
75
uint8_t data[];
76
76
} spp_packet_t ;
77
77
78
+ static char *bda2str (esp_bd_addr_t bda, char *str, size_t size)
79
+ {
80
+ if (bda == NULL || str == NULL || size < 18 ) {
81
+ return NULL ;
82
+ }
83
+
84
+ uint8_t *p = bda;
85
+ sprintf (str, " %02x:%02x:%02x:%02x:%02x:%02x" ,
86
+ p[0 ], p[1 ], p[2 ], p[3 ], p[4 ], p[5 ]);
87
+ return str;
88
+ }
89
+
78
90
static bool get_name_from_eir (uint8_t *eir, char *bdname, uint8_t *bdname_len)
79
91
{
80
92
uint8_t *rmt_bdname = NULL ;
81
93
uint8_t rmt_bdname_len = 0 ;
82
94
83
- if (!eir) {
95
+ if (bdname) {
96
+ *bdname_len = 0 ;
97
+ *bdname = 0 ;
98
+ }
99
+
100
+ if (!eir || !bdname || !bdname_len) {
84
101
return false ;
85
102
}
86
103
@@ -316,16 +333,18 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa
316
333
switch (event){
317
334
case ESP_BT_GAP_DISC_RES_EVT:
318
335
log_i (" ESP_BT_GAP_DISC_RES_EVT" );
336
+ char bda_str[18 ];
337
+ log_i (" Scanned device: %s" , bda2str (param->disc_res .bda , bda_str, 18 ));
319
338
for (int i = 0 ; i < param->disc_res .num_prop ; i++){
320
339
uint8_t peer_bdname_len;
321
340
char peer_bdname[ESP_BT_GAP_MAX_BDNAME_LEN + 1 ];
322
341
switch (param->disc_res .prop [i].type ) {
323
- case ESP_BT_GAP_DEV_PROP_EIR:
342
+ case ESP_BT_GAP_DEV_PROP_EIR:
324
343
if (get_name_from_eir ((uint8_t *)param->disc_res .prop [i].val , peer_bdname, &peer_bdname_len)) {
325
344
log_v (" ESP_BT_GAP_DISC_RES_EVT : EIR : %s : %d" , peer_bdname, peer_bdname_len);
326
345
if (strlen (_remote_name) == peer_bdname_len
327
346
&& strncmp (peer_bdname, _remote_name, peer_bdname_len) == 0 ) {
328
- log_v (" ESP_BT_GAP_DISC_RES_EVT : SPP_DISCOVERY_EIR : %s" , peer_bdname, peer_bdname_len);
347
+ log_v (" ESP_BT_GAP_DISC_RES_EVT : SPP_START_DISCOVERY_EIR : %s" , peer_bdname, peer_bdname_len);
329
348
_isRemoteAddressSet = true ;
330
349
memcpy (_peer_bd_addr, param->disc_res .bda , ESP_BD_ADDR_LEN);
331
350
esp_spp_start_discovery (_peer_bd_addr);
@@ -340,13 +359,19 @@ static void esp_bt_gap_cb(esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *pa
340
359
log_v (" ESP_BT_GAP_DISC_RES_EVT : BDNAME : %s : %d" , peer_bdname, peer_bdname_len);
341
360
if (strlen (_remote_name) == peer_bdname_len
342
361
&& strncmp (peer_bdname, _remote_name, peer_bdname_len) == 0 ) {
343
- log_v (" ESP_BT_GAP_DISC_RES_EVT : SPP_DISCOVERY_BDNAME : %s" , peer_bdname);
362
+ log_v (" ESP_BT_GAP_DISC_RES_EVT : SPP_START_DISCOVERY_BDNAME : %s" , peer_bdname);
344
363
_isRemoteAddressSet = true ;
345
364
memcpy (_peer_bd_addr, param->disc_res .bda , ESP_BD_ADDR_LEN);
346
365
esp_spp_start_discovery (_peer_bd_addr);
347
366
esp_bt_gap_cancel_discovery ();
348
367
}
349
368
break ;
369
+ case ESP_BT_GAP_DEV_PROP_COD:
370
+ // log_i("ESP_BT_GAP_DEV_PROP_COD");
371
+ break ;
372
+ case ESP_BT_GAP_DEV_PROP_RSSI:
373
+ // log_i("ESP_BT_GAP_DEV_PROP_RSSI");
374
+ break ;
350
375
default :
351
376
break ;
352
377
}
@@ -665,6 +690,7 @@ bool BluetoothSerial::connect(String remoteName)
665
690
_remote_name[ESP_BT_GAP_MAX_BDNAME_LEN] = 0 ;
666
691
log_i (" master : remoteName" );
667
692
// will first resolve name to address
693
+ esp_bt_gap_set_scan_mode (ESP_BT_SCAN_MODE_CONNECTABLE);
668
694
return (esp_bt_gap_start_discovery (ESP_BT_INQ_MODE_GENERAL_INQUIRY, INQ_LEN, INQ_NUM_RSPS) == ESP_OK);
669
695
}
670
696
@@ -692,6 +718,7 @@ bool BluetoothSerial::connect()
692
718
} else if (_remote_name[0 ]) {
693
719
log_i (" master : remoteName" );
694
720
// will resolve name to address first - it may take a while
721
+ esp_bt_gap_set_scan_mode (ESP_BT_SCAN_MODE_CONNECTABLE);
695
722
return (esp_bt_gap_start_discovery (ESP_BT_INQ_MODE_GENERAL_INQUIRY, INQ_LEN, INQ_NUM_RSPS) == ESP_OK);
696
723
}
697
724
log_e (" Neither Remote name nor address was provided" );
0 commit comments