Skip to content

Commit

Permalink
Clenaup in libusb-messenger block:
Browse files Browse the repository at this point in the history
 - Remove redundand inculde files
 - Repalce macro with const
 - Replace NULL with nullptr
 - Add explicit override keyword
  • Loading branch information
ev-mp committed Oct 14, 2019
1 parent 5c3b600 commit 0a0887c
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 110 deletions.
28 changes: 13 additions & 15 deletions src/libusb/device-libusb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,8 @@
// Copyright(c) 2015 Intel Corporation. All Rights Reserved.

#include "device-libusb.h"
#include "endpoint-libusb.h"
#include "interface-libusb.h"
#include "types.h"

#include <string>
#include <regex>
#include <sstream>
#include <mutex>

namespace librealsense
{
Expand All @@ -18,18 +12,22 @@ namespace librealsense
usb_device_libusb::usb_device_libusb(libusb_device* device, const libusb_device_descriptor& desc, const usb_device_info& info) :
_device(device), _usb_device_descriptor(desc), _info(info)
{
for (ssize_t c = 0; c < desc.bNumConfigurations; ++c)
for (uint8_t c = 0; c < desc.bNumConfigurations; ++c)
{
libusb_config_descriptor *config;
auto rc = libusb_get_config_descriptor(device, c, &config);

for (ssize_t i = 0; i < config->bNumInterfaces; ++i)
libusb_config_descriptor *config{};
auto ret = libusb_get_config_descriptor(device, c, &config);
if (LIBUSB_SUCCESS==ret)
{
auto inf = config->interface[i];
_interfaces.push_back(std::make_shared<usb_interface_libusb>(inf));
}
for (uint8_t i = 0; i < config->bNumInterfaces; ++i)
{
auto inf = config->interface[i];
_interfaces.push_back(std::make_shared<usb_interface_libusb>(inf));
}

libusb_free_config_descriptor(config);
libusb_free_config_descriptor(config);
}
else
LOG_WARNING("failed to read USB config descriptor: error = " << std::dec << ret);
}
}

Expand Down
9 changes: 0 additions & 9 deletions src/libusb/device-libusb.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,7 @@

#pragma once

#include "usb/usb-types.h"
#include "messenger-libusb.h"
#include "usb/usb-device.h"

#include <string>
#include <regex>
#include <sstream>
#include <mutex>

#include <libusb.h>

namespace librealsense
{
Expand Down
109 changes: 61 additions & 48 deletions src/libusb/enumerator-libusb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ namespace librealsense
struct usb_device_list
{
usb_device_list(bool unref_devices = false) :
_list(NULL), _unref_devices(unref_devices), _count(0)
_list(nullptr), _count(0), _unref_devices(unref_devices)
{
auto ctx = usb_context::instance().get();
_count = libusb_get_device_list(ctx, &_list);
_count = size_t(libusb_get_device_list(ctx, &_list));
}
~usb_device_list()
{
libusb_free_device_list(_list, _unref_devices);
}
libusb_device* get(uint8_t index) { return index < _count ? _list[index] : NULL; }
libusb_device* get(uint8_t index) { return index < _count ? _list[index] : nullptr; }
size_t count() { return _count; }

private:
Expand All @@ -56,11 +56,11 @@ namespace librealsense
std::stringstream port_path;
auto port_count = libusb_get_port_numbers(usb_device, usb_ports, max_usb_depth);
auto usb_dev = std::to_string(libusb_get_device_address(usb_device));
auto speed = libusb_get_device_speed(usb_device);
//auto speed = libusb_get_device_speed(usb_device);
libusb_device_descriptor dev_desc;
auto r= libusb_get_device_descriptor(usb_device,&dev_desc);
libusb_get_device_descriptor(usb_device,&dev_desc);

for (size_t i = 0; i < port_count; ++i)
for (auto i = 0; i < port_count; ++i)
{
port_path << std::to_string(usb_ports[i]) << (((i+1) < port_count)?".":"");
}
Expand All @@ -71,37 +71,41 @@ namespace librealsense
std::vector<usb_device_info> get_subdevices(libusb_device* device, libusb_device_descriptor desc)
{
std::vector<usb_device_info> rv;
for (ssize_t c = 0; c < desc.bNumConfigurations; ++c)
for (uint8_t c = 0; c < desc.bNumConfigurations; ++c)
{
libusb_config_descriptor *config;
libusb_config_descriptor *config=nullptr;
auto rc = libusb_get_config_descriptor(device, c, &config);

for (ssize_t i = 0; i < config->bNumInterfaces; ++i)
if (LIBUSB_SUCCESS==rc)
{
auto inf = config->interface[i];

//avoid publish streaming interfaces TODO:MK
if(inf.altsetting->bInterfaceSubClass == 2)
continue;
// when device is in DFU state, two USB devices are detected, one of RS2_USB_CLASS_VENDOR_SPECIFIC (255) class
// and the other of RS2_USB_CLASS_APPLICATION_SPECIFIC (254) class.
// in order to avoid listing two usb devices for a single physical device we ignore the application specific class
// https://www.usb.org/defined-class-codes#anchor_BaseClassFEh
if(inf.altsetting->bInterfaceClass == RS2_USB_CLASS_APPLICATION_SPECIFIC)
continue;

usb_device_info info{};
info.id = get_usb_descriptors(device);
info.unique_id = get_usb_descriptors(device);
info.conn_spec = usb_spec(desc.bcdUSB);
info.vid = desc.idVendor;
info.pid = desc.idProduct;
info.mi = i;
info.cls = usb_class(inf.altsetting->bInterfaceClass);
rv.push_back(info);
for (uint8_t i = 0; i < config->bNumInterfaces; ++i)
{
auto inf = config->interface[i];

//avoid publish streaming interfaces TODO:MK
if(inf.altsetting->bInterfaceSubClass == 2)
continue;
// when device is in DFU state, two USB devices are detected, one of RS2_USB_CLASS_VENDOR_SPECIFIC (255) class
// and the other of RS2_USB_CLASS_APPLICATION_SPECIFIC (254) class.
// in order to avoid listing two usb devices for a single physical device we ignore the application specific class
// https://www.usb.org/defined-class-codes#anchor_BaseClassFEh
if(inf.altsetting->bInterfaceClass == RS2_USB_CLASS_APPLICATION_SPECIFIC)
continue;

usb_device_info info{};
info.id = get_usb_descriptors(device);
info.unique_id = get_usb_descriptors(device);
info.conn_spec = usb_spec(desc.bcdUSB);
info.vid = desc.idVendor;
info.pid = desc.idProduct;
info.mi = i;
info.cls = usb_class(inf.altsetting->bInterfaceClass);
rv.push_back(info);
}

libusb_free_config_descriptor(config);
}

libusb_free_config_descriptor(config);
else
LOG_WARNING("failed to read USB config descriptor: error = " << std::dec << rc);
}
return rv;
}
Expand All @@ -111,17 +115,22 @@ namespace librealsense
std::vector<usb_device_info> rv;
usb_device_list list;

for (ssize_t idx = 0; idx < list.count(); ++idx)
for (uint8_t idx = 0; idx < list.count(); ++idx)
{
auto device = list.get(idx);
if(device == NULL)
if(device == nullptr)
continue;
libusb_device_descriptor desc = { 0 };
libusb_device_descriptor desc{};


auto rc = libusb_get_device_descriptor(device, &desc);
auto sd = get_subdevices(device, desc);
rv.insert(rv.end(), sd.begin(), sd.end());
if (LIBUSB_SUCCESS==rc)
{
auto sd = get_subdevices(device, desc);
rv.insert(rv.end(), sd.begin(), sd.end());
}
else
LOG_WARNING("failed to read USB device descriptor: error = " << std::dec << rc);
}
return rv;
}
Expand All @@ -130,26 +139,30 @@ namespace librealsense
{
usb_device_list list;

for (ssize_t idx = 0; idx < list.count(); ++idx)
for (uint8_t idx = 0; idx < list.count(); ++idx)
{
auto device = list.get(idx);
if(device == NULL || get_usb_descriptors(device) != info.id)
if((device == nullptr) || (get_usb_descriptors(device) != info.id))
continue;

libusb_device_descriptor desc = { 0 };
libusb_device_descriptor desc{};
auto rc = libusb_get_device_descriptor(device, &desc);

try
if (LIBUSB_SUCCESS==rc)
{
return std::make_shared<usb_device_libusb>(device, desc, info);
}
catch(std::exception e)
{
LOG_WARNING("failed to create usb device at index: %d" << idx);
try
{
return std::make_shared<usb_device_libusb>(device, desc, info);
}
catch(std::exception e)
{
LOG_WARNING("failed to create usb device at index: %d" << idx);
}
}
else
LOG_WARNING("failed to read USB device descriptor: error = " << std::dec << rc);
}
return nullptr;
}

}
}
6 changes: 3 additions & 3 deletions src/libusb/handle-libusb.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ namespace librealsense
class handle_libusb
{
public:
handle_libusb() : _interface(-1), _handle(NULL) {}
handle_libusb() : _interface(-1), _handle(nullptr) {}
usb_status open(libusb_device* device, uint8_t interface)
{
std::lock_guard<std::mutex> lock(_mutex);
Expand Down Expand Up @@ -71,14 +71,14 @@ namespace librealsense
private:
void release()
{
if(_handle != NULL)
if(_handle != nullptr)
{
if(_interface != -1)
libusb_release_interface(_handle, _interface);
libusb_close(_handle);
}
_interface = -1;
_handle = NULL;
_handle = nullptr;
}

int _interface;
Expand Down
2 changes: 0 additions & 2 deletions src/libusb/interface-libusb.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2015 Intel Corporation. All Rights Reserved.

#include <cstdint>
#include <vector>
#include "interface-libusb.h"
#include "messenger-libusb.h"
#include "types.h"
Expand Down
2 changes: 1 addition & 1 deletion src/libusb/interface-libusb.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace librealsense
public:
usb_interface_libusb(libusb_interface inf);

virtual ~usb_interface_libusb();
virtual ~usb_interface_libusb() override;

virtual uint8_t get_number() const override { return _desc.bInterfaceNumber; }
virtual uint8_t get_class() const override { return _desc.bInterfaceClass; }
Expand Down
19 changes: 4 additions & 15 deletions src/libusb/messenger-libusb.cpp
Original file line number Diff line number Diff line change
@@ -1,23 +1,12 @@
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2015 Intel Corporation. All Rights Reserved.

#include "messenger-libusb.h"
#include "device-libusb.h"
#include "usb/usb-enumerator.h"
#include "hw-monitor.h"
#include "endpoint-libusb.h"
#include "interface-libusb.h"
#include "libuvc/uvc_types.h"
#include "handle-libusb.h"
#include "device-libusb.h"

#include <string>
#include <regex>
#include <sstream>
#include <mutex>

#define INTERRUPT_BUFFER_SIZE 1024
#define CLEAR_FEATURE 0x01
#define UVC_FEATURE 0x02
const int CLEAR_FEATURE = 0x01;
const int UVC_FEATURE = 0x02;

namespace librealsense
{
Expand All @@ -42,7 +31,7 @@ namespace librealsense
int value = 0;
int ep = endpoint->get_address();
uint8_t* buffer = nullptr;
int length = 0;
uint32_t length = 0;
usb_status rv = control_transfer(requestType, request, value, ep, buffer, length, transferred, timeout_ms);
if(rv == RS2_USB_STATUS_SUCCESS)
LOG_DEBUG("USB pipe " << ep << " reset successfully");
Expand Down
13 changes: 1 addition & 12 deletions src/libusb/messenger-libusb.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,8 @@

#pragma once

#include "usb/usb-types.h"
#include "backend.h"
#include "usb/usb-messenger.h"
#include "usb/usb-device.h"
#include "endpoint-libusb.h"
#include "interface-libusb.h"

#include <mutex>
#include <map>
#include <condition_variable>

#include <libusb.h>

namespace librealsense
{
namespace platform
Expand All @@ -26,7 +15,7 @@ namespace librealsense
{
public:
usb_messenger_libusb(const std::shared_ptr<usb_device_libusb>& device);
virtual ~usb_messenger_libusb();
virtual ~usb_messenger_libusb() override;

virtual usb_status control_transfer(int request_type, int request, int value, int index, uint8_t* buffer, uint32_t length, uint32_t& transferred, uint32_t timeout_ms) override;
virtual usb_status bulk_transfer(const rs_usb_endpoint& endpoint, uint8_t* buffer, uint32_t length, uint32_t& transferred, uint32_t timeout_ms) override;
Expand Down
6 changes: 1 addition & 5 deletions src/usb/usb-messenger.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@

#include "usb-endpoint.h"

#include <vector>
#include <memory>
#include <stdint.h>

namespace librealsense
{
namespace platform
Expand All @@ -25,4 +21,4 @@ namespace librealsense

typedef std::shared_ptr<usb_messenger> rs_usb_messenger;
}
}
}

0 comments on commit 0a0887c

Please sign in to comment.