@@ -101,8 +101,6 @@ BLEDeviceManager::BLEDeviceManager():
101101
102102 memset (&_available_for_connect_peripheral_adv_data, 0 , sizeof (_available_for_connect_peripheral_adv_data));
103103 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));
106104
107105 memset (&_service_uuid, 0 , sizeof (_service_uuid));
108106 memset (&_service_solicit_uuid, 0 , sizeof (_service_solicit_uuid));
@@ -576,10 +574,32 @@ BLEDevice BLEDeviceManager::peripheral()
576574 return temp;
577575}
578576
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+
579596bool BLEDeviceManager::startScanning ()
580597{
581598 _adv_duplicate_filter_enabled = false ;
582599 _scan_param.filter_dup = BT_HCI_LE_SCAN_FILTER_DUP_ENABLE;
600+
601+ _clearAdvertiseBuffer ();
602+
583603 int err = bt_le_scan_start (&_scan_param, ble_central_device_found);
584604 if (err)
585605 {
@@ -594,6 +614,8 @@ bool BLEDeviceManager::startScanningWithDuplicates()
594614 _adv_duplicate_filter_enabled = true ;
595615 memset (_peer_duplicate_address_buffer, 0 , sizeof (_peer_duplicate_address_buffer));
596616 _duplicate_filter_header = _duplicate_filter_tail = 0 ;
617+
618+ _clearAdvertiseBuffer ();
597619
598620 _scan_param.filter_dup = BT_HCI_LE_SCAN_FILTER_DUP_ENABLE;
599621 int err = bt_le_scan_start (&_scan_param, ble_central_device_found);
@@ -896,11 +918,6 @@ int BLEDeviceManager::advertisedServiceUuidCount(const BLEDevice* device) const
896918 return service_cnt;
897919 }
898920
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-
904921 /* Sid, 2/15/2017. Sandeep reported that Apple devices may use
905922 BT_DATA_UUID16_SOME and BT_DATA_UUID128_SOME in addition to ALL.
906923 Practically, these types are same as ALL. */
@@ -1067,6 +1084,11 @@ bool BLEDeviceManager::connect(BLEDevice &device)
10671084 uint64_t timestamp = millis ();
10681085 uint64_t timestampcur = timestamp;
10691086 bool ret = true ;
1087+ if (_available_for_connect_peripheral_connectable == false )
1088+ {
1089+ return false ;
1090+ }
1091+
10701092 bt_addr_le_copy (&_wait_for_connect_peripheral, device.bt_le_address ());
10711093 // Buffer the ADV data
10721094 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)
12471269 memset (_peer_peripheral_adv_data[i], 0 , BLE_MAX_ADV_SIZE);
12481270 _peer_peripheral_adv_data_len[i] = 0 ;
12491271 _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 ;
12501274 break ;
12511275 }
12521276 }
@@ -1406,7 +1430,10 @@ bool BLEDeviceManager::setAdvertiseBuffer(const bt_addr_le_t* bt_addr,
14061430 {
14071431 max_delta = timestamp_delta;
14081432 if (max_delta > 2000 ) // expired
1433+ {
14091434 index = i;
1435+ _peer_scan_rsp_data_len[index] = 0 ; // Invalid the scan response
1436+ }
14101437 }
14111438
14121439 if (bt_addr_le_cmp (temp, bt_addr) == 0 )
0 commit comments