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:
Dominik Riebeling 2008-06-28 18:06:55 +00:00
parent b4beb05d23
commit 9aab06ba0d
3 changed files with 33 additions and 9 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);
}