W32: Make System Info screen also show the device description.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17845 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b4beb05d23
commit
9aab06ba0d
|
@ -172,12 +172,17 @@ QString Detect::osVersionString(void)
|
|||
return result;
|
||||
}
|
||||
|
||||
QList<uint32_t> Detect::listUsbIds(void)
|
||||
{
|
||||
return listUsbDevices().keys();
|
||||
}
|
||||
|
||||
/** @brief detect devices based on usb pid / vid.
|
||||
* @return list with usb VID / PID values.
|
||||
*/
|
||||
QList<uint32_t> Detect::listUsbIds(void)
|
||||
QMap<uint32_t, QString> Detect::listUsbDevices(void)
|
||||
{
|
||||
QList<uint32_t> usbids;
|
||||
QMap<uint32_t, QString> usbids;
|
||||
// usb pid detection
|
||||
#if defined(Q_OS_LINUX) | defined(Q_OS_MACX)
|
||||
usb_init();
|
||||
|
@ -195,7 +200,8 @@ QList<uint32_t> Detect::listUsbIds(void)
|
|||
while(u) {
|
||||
uint32_t id;
|
||||
id = u->descriptor.idVendor << 16 | u->descriptor.idProduct;
|
||||
if(id) usbids.append(id);
|
||||
// FIXME: until description is empty for now.
|
||||
if(id) usbids.insert(id, QString(""));
|
||||
u = u->next;
|
||||
}
|
||||
}
|
||||
|
@ -221,6 +227,7 @@ QList<uint32_t> Detect::listUsbIds(void)
|
|||
DWORD data;
|
||||
LPTSTR buffer = NULL;
|
||||
DWORD buffersize = 0;
|
||||
QString description;
|
||||
|
||||
// get device desriptor first
|
||||
// for some reason not doing so results in bad things (tm)
|
||||
|
@ -237,6 +244,19 @@ QList<uint32_t> Detect::listUsbIds(void)
|
|||
}
|
||||
|
||||
// now get the hardware id, which contains PID and VID.
|
||||
while(!SetupDiGetDeviceRegistryProperty(deviceInfo, &infoData,
|
||||
SPDRP_LOCATION_INFORMATION,&data, (PBYTE)buffer, buffersize, &buffersize)) {
|
||||
if(GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||
if(buffer) free(buffer);
|
||||
// double buffer size to avoid problems as per KB888609
|
||||
buffer = (LPTSTR)malloc(buffersize * 2);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
description = QString::fromWCharArray(buffer);
|
||||
|
||||
while(!SetupDiGetDeviceRegistryProperty(deviceInfo, &infoData,
|
||||
SPDRP_HARDWAREID,&data, (PBYTE)buffer, buffersize, &buffersize)) {
|
||||
if(GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
|
||||
|
@ -248,6 +268,7 @@ QList<uint32_t> Detect::listUsbIds(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
qDebug() << "SetupDiGetDeviceRegistryProperty" << description << QString::fromWCharArray(buffer);
|
||||
|
||||
unsigned int vid, pid, rev;
|
||||
if(_stscanf(buffer, _TEXT("USB\\Vid_%x&Pid_%x&Rev_%x"), &vid, &pid, &rev) != 3) {
|
||||
|
@ -256,7 +277,7 @@ QList<uint32_t> Detect::listUsbIds(void)
|
|||
else {
|
||||
uint32_t id;
|
||||
id = vid << 16 | pid;
|
||||
usbids.append(id);
|
||||
usbids.insert(id, description);
|
||||
qDebug("VID: %04x PID: %04x", vid, pid);
|
||||
}
|
||||
if(buffer) free(buffer);
|
||||
|
|
|
@ -39,6 +39,7 @@ public:
|
|||
static QString userName(void);
|
||||
static QString osVersionString(void);
|
||||
static QList<uint32_t> listUsbIds(void);
|
||||
static QMap<uint32_t, QString> listUsbDevices(void);
|
||||
|
||||
static QUrl systemProxy(void);
|
||||
static QString installedVersion(QString mountpoint);
|
||||
|
|
|
@ -42,11 +42,13 @@ void Sysinfo::updateSysinfo(void)
|
|||
info += tr("<b>Permissions:</b><br/>%1<hr/>").arg(Detect::userPermissionsString());
|
||||
#endif
|
||||
info += tr("<b>Attached USB devices:</b><br/>");
|
||||
QList<uint32_t> usbids = Detect::listUsbIds();
|
||||
for(int i = 0; i < usbids.size(); i++)
|
||||
info += tr("VID: %1 PID: %2<br/>")
|
||||
.arg((usbids.at(i)&0xffff0000)>>16, 4, 16, QChar('0'))
|
||||
.arg(usbids.at(i)&0xffff, 4, 16, QChar('0'));
|
||||
QMap<uint32_t, QString> usbids = Detect::listUsbDevices();
|
||||
QList<uint32_t> usbkeys = usbids.keys();
|
||||
for(int i = 0; i < usbkeys.size(); i++)
|
||||
info += tr("VID: %1 PID: %2, %3<br/>")
|
||||
.arg((usbkeys.at(i)&0xffff0000)>>16, 4, 16, QChar('0'))
|
||||
.arg(usbkeys.at(i)&0xffff, 4, 16, QChar('0'))
|
||||
.arg(usbids.value(usbkeys.at(i)));
|
||||
|
||||
ui.textBrowser->setHtml(info);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue