From 3ae5d81d6ff7c51ad2fc107b838632648811fbb9 Mon Sep 17 00:00:00 2001 From: Niklas Goby Date: Mon, 11 Apr 2011 00:51:09 +0200 Subject: added method into sysInfo class for receiving informations about usb devices. name of the method is getVendorProductSerialNumber() call with: getInfos("usb") return json formated qstring [{"vendorid":"..", "productid":"..", "serialnumber":".."}, .. ] --- src/fbgui.pro | 6 ++++-- src/sysinfo.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/sysinfo.h | 2 ++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/fbgui.pro b/src/fbgui.pro index a6e60c6..d1c6bf7 100644 --- a/src/fbgui.pro +++ b/src/fbgui.pro @@ -11,11 +11,13 @@ LIBS += -L/usr/local/qjson/lib \ -L/usr/local/Qxt/lib \ -lQxtCore \ -L/usr/lib \ - -lsysfs + -lsysfs \ + -lusb-1.0 INCLUDEPATH += /usr/local/qjson/include \ /usr/local/Qxt/include \ /usr/local/Qxt/include/QxtCore \ - /usr/include/sysfs + /usr/include/sysfs \ + /usr/include/libusb-1.0 HEADERS += sysinfolibsysfs.h \ sysinfo.h \ loggerengine.h \ diff --git a/src/sysinfo.cpp b/src/sysinfo.cpp index 57703ae..5440717 100644 --- a/src/sysinfo.cpp +++ b/src/sysinfo.cpp @@ -16,6 +16,8 @@ const QString SysInfo::getInfo(const QString& infoName){ return getAllInfos(); else if (infoName == QString("mbserial")) return getMainboardSerial(); + else if (infoName == QString("usb")) + return getUsbVendorIdProductIdSerialNumber(); else if (infoName == QString("json")) return getNames(); /* unknown code */ @@ -106,7 +108,61 @@ const QString SysInfo::getMainboardSerial(){ sysfs_close_class_device(class_device); return "mainboard_serial_error"; } +// ------------------------------------------------------------------------------------------------ +const QString SysInfo::getUsbVendorIdProductIdSerialNumber() +{ + QString tag = "[sysinfo] Usb Serial:"; + QString out = ""; + QVariantList list; + + libusb_device **devs; + libusb_context *ctx = NULL; //a libusb session + ssize_t cnt; //holding number of devices in list + int r = 1; + r = libusb_init(&ctx); + if(r<0){ + qxtLog->debug()<< tag + "failed to initialise libusb"; + return "error"; + } + cnt = libusb_get_device_list(ctx, &devs); //get the list of devices + if(cnt < 0) { + qxtLog->debug()<< tag + "Get Device Error"; //there was an error + } + qxtLog->debug()<< tag + cnt + " Devices in list."; //print total number of usb devices + ssize_t i; //for iterating through the list# + for(i=0; i < cnt; i++){ + //printdev(devs[i]); //print specs of this device + QVariantMap infos; + libusb_device *dev = devs[i]; + libusb_device_descriptor desc; + int re = libusb_get_device_descriptor(dev, &desc); + if (re < 0) { + qxtLog->debug()<< tag + "failed to get device descriptor"; + return "error"; + } + infos.insert("vendorId",QString(desc.idVendor)); + infos.insert("productId",QString(desc.idProduct)); + unsigned char string[256]; + libusb_device_handle *handle; + re = libusb_open(dev, &handle); + if (re != 0) { + qxtLog->debug()<< tag + "failed to get handler / fail to open device"; + return "error"; + } + re = libusb_get_string_descriptor_ascii(handle,desc.iSerialNumber, string, sizeof(string)); + if (re < 0) { + qxtLog->debug()<< tag + "failed to get SerialNumber"; + return "error"; + } + infos.insert("serialnumber",QString((const char *)string)); + list << infos; + } + libusb_free_device_list(devs, 1); //free the list, unref the devices in it + libusb_exit(ctx); //close the session + QByteArray json = serializer.serialize(list); + return json; +} // ------------------------------------------------------------------------------------------------ QString SysInfo::getScriptOutput(QString cmd) diff --git a/src/sysinfo.h b/src/sysinfo.h index d32d0f8..f4968e8 100644 --- a/src/sysinfo.h +++ b/src/sysinfo.h @@ -23,6 +23,7 @@ extern "C" { #endif #include "libsysfs.h" +#include #ifdef __cplusplus } #endif @@ -42,6 +43,7 @@ private: const QString getMACAddress(); const QString getIPAddress(); const QString getMainboardSerial(); + const QString getUsbVendorIdProductIdSerialNumber(); QString getAllInfos(); QString getScriptOutput(QString cmd); -- cgit v1.2.3-55-g7522