diff options
Diffstat (limited to 'src/sysinfo.cpp')
| -rw-r--r-- | src/sysinfo.cpp | 56 |
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) |
