diff options
| author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2012-10-06 10:44:56 +0200 |
|---|---|---|
| committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2012-10-06 13:53:09 +0200 |
| commit | c659f9979a482521950c6db74221330dc1895219 (patch) | |
| tree | 5a5db5faed2dafd9a66fc31bf8187cea0eb512f3 | |
| parent | 71f70112b2484e45b332fd7f2da137145aa05e9d (diff) | |
| download | rockbox-c659f9979a482521950c6db74221330dc1895219.zip rockbox-c659f9979a482521950c6db74221330dc1895219.tar.gz rockbox-c659f9979a482521950c6db74221330dc1895219.tar.bz2 rockbox-c659f9979a482521950c6db74221330dc1895219.tar.xz | |
Allow USB IDs to be non-unique.
When retrieving USB IDs create a list of players matching to a USB ID instead
of assuming only one player. This prevents non-unique IDs overwriting each
other and will be used for improved autodetection later.
Currently only the first ID is used during detection, and no additional IDs
have been added yet.
Change-Id: Ieac5594108bae708e364bd2c8df88f61fcdcbdcd
| -rw-r--r-- | rbutil/rbutilqt/base/autodetection.cpp | 12 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/systeminfo.cpp | 19 | ||||
| -rw-r--r-- | rbutil/rbutilqt/base/systeminfo.h | 2 |
3 files changed, 21 insertions, 12 deletions
diff --git a/rbutil/rbutilqt/base/autodetection.cpp b/rbutil/rbutilqt/base/autodetection.cpp index 6427d92..0206502 100644 --- a/rbutil/rbutilqt/base/autodetection.cpp +++ b/rbutil/rbutilqt/base/autodetection.cpp @@ -43,12 +43,12 @@ bool Autodetection::detect() // Try detection via rockbox.info / rbutil.log QStringList mounts = Utils::mountpoints(); + qDebug() << "[Autodetect] paths to check:" << mounts; for(int i=0; i< mounts.size();i++) { // do the file checking QDir dir(mounts.at(i)); - qDebug() << "[Autodetect] paths to check:" << mounts; if(dir.exists()) { // check logfile first. @@ -205,9 +205,9 @@ bool Autodetection::detectUsb() // usbids holds the mapping in the form // ((VID<<16)|(PID)), targetname // the ini file needs to hold the IDs as hex values. - QMap<int, QString> usbids = SystemInfo::usbIdMap(SystemInfo::MapDevice); - QMap<int, QString> usberror = SystemInfo::usbIdMap(SystemInfo::MapError); - QMap<int, QString> usbincompat = SystemInfo::usbIdMap(SystemInfo::MapIncompatible); + QMap<int, QStringList> usbids = SystemInfo::usbIdMap(SystemInfo::MapDevice); + QMap<int, QStringList> usberror = SystemInfo::usbIdMap(SystemInfo::MapError); + QMap<int, QStringList> usbincompat = SystemInfo::usbIdMap(SystemInfo::MapIncompatible); // usb pid detection QList<uint32_t> attached; @@ -216,12 +216,12 @@ bool Autodetection::detectUsb() int i = attached.size(); while(i--) { if(usbids.contains(attached.at(i))) { - m_device = usbids.value(attached.at(i)); + m_device = usbids.value(attached.at(i)).at(0); qDebug() << "[USB] detected supported player" << m_device; return true; } if(usberror.contains(attached.at(i))) { - m_errdev = usberror.value(attached.at(i)); + m_errdev = usberror.value(attached.at(i)).at(0); qDebug() << "[USB] detected problem with player" << m_errdev; return true; } diff --git a/rbutil/rbutilqt/base/systeminfo.cpp b/rbutil/rbutilqt/base/systeminfo.cpp index fde43d2..971a119 100644 --- a/rbutil/rbutilqt/base/systeminfo.cpp +++ b/rbutil/rbutilqt/base/systeminfo.cpp @@ -159,11 +159,11 @@ QMap<QString, QStringList> SystemInfo::languages(void) } -QMap<int, QString> SystemInfo::usbIdMap(enum MapType type) +QMap<int, QStringList> SystemInfo::usbIdMap(enum MapType type) { ensureSystemInfoExists(); - QMap<int, QString> map; + QMap<int, QStringList> map; // get a list of ID -> target name QStringList platforms; systemInfos->beginGroup("platforms"); @@ -191,9 +191,18 @@ QMap<int, QString> SystemInfo::usbIdMap(enum MapType type) systemInfos->beginGroup(target); QStringList ids = systemInfos->value(t).toStringList(); int j = ids.size(); - while(j--) - map.insert(ids.at(j).toInt(0, 16), target); - + while(j--) { + QStringList l; + int id = ids.at(j).toInt(0, 16); + if(id == 0) { + continue; + } + if(map.keys().contains(id)) { + l = map.take(id); + } + l.append(target); + map.insert(id, l); + } systemInfos->endGroup(); } return map; diff --git a/rbutil/rbutilqt/base/systeminfo.h b/rbutil/rbutilqt/base/systeminfo.h index 0e603f8..5e75f36 100644 --- a/rbutil/rbutilqt/base/systeminfo.h +++ b/rbutil/rbutilqt/base/systeminfo.h @@ -81,7 +81,7 @@ class SystemInfo : public QObject //! returns a map of all languages static QMap<QString, QStringList> languages(void); //! returns a map of usb-ids and their targets - static QMap<int, QString> usbIdMap(enum MapType); + static QMap<int, QStringList> usbIdMap(enum MapType type); //! get a value from system settings static QVariant value(enum SystemInfos info); //! get a value from system settings for a named platform. |