summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/usb/libusb
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/src/usb/libusb')
-rw-r--r--src/components/transport_manager/src/usb/libusb/platform_usb_device.cc30
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_connection.cc168
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_handler.cc222
3 files changed, 246 insertions, 174 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..33709cf0f6 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
@@ -41,27 +41,29 @@ namespace transport_adapter {
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
-
PlatformUsbDevice::PlatformUsbDevice(
- uint8_t bus_number, uint8_t address,
- const libusb_device_descriptor& device_descriptor,
- libusb_device* device_libusb, libusb_device_handle* device_handle_libusb)
- : bus_number_(bus_number),
- address_(address),
- vendor_id_(device_descriptor.idVendor),
- product_id_(device_descriptor.idProduct),
- device_descriptor_(device_descriptor),
- libusb_device_handle_(device_handle_libusb),
- libusb_device_(device_libusb) {}
+ uint8_t bus_number,
+ uint8_t address,
+ const libusb_device_descriptor& device_descriptor,
+ libusb_device* device_libusb,
+ libusb_device_handle* device_handle_libusb)
+ : bus_number_(bus_number)
+ , address_(address)
+ , vendor_id_(device_descriptor.idVendor)
+ , product_id_(device_descriptor.idProduct)
+ , device_descriptor_(device_descriptor)
+ , libusb_device_handle_(device_handle_libusb)
+ , libusb_device_(device_libusb) {}
std::string PlatformUsbDevice::GetDescString(uint8_t index) const {
LOG4CXX_TRACE(logger_, "enter. index: " << int(index));
unsigned char buf[128];
const int libusb_ret = libusb_get_string_descriptor_ascii(
- libusb_device_handle_, index, buf, sizeof(buf));
+ libusb_device_handle_, index, buf, sizeof(buf));
if (libusb_ret < 0) {
- LOG4CXX_ERROR(logger_, "Failed to get USB string descriptor: "
- << libusb_error_name(libusb_ret));
+ LOG4CXX_ERROR(logger_,
+ "Failed to get USB string descriptor: "
+ << libusb_error_name(libusb_ret));
LOG4CXX_TRACE(logger_, "exit with empty string");
return "";
}
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..409209b2b2 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_connection.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
@@ -48,32 +48,30 @@ namespace transport_adapter {
CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
-
UsbConnection::UsbConnection(const DeviceUID& device_uid,
const ApplicationHandle& app_handle,
TransportAdapterController* controller,
const UsbHandlerSptr usb_handler,
PlatformUsbDevice* device)
- : device_uid_(device_uid),
- app_handle_(app_handle),
- controller_(controller),
- usb_handler_(usb_handler),
- libusb_device_(device->GetLibusbDevice()),
- device_handle_(device->GetLibusbHandle()),
- in_endpoint_(0),
- in_endpoint_max_packet_size_(0),
- out_endpoint_(0),
- out_endpoint_max_packet_size_(0),
- in_buffer_(NULL),
- in_transfer_(NULL),
- out_transfer_(0),
- out_messages_(),
- current_out_message_(),
- bytes_sent_(0),
- disconnecting_(false),
- waiting_in_transfer_cancel_(false),
- waiting_out_transfer_cancel_(false) {
-}
+ : device_uid_(device_uid)
+ , app_handle_(app_handle)
+ , controller_(controller)
+ , usb_handler_(usb_handler)
+ , libusb_device_(device->GetLibusbDevice())
+ , device_handle_(device->GetLibusbHandle())
+ , in_endpoint_(0)
+ , in_endpoint_max_packet_size_(0)
+ , out_endpoint_(0)
+ , out_endpoint_max_packet_size_(0)
+ , in_buffer_(NULL)
+ , in_transfer_(NULL)
+ , out_transfer_(0)
+ , out_messages_()
+ , current_out_message_()
+ , bytes_sent_(0)
+ , disconnecting_(false)
+ , waiting_in_transfer_cancel_(false)
+ , waiting_out_transfer_cancel_(false) {}
UsbConnection::~UsbConnection() {
LOG4CXX_TRACE(logger_, "enter with this" << this);
@@ -94,22 +92,30 @@ void OutTransferCallback(libusb_transfer* transfer) {
bool UsbConnection::PostInTransfer() {
LOG4CXX_TRACE(logger_, "enter");
- libusb_fill_bulk_transfer(in_transfer_, device_handle_, in_endpoint_,
- in_buffer_, in_endpoint_max_packet_size_,
- InTransferCallback, this, 0);
+ libusb_fill_bulk_transfer(in_transfer_,
+ device_handle_,
+ in_endpoint_,
+ in_buffer_,
+ in_endpoint_max_packet_size_,
+ InTransferCallback,
+ this,
+ 0);
const int libusb_ret = libusb_submit_transfer(in_transfer_);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_ERROR(logger_, "libusb_submit_transfer failed: "
- << libusb_error_name(libusb_ret));
- LOG4CXX_TRACE(logger_,
- "exit with FALSE. Condition: LIBUSB_SUCCESS != libusb_submit_transfer");
+ LOG4CXX_ERROR(
+ logger_,
+ "libusb_submit_transfer failed: " << libusb_error_name(libusb_ret));
+ LOG4CXX_TRACE(
+ logger_,
+ "exit with FALSE. Condition: LIBUSB_SUCCESS != libusb_submit_transfer");
return false;
}
LOG4CXX_TRACE(logger_, "exit with TRUE");
return true;
}
-std::string hex_data(const unsigned char* const buffer, const int actual_length) {
+std::string hex_data(const unsigned char* const buffer,
+ const int actual_length) {
std::ostringstream hexdata;
for (int i = 0; i < actual_length; ++i) {
hexdata << " " << std::hex << std::setw(2) << std::setfill('0')
@@ -122,23 +128,26 @@ void UsbConnection::OnInTransfer(libusb_transfer* transfer) {
LOG4CXX_TRACE(logger_, "enter with Libusb_transfer*: " << transfer);
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
LOG4CXX_DEBUG(logger_,
- "USB incoming transfer, size:" << transfer->actual_length
- << ", data:" << hex_data(transfer->buffer, transfer->actual_length));
+ "USB incoming transfer, size:"
+ << transfer->actual_length << ", data:"
+ << hex_data(transfer->buffer, transfer->actual_length));
::protocol_handler::RawMessagePtr data(new protocol_handler::RawMessage(
- 0, 0, in_buffer_, transfer->actual_length));
+ 0, 0, in_buffer_, transfer->actual_length));
controller_->DataReceiveDone(device_uid_, app_handle_, data);
} else {
- LOG4CXX_ERROR(logger_, "USB incoming transfer failed: "
- << libusb_error_name(transfer->status));
- controller_->DataReceiveFailed(device_uid_, app_handle_,
- DataReceiveError());
+ LOG4CXX_ERROR(logger_,
+ "USB incoming transfer failed: "
+ << libusb_error_name(transfer->status));
+ controller_->DataReceiveFailed(
+ device_uid_, app_handle_, DataReceiveError());
}
if (disconnecting_) {
waiting_in_transfer_cancel_ = false;
} else {
if (!PostInTransfer()) {
- LOG4CXX_ERROR(logger_, "USB incoming transfer failed with "
- << "LIBUSB_TRANSFER_NO_DEVICE. Abort connection.");
+ LOG4CXX_ERROR(logger_,
+ "USB incoming transfer failed with "
+ << "LIBUSB_TRANSFER_NO_DEVICE. Abort connection.");
AbortConnection();
}
}
@@ -166,17 +175,24 @@ bool UsbConnection::PostOutTransfer() {
LOG4CXX_TRACE(logger_, "exit with FALSE. Condition: 0 == out_transfer_");
return false;
}
- libusb_fill_bulk_transfer(out_transfer_, device_handle_, out_endpoint_,
+ libusb_fill_bulk_transfer(out_transfer_,
+ device_handle_,
+ out_endpoint_,
current_out_message_->data() + bytes_sent_,
current_out_message_->data_size() - bytes_sent_,
- OutTransferCallback, this, 0);
+ OutTransferCallback,
+ this,
+ 0);
const int libusb_ret = libusb_submit_transfer(out_transfer_);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_ERROR(logger_, "libusb_submit_transfer failed: "
- << libusb_error_name(libusb_ret) << ". Abort connection.");
+ LOG4CXX_ERROR(
+ logger_,
+ "libusb_submit_transfer failed: " << libusb_error_name(libusb_ret)
+ << ". Abort connection.");
AbortConnection();
- LOG4CXX_TRACE(logger_, "exit with FALSE. Condition: "
- << "LIBUSB_SUCCESS != libusb_fill_bulk_transfer");
+ LOG4CXX_TRACE(logger_,
+ "exit with FALSE. Condition: "
+ << "LIBUSB_SUCCESS != libusb_fill_bulk_transfer");
return false;
}
LOG4CXX_TRACE(logger_, "exit with TRUE");
@@ -189,16 +205,18 @@ void UsbConnection::OnOutTransfer(libusb_transfer* transfer) {
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
bytes_sent_ += transfer->actual_length;
if (bytes_sent_ == current_out_message_->data_size()) {
- LOG4CXX_DEBUG(logger_, "USB out transfer, data sent: "
- << current_out_message_.get());
+ LOG4CXX_DEBUG(
+ logger_,
+ "USB out transfer, data sent: " << current_out_message_.get());
controller_->DataSendDone(device_uid_, app_handle_, current_out_message_);
PopOutMessage();
}
} else {
- LOG4CXX_ERROR(logger_, "USB out transfer failed: "
- << libusb_error_name(transfer->status));
- controller_->DataSendFailed(device_uid_, app_handle_, current_out_message_,
- DataSendError());
+ LOG4CXX_ERROR(
+ logger_,
+ "USB out transfer failed: " << libusb_error_name(transfer->status));
+ controller_->DataSendFailed(
+ device_uid_, app_handle_, current_out_message_, DataSendError());
PopOutMessage();
}
if (!current_out_message_.valid()) {
@@ -209,11 +227,13 @@ void UsbConnection::OnOutTransfer(libusb_transfer* transfer) {
LOG4CXX_TRACE(logger_, "exit");
}
-TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePtr message) {
+TransportAdapter::Error UsbConnection::SendData(
+ ::protocol_handler::RawMessagePtr message) {
LOG4CXX_TRACE(logger_, "enter with RawMessagePtr: " << message.get());
if (disconnecting_) {
- LOG4CXX_TRACE(logger_, "exit with TransportAdapter::BAD_STATE. Condition: "
- << "disconnecting_");
+ LOG4CXX_TRACE(logger_,
+ "exit with TransportAdapter::BAD_STATE. Condition: "
+ << "disconnecting_");
return TransportAdapter::BAD_STATE;
}
sync_primitives::AutoLock locker(out_messages_mutex_);
@@ -222,9 +242,11 @@ TransportAdapter::Error UsbConnection::SendData(::protocol_handler::RawMessagePt
} else {
current_out_message_ = message;
if (!PostOutTransfer()) {
- controller_->DataSendFailed(device_uid_, app_handle_, message,
- DataSendError());
- LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL. Condition: !PostOutTransfer()");
+ controller_->DataSendFailed(
+ device_uid_, app_handle_, message, DataSendError());
+ LOG4CXX_TRACE(
+ logger_,
+ "exit with TransportAdapter::FAIL. Condition: !PostOutTransfer()");
return TransportAdapter::FAIL;
}
}
@@ -240,19 +262,22 @@ void UsbConnection::Finalise() {
disconnecting_ = true;
if (out_transfer_) {
waiting_out_transfer_cancel_ = true;
- if ( LIBUSB_SUCCESS != libusb_cancel_transfer(out_transfer_)) {
+ if (LIBUSB_SUCCESS != libusb_cancel_transfer(out_transfer_)) {
waiting_out_transfer_cancel_ = false;
}
}
if (in_transfer_) {
waiting_in_transfer_cancel_ = true;
- if ( LIBUSB_SUCCESS != libusb_cancel_transfer(in_transfer_)) {
+ if (LIBUSB_SUCCESS != libusb_cancel_transfer(in_transfer_)) {
waiting_in_transfer_cancel_ = false;
}
}
- for (std::list<protocol_handler::RawMessagePtr>::iterator it = out_messages_.begin();
- it != out_messages_.end(); it = out_messages_.erase(it)) {
- controller_->DataSendFailed(device_uid_, app_handle_, *it, DataSendError());
+ for (std::list<protocol_handler::RawMessagePtr>::iterator it =
+ out_messages_.begin();
+ it != out_messages_.end();
+ it = out_messages_.erase(it)) {
+ controller_->DataSendFailed(
+ device_uid_, app_handle_, *it, DataSendError());
}
}
while (waiting_in_transfer_cancel_ || waiting_out_transfer_cancel_) {
@@ -263,7 +288,8 @@ void UsbConnection::Finalise() {
void UsbConnection::AbortConnection() {
LOG4CXX_TRACE(logger_, "enter");
- controller_->ConnectionAborted(device_uid_, app_handle_, CommunicationError());
+ controller_->ConnectionAborted(
+ device_uid_, app_handle_, CommunicationError());
Disconnect();
LOG4CXX_TRACE(logger_, "exit");
}
@@ -292,8 +318,8 @@ bool UsbConnection::Init() {
controller_->ConnectDone(device_uid_, app_handle_);
if (!PostInTransfer()) {
LOG4CXX_ERROR(logger_, "PostInTransfer failed. Call ConnectionAborted");
- controller_->ConnectionAborted(device_uid_, app_handle_,
- CommunicationError());
+ controller_->ConnectionAborted(
+ device_uid_, app_handle_, CommunicationError());
LOG4CXX_TRACE(logger_, "exit with FALSE. Condition: !PostInTransfer()");
return false;
}
@@ -306,11 +332,13 @@ bool UsbConnection::FindEndpoints() {
LOG4CXX_TRACE(logger_, "enter");
struct libusb_config_descriptor* config;
const int libusb_ret =
- libusb_get_active_config_descriptor(libusb_device_, &config);
+ libusb_get_active_config_descriptor(libusb_device_, &config);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_ERROR(logger_, "libusb_get_active_config_descriptor failed: "
- << libusb_error_name(libusb_ret));
- LOG4CXX_TRACE(logger_, "exit with FALSE. Condition: LIBUSB_SUCCESS != libusb_ret");
+ LOG4CXX_ERROR(logger_,
+ "libusb_get_active_config_descriptor failed: "
+ << libusb_error_name(libusb_ret));
+ LOG4CXX_TRACE(logger_,
+ "exit with FALSE. Condition: LIBUSB_SUCCESS != libusb_ret");
return false;
}
@@ -323,10 +351,10 @@ bool UsbConnection::FindEndpoints() {
const libusb_interface_descriptor& iface_desc = interface.altsetting[i];
for (int i = 0; i < iface_desc.bNumEndpoints; ++i) {
const libusb_endpoint_descriptor& endpoint_desc =
- iface_desc.endpoint[i];
+ iface_desc.endpoint[i];
const uint8_t endpoint_dir =
- endpoint_desc.bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK;
+ endpoint_desc.bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK;
if (find_in_endpoint && endpoint_dir == LIBUSB_ENDPOINT_IN) {
in_endpoint_ = endpoint_desc.bEndpointAddress;
in_endpoint_max_packet_size_ = endpoint_desc.wMaxPacketSize;
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..c62e80d1be 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
@@ -76,15 +76,15 @@ class UsbHandler::ControlTransferSequenceState {
};
UsbHandler::UsbHandler()
- : shutdown_requested_(false),
- thread_(NULL),
- usb_device_listeners_(),
- devices_(),
- transfer_sequences_(),
- device_handles_to_close_(),
- libusb_context_(NULL),
- arrived_callback_handle_(),
- left_callback_handle_() {
+ : shutdown_requested_(false)
+ , thread_(NULL)
+ , 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));
}
@@ -113,7 +113,8 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_device_descriptor descriptor;
int libusb_ret = libusb_get_device_descriptor(device_libusb, &descriptor);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_ERROR(logger_, "libusb_get_device_descriptor failed: " << libusb_ret);
+ LOG4CXX_ERROR(logger_,
+ "libusb_get_device_descriptor failed: " << libusb_ret);
LOG4CXX_TRACE(logger_, "exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
}
@@ -121,7 +122,8 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_device_handle* device_handle_libusb;
libusb_ret = libusb_open(device_libusb, &device_handle_libusb);
if (libusb_ret != LIBUSB_SUCCESS) {
- LOG4CXX_ERROR(logger_, "libusb_open failed: " << libusb_error_name(libusb_ret));
+ LOG4CXX_ERROR(logger_,
+ "libusb_open failed: " << libusb_error_name(libusb_ret));
LOG4CXX_TRACE(logger_, "exit. Condition: libusb_ret != LIBUSB_SUCCESS");
return;
}
@@ -129,17 +131,20 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
int configuration;
libusb_ret = libusb_get_configuration(device_handle_libusb, &configuration);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_INFO(logger_, "libusb_get_configuration failed: " << libusb_error_name(
- libusb_ret));
+ LOG4CXX_INFO(
+ logger_,
+ "libusb_get_configuration failed: " << libusb_error_name(libusb_ret));
LOG4CXX_TRACE(logger_, "exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
}
if (configuration != kUsbConfiguration) {
- libusb_ret = libusb_set_configuration(device_handle_libusb, kUsbConfiguration);
+ libusb_ret =
+ libusb_set_configuration(device_handle_libusb, kUsbConfiguration);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_INFO(logger_, "libusb_set_configuration failed: " << libusb_error_name(
- libusb_ret));
+ LOG4CXX_INFO(
+ logger_,
+ "libusb_set_configuration failed: " << libusb_error_name(libusb_ret));
LOG4CXX_TRACE(logger_, "exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
}
@@ -147,20 +152,25 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_ret = libusb_claim_interface(device_handle_libusb, 0);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_INFO(logger_, "libusb_claim_interface failed: " << libusb_error_name(libusb_ret));
+ LOG4CXX_INFO(
+ logger_,
+ "libusb_claim_interface failed: " << libusb_error_name(libusb_ret));
CloseDeviceHandle(device_handle_libusb);
LOG4CXX_TRACE(logger_, "exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
}
- PlatformUsbDevice* device(new PlatformUsbDevice(bus_number, device_address,
- descriptor, device_libusb,
- device_handle_libusb));
+ PlatformUsbDevice* device(new PlatformUsbDevice(bus_number,
+ device_address,
+ descriptor,
+ device_libusb,
+ device_handle_libusb));
devices_.push_back(device);
for (std::list<UsbDeviceListener*>::iterator it =
- usb_device_listeners_.begin();
- it != usb_device_listeners_.end(); ++it) {
+ usb_device_listeners_.begin();
+ it != usb_device_listeners_.end();
+ ++it) {
(*it)->OnDeviceArrived(device);
}
LOG4CXX_TRACE(logger_, "exit");
@@ -181,8 +191,9 @@ void UsbHandler::DeviceLeft(libusb_device* device_libusb) {
}
for (std::list<UsbDeviceListener*>::iterator it =
- usb_device_listeners_.begin();
- it != usb_device_listeners_.end(); ++it) {
+ usb_device_listeners_.begin();
+ it != usb_device_listeners_.end();
+ ++it) {
(*it)->OnDeviceLeft(device);
}
@@ -202,12 +213,13 @@ void UsbHandler::DeviceLeft(libusb_device* device_libusb) {
}
void UsbHandler::StartControlTransferSequence(
- UsbControlTransferSequence* sequence, PlatformUsbDevice* device) {
- LOG4CXX_TRACE(logger_, "enter. UsbControlTransferSequence* " << sequence <<
- "PlatformUsbDevice* " << device);
+ UsbControlTransferSequence* sequence, PlatformUsbDevice* device) {
+ LOG4CXX_TRACE(logger_,
+ "enter. UsbControlTransferSequence* "
+ << sequence << "PlatformUsbDevice* " << device);
TransferSequences::iterator it = transfer_sequences_.insert(
- transfer_sequences_.end(),
- new ControlTransferSequenceState(this, sequence, device));
+ transfer_sequences_.end(),
+ new ControlTransferSequenceState(this, sequence, device));
SubmitControlTransfer(*it);
LOG4CXX_TRACE(logger_, "exit");
}
@@ -216,26 +228,32 @@ void UsbHandler::CloseDeviceHandle(libusb_device_handle* device_handle) {
device_handles_to_close_.push_back(device_handle);
}
-int ArrivedCallback(libusb_context* context, libusb_device* device,
- libusb_hotplug_event event, void* data) {
- LOG4CXX_TRACE(logger_, "enter. libusb device arrived (bus number "
- << static_cast<int>(libusb_get_bus_number(device))
- << ", device address "
- << static_cast<int>(
- libusb_get_device_address(device)) << ")");
+int ArrivedCallback(libusb_context* context,
+ libusb_device* device,
+ libusb_hotplug_event event,
+ void* data) {
+ LOG4CXX_TRACE(logger_,
+ "enter. libusb device arrived (bus number "
+ << static_cast<int>(libusb_get_bus_number(device))
+ << ", device address "
+ << static_cast<int>(libusb_get_device_address(device))
+ << ")");
UsbHandler* usb_handler = static_cast<UsbHandler*>(data);
usb_handler->DeviceArrived(device);
LOG4CXX_TRACE(logger_, "exit with 0");
return 0;
}
-int LeftCallback(libusb_context* context, libusb_device* device,
- libusb_hotplug_event event, void* data) {
- LOG4CXX_TRACE(logger_, "enter libusb device left (bus number "
- << static_cast<int>(libusb_get_bus_number(device))
- << ", device address "
- << static_cast<int>(
- libusb_get_device_address(device)) << ")");
+int LeftCallback(libusb_context* context,
+ libusb_device* device,
+ libusb_hotplug_event event,
+ void* data) {
+ LOG4CXX_TRACE(logger_,
+ "enter libusb device left (bus number "
+ << static_cast<int>(libusb_get_bus_number(device))
+ << ", device address "
+ << static_cast<int>(libusb_get_device_address(device))
+ << ")");
UsbHandler* usb_handler = static_cast<UsbHandler*>(data);
usb_handler->DeviceLeft(device);
LOG4CXX_TRACE(logger_, "exit with 0");
@@ -249,49 +267,63 @@ TransportAdapter::Error UsbHandler::Init() {
if (LIBUSB_SUCCESS != libusb_ret) {
LOG4CXX_ERROR(logger_, "libusb_init failed: " << libusb_ret);
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS != libusb_ret");
+ "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS "
+ "!= libusb_ret");
return TransportAdapter::FAIL;
}
if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
LOG4CXX_ERROR(logger_, "LIBUSB_CAP_HAS_HOTPLUG not supported");
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL. Condition: !libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)");
+ "exit with TransportAdapter::FAIL. Condition: "
+ "!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)");
return TransportAdapter::FAIL;
}
- libusb_ret = libusb_hotplug_register_callback(
- libusb_context_, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED,
- LIBUSB_HOTPLUG_ENUMERATE, LIBUSB_HOTPLUG_MATCH_ANY,
- LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, ArrivedCallback, this,
- &arrived_callback_handle_);
+ libusb_ret =
+ libusb_hotplug_register_callback(libusb_context_,
+ LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED,
+ LIBUSB_HOTPLUG_ENUMERATE,
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ ArrivedCallback,
+ this,
+ &arrived_callback_handle_);
if (LIBUSB_SUCCESS != libusb_ret) {
LOG4CXX_ERROR(logger_,
"libusb_hotplug_register_callback failed: " << libusb_ret);
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS != libusb_ret");
+ "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS "
+ "!= libusb_ret");
return TransportAdapter::FAIL;
}
- libusb_ret = libusb_hotplug_register_callback(
- libusb_context_, LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
- static_cast<libusb_hotplug_flag>(0), LIBUSB_HOTPLUG_MATCH_ANY,
- LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, LeftCallback, this,
- &left_callback_handle_);
+ libusb_ret =
+ libusb_hotplug_register_callback(libusb_context_,
+ LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
+ static_cast<libusb_hotplug_flag>(0),
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ LIBUSB_HOTPLUG_MATCH_ANY,
+ LeftCallback,
+ this,
+ &left_callback_handle_);
if (LIBUSB_SUCCESS != libusb_ret) {
LOG4CXX_ERROR(logger_,
"libusb_hotplug_register_callback failed: " << libusb_ret);
LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS != libusb_ret");
+ "exit with TransportAdapter::FAIL. Condition: LIBUSB_SUCCESS "
+ "!= libusb_ret");
return TransportAdapter::FAIL;
}
if (!thread_->start()) {
- LOG4CXX_ERROR(logger_, "USB device scanner thread start failed, error code");
- LOG4CXX_TRACE(logger_,
- "exit with TransportAdapter::FAIL.");
+ LOG4CXX_ERROR(logger_,
+ "USB device scanner thread start failed, error code");
+ LOG4CXX_TRACE(logger_, "exit with TransportAdapter::FAIL.");
return TransportAdapter::FAIL;
}
return TransportAdapter::OK;
@@ -315,7 +347,7 @@ void UsbHandler::Thread() {
}
for (std::list<libusb_device_handle*>::iterator it =
- device_handles_to_close_.begin();
+ device_handles_to_close_.begin();
it != device_handles_to_close_.end();
it = device_handles_to_close_.erase(it)) {
libusb_close(*it);
@@ -327,14 +359,16 @@ void UsbHandler::Thread() {
void UsbTransferSequenceCallback(libusb_transfer* transfer) {
LOG4CXX_TRACE(logger_, "enter. libusb_transfer* " << transfer);
UsbHandler::ControlTransferSequenceState* sequence_state =
- static_cast<UsbHandler::ControlTransferSequenceState*>(transfer->user_data);
+ static_cast<UsbHandler::ControlTransferSequenceState*>(
+ transfer->user_data);
sequence_state->usb_handler()->ControlTransferCallback(transfer);
LOG4CXX_TRACE(logger_, "exit");
}
void UsbHandler::SubmitControlTransfer(
- ControlTransferSequenceState* sequence_state) {
- LOG4CXX_TRACE(logger_, "enter. ControlTransferSequenceState* " << sequence_state);
+ ControlTransferSequenceState* sequence_state) {
+ LOG4CXX_TRACE(logger_,
+ "enter. ControlTransferSequenceState* " << sequence_state);
UsbControlTransfer* transfer = sequence_state->CurrentTransfer();
if (NULL == transfer) {
LOG4CXX_TRACE(logger_, "exit. Condition: NULL == transfer");
@@ -366,7 +400,7 @@ void UsbHandler::SubmitControlTransfer(
const uint16_t length = transfer->Length();
unsigned char* buffer =
- static_cast<unsigned char*>(malloc(length + LIBUSB_CONTROL_SETUP_SIZE));
+ static_cast<unsigned char*>(malloc(length + LIBUSB_CONTROL_SETUP_SIZE));
if (NULL == buffer) {
LOG4CXX_ERROR(logger_, "buffer allocation failed");
libusb_free_transfer(libusb_transfer);
@@ -375,22 +409,26 @@ void UsbHandler::SubmitControlTransfer(
return;
}
- libusb_fill_control_setup(buffer, request_type | endpoint_direction, request,
- value, index, length);
+ libusb_fill_control_setup(
+ buffer, request_type | endpoint_direction, request, value, index, length);
if (0 != length && endpoint_direction == LIBUSB_ENDPOINT_OUT) {
const char* data = static_cast<UsbControlOutTransfer*>(transfer)->Data();
memcpy(buffer + LIBUSB_CONTROL_SETUP_SIZE, data, length);
}
- libusb_fill_control_transfer(
- libusb_transfer, sequence_state->device()->GetLibusbHandle(), buffer,
- UsbTransferSequenceCallback, sequence_state, 0);
+ libusb_fill_control_transfer(libusb_transfer,
+ sequence_state->device()->GetLibusbHandle(),
+ buffer,
+ UsbTransferSequenceCallback,
+ sequence_state,
+ 0);
libusb_transfer->flags = LIBUSB_TRANSFER_FREE_BUFFER;
const int libusb_ret = libusb_submit_transfer(libusb_transfer);
if (LIBUSB_SUCCESS != libusb_ret) {
- LOG4CXX_ERROR(logger_, "libusb_submit_transfer failed: "
- << libusb_error_name(libusb_ret));
+ LOG4CXX_ERROR(
+ logger_,
+ "libusb_submit_transfer failed: " << libusb_error_name(libusb_ret));
libusb_free_transfer(libusb_transfer);
sequence_state->Finish();
}
@@ -400,7 +438,7 @@ void UsbHandler::SubmitControlTransfer(
void UsbHandler::ControlTransferCallback(libusb_transfer* transfer) {
LOG4CXX_TRACE(logger_, "enter. libusb_transfer* " << transfer);
ControlTransferSequenceState* sequence_state =
- static_cast<ControlTransferSequenceState*>(transfer->user_data);
+ static_cast<ControlTransferSequenceState*>(transfer->user_data);
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
LOG4CXX_INFO(logger_, "USB control transfer completed");
UsbControlTransfer* current_transfer = sequence_state->CurrentTransfer();
@@ -408,8 +446,8 @@ void UsbHandler::ControlTransferCallback(libusb_transfer* transfer) {
if (current_transfer &&
current_transfer->Direction() == UsbControlTransfer::IN) {
submit_next =
- static_cast<UsbControlInTransfer*>(current_transfer)
- ->OnCompleted(libusb_control_transfer_get_data(transfer));
+ static_cast<UsbControlInTransfer*>(current_transfer)
+ ->OnCompleted(libusb_control_transfer_get_data(transfer));
}
sequence_state->Next();
@@ -427,13 +465,14 @@ void UsbHandler::ControlTransferCallback(libusb_transfer* transfer) {
}
UsbHandler::ControlTransferSequenceState::ControlTransferSequenceState(
- UsbHandler* usb_handler, UsbControlTransferSequence* sequence,
- PlatformUsbDevice* device)
- : usb_handler_(usb_handler),
- device_(device),
- finished_(false),
- sequence_(sequence),
- current_transfer_(sequence->transfers().begin()) {}
+ UsbHandler* usb_handler,
+ UsbControlTransferSequence* sequence,
+ PlatformUsbDevice* device)
+ : usb_handler_(usb_handler)
+ , device_(device)
+ , finished_(false)
+ , sequence_(sequence)
+ , current_transfer_(sequence->transfers().begin()) {}
UsbHandler::ControlTransferSequenceState::~ControlTransferSequenceState() {
delete sequence_;
@@ -448,16 +487,21 @@ UsbControlTransfer* UsbHandler::ControlTransferSequenceState::Next() {
if (++current_transfer_ == sequence_->transfers().end()) {
Finish();
LOG4CXX_TRACE(logger_,
- "exit with NULL. Condition: ++current_transfer_ == sequence_->transfers().end()");
+ "exit with NULL. Condition: ++current_transfer_ == "
+ "sequence_->transfers().end()");
return NULL;
} else {
- LOG4CXX_TRACE(logger_, "exit with UsbControlTransfer* " << *current_transfer_ <<
- ".Condition: ++current_transfer_ !== sequence_->transfers().end()");
+ LOG4CXX_TRACE(logger_,
+ "exit with UsbControlTransfer* "
+ << *current_transfer_
+ << ".Condition: ++current_transfer_ !== "
+ "sequence_->transfers().end()");
return *current_transfer_;
}
}
-UsbControlTransfer* UsbHandler::ControlTransferSequenceState::CurrentTransfer() {
+UsbControlTransfer*
+UsbHandler::ControlTransferSequenceState::CurrentTransfer() {
return finished_ ? NULL : *current_transfer_;
}
@@ -465,10 +509,8 @@ void UsbHandler::ControlTransferSequenceState::Finish() {
finished_ = true;
}
-UsbHandler::UsbHandlerDelegate::UsbHandlerDelegate(
- UsbHandler* handler)
- : handler_(handler) {
-}
+UsbHandler::UsbHandlerDelegate::UsbHandlerDelegate(UsbHandler* handler)
+ : handler_(handler) {}
void UsbHandler::UsbHandlerDelegate::threadMain() {
LOG4CXX_AUTO_TRACE(logger_);