summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRomanReznichenkoLuxoft <85177915+RomanReznichenkoLuxoft@users.noreply.github.com>2022-01-13 22:28:49 +0200
committerGitHub <noreply@github.com>2022-01-13 15:28:49 -0500
commit8f1ccb296f484f3aee1bfd56c83a963434a0fad9 (patch)
treec63bf6b82a4209e3c63fb3042ffb34b07a534ce3
parent525abcc8e797e002bbf48444fe3bff931a89dc10 (diff)
downloadsdl_core-8f1ccb296f484f3aee1bfd56c83a963434a0fad9.tar.gz
Cyclic UpdateDeviceList and UpdateAppList in case device is connected (#3835)
* Added a check to make the script does not work when there is not device
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc44
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc3
2 files changed, 37 insertions, 10 deletions
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
index ce0c2900b7..11c6c0c79f 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
@@ -206,10 +206,19 @@ void BluetoothDeviceScanner::DoInquiry() {
SDL_LOG_INFO("Check rfcomm channel on " << paired_devices_.size()
<< " paired devices.");
- paired_devices_with_sdl_.clear();
CheckSDLServiceOnDevices(
paired_devices_, device_handle, &paired_devices_with_sdl_);
- UpdateTotalDeviceList();
+ const bool new_connect =
+ paired_devices_with_sdl_.end() !=
+ std::find_if(paired_devices_with_sdl_.begin(),
+ paired_devices_with_sdl_.end(),
+ [](DeviceSptr devicePtr) {
+ return devicePtr->connection_status() !=
+ ConnectionStatus::CONNECTED;
+ });
+ if (new_connect) {
+ UpdateTotalDeviceList();
+ }
controller_->FindNewApplicationsRequest();
@@ -249,13 +258,30 @@ void BluetoothDeviceScanner::CheckSDLServiceOnDevices(
deviceName[name_len - 1] = '\0';
}
- auto bluetooth_device = std::make_shared<BluetoothDevice>(
- bd_address, deviceName, sdl_rfcomm_channels[i]);
- if (bluetooth_device) {
- SDL_LOG_INFO("Bluetooth device created successfully");
- discovered_devices->push_back(bluetooth_device);
- } else {
- SDL_LOG_WARN("Can't create bluetooth device " << deviceName);
+ auto it_device =
+ std::find_if(discovered_devices->begin(),
+ discovered_devices->end(),
+ [bd_address](DeviceSptr device) {
+ return device->unique_device_id() ==
+ BluetoothDevice::GetUniqueDeviceId(bd_address);
+ });
+
+ const bool is_new_device = (it_device == discovered_devices->end());
+ const bool is_new_rfcomm_channel =
+ !is_new_device && (*it_device)->GetApplicationList().size() !=
+ sdl_rfcomm_channels[i].size();
+ if (is_new_device || is_new_rfcomm_channel) {
+ if (!is_new_device) {
+ discovered_devices->erase(it_device);
+ }
+ auto bluetooth_device = std::make_shared<BluetoothDevice>(
+ bd_address, deviceName, sdl_rfcomm_channels[i]);
+ if (bluetooth_device) {
+ SDL_LOG_INFO("Bluetooth device created successfully");
+ discovered_devices->push_back(bluetooth_device);
+ } else {
+ SDL_LOG_WARN("Can't create bluetooth device " << deviceName);
+ }
}
}
SDL_LOG_TRACE("exit");
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index 447aa6c8ff..c6412fe141 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -273,7 +273,8 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(
retry_timer_pool_.push(std::make_pair(retry_timer, device_handle));
retry_timer->Start(get_settings().cloud_app_retry_timeout(),
timer::kSingleShot);
- } else if (OK == err) {
+ } else if (OK == err &&
+ ConnectionStatus::CONNECTED != device->connection_status()) {
ConnectionStatusUpdated(device, ConnectionStatus::CONNECTED);
}
SDL_LOG_TRACE("exit with error: " << err);