diff options
Diffstat (limited to 'src/components/transport_manager/src/usb/libusb')
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_); |