summaryrefslogtreecommitdiffstats
path: root/tdecore/tdehw/tdegenericdevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdecore/tdehw/tdegenericdevice.cpp')
-rw-r--r--tdecore/tdehw/tdegenericdevice.cpp319
1 files changed, 319 insertions, 0 deletions
diff --git a/tdecore/tdehw/tdegenericdevice.cpp b/tdecore/tdehw/tdegenericdevice.cpp
new file mode 100644
index 000000000..5f51a8b61
--- /dev/null
+++ b/tdecore/tdehw/tdegenericdevice.cpp
@@ -0,0 +1,319 @@
+/* This file is part of the TDE libraries
+ Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
+ (C) 2013 Golubev Alexander <fatzer2@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "tdegenericdevice.h"
+
+#include <tqpixmap.h>
+
+#include "tdeglobal.h"
+#include "tdelocale.h"
+
+#include "tdehardwaredevices.h"
+
+#include "config.h"
+
+TDEGenericDevice::TDEGenericDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TQObject() {
+ m_deviceType = dt;
+ m_deviceName = dn;
+
+ m_parentDevice = 0;
+ m_friendlyName = TQString::null;
+ m_blacklistedForUpdate = false;
+}
+
+TDEGenericDevice::~TDEGenericDevice() {
+}
+
+TDEGenericDeviceType::TDEGenericDeviceType TDEGenericDevice::type() {
+ return m_deviceType;
+}
+
+TQString TDEGenericDevice::name() {
+ return m_deviceName;
+}
+
+void TDEGenericDevice::internalSetName(TQString dn) {
+ m_deviceName = dn;
+}
+
+TQString TDEGenericDevice::vendorName() {
+ return m_vendorName;
+}
+
+void TDEGenericDevice::internalSetVendorName(TQString vn) {
+ m_vendorName = vn;
+}
+
+TQString TDEGenericDevice::vendorModel() {
+ return m_vendorModel;
+}
+
+void TDEGenericDevice::internalSetVendorModel(TQString vm) {
+ m_vendorModel = vm;
+}
+
+TQString TDEGenericDevice::serialNumber() {
+ return m_serialNumber;
+}
+
+void TDEGenericDevice::internalSetSerialNumber(TQString sn) {
+ m_serialNumber = sn;
+}
+
+TQString TDEGenericDevice::systemPath() {
+ if (!m_systemPath.endsWith("/")) {
+ m_systemPath += "/";
+ }
+ return m_systemPath;
+}
+
+void TDEGenericDevice::internalSetSystemPath(TQString sp) {
+ m_systemPath = sp;
+}
+
+TQString TDEGenericDevice::deviceNode() {
+ return m_deviceNode;
+}
+
+void TDEGenericDevice::internalSetDeviceNode(TQString sn) {
+ m_deviceNode = sn;
+}
+
+TQString TDEGenericDevice::deviceBus() {
+ return m_deviceBus;
+}
+
+void TDEGenericDevice::internalSetDeviceBus(TQString db) {
+ m_deviceBus = db;
+}
+
+TQString TDEGenericDevice::uniqueID() {
+ m_uniqueID = m_systemPath+m_deviceNode;
+ return m_uniqueID;
+}
+
+TQString TDEGenericDevice::vendorID() {
+ return m_vendorID;
+}
+
+void TDEGenericDevice::internalSetVendorID(TQString id) {
+ m_vendorID = id;
+ m_vendorID.replace("0x", "");
+}
+
+TQString TDEGenericDevice::modelID() {
+ return m_modelID;
+}
+
+void TDEGenericDevice::internalSetModelID(TQString id) {
+ m_modelID = id;
+ m_modelID.replace("0x", "");
+}
+
+TQString TDEGenericDevice::vendorEncoded() {
+ return m_vendorenc;
+}
+
+void TDEGenericDevice::internalSetVendorEncoded(TQString id) {
+ m_vendorenc = id;
+}
+
+TQString TDEGenericDevice::modelEncoded() {
+ return m_modelenc;
+}
+
+void TDEGenericDevice::internalSetModelEncoded(TQString id) {
+ m_modelenc = id;
+}
+
+TQString TDEGenericDevice::subVendorID() {
+ return m_subvendorID;
+}
+
+void TDEGenericDevice::internalSetSubVendorID(TQString id) {
+ m_subvendorID = id;
+ m_subvendorID.replace("0x", "");
+}
+
+TQString TDEGenericDevice::PCIClass() {
+ return m_pciClass;
+}
+
+void TDEGenericDevice::internalSetPCIClass(TQString cl) {
+ m_pciClass = cl;
+ m_pciClass.replace("0x", "");
+}
+
+TQString TDEGenericDevice::moduleAlias() {
+ return m_modAlias;
+}
+
+void TDEGenericDevice::internalSetModuleAlias(TQString ma) {
+ m_modAlias = ma;
+}
+
+TQString TDEGenericDevice::deviceDriver() {
+ return m_deviceDriver;
+}
+
+void TDEGenericDevice::internalSetDeviceDriver(TQString dr) {
+ m_deviceDriver = dr;
+}
+
+TQString TDEGenericDevice::subsystem() {
+ return m_subsystem;
+}
+
+void TDEGenericDevice::internalSetSubsystem(TQString ss) {
+ m_subsystem = ss;
+}
+
+TQString TDEGenericDevice::subModelID() {
+ return m_submodelID;
+}
+
+void TDEGenericDevice::internalSetSubModelID(TQString id) {
+ m_submodelID = id;
+ m_submodelID.replace("0x", "");
+}
+
+void TDEGenericDevice::internalSetParentDevice(TDEGenericDevice* pd) {
+ m_parentDevice = pd;
+}
+
+TDEGenericDevice* TDEGenericDevice::parentDevice() {
+ return m_parentDevice;
+}
+
+TQPixmap TDEGenericDevice::icon(TDEIcon::StdSizes size) {
+ return TDEGlobal::hardwareDevices()->getDeviceTypeIconFromType(type(), size);
+}
+
+bool TDEGenericDevice::blacklistedForUpdate() {
+ return m_blacklistedForUpdate;
+}
+
+void TDEGenericDevice::internalSetBlacklistedForUpdate(bool bl) {
+ m_blacklistedForUpdate = bl;
+}
+
+TQString TDEGenericDevice::friendlyDeviceType() {
+ return TDEGlobal::hardwareDevices()->getFriendlyDeviceTypeStringFromType(type());
+}
+
+TQString TDEGenericDevice::busID() {
+ TQString busid = m_systemPath;
+ busid = busid.remove(0, busid.findRev("/")+1);
+ busid = busid.remove(0, busid.find(":")+1);
+ return busid;
+}
+
+TQString TDEGenericDevice::friendlyName() {
+ if (m_friendlyName.isNull()) {
+ if (type() == TDEGenericDeviceType::RootSystem) {
+ m_friendlyName = "Linux System";
+ }
+ else if (type() == TDEGenericDeviceType::Root) {
+ TQString friendlyDriverName = systemPath();
+ friendlyDriverName.truncate(friendlyDriverName.length()-1);
+ friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1);
+ m_friendlyName = friendlyDriverName;
+ }
+ else if (m_modAlias.lower().startsWith("pci")) {
+ m_friendlyName = TDEGlobal::hardwareDevices()->findPCIDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID);
+ }
+ else if (m_modAlias.lower().startsWith("usb")) {
+ m_friendlyName = TDEGlobal::hardwareDevices()->findUSBDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID);
+ }
+ else {
+ TQString acpigentype = systemPath();
+ acpigentype.truncate(acpigentype.length()-1);
+ acpigentype.remove(0, acpigentype.findRev("/")+1);
+ TQString pnpgentype = acpigentype;
+ pnpgentype.truncate(pnpgentype.find(":"));
+ if (pnpgentype.startsWith("PNP")) {
+ m_friendlyName = TDEGlobal::hardwareDevices()->findPNPDeviceName(pnpgentype);
+ }
+ else if (acpigentype.startsWith("device:")) {
+ acpigentype.remove(0, acpigentype.findRev(":")+1);
+ acpigentype.prepend("0x");
+ m_friendlyName = i18n("ACPI Node %1").arg(acpigentype.toUInt(0,0));
+ }
+ }
+ }
+
+ if (m_friendlyName.isNull()) {
+ // Could not identify based on model/vendor codes
+ // Try to construct something from the model/vendor strings if they are available
+ if (!m_vendorName.isNull() && !m_vendorModel.isNull()) {
+ m_friendlyName = m_vendorName + " " + m_vendorModel;
+ }
+ }
+
+ if (m_friendlyName.isNull()) {
+ // Could not identify based on model/vendor
+ // Guess by type
+ if (type() == TDEGenericDeviceType::CPU) {
+ m_friendlyName = name();
+ }
+ else if (type() == TDEGenericDeviceType::Event) {
+ // Use parent node name
+ if (m_parentDevice) {
+ return m_parentDevice->friendlyName();
+ }
+ else {
+ m_friendlyName = i18n("Generic Event Device");
+ }
+ }
+ else if (type() == TDEGenericDeviceType::Input) {
+ // Use parent node name
+ if (m_parentDevice) {
+ return m_parentDevice->friendlyName();
+ }
+ else {
+ m_friendlyName = i18n("Generic Input Device");
+ }
+ }
+ // Guess by driver
+ else if (!m_deviceDriver.isNull()) {
+ TQString friendlyDriverName = m_deviceDriver.lower();
+ friendlyDriverName[0] = friendlyDriverName[0].upper();
+ m_friendlyName = i18n("Generic %1 Device").arg(friendlyDriverName);
+ }
+ else if (m_systemPath.lower().startsWith("/sys/devices/virtual")) {
+ TQString friendlyDriverName = systemPath();
+ friendlyDriverName.truncate(friendlyDriverName.length()-1);
+ friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1);
+ if (!friendlyDriverName.isNull()) {
+ m_friendlyName = i18n("Virtual Device %1").arg(friendlyDriverName);
+ }
+ else {
+ m_friendlyName = i18n("Unknown Virtual Device");
+ }
+ }
+ else {
+ // I really have no idea what this peripheral is; say so!
+ m_friendlyName = i18n("Unknown Device") + " " + name();
+ }
+ }
+
+ return m_friendlyName;
+}
+
+#include "tdegenericdevice.moc"