@@ -101,8 +101,6 @@ BLEDeviceManager::BLEDeviceManager():
101
101
102
102
memset (&_available_for_connect_peripheral_adv_data, 0 , sizeof (_available_for_connect_peripheral_adv_data));
103
103
memset (&_available_for_connect_peripheral_scan_rsp_data, 0 , sizeof (_available_for_connect_peripheral_scan_rsp_data));
104
-
105
- memset (&_wait_for_connect_peripheral, 0 , sizeof (_wait_for_connect_peripheral));
106
104
107
105
memset (&_service_uuid, 0 , sizeof (_service_uuid));
108
106
memset (&_service_solicit_uuid, 0 , sizeof (_service_solicit_uuid));
@@ -576,10 +574,32 @@ BLEDevice BLEDeviceManager::peripheral()
576
574
return temp;
577
575
}
578
576
577
+ void BLEDeviceManager::_clearAdvertiseBuffer ()
578
+ {
579
+
580
+ // Clear the previous found ADV
581
+ memset (_peer_temp_adv_buffer, 0 , sizeof (_peer_temp_adv_buffer));
582
+ memset (_peer_temp_adv_data, 0 , sizeof (_peer_temp_adv_data));
583
+ memset (_peer_temp_adv_data_len, 0 , sizeof (_peer_temp_adv_data_len));
584
+ memset (_peer_temp_adv_connectable, 0 , sizeof (_peer_adv_connectable));
585
+
586
+ memset (_peer_adv_buffer, 0 , sizeof (_peer_adv_buffer));
587
+ memset (_peer_adv_mill, 0 , sizeof (_peer_adv_mill));
588
+ memset (_peer_adv_data, 0 , sizeof (_peer_adv_data));
589
+ memset (_peer_adv_data_len, 0 , sizeof (_peer_adv_data_len));
590
+ memset (_peer_scan_rsp_data, 0 , sizeof (_peer_scan_rsp_data));
591
+ memset (_peer_scan_rsp_data_len, 0 , sizeof (_peer_scan_rsp_data_len));
592
+ memset (_peer_adv_rssi, 0 , sizeof (_peer_adv_rssi));
593
+
594
+ }
595
+
579
596
bool BLEDeviceManager::startScanning ()
580
597
{
581
598
_adv_duplicate_filter_enabled = false ;
582
599
_scan_param.filter_dup = BT_HCI_LE_SCAN_FILTER_DUP_ENABLE;
600
+
601
+ _clearAdvertiseBuffer ();
602
+
583
603
int err = bt_le_scan_start (&_scan_param, ble_central_device_found);
584
604
if (err)
585
605
{
@@ -594,6 +614,8 @@ bool BLEDeviceManager::startScanningWithDuplicates()
594
614
_adv_duplicate_filter_enabled = true ;
595
615
memset (_peer_duplicate_address_buffer, 0 , sizeof (_peer_duplicate_address_buffer));
596
616
_duplicate_filter_header = _duplicate_filter_tail = 0 ;
617
+
618
+ _clearAdvertiseBuffer ();
597
619
598
620
_scan_param.filter_dup = BT_HCI_LE_SCAN_FILTER_DUP_ENABLE;
599
621
int err = bt_le_scan_start (&_scan_param, ble_central_device_found);
@@ -896,11 +918,6 @@ int BLEDeviceManager::advertisedServiceUuidCount(const BLEDevice* device) const
896
918
return service_cnt;
897
919
}
898
920
899
- if ((len + 1 ) > adv_data_len) { // Sid. KW, can't be (adv_data_len < 2)
900
- pr_info (LOG_MODULE_BLE, " AD malformed\n " );
901
- return service_cnt;
902
- }
903
-
904
921
/* Sid, 2/15/2017. Sandeep reported that Apple devices may use
905
922
BT_DATA_UUID16_SOME and BT_DATA_UUID128_SOME in addition to ALL.
906
923
Practically, these types are same as ALL. */
@@ -1067,6 +1084,11 @@ bool BLEDeviceManager::connect(BLEDevice &device)
1067
1084
uint64_t timestamp = millis ();
1068
1085
uint64_t timestampcur = timestamp;
1069
1086
bool ret = true ;
1087
+ if (_available_for_connect_peripheral_connectable == false )
1088
+ {
1089
+ return false ;
1090
+ }
1091
+
1070
1092
bt_addr_le_copy (&_wait_for_connect_peripheral, device.bt_le_address ());
1071
1093
// Buffer the ADV data
1072
1094
memcpy (_wait_for_connect_peripheral_adv_data, _available_for_connect_peripheral_adv_data, BLE_MAX_ADV_SIZE);
@@ -1247,6 +1269,8 @@ void BLEDeviceManager::handleDisconnectEvent(bt_conn_t *conn, uint8_t reason)
1247
1269
memset (_peer_peripheral_adv_data[i], 0 , BLE_MAX_ADV_SIZE);
1248
1270
_peer_peripheral_adv_data_len[i] = 0 ;
1249
1271
_peer_peripheral_adv_rssi[i] = 0 ;
1272
+ memset (_peer_peripheral_scan_rsp_data[i], 0 , BLE_MAX_ADV_SIZE);
1273
+ _peer_peripheral_scan_rsp_data_len[i] = 0 ;
1250
1274
break ;
1251
1275
}
1252
1276
}
@@ -1406,7 +1430,10 @@ bool BLEDeviceManager::setAdvertiseBuffer(const bt_addr_le_t* bt_addr,
1406
1430
{
1407
1431
max_delta = timestamp_delta;
1408
1432
if (max_delta > 2000 ) // expired
1433
+ {
1409
1434
index = i;
1435
+ _peer_scan_rsp_data_len[index ] = 0 ; // Invalid the scan response
1436
+ }
1410
1437
}
1411
1438
1412
1439
if (bt_addr_le_cmp (temp, bt_addr) == 0 )
0 commit comments