diff options
Diffstat (limited to 'src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc')
-rw-r--r-- | src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc | 161 |
1 files changed, 96 insertions, 65 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 c422d895d0..85e6dc3f96 100644 --- a/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc +++ b/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc @@ -92,35 +92,49 @@ int FindPairedDevs(std::vector<bdaddr_t>* result) { result->push_back(address); } } - delete [] buffer; + delete[] buffer; buffer = new char[1028]; } pclose(pipe); LOG4CXX_TRACE(logger_, "exit with 0"); - delete [] buffer; + delete[] buffer; return 0; } } // namespace BluetoothDeviceScanner::BluetoothDeviceScanner( - TransportAdapterController* controller, bool auto_repeat_search, - int auto_repeat_pause_sec) - : controller_(controller), - thread_(NULL), - shutdown_requested_(false), - ready_(true), - device_scan_requested_(false), - device_scan_requested_lock_(), - device_scan_requested_cv_(), - auto_repeat_search_(auto_repeat_search), - auto_repeat_pause_sec_(auto_repeat_pause_sec) { - uint8_t smart_device_link_service_uuid_data[] = { 0x93, 0x6D, 0xA0, 0x1F, - 0x9A, 0xBD, 0x4D, 0x9D, 0x80, 0xC7, 0x02, 0xAF, 0x85, 0xC8, 0x22, 0xA8 - }; + TransportAdapterController* controller, + bool auto_repeat_search, + int auto_repeat_pause_sec) + : controller_(controller) + , thread_(NULL) + , shutdown_requested_(false) + , ready_(true) + , device_scan_requested_(false) + , device_scan_requested_lock_() + , device_scan_requested_cv_() + , auto_repeat_search_(auto_repeat_search) + , auto_repeat_pause_sec_(auto_repeat_pause_sec) { + uint8_t smart_device_link_service_uuid_data[] = {0x93, + 0x6D, + 0xA0, + 0x1F, + 0x9A, + 0xBD, + 0x4D, + 0x9D, + 0x80, + 0xC7, + 0x02, + 0xAF, + 0x85, + 0xC8, + 0x22, + 0xA8}; sdp_uuid128_create(&smart_device_link_service_uuid_, smart_device_link_service_uuid_data); thread_ = threads::CreateThread("BT Device Scaner", - new BluetoothDeviceScannerDelegate(this)); + new BluetoothDeviceScannerDelegate(this)); } BluetoothDeviceScanner::~BluetoothDeviceScanner() { @@ -129,7 +143,6 @@ BluetoothDeviceScanner::~BluetoothDeviceScanner() { threads::DeleteThread(thread_); } - bool BluetoothDeviceScanner::IsInitialised() const { return thread_ && thread_->is_running(); } @@ -137,9 +150,11 @@ bool BluetoothDeviceScanner::IsInitialised() const { void BluetoothDeviceScanner::UpdateTotalDeviceList() { LOG4CXX_AUTO_TRACE(logger_); DeviceVector devices; - devices.insert(devices.end(), paired_devices_with_sdl_.begin(), + devices.insert(devices.end(), + paired_devices_with_sdl_.begin(), paired_devices_with_sdl_.end()); - devices.insert(devices.end(), found_devices_with_sdl_.begin(), + devices.insert(devices.end(), + found_devices_with_sdl_.begin(), found_devices_with_sdl_.end()); controller_->SearchDeviceDone(devices); } @@ -169,12 +184,13 @@ void BluetoothDeviceScanner::DoInquiry() { } } - LOG4CXX_INFO(logger_, "Check rfcomm channel on " - << paired_devices_.size() << " paired devices."); + LOG4CXX_INFO(logger_, + "Check rfcomm channel on " << paired_devices_.size() + << " paired devices."); paired_devices_with_sdl_.clear(); - CheckSDLServiceOnDevices(paired_devices_, device_handle, - &paired_devices_with_sdl_); + CheckSDLServiceOnDevices( + paired_devices_, device_handle, &paired_devices_with_sdl_); UpdateTotalDeviceList(); LOG4CXX_INFO(logger_, "Starting hci_inquiry on device " << device_id); @@ -182,20 +198,23 @@ void BluetoothDeviceScanner::DoInquiry() { const size_t max_devices = 256u; inquiry_info* inquiry_info_list = new inquiry_info[max_devices]; - const int number_of_devices = hci_inquiry(device_id, inquiry_time, - max_devices, 0, &inquiry_info_list, - IREQ_CACHE_FLUSH); + const int number_of_devices = hci_inquiry(device_id, + inquiry_time, + max_devices, + 0, + &inquiry_info_list, + IREQ_CACHE_FLUSH); if (number_of_devices >= 0) { LOG4CXX_INFO(logger_, "hci_inquiry: found " << number_of_devices << " devices"); - std::vector < bdaddr_t > found_devices(number_of_devices); + std::vector<bdaddr_t> found_devices(number_of_devices); for (int i = 0; i < number_of_devices; ++i) { found_devices[i] = inquiry_info_list[i].bdaddr; } found_devices_with_sdl_.clear(); - CheckSDLServiceOnDevices(found_devices, device_handle, - &found_devices_with_sdl_); + CheckSDLServiceOnDevices( + found_devices, device_handle, &found_devices_with_sdl_); } UpdateTotalDeviceList(); controller_->FindNewApplicationsRequest(); @@ -210,12 +229,15 @@ void BluetoothDeviceScanner::DoInquiry() { } void BluetoothDeviceScanner::CheckSDLServiceOnDevices( - const std::vector<bdaddr_t>& bd_addresses, int device_handle, - DeviceVector* discovered_devices) { - LOG4CXX_TRACE(logger_, "enter. bd_addresses: " << &bd_addresses << ", device_handle: " << - device_handle << ", discovered_devices: " << discovered_devices); + const std::vector<bdaddr_t>& bd_addresses, + int device_handle, + DeviceVector* discovered_devices) { + LOG4CXX_TRACE(logger_, + "enter. bd_addresses: " + << &bd_addresses << ", device_handle: " << device_handle + << ", discovered_devices: " << discovered_devices); std::vector<RfcommChannelVector> sdl_rfcomm_channels = - DiscoverSmartDeviceLinkRFCOMMChannels(bd_addresses); + DiscoverSmartDeviceLinkRFCOMMChannels(bd_addresses); for (size_t i = 0; i < bd_addresses.size(); ++i) { if (sdl_rfcomm_channels[i].empty()) { @@ -224,9 +246,12 @@ void BluetoothDeviceScanner::CheckSDLServiceOnDevices( const bdaddr_t& bd_address = bd_addresses[i]; char deviceName[256]; - int hci_read_remote_name_ret = hci_read_remote_name( - device_handle, &bd_address, sizeof(deviceName) / sizeof(deviceName[0]), - deviceName, 0); + int hci_read_remote_name_ret = + hci_read_remote_name(device_handle, + &bd_address, + sizeof(deviceName) / sizeof(deviceName[0]), + deviceName, + 0); if (hci_read_remote_name_ret != 0) { LOG4CXX_ERROR_WITH_ERRNO(logger_, "hci_read_remote_name failed"); @@ -235,8 +260,8 @@ void BluetoothDeviceScanner::CheckSDLServiceOnDevices( sizeof(deviceName) / sizeof(deviceName[0])); } - Device* bluetooth_device = new BluetoothDevice(bd_address, deviceName, - sdl_rfcomm_channels[i]); + Device* bluetooth_device = + new BluetoothDevice(bd_address, deviceName, sdl_rfcomm_channels[i]); if (bluetooth_device) { LOG4CXX_INFO(logger_, "Bluetooth device created successfully"); discovered_devices->push_back(bluetooth_device); @@ -249,7 +274,7 @@ void BluetoothDeviceScanner::CheckSDLServiceOnDevices( std::vector<BluetoothDeviceScanner::RfcommChannelVector> BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( - const std::vector<bdaddr_t>& device_addresses) { + const std::vector<bdaddr_t>& device_addresses) { LOG4CXX_TRACE(logger_, "enter device_addresses: " << &device_addresses); const size_t size = device_addresses.size(); std::vector<RfcommChannelVector> result(size); @@ -264,7 +289,7 @@ BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( continue; } const bool final = DiscoverSmartDeviceLinkRFCOMMChannels( - device_addresses[i], &result[i]); + device_addresses[i], &result[i]); if (final) { processed[i] = true; ++processed_count; @@ -275,18 +300,21 @@ BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( } sleep(attempt_timeout); } - LOG4CXX_TRACE(logger_, "exit with vector<RfcommChannelVector>: size = " << result.size()); + LOG4CXX_TRACE( + logger_, + "exit with vector<RfcommChannelVector>: size = " << result.size()); return result; } bool BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( - const bdaddr_t& device_address, RfcommChannelVector* channels) { - LOG4CXX_TRACE(logger_, "enter. device_address: " << &device_address << ", channels: " << - channels); - static bdaddr_t any_address = { { 0, 0, 0, 0, 0, 0 } }; + const bdaddr_t& device_address, RfcommChannelVector* channels) { + LOG4CXX_TRACE(logger_, + "enter. device_address: " << &device_address + << ", channels: " << channels); + static bdaddr_t any_address = {{0, 0, 0, 0, 0, 0}}; sdp_session_t* sdp_session = sdp_connect( - &any_address, &device_address, SDP_RETRY_IF_BUSY | SDP_WAIT_ON_CLOSE); + &any_address, &device_address, SDP_RETRY_IF_BUSY | SDP_WAIT_ON_CLOSE); if (sdp_session == 0) { bool result = !(errno == 31 || errno == 16 || errno == 117 || errno == 114); if (result) { @@ -297,14 +325,16 @@ bool BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( return result; } - sdp_list_t* search_list = sdp_list_append(0, - &smart_device_link_service_uuid_); + sdp_list_t* search_list = + sdp_list_append(0, &smart_device_link_service_uuid_); uint32_t range = 0x0000ffff; sdp_list_t* attr_list = sdp_list_append(0, &range); sdp_list_t* response_list = 0; - if (0 == sdp_service_search_attr_req(sdp_session, search_list, - SDP_ATTR_REQ_RANGE, attr_list, + if (0 == sdp_service_search_attr_req(sdp_session, + search_list, + SDP_ATTR_REQ_RANGE, + attr_list, &response_list)) { for (sdp_list_t* r = response_list; 0 != r; r = r->next) { sdp_record_t* sdp_record = static_cast<sdp_record_t*>(r->data); @@ -352,21 +382,23 @@ bool BluetoothDeviceScanner::DiscoverSmartDeviceLinkRFCOMMChannels( std::stringstream rfcomm_channels_string; for (RfcommChannelVector::const_iterator it = channels->begin(); - it != channels->end(); ++it) { + it != channels->end(); + ++it) { if (it != channels->begin()) { rfcomm_channels_string << ", "; } rfcomm_channels_string << static_cast<uint32_t>(*it); } - LOG4CXX_INFO(logger_, - "SmartDeviceLink service was discovered on device " - << BluetoothDevice::GetUniqueDeviceId(device_address) - << " at channel(s): " << rfcomm_channels_string.str().c_str()); + LOG4CXX_INFO( + logger_, + "SmartDeviceLink service was discovered on device " + << BluetoothDevice::GetUniqueDeviceId(device_address) + << " at channel(s): " << rfcomm_channels_string.str().c_str()); } else { LOG4CXX_INFO(logger_, "SmartDeviceLink service was not discovered on device " - << BluetoothDevice::GetUniqueDeviceId(device_address)); + << BluetoothDevice::GetUniqueDeviceId(device_address)); } LOG4CXX_TRACE(logger_, "exit with TRUE"); return true; @@ -410,7 +442,8 @@ void BluetoothDeviceScanner::TimedWaitForDeviceScanRequest() { sync_primitives::AutoLock auto_lock(device_scan_requested_lock_); while (!(device_scan_requested_ || shutdown_requested_)) { const sync_primitives::ConditionalVariable::WaitStatus wait_status = - device_scan_requested_cv_.WaitFor(auto_lock, auto_repeat_pause_sec_ * 1000); + device_scan_requested_cv_.WaitFor(auto_lock, + auto_repeat_pause_sec_ * 1000); if (wait_status == sync_primitives::ConditionalVariable::kTimeout) { LOG4CXX_INFO(logger_, "Bluetooth scanner timeout, performing scan"); device_scan_requested_ = true; @@ -421,7 +454,7 @@ void BluetoothDeviceScanner::TimedWaitForDeviceScanRequest() { TransportAdapter::Error BluetoothDeviceScanner::Init() { LOG4CXX_AUTO_TRACE(logger_); - if(!thread_->start()) { + if (!thread_->start()) { LOG4CXX_ERROR(logger_, "Bluetooth device scanner thread start failed"); return TransportAdapter::FAIL; } @@ -468,10 +501,9 @@ TransportAdapter::Error BluetoothDeviceScanner::Scan() { return ret; } -BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::BluetoothDeviceScannerDelegate( - BluetoothDeviceScanner* scanner) - : scanner_(scanner) { -} +BluetoothDeviceScanner::BluetoothDeviceScannerDelegate:: + BluetoothDeviceScannerDelegate(BluetoothDeviceScanner* scanner) + : scanner_(scanner) {} void BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::threadMain() { LOG4CXX_AUTO_TRACE(logger_); @@ -481,4 +513,3 @@ void BluetoothDeviceScanner::BluetoothDeviceScannerDelegate::threadMain() { } // namespace transport_adapter } // namespace transport_manager - |