summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/bluetooth/bluetooth_device_scanner.cc
diff options
context:
space:
mode:
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.cc161
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
-