summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/usb/libusb
diff options
context:
space:
mode:
authorJustin Dickow <jjdickow@gmail.com>2015-01-26 11:15:48 -0500
committerJustin Dickow <jjdickow@gmail.com>2015-01-26 11:15:48 -0500
commit46ed776c537131e72747538488b213cf45f23e22 (patch)
tree4cad1abf411addfd72ab591c93edeb5d225d9a39 /src/components/transport_manager/src/usb/libusb
parenta24079cb8de5563376dcf782cdb9fe3cae063841 (diff)
downloadsdl_core-46ed776c537131e72747538488b213cf45f23e22.tar.gz
Latest internal release - last bulk merge before pull request and gitflow!?
Smoke tested on Ubuntu 12.04 Signed-off-by: Justin Dickow <jjdickow@gmail.com>
Diffstat (limited to 'src/components/transport_manager/src/usb/libusb')
-rw-r--r--src/components/transport_manager/src/usb/libusb/platform_usb_device.cc2
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_connection.cc3
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_handler.cc52
3 files changed, 25 insertions, 32 deletions
diff --git a/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc b/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
index 1ca1a54b32..103e03a4f6 100644
--- a/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
+++ b/src/components/transport_manager/src/usb/libusb/platform_usb_device.cc
@@ -1,4 +1,4 @@
-/*
+/**
*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
diff --git a/src/components/transport_manager/src/usb/libusb/usb_connection.cc b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
index b8096514bc..40891d3513 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_connection.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
@@ -30,7 +30,6 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <pthread.h>
#include <unistd.h>
#include <iomanip>
@@ -52,7 +51,7 @@ CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
UsbConnection::UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
- const UsbHandlerSptr usb_handler,
+ const UsbHandlerSptr& usb_handler,
PlatformUsbDevice* device)
: device_uid_(device_uid),
app_handle_(app_handle),
diff --git a/src/components/transport_manager/src/usb/libusb/usb_handler.cc b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
index 776bb56c5d..eb0ffdb4dc 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
@@ -1,4 +1,4 @@
-/*
+/**
* \file usb_handler.cc
* \brief UsbHandler class source file.
*
@@ -39,9 +39,7 @@
#include "transport_manager/usb/common.h"
#include "transport_manager/transport_adapter/transport_adapter_impl.h"
-#include "utils/macro.h"
#include "utils/logger.h"
-#include "utils/threads/thread.h"
namespace transport_manager {
namespace transport_adapter {
@@ -77,16 +75,14 @@ class UsbHandler::ControlTransferSequenceState {
UsbHandler::UsbHandler()
: shutdown_requested_(false),
- thread_(NULL),
+ thread_(),
usb_device_listeners_(),
devices_(),
transfer_sequences_(),
device_handles_to_close_(),
libusb_context_(NULL),
arrived_callback_handle_(),
- left_callback_handle_() {
- thread_ = threads::CreateThread("UsbHandler", new UsbHandlerDelegate(this));
-}
+ left_callback_handle_() {}
UsbHandler::~UsbHandler() {
shutdown_requested_ = true;
@@ -95,15 +91,12 @@ UsbHandler::~UsbHandler() {
arrived_callback_handle_);
libusb_hotplug_deregister_callback(libusb_context_, left_callback_handle_);
}
- thread_->stop();
+ pthread_join(thread_, 0);
LOG4CXX_INFO(logger_, "UsbHandler thread finished");
if (libusb_context_) {
libusb_exit(libusb_context_);
libusb_context_ = 0;
}
- thread_->join();
- delete thread_->delegate();
- threads::DeleteThread(thread_);
}
void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
@@ -216,6 +209,11 @@ void UsbHandler::CloseDeviceHandle(libusb_device_handle* device_handle) {
device_handles_to_close_.push_back(device_handle);
}
+void* UsbHandlerThread(void* data) {
+ static_cast<UsbHandler*>(data)->Thread();
+ return 0;
+}
+
int ArrivedCallback(libusb_context* context, libusb_device* device,
libusb_hotplug_event event, void* data) {
LOG4CXX_TRACE(logger_, "enter. libusb device arrived (bus number "
@@ -288,12 +286,19 @@ TransportAdapter::Error UsbHandler::Init() {
return TransportAdapter::FAIL;
}
- if (!thread_->start()) {
- LOG4CXX_ERROR(logger_, "USB device scanner thread start failed, error code");
+ const int thread_start_error =
+ pthread_create(&thread_, 0, &UsbHandlerThread, this);
+ if (0 != thread_start_error) {
+ LOG4CXX_ERROR(logger_, "USB device scanner thread start failed, error code "
+ << thread_start_error);
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL.");
+ "exit with TransportAdapter::FAIL. Condition: 0 !== thread_start_error");
return TransportAdapter::FAIL;
}
+ LOG4CXX_INFO(logger_, "UsbHandler thread started");
+ pthread_setname_np(thread_, "UsbHandler" );
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::OK. Condition: 0 == thread_start_error");
return TransportAdapter::OK;
}
@@ -352,13 +357,13 @@ void UsbHandler::SubmitControlTransfer(
assert(transfer->Type() == UsbControlTransfer::VENDOR);
const libusb_request_type request_type = LIBUSB_REQUEST_TYPE_VENDOR;
- libusb_endpoint_direction endpoint_direction = LIBUSB_ENDPOINT_IN;
+ libusb_endpoint_direction endpoint_direction;
if (transfer->Direction() == UsbControlTransfer::IN) {
endpoint_direction = LIBUSB_ENDPOINT_IN;
} else if (transfer->Direction() == UsbControlTransfer::OUT) {
endpoint_direction = LIBUSB_ENDPOINT_OUT;
} else {
- NOTREACHED();
+ assert(0);
}
const uint8_t request = transfer->Request();
const uint16_t value = transfer->Value();
@@ -465,16 +470,5 @@ void UsbHandler::ControlTransferSequenceState::Finish() {
finished_ = true;
}
-UsbHandler::UsbHandlerDelegate::UsbHandlerDelegate(
- UsbHandler* handler)
- : handler_(handler) {
-}
-
-void UsbHandler::UsbHandlerDelegate::threadMain() {
- LOG4CXX_AUTO_TRACE(logger_);
- DCHECK(handler_);
- handler_->Thread();
-}
-
-} // namespace transport_adapter
-} // namespace transport_manager
+} // namespace
+} // namespace