tdegenericdevice.cpp
00001 /* This file is part of the TDE libraries 00002 Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net> 00003 (C) 2013 Golubev Alexander <fatzer2@gmail.com> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License version 2 as published by the Free Software Foundation. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 00018 */ 00019 00020 #include "tdegenericdevice.h" 00021 00022 #include <tqpixmap.h> 00023 00024 #include "tdeglobal.h" 00025 #include "tdelocale.h" 00026 00027 #include "tdehardwaredevices.h" 00028 00029 #include "config.h" 00030 00031 TDEGenericDevice::TDEGenericDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TQObject() { 00032 m_deviceType = dt; 00033 m_deviceName = dn; 00034 00035 m_parentDevice = 0; 00036 m_friendlyName = TQString::null; 00037 m_blacklistedForUpdate = false; 00038 } 00039 00040 TDEGenericDevice::~TDEGenericDevice() { 00041 } 00042 00043 TDEGenericDeviceType::TDEGenericDeviceType TDEGenericDevice::type() { 00044 return m_deviceType; 00045 } 00046 00047 TQString TDEGenericDevice::name() { 00048 return m_deviceName; 00049 } 00050 00051 void TDEGenericDevice::internalSetName(TQString dn) { 00052 m_deviceName = dn; 00053 } 00054 00055 TQString TDEGenericDevice::vendorName() { 00056 return m_vendorName; 00057 } 00058 00059 void TDEGenericDevice::internalSetVendorName(TQString vn) { 00060 m_vendorName = vn; 00061 } 00062 00063 TQString TDEGenericDevice::vendorModel() { 00064 return m_vendorModel; 00065 } 00066 00067 void TDEGenericDevice::internalSetVendorModel(TQString vm) { 00068 m_vendorModel = vm; 00069 } 00070 00071 TQString TDEGenericDevice::serialNumber() { 00072 return m_serialNumber; 00073 } 00074 00075 void TDEGenericDevice::internalSetSerialNumber(TQString sn) { 00076 m_serialNumber = sn; 00077 } 00078 00079 TQString TDEGenericDevice::systemPath() { 00080 if (!m_systemPath.endsWith("/")) { 00081 m_systemPath += "/"; 00082 } 00083 return m_systemPath; 00084 } 00085 00086 void TDEGenericDevice::internalSetSystemPath(TQString sp) { 00087 m_systemPath = sp; 00088 } 00089 00090 TQString TDEGenericDevice::deviceNode() { 00091 return m_deviceNode; 00092 } 00093 00094 void TDEGenericDevice::internalSetDeviceNode(TQString sn) { 00095 m_deviceNode = sn; 00096 } 00097 00098 TQString TDEGenericDevice::deviceBus() { 00099 return m_deviceBus; 00100 } 00101 00102 void TDEGenericDevice::internalSetDeviceBus(TQString db) { 00103 m_deviceBus = db; 00104 } 00105 00106 TQString TDEGenericDevice::uniqueID() { 00107 m_uniqueID = m_systemPath+m_deviceNode; 00108 return m_uniqueID; 00109 } 00110 00111 TQString TDEGenericDevice::vendorID() { 00112 return m_vendorID; 00113 } 00114 00115 void TDEGenericDevice::internalSetVendorID(TQString id) { 00116 m_vendorID = id; 00117 m_vendorID.replace("0x", ""); 00118 } 00119 00120 TQString TDEGenericDevice::modelID() { 00121 return m_modelID; 00122 } 00123 00124 void TDEGenericDevice::internalSetModelID(TQString id) { 00125 m_modelID = id; 00126 m_modelID.replace("0x", ""); 00127 } 00128 00129 TQString TDEGenericDevice::vendorEncoded() { 00130 return m_vendorenc; 00131 } 00132 00133 void TDEGenericDevice::internalSetVendorEncoded(TQString id) { 00134 m_vendorenc = id; 00135 } 00136 00137 TQString TDEGenericDevice::modelEncoded() { 00138 return m_modelenc; 00139 } 00140 00141 void TDEGenericDevice::internalSetModelEncoded(TQString id) { 00142 m_modelenc = id; 00143 } 00144 00145 TQString TDEGenericDevice::subVendorID() { 00146 return m_subvendorID; 00147 } 00148 00149 void TDEGenericDevice::internalSetSubVendorID(TQString id) { 00150 m_subvendorID = id; 00151 m_subvendorID.replace("0x", ""); 00152 } 00153 00154 TQString TDEGenericDevice::PCIClass() { 00155 return m_pciClass; 00156 } 00157 00158 void TDEGenericDevice::internalSetPCIClass(TQString cl) { 00159 m_pciClass = cl; 00160 m_pciClass.replace("0x", ""); 00161 } 00162 00163 TQString TDEGenericDevice::moduleAlias() { 00164 return m_modAlias; 00165 } 00166 00167 void TDEGenericDevice::internalSetModuleAlias(TQString ma) { 00168 m_modAlias = ma; 00169 } 00170 00171 TQString TDEGenericDevice::deviceDriver() { 00172 return m_deviceDriver; 00173 } 00174 00175 void TDEGenericDevice::internalSetDeviceDriver(TQString dr) { 00176 m_deviceDriver = dr; 00177 } 00178 00179 TQString TDEGenericDevice::subsystem() { 00180 return m_subsystem; 00181 } 00182 00183 void TDEGenericDevice::internalSetSubsystem(TQString ss) { 00184 m_subsystem = ss; 00185 } 00186 00187 TQString TDEGenericDevice::subModelID() { 00188 return m_submodelID; 00189 } 00190 00191 void TDEGenericDevice::internalSetSubModelID(TQString id) { 00192 m_submodelID = id; 00193 m_submodelID.replace("0x", ""); 00194 } 00195 00196 void TDEGenericDevice::internalSetParentDevice(TDEGenericDevice* pd) { 00197 m_parentDevice = pd; 00198 } 00199 00200 TDEGenericDevice* TDEGenericDevice::parentDevice() { 00201 return m_parentDevice; 00202 } 00203 00204 TQPixmap TDEGenericDevice::icon(TDEIcon::StdSizes size) { 00205 return TDEGlobal::hardwareDevices()->getDeviceTypeIconFromType(type(), size); 00206 } 00207 00208 bool TDEGenericDevice::blacklistedForUpdate() { 00209 return m_blacklistedForUpdate; 00210 } 00211 00212 void TDEGenericDevice::internalSetBlacklistedForUpdate(bool bl) { 00213 m_blacklistedForUpdate = bl; 00214 } 00215 00216 TQString TDEGenericDevice::friendlyDeviceType() { 00217 return TDEGlobal::hardwareDevices()->getFriendlyDeviceTypeStringFromType(type()); 00218 } 00219 00220 TQString TDEGenericDevice::busID() { 00221 TQString busid = m_systemPath; 00222 busid = busid.remove(0, busid.findRev("/")+1); 00223 busid = busid.remove(0, busid.find(":")+1); 00224 return busid; 00225 } 00226 00227 TQString TDEGenericDevice::friendlyName() { 00228 if (m_friendlyName.isNull()) { 00229 if (type() == TDEGenericDeviceType::RootSystem) { 00230 m_friendlyName = "Linux System"; 00231 } 00232 else if (type() == TDEGenericDeviceType::Root) { 00233 TQString friendlyDriverName = systemPath(); 00234 friendlyDriverName.truncate(friendlyDriverName.length()-1); 00235 friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1); 00236 m_friendlyName = friendlyDriverName; 00237 } 00238 else if (m_modAlias.lower().startsWith("pci")) { 00239 m_friendlyName = TDEGlobal::hardwareDevices()->findPCIDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID); 00240 } 00241 else if (m_modAlias.lower().startsWith("usb")) { 00242 m_friendlyName = TDEGlobal::hardwareDevices()->findUSBDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID); 00243 } 00244 else { 00245 TQString acpigentype = systemPath(); 00246 acpigentype.truncate(acpigentype.length()-1); 00247 acpigentype.remove(0, acpigentype.findRev("/")+1); 00248 TQString pnpgentype = acpigentype; 00249 pnpgentype.truncate(pnpgentype.find(":")); 00250 if (pnpgentype.startsWith("PNP")) { 00251 m_friendlyName = TDEGlobal::hardwareDevices()->findPNPDeviceName(pnpgentype); 00252 } 00253 else if (acpigentype.startsWith("device:")) { 00254 acpigentype.remove(0, acpigentype.findRev(":")+1); 00255 acpigentype.prepend("0x"); 00256 m_friendlyName = i18n("ACPI Node %1").arg(acpigentype.toUInt(0,0)); 00257 } 00258 } 00259 } 00260 00261 if (m_friendlyName.isNull()) { 00262 // Could not identify based on model/vendor codes 00263 // Try to construct something from the model/vendor strings if they are available 00264 if (!m_vendorName.isNull() && !m_vendorModel.isNull()) { 00265 m_friendlyName = m_vendorName + " " + m_vendorModel; 00266 } 00267 } 00268 00269 if (m_friendlyName.isNull()) { 00270 // Could not identify based on model/vendor 00271 // Guess by type 00272 if (type() == TDEGenericDeviceType::CPU) { 00273 m_friendlyName = name(); 00274 } 00275 else if (type() == TDEGenericDeviceType::Event) { 00276 if (m_systemPath.contains("PNP0C0D")) { 00277 m_friendlyName = i18n("ACPI Lid Switch"); 00278 } 00279 else if (m_systemPath.contains("PNP0C0E") || m_systemPath.contains("/LNXSLPBN")) { 00280 m_friendlyName = i18n("ACPI Sleep Button"); 00281 } 00282 else if (m_systemPath.contains("PNP0C0C") || m_systemPath.contains("/LNXPWRBN")) { 00283 m_friendlyName = i18n("ACPI Power Button"); 00284 } 00285 else if (m_parentDevice) { 00286 // Use parent node name 00287 return m_parentDevice->friendlyName(); 00288 } 00289 else { 00290 m_friendlyName = i18n("Generic Event Device"); 00291 } 00292 } 00293 else if (type() == TDEGenericDeviceType::Input) { 00294 if (m_systemPath.contains("PNP0C0D")) { 00295 m_friendlyName = i18n("ACPI Lid Switch"); 00296 } 00297 else if (m_systemPath.contains("PNP0C0E") || m_systemPath.contains("/LNXSLPBN")) { 00298 m_friendlyName = i18n("ACPI Sleep Button"); 00299 } 00300 else if (m_systemPath.contains("PNP0C0C") || m_systemPath.contains("/LNXPWRBN")) { 00301 m_friendlyName = i18n("ACPI Power Button"); 00302 } 00303 else if (m_parentDevice) { 00304 // Use parent node name 00305 return m_parentDevice->friendlyName(); 00306 } 00307 else { 00308 m_friendlyName = i18n("Generic Input Device"); 00309 } 00310 } 00311 // Guess by driver 00312 else if (!m_deviceDriver.isNull()) { 00313 TQString friendlyDriverName = m_deviceDriver.lower(); 00314 friendlyDriverName[0] = friendlyDriverName[0].upper(); 00315 m_friendlyName = i18n("Generic %1 Device").arg(friendlyDriverName); 00316 } 00317 else if (m_systemPath.lower().startsWith("/sys/devices/virtual")) { 00318 TQString friendlyDriverName = systemPath(); 00319 friendlyDriverName.truncate(friendlyDriverName.length()-1); 00320 friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1); 00321 if (!friendlyDriverName.isNull()) { 00322 m_friendlyName = i18n("Virtual Device %1").arg(friendlyDriverName); 00323 } 00324 else { 00325 m_friendlyName = i18n("Unknown Virtual Device"); 00326 } 00327 } 00328 else { 00329 // I really have no idea what this peripheral is; say so! 00330 m_friendlyName = i18n("Unknown Device") + " " + name(); 00331 } 00332 } 00333 00334 return m_friendlyName; 00335 } 00336 00337 TQString TDEGenericDevice::detailedFriendlyName() { 00338 return friendlyName(); 00339 } 00340 00341 #include "tdegenericdevice.moc"