summaryrefslogtreecommitdiffstats
path: root/src/sysinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sysinfo.cpp')
-rw-r--r--src/sysinfo.cpp56
1 files changed, 56 insertions, 0 deletions
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)