diff options
author | RomanReznichenkoLuxoft <85177915+RomanReznichenkoLuxoft@users.noreply.github.com> | 2022-01-13 22:28:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-13 15:28:49 -0500 |
commit | 8f1ccb296f484f3aee1bfd56c83a963434a0fad9 (patch) | |
tree | c63bf6b82a4209e3c63fb3042ffb34b07a534ce3 | |
parent | 525abcc8e797e002bbf48444fe3bff931a89dc10 (diff) | |
download | sdl_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.cc | 44 | ||||
-rw-r--r-- | src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc | 3 |
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); |