From 1e13f7e3d7a609dd12a841aa2a77b8fbe68858ce Mon Sep 17 00:00:00 2001 From: Chris Frey Date: Thu, 22 Nov 2012 22:16:59 -0500 Subject: [PATCH] lib: added Device::GetSimpleSerialNumber() API --- src/usbwrap.h | 1 + src/usbwrap_libusb.cc | 13 ++++++++++++- src/usbwrap_libusb_1_0.cc | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/usbwrap.h b/src/usbwrap.h index 27e94ba9..2a97ab59 100644 --- a/src/usbwrap.h +++ b/src/usbwrap.h @@ -281,6 +281,7 @@ public: int GetPowerLevel(); int FindInterface(int ifaceClass); + std::string GetSimpleSerialNumber(); ///////////////////////////// // Device manipulation diff --git a/src/usbwrap_libusb.cc b/src/usbwrap_libusb.cc index 5413e924..bfa4899d 100644 --- a/src/usbwrap_libusb.cc +++ b/src/usbwrap_libusb.cc @@ -417,6 +417,17 @@ int Device::GetPowerLevel() return m_id.m_impl->m_dev->config[0].MaxPower; } +std::string Device::GetSimpleSerialNumber() +{ + std::string sn; + char buf[1024]; + int ret = usb_get_string_simple(m_handle->m_handle, + m_id.m_impl->m_dev->descriptor.iSerialNumber, buf, sizeof(buf)); + if( ret > 0 ) + sn.assign(buf, ret); + return sn; +} + bool Device::IsAttachKernelDriver(int iface) { int ret; @@ -546,7 +557,7 @@ DeviceDescriptor::DeviceDescriptor(DeviceID& devid) << "\nbNumConfigurations: " << std::dec << (unsigned int) m_impl->m_desc.bNumConfigurations << "\n" ); - + // Create all the configs for( int i = 0; i < m_impl->m_desc.bNumConfigurations; ++i ) { std::auto_ptr ptr(new ConfigDescriptor(*this, i)); diff --git a/src/usbwrap_libusb_1_0.cc b/src/usbwrap_libusb_1_0.cc index c85a6e6e..46ac7c2a 100644 --- a/src/usbwrap_libusb_1_0.cc +++ b/src/usbwrap_libusb_1_0.cc @@ -600,6 +600,25 @@ int Device::GetPowerLevel() return ret; } +std::string Device::GetSimpleSerialNumber() +{ + std::string sn; + + struct libusb_device_descriptor desc; + int ret = libusb_get_device_descriptor(m_id.m_impl->m_dev, &desc); + m_lasterror = ret; + if( ret == 0 ) { + char buf[1024]; + ret = libusb_get_string_descriptor_ascii(m_handle->m_handle, + desc.iSerialNumber, (unsigned char*)buf, sizeof(buf)); + if( ret > 0 ) + sn.assign(buf, ret); + else + m_lasterror = ret; + } + return sn; +} + bool Device::IsAttachKernelDriver(int iface) { int ret; -- 2.11.4.GIT