From 0194f444344d973a905edf3917533e89fb6d2244 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 12 Apr 2012 21:25:48 -0500 Subject: [PATCH] Add monitor class to TDE hardware library --- tdecore/hwlibdata/pnpdev/CMakeLists.txt | 2 +- tdecore/hwlibdata/pnpdev/dpy.ids | 8 + tdecore/tdehardwaredevices.cpp | 762 ++++++++++++++++----- tdecore/tdehardwaredevices.h | 858 ++++++++++++++++-------- 4 files changed, 1178 insertions(+), 452 deletions(-) create mode 100644 tdecore/hwlibdata/pnpdev/dpy.ids diff --git a/tdecore/hwlibdata/pnpdev/CMakeLists.txt b/tdecore/hwlibdata/pnpdev/CMakeLists.txt index 61b1df38e..98b117d54 100644 --- a/tdecore/hwlibdata/pnpdev/CMakeLists.txt +++ b/tdecore/hwlibdata/pnpdev/CMakeLists.txt @@ -13,5 +13,5 @@ ##### other data ################################ install( FILES - pnp.ids + pnp.ids dpy.ids DESTINATION ${DATA_INSTALL_DIR}/tdehwlib/pnpdev ) diff --git a/tdecore/hwlibdata/pnpdev/dpy.ids b/tdecore/hwlibdata/pnpdev/dpy.ids new file mode 100644 index 000000000..605ef28f4 --- /dev/null +++ b/tdecore/hwlibdata/pnpdev/dpy.ids @@ -0,0 +1,8 @@ +# This file is provided soley in the interest of cross platform compatibility +# It only contains information on certain generic core system devices that cannot be looked up via another method +# All marks are the property of their owners + +ACR Acer +LPL LG +PHL Philips +SEC Samsung \ No newline at end of file diff --git a/tdecore/tdehardwaredevices.cpp b/tdecore/tdehardwaredevices.cpp index 7aa06feee..fcb70cbc2 100644 --- a/tdecore/tdehardwaredevices.cpp +++ b/tdecore/tdehardwaredevices.cpp @@ -38,6 +38,9 @@ #include #include +// Backlight devices +#include + // Network devices #include #include @@ -64,6 +67,17 @@ // This command will greatly help when attempting to find properties to distinguish one device from another // udevadm info --query=all --path=/sys/.... +// This routine is courtsey of an answer on "Stack Overflow" +// It takes an LSB-first int and makes it an MSB-first int (or vice versa) +unsigned int reverse_bits(register unsigned int x) +{ + x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); + x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2)); + x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4)); + x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8)); + return((x >> 16) | (x << 16)); +} + TDESensorCluster::TDESensorCluster() { label = TQString::null; current = -1; @@ -93,7 +107,7 @@ TQString &TDEGenericDevice::name() { return m_deviceName; } -void TDEGenericDevice::setName(TQString dn) { +void TDEGenericDevice::internalSetName(TQString dn) { m_deviceName = dn; } @@ -101,7 +115,7 @@ TQString &TDEGenericDevice::vendorName() { return m_vendorName; } -void TDEGenericDevice::setVendorName(TQString vn) { +void TDEGenericDevice::internalSetVendorName(TQString vn) { m_vendorName = vn; } @@ -109,7 +123,7 @@ TQString &TDEGenericDevice::vendorModel() { return m_vendorModel; } -void TDEGenericDevice::setVendorModel(TQString vm) { +void TDEGenericDevice::internalSetVendorModel(TQString vm) { m_vendorModel = vm; } @@ -117,7 +131,7 @@ TQString &TDEGenericDevice::serialNumber() { return m_serialNumber; } -void TDEGenericDevice::setSerialNumber(TQString sn) { +void TDEGenericDevice::internalSetSerialNumber(TQString sn) { m_serialNumber = sn; } @@ -125,7 +139,7 @@ TQString &TDEGenericDevice::systemPath() { return m_systemPath; } -void TDEGenericDevice::setSystemPath(TQString sp) { +void TDEGenericDevice::internalSetSystemPath(TQString sp) { m_systemPath = sp; } @@ -133,7 +147,7 @@ TQString &TDEGenericDevice::deviceNode() { return m_deviceNode; } -void TDEGenericDevice::setDeviceNode(TQString sn) { +void TDEGenericDevice::internalSetDeviceNode(TQString sn) { m_deviceNode = sn; } @@ -141,7 +155,7 @@ TQString &TDEGenericDevice::deviceBus() { return m_deviceBus; } -void TDEGenericDevice::setDeviceBus(TQString db) { +void TDEGenericDevice::internalSetDeviceBus(TQString db) { m_deviceBus = db; } @@ -154,7 +168,7 @@ TQString &TDEGenericDevice::vendorID() { return m_vendorID; } -void TDEGenericDevice::setVendorID(TQString id) { +void TDEGenericDevice::internalSetVendorID(TQString id) { m_vendorID = id; m_vendorID.replace("0x", ""); } @@ -163,7 +177,7 @@ TQString &TDEGenericDevice::modelID() { return m_modelID; } -void TDEGenericDevice::setModelID(TQString id) { +void TDEGenericDevice::internalSetModelID(TQString id) { m_modelID = id; m_modelID.replace("0x", ""); } @@ -172,7 +186,7 @@ TQString &TDEGenericDevice::vendorEncoded() { return m_vendorenc; } -void TDEGenericDevice::setVendorEncoded(TQString id) { +void TDEGenericDevice::internalSetVendorEncoded(TQString id) { m_vendorenc = id; } @@ -180,7 +194,7 @@ TQString &TDEGenericDevice::modelEncoded() { return m_modelenc; } -void TDEGenericDevice::setModelEncoded(TQString id) { +void TDEGenericDevice::internalSetModelEncoded(TQString id) { m_modelenc = id; } @@ -188,7 +202,7 @@ TQString &TDEGenericDevice::subVendorID() { return m_subvendorID; } -void TDEGenericDevice::setSubVendorID(TQString id) { +void TDEGenericDevice::internalSetSubVendorID(TQString id) { m_subvendorID = id; m_subvendorID.replace("0x", ""); } @@ -197,7 +211,7 @@ TQString &TDEGenericDevice::PCIClass() { return m_pciClass; } -void TDEGenericDevice::setPCIClass(TQString cl) { +void TDEGenericDevice::internalSetPCIClass(TQString cl) { m_pciClass = cl; m_pciClass.replace("0x", ""); } @@ -206,7 +220,7 @@ TQString &TDEGenericDevice::moduleAlias() { return m_modAlias; } -void TDEGenericDevice::setModuleAlias(TQString ma) { +void TDEGenericDevice::internalSetModuleAlias(TQString ma) { m_modAlias = ma; } @@ -214,7 +228,7 @@ TQString &TDEGenericDevice::deviceDriver() { return m_deviceDriver; } -void TDEGenericDevice::setDeviceDriver(TQString dr) { +void TDEGenericDevice::internalSetDeviceDriver(TQString dr) { m_deviceDriver = dr; } @@ -222,7 +236,7 @@ TQString &TDEGenericDevice::subsystem() { return m_subsystem; } -void TDEGenericDevice::setSubsystem(TQString ss) { +void TDEGenericDevice::internalSetSubsystem(TQString ss) { m_subsystem = ss; } @@ -230,12 +244,12 @@ TQString &TDEGenericDevice::subModelID() { return m_submodelID; } -void TDEGenericDevice::setSubModelID(TQString id) { +void TDEGenericDevice::internalSetSubModelID(TQString id) { m_submodelID = id; m_submodelID.replace("0x", ""); } -void TDEGenericDevice::setParentDevice(TDEGenericDevice* pd) { +void TDEGenericDevice::internalSetParentDevice(TDEGenericDevice* pd) { m_parentDevice = pd; } @@ -251,7 +265,7 @@ bool TDEGenericDevice::blacklistedForUpdate() { return m_blacklistedForUpdate; } -void TDEGenericDevice::setBlacklistedForUpdate(bool bl) { +void TDEGenericDevice::internalSetBlacklistedForUpdate(bool bl) { m_blacklistedForUpdate = bl; } @@ -364,7 +378,7 @@ TDEDiskDeviceType::TDEDiskDeviceType TDEStorageDevice::diskType() { return m_diskType; } -void TDEStorageDevice::setDiskType(TDEDiskDeviceType::TDEDiskDeviceType dt) { +void TDEStorageDevice::internalSetDiskType(TDEDiskDeviceType::TDEDiskDeviceType dt) { m_diskType = dt; } @@ -376,7 +390,7 @@ TDEDiskDeviceStatus::TDEDiskDeviceStatus TDEStorageDevice::diskStatus() { return m_diskStatus; } -void TDEStorageDevice::setDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st) { +void TDEStorageDevice::internalSetDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st) { m_diskStatus = st; } @@ -388,7 +402,7 @@ TQString &TDEStorageDevice::diskLabel() { return m_diskName; } -void TDEStorageDevice::setDiskLabel(TQString dn) { +void TDEStorageDevice::internalSetDiskLabel(TQString dn) { m_diskName = dn; } @@ -396,7 +410,7 @@ bool TDEStorageDevice::mediaInserted() { return m_mediaInserted; } -void TDEStorageDevice::setMediaInserted(bool inserted) { +void TDEStorageDevice::internalSetMediaInserted(bool inserted) { m_mediaInserted = inserted; } @@ -404,7 +418,7 @@ TQString &TDEStorageDevice::fileSystemName() { return m_fileSystemName; } -void TDEStorageDevice::setFileSystemName(TQString fn) { +void TDEStorageDevice::internalSetFileSystemName(TQString fn) { m_fileSystemName = fn; } @@ -412,7 +426,7 @@ TQString &TDEStorageDevice::fileSystemUsage() { return m_fileSystemUsage; } -void TDEStorageDevice::setFileSystemUsage(TQString fu) { +void TDEStorageDevice::internalSetFileSystemUsage(TQString fu) { m_fileSystemUsage = fu; } @@ -420,7 +434,7 @@ TQString &TDEStorageDevice::diskUUID() { return m_diskUUID; } -void TDEStorageDevice::setDiskUUID(TQString id) { +void TDEStorageDevice::internalSetDiskUUID(TQString id) { m_diskUUID = id; } @@ -428,7 +442,7 @@ TQStringList &TDEStorageDevice::holdingDevices() { return m_holdingDevices; } -void TDEStorageDevice::setHoldingDevices(TQStringList hd) { +void TDEStorageDevice::internalSetHoldingDevices(TQStringList hd) { m_holdingDevices = hd; } @@ -436,7 +450,7 @@ TQStringList &TDEStorageDevice::slaveDevices() { return m_slaveDevices; } -void TDEStorageDevice::setSlaveDevices(TQStringList sd) { +void TDEStorageDevice::internalSetSlaveDevices(TQStringList sd) { m_slaveDevices = sd; } @@ -813,7 +827,7 @@ double &TDECPUDevice::frequency() { return m_frequency; } -void TDECPUDevice::setFrequency(double fr) { +void TDECPUDevice::internalSetFrequency(double fr) { m_frequency = fr; } @@ -821,7 +835,7 @@ double &TDECPUDevice::minFrequency() { return m_minfrequency; } -void TDECPUDevice::setMinFrequency(double fr) { +void TDECPUDevice::internalSetMinFrequency(double fr) { m_minfrequency = fr; } @@ -829,7 +843,7 @@ double &TDECPUDevice::maxFrequency() { return m_maxfrequency; } -void TDECPUDevice::setMaxFrequency(double fr) { +void TDECPUDevice::internalSetMaxFrequency(double fr) { m_maxfrequency = fr; } @@ -837,7 +851,7 @@ double &TDECPUDevice::transitionLatency() { return m_transitionlatency; } -void TDECPUDevice::setTransitionLatency(double tl) { +void TDECPUDevice::internalSetTransitionLatency(double tl) { m_transitionlatency = tl; } @@ -845,7 +859,7 @@ TQString &TDECPUDevice::governor() { return m_governor; } -void TDECPUDevice::setGovernor(TQString gr) { +void TDECPUDevice::internalSetGovernor(TQString gr) { m_governor = gr; } @@ -853,7 +867,7 @@ TQString &TDECPUDevice::scalingDriver() { return m_scalingdriver; } -void TDECPUDevice::setScalingDriver(TQString dr) { +void TDECPUDevice::internalSetScalingDriver(TQString dr) { m_scalingdriver = dr; } @@ -861,7 +875,7 @@ TQStringList &TDECPUDevice::dependentProcessors() { return m_tiedprocs; } -void TDECPUDevice::setDependentProcessors(TQStringList dp) { +void TDECPUDevice::internalSetDependentProcessors(TQStringList dp) { m_tiedprocs = dp; } @@ -869,7 +883,7 @@ TQStringList &TDECPUDevice::availableFrequencies() { return m_frequencies; } -void TDECPUDevice::setAvailableFrequencies(TQStringList af) { +void TDECPUDevice::internalSetAvailableFrequencies(TQStringList af) { m_frequencies = af; } @@ -883,7 +897,7 @@ TDESensorClusterMap TDESensorDevice::values() { return m_sensorValues; } -void TDESensorDevice::setValues(TDESensorClusterMap cl) { +void TDESensorDevice::internalSetValues(TDESensorClusterMap cl) { m_sensorValues = cl; } @@ -897,7 +911,7 @@ double TDEBatteryDevice::voltage() { return m_currentVoltage; } -void TDEBatteryDevice::setVoltage(double vt) { +void TDEBatteryDevice::internalSetVoltage(double vt) { m_currentVoltage = vt; } @@ -905,7 +919,7 @@ double TDEBatteryDevice::maximumVoltage() { return m_maximumVoltage; } -void TDEBatteryDevice::setMaximumVoltage(double vt) { +void TDEBatteryDevice::internalSetMaximumVoltage(double vt) { m_maximumVoltage = vt; } @@ -913,7 +927,7 @@ double TDEBatteryDevice::minimumVoltage() { return m_minimumVoltage; } -void TDEBatteryDevice::setMinimumVoltage(double vt) { +void TDEBatteryDevice::internalSetMinimumVoltage(double vt) { m_minimumVoltage = vt; } @@ -921,7 +935,7 @@ double TDEBatteryDevice::maximumDesignVoltage() { return m_maximumDesignVoltage; } -void TDEBatteryDevice::setMaximumDesignVoltage(double vt) { +void TDEBatteryDevice::internalSetMaximumDesignVoltage(double vt) { m_maximumDesignVoltage = vt; } @@ -929,7 +943,7 @@ double TDEBatteryDevice::energy() { return m_currentEnergy; } -void TDEBatteryDevice::setEnergy(double vt) { +void TDEBatteryDevice::internalSetEnergy(double vt) { m_currentEnergy = vt; } @@ -937,7 +951,7 @@ double TDEBatteryDevice::alarmEnergy() { return m_alarmEnergy; } -void TDEBatteryDevice::setAlarmEnergy(double vt) { +void TDEBatteryDevice::internalSetAlarmEnergy(double vt) { m_alarmEnergy = vt; } @@ -945,7 +959,7 @@ double TDEBatteryDevice::maximumEnergy() { return m_maximumEnergy; } -void TDEBatteryDevice::setMaximumEnergy(double vt) { +void TDEBatteryDevice::internalSetMaximumEnergy(double vt) { m_maximumEnergy = vt; } @@ -953,7 +967,7 @@ double TDEBatteryDevice::maximumDesignEnergy() { return m_maximumDesignEnergy; } -void TDEBatteryDevice::setMaximumDesignEnergy(double vt) { +void TDEBatteryDevice::internalSetMaximumDesignEnergy(double vt) { m_maximumDesignEnergy = vt; } @@ -961,7 +975,7 @@ double TDEBatteryDevice::dischargeRate() { return m_dischargeRate; } -void TDEBatteryDevice::setDischargeRate(double vt) { +void TDEBatteryDevice::internalSetDischargeRate(double vt) { m_dischargeRate = vt; } @@ -969,7 +983,7 @@ TQString &TDEBatteryDevice::technology() { return m_technology; } -void TDEBatteryDevice::setTechnology(TQString tc) { +void TDEBatteryDevice::internalSetTechnology(TQString tc) { m_technology = tc; } @@ -977,7 +991,7 @@ TQString &TDEBatteryDevice::status() { return m_status; } -void TDEBatteryDevice::setStatus(TQString tc) { +void TDEBatteryDevice::internalSetStatus(TQString tc) { m_status = tc; } @@ -985,7 +999,7 @@ bool TDEBatteryDevice::installed() { return m_installed; } -void TDEBatteryDevice::setInstalled(bool tc) { +void TDEBatteryDevice::internalSetInstalled(bool tc) { m_installed = tc; } @@ -1003,7 +1017,7 @@ bool TDEMainsPowerDevice::online() { return m_online; } -void TDEMainsPowerDevice::setOnline(bool tc) { +void TDEMainsPowerDevice::internalSetOnline(bool tc) { m_online = tc; } @@ -1021,7 +1035,7 @@ TQString TDENetworkDevice::macAddress() { return m_macAddress; } -void TDENetworkDevice::setMacAddress(TQString ma) { +void TDENetworkDevice::internalSetMacAddress(TQString ma) { m_macAddress = ma; } @@ -1029,7 +1043,7 @@ TQString TDENetworkDevice::state() { return m_state; } -void TDENetworkDevice::setState(TQString st) { +void TDENetworkDevice::internalSetState(TQString st) { m_state = st; } @@ -1037,7 +1051,7 @@ bool TDENetworkDevice::carrierPresent() { return m_carrier; } -void TDENetworkDevice::setCarrierPresent(bool cp) { +void TDENetworkDevice::internalSetCarrierPresent(bool cp) { m_carrier = cp; } @@ -1045,7 +1059,7 @@ bool TDENetworkDevice::dormant() { return m_dormant; } -void TDENetworkDevice::setDormant(bool dm) { +void TDENetworkDevice::internalSetDormant(bool dm) { m_dormant = dm; } @@ -1053,7 +1067,7 @@ TQString TDENetworkDevice::ipV4Address() { return m_ipV4Address; } -void TDENetworkDevice::setIpV4Address(TQString ad) { +void TDENetworkDevice::internalSetIpV4Address(TQString ad) { m_ipV4Address = ad; } @@ -1061,7 +1075,7 @@ TQString TDENetworkDevice::ipV6Address() { return m_ipV6Address; } -void TDENetworkDevice::setIpV6Address(TQString ad) { +void TDENetworkDevice::internalSetIpV6Address(TQString ad) { m_ipV6Address = ad; } @@ -1069,7 +1083,7 @@ TQString TDENetworkDevice::ipV4Netmask() { return m_ipV4Netmask; } -void TDENetworkDevice::setIpV4Netmask(TQString nm) { +void TDENetworkDevice::internalSetIpV4Netmask(TQString nm) { m_ipV4Netmask = nm; } @@ -1077,7 +1091,7 @@ TQString TDENetworkDevice::ipV6Netmask() { return m_ipV6Netmask; } -void TDENetworkDevice::setIpV6Netmask(TQString nm) { +void TDENetworkDevice::internalSetIpV6Netmask(TQString nm) { m_ipV6Netmask = nm; } @@ -1085,7 +1099,7 @@ TQString TDENetworkDevice::ipV4Broadcast() { return m_ipV4Broadcast; } -void TDENetworkDevice::setIpV4Broadcast(TQString br) { +void TDENetworkDevice::internalSetIpV4Broadcast(TQString br) { m_ipV4Broadcast = br; } @@ -1093,7 +1107,7 @@ TQString TDENetworkDevice::ipV6Broadcast() { return m_ipV6Broadcast; } -void TDENetworkDevice::setIpV6Broadcast(TQString br) { +void TDENetworkDevice::internalSetIpV6Broadcast(TQString br) { m_ipV6Broadcast = br; } @@ -1101,7 +1115,7 @@ TQString TDENetworkDevice::ipV4Destination() { return m_ipV4Destination; } -void TDENetworkDevice::setIpV4Destination(TQString ds) { +void TDENetworkDevice::internalSetIpV4Destination(TQString ds) { m_ipV4Destination = ds; } @@ -1109,7 +1123,7 @@ TQString TDENetworkDevice::ipV6Destination() { return m_ipV6Destination; } -void TDENetworkDevice::setIpV6Destination(TQString ds) { +void TDENetworkDevice::internalSetIpV6Destination(TQString ds) { m_ipV6Destination = ds; } @@ -1117,7 +1131,7 @@ double TDENetworkDevice::rxBytes() { return m_rxbytes; } -void TDENetworkDevice::setRxBytes(double rx) { +void TDENetworkDevice::internalSetRxBytes(double rx) { m_rxbytes = rx; } @@ -1125,7 +1139,7 @@ double TDENetworkDevice::txBytes() { return m_txbytes; } -void TDENetworkDevice::setTxBytes(double tx) { +void TDENetworkDevice::internalSetTxBytes(double tx) { m_txbytes = tx; } @@ -1133,7 +1147,7 @@ double TDENetworkDevice::rxPackets() { return m_rxpackets; } -void TDENetworkDevice::setRxPackets(double rx) { +void TDENetworkDevice::internalSetRxPackets(double rx) { m_rxpackets = rx; } @@ -1141,15 +1155,127 @@ double TDENetworkDevice::txPackets() { return m_txpackets; } -void TDENetworkDevice::setTxPackets(double tx) { +void TDENetworkDevice::internalSetTxPackets(double tx) { m_txpackets = tx; } +TDEBacklightDevice::TDEBacklightDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) { +} + +TDEBacklightDevice::~TDEBacklightDevice() { +} + +TDEDisplayPowerLevel::TDEDisplayPowerLevel TDEBacklightDevice::powerLevel() { + return m_powerLevel; +} + +void TDEBacklightDevice::internalSetPowerLevel(TDEDisplayPowerLevel::TDEDisplayPowerLevel pl) { + m_powerLevel = pl; +} + +void TDEBacklightDevice::internalSetMaximumRawBrightness(int br) { + m_maximumBrightness = br; +} + +void TDEBacklightDevice::internalSetCurrentRawBrightness(int br) { + m_currentBrightness = br; +} + +int TDEBacklightDevice::brightnessSteps() { + return m_maximumBrightness + 1; +} + +double TDEBacklightDevice::brightnessPercent() { + return (((m_currentBrightness*1.0)/m_maximumBrightness)*100.0); +} + +bool TDEBacklightDevice::canSetBrightness() { + TQString brightnessnode = systemPath() + "/brightness"; + int rval = access (brightnessnode.ascii(), W_OK); + if (rval == 0) { + return TRUE; + } + else { + return FALSE; + } +} + +int TDEBacklightDevice::rawBrightness() { + return m_currentBrightness; +} + +void TDEBacklightDevice::setRawBrightness(int br) { + TQString brightnessnode = systemPath() + "/brightness"; + TQFile file( brightnessnode ); + if ( file.open( IO_WriteOnly ) ) { + TQString brightnessCommand; + brightnessCommand = TQString("%1").arg(br); + TQTextStream stream( &file ); + stream << brightnessCommand; + file.close(); + } +} + +TDEMonitorDevice::TDEMonitorDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) { +} + +TDEMonitorDevice::~TDEMonitorDevice() { +} + +bool TDEMonitorDevice::connected() { + return m_connected; +} + +void TDEMonitorDevice::internalSetConnected(bool cn) { + m_connected = cn; +} + +bool TDEMonitorDevice::enabled() { + return m_enabled; +} + +void TDEMonitorDevice::internalSetEnabled(bool en) { + m_enabled = en; +} + +TQByteArray TDEMonitorDevice::edid() { + return m_edid; +} + +void TDEMonitorDevice::internalSetEdid(TQByteArray ed) { + m_edid = ed; +} + +TDEResolutionList TDEMonitorDevice::resolutions() { + return m_resolutions; +} + +void TDEMonitorDevice::internalSetResolutions(TDEResolutionList rs) { + m_resolutions = rs; +} + +TQString TDEMonitorDevice::portType() { + return m_portType; +} + +void TDEMonitorDevice::internalSetPortType(TQString pt) { + m_portType = pt; +} + +TDEDisplayPowerLevel::TDEDisplayPowerLevel TDEMonitorDevice::powerLevel() { + return m_powerLevel; +} + +void TDEMonitorDevice::internalSetPowerLevel(TDEDisplayPowerLevel::TDEDisplayPowerLevel pl) { + m_powerLevel = pl; +} + TDEHardwareDevices::TDEHardwareDevices() { // Initialize members pci_id_map = 0; usb_id_map = 0; pnp_id_map = 0; + dpy_id_map = 0; // Set up device list m_deviceList.setAutoDelete( TRUE ); // the list owns the objects @@ -1254,6 +1380,9 @@ TDEHardwareDevices::~TDEHardwareDevices() { if (pnp_id_map) { delete pnp_id_map; } + if (dpy_id_map) { + delete dpy_id_map; + } } void TDEHardwareDevices::rescanDeviceInformation(TDEGenericDevice* hwdevice) { @@ -1406,21 +1535,21 @@ void TDEHardwareDevices::processModifiedCPUs() { curline.remove(0, curline.find(":")+1); curline = curline.stripWhiteSpace(); if (cdevice->name() != curline) modified = true; - cdevice->setName(curline); + cdevice->internalSetName(curline); } if (curline.startsWith("cpu MHz")) { curline.remove(0, curline.find(":")+1); curline = curline.stripWhiteSpace(); if (cdevice->frequency() != curline.toDouble()) modified = true; - cdevice->setFrequency(curline.toDouble()); + cdevice->internalSetFrequency(curline.toDouble()); } if (curline.startsWith("vendor_id")) { curline.remove(0, curline.find(":")+1); curline = curline.stripWhiteSpace(); if (cdevice->vendorName() != curline) modified = true; - cdevice->setVendorName(curline); + cdevice->internalSetVendorName(curline); if (cdevice->vendorEncoded() != curline) modified = true; - cdevice->setVendorEncoded(curline); + cdevice->internalSetVendorEncoded(curline); } } @@ -1498,19 +1627,19 @@ void TDEHardwareDevices::processModifiedCPUs() { // Update CPU information structure if (cdevice->governor() != scalinggovernor) modified = true; - cdevice->setGovernor(scalinggovernor); + cdevice->internalSetGovernor(scalinggovernor); if (cdevice->scalingDriver() != scalingdriver) modified = true; - cdevice->setScalingDriver(scalingdriver); + cdevice->internalSetScalingDriver(scalingdriver); if (cdevice->minFrequency() != minfrequency) modified = true; - cdevice->setMinFrequency(minfrequency); + cdevice->internalSetMinFrequency(minfrequency); if (cdevice->maxFrequency() != maxfrequency) modified = true; - cdevice->setMaxFrequency(maxfrequency); + cdevice->internalSetMaxFrequency(maxfrequency); if (cdevice->transitionLatency() != trlatency) modified = true; - cdevice->setTransitionLatency(trlatency); + cdevice->internalSetTransitionLatency(trlatency); if (cdevice->dependentProcessors().join(" ") != affectedcpulist.join(" ")) modified = true; - cdevice->setDependentProcessors(affectedcpulist); + cdevice->internalSetDependentProcessors(affectedcpulist); if (cdevice->availableFrequencies().join(" ") != frequencylist.join(" ")) modified = true; - cdevice->setAvailableFrequencies(frequencylist); + cdevice->internalSetAvailableFrequencies(frequencylist); } if (modified) { @@ -1865,6 +1994,9 @@ TDEGenericDeviceType::TDEGenericDeviceType readGenericDeviceTypeFromString(TQStr else if (query == "Peripheral") { ret = TDEGenericDeviceType::Peripheral; } + else if (query == "Backlight") { + ret = TDEGenericDeviceType::Backlight; + } else if (query == "Battery") { ret = TDEGenericDeviceType::Battery; } @@ -2051,7 +2183,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDeviceByExternalRules(udev_ } if (desiredSubdeviceType != sdevice->diskType()) { printf("[tdehardwaredevices] Rules file %s used to set device subtype for device at path %s\n\r", device->m_externalRulesFile.ascii(), device->systemPath().ascii()); fflush(stdout); - sdevice->setDiskType(desiredSubdeviceType); + sdevice->internalSetDiskType(desiredSubdeviceType); } } } @@ -2144,7 +2276,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDeviceByExternalRules(udev_ // Process blacklist entries rulesFile.setGroup("DeviceSettings"); - device->setBlacklistedForUpdate(rulesFile.readBoolEntry("UPDATE_BLACKLISTED", device->blacklistedForUpdate())); + device->internalSetBlacklistedForUpdate(rulesFile.readBoolEntry("UPDATE_BLACKLISTED", device->blacklistedForUpdate())); } } ++it; @@ -2385,6 +2517,9 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD // Try to at least generally classify unclassified devices if (device == 0) { + if (devicesubsystem == "backlight") { + if (!device) device = new TDEBacklightDevice(TDEGenericDeviceType::Backlight); + } if (systempath.lower().startsWith("/sys/devices/virtual")) { if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::OtherVirtual); } @@ -2422,7 +2557,12 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::MDIO); } if (devicesubsystem == "graphics") { - if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + if (devicenode.isNull()) { // GPUs do not have associated device nodes + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + } + else { + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Platform); + } } if ((devicesubsystem == "event_source") || (devicesubsystem == "rtc")) { @@ -2435,7 +2575,12 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::IEEE1394); } if (devicesubsystem == "drm") { - if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Monitor); + if (devicenode.isNull()) { // Monitors do not have associated device nodes + if (!device) device = new TDEMonitorDevice(TDEGenericDeviceType::Monitor); + } + else { + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Platform); + } } if (devicesubsystem == "serio") { if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Serial); @@ -2482,16 +2627,18 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (!device) device = new TDEBatteryDevice(TDEGenericDeviceType::Battery); } } - if (devicesubsystem == "backlight") { - if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::PowerSupply); - } // Moderate accuracy classification, if PCI device class is available // See http://www.acm.uiuc.edu/sigops/roll_your_own/7.c.1.html for codes and meanings if (!devicepciclass.isNull()) { // Pre PCI 2.0 if (devicepciclass.startsWith("0001")) { - if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + if (devicenode.isNull()) { // GPUs do not have associated device nodes + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + } + else { + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Platform); + } } // Post PCI 2.0 if (devicepciclass.startsWith("01")) { @@ -2501,7 +2648,12 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (!device) device = new TDENetworkDevice(TDEGenericDeviceType::Network); } if (devicepciclass.startsWith("03")) { - if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + if (devicenode.isNull()) { // GPUs do not have associated device nodes + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::GPU); + } + else { + if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::Platform); + } } if (devicepciclass.startsWith("04")) { if (!device) device = new TDEGenericDevice(TDEGenericDeviceType::OtherMultimedia); @@ -2541,19 +2693,19 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD } // Set preliminary basic device information - device->setName(devicename); - device->setDeviceNode(devicenode); - device->setSystemPath(systempath); - device->setVendorID(devicevendorid); - device->setModelID(devicemodelid); - device->setVendorEncoded(devicevendoridenc); - device->setModelEncoded(devicemodelidenc); - device->setSubVendorID(devicesubvendorid); - device->setSubModelID(devicesubmodelid); - device->setModuleAlias(devicemodalias); - device->setDeviceDriver(devicedriver); - device->setSubsystem(devicesubsystem); - device->setPCIClass(devicepciclass); + device->internalSetName(devicename); + device->internalSetDeviceNode(devicenode); + device->internalSetSystemPath(systempath); + device->internalSetVendorID(devicevendorid); + device->internalSetModelID(devicemodelid); + device->internalSetVendorEncoded(devicevendoridenc); + device->internalSetModelEncoded(devicemodelidenc); + device->internalSetSubVendorID(devicesubvendorid); + device->internalSetSubModelID(devicesubmodelid); + device->internalSetModuleAlias(devicemodalias); + device->internalSetDeviceDriver(devicedriver); + device->internalSetSubsystem(devicesubsystem); + device->internalSetPCIClass(devicepciclass); updateBlacklists(device, dev); @@ -2644,9 +2796,9 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD TQString filesystemtype(udev_device_get_property_value(dev, "ID_FS_TYPE")); TQString filesystemusage(udev_device_get_property_value(dev, "ID_FS_USAGE")); - device->setVendorName(devicevendor); - device->setVendorModel(devicemodel); - device->setDeviceBus(devicebus); + device->internalSetVendorName(devicevendor); + device->internalSetVendorModel(devicemodel); + device->internalSetDeviceBus(devicebus); TDEStorageDevice* sdevice = static_cast(device); @@ -2655,7 +2807,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (force_full_classification) { disktype = classifyDiskType(dev, devicebus, devicetypestring, systempath, devicevendor, devicemodel, filesystemtype, devicedriver); - sdevice->setDiskType(disktype); + sdevice->internalSetDiskType(disktype); device = classifyUnknownDeviceByExternalRules(dev, device, true); // Check external rules for possible subtype overrides disktype = sdevice->diskType(); // The type can be overridden by an external rule } @@ -2727,7 +2879,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (TQString(udev_device_get_property_value(dev, "ID_CDROM_MEDIA_STATE")).upper() == "BLANK") { diskstatus = diskstatus | TDEDiskDeviceStatus::Blank; } - sdevice->setMediaInserted(!(TQString(udev_device_get_property_value(dev, "ID_CDROM_MEDIA")) == "0")); + sdevice->internalSetMediaInserted(!(TQString(udev_device_get_property_value(dev, "ID_CDROM_MEDIA")) == "0")); } if (disktype & TDEDiskDeviceType::Zip) { @@ -2742,7 +2894,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD namefile.close(); } if (!zipsize.isNull()) { - sdevice->setMediaInserted((zipsize.toInt() != 0)); + sdevice->internalSetMediaInserted((zipsize.toInt() != 0)); } } @@ -2792,13 +2944,13 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD udev_device_unref(slavedev); } - sdevice->setDiskType(disktype); - sdevice->setDiskUUID(diskuuid); - sdevice->setDiskStatus(diskstatus); - sdevice->setFileSystemName(filesystemtype); - sdevice->setFileSystemUsage(filesystemusage); - sdevice->setSlaveDevices(slaveDeviceNodes); - sdevice->setHoldingDevices(holdingDeviceNodes); + sdevice->internalSetDiskType(disktype); + sdevice->internalSetDiskUUID(diskuuid); + sdevice->internalSetDiskStatus(diskstatus); + sdevice->internalSetFileSystemName(filesystemtype); + sdevice->internalSetFileSystemUsage(filesystemusage); + sdevice->internalSetSlaveDevices(slaveDeviceNodes); + sdevice->internalSetHoldingDevices(holdingDeviceNodes); // Clean up disk label if ((sdevice->isDiskOfType(TDEDiskDeviceType::CDROM)) @@ -2823,7 +2975,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD } } - sdevice->setDiskLabel(disklabel); + sdevice->internalSetDiskLabel(disklabel); } if (device->type() == TDEGenericDeviceType::Network) { @@ -2861,18 +3013,18 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD TQString line; line = stream.readLine(); if (nodename == "address") { - ndevice->setMacAddress(line); + ndevice->internalSetMacAddress(line); } if (nodename == "carrier") { - ndevice->setCarrierPresent(line.toInt()); + ndevice->internalSetCarrierPresent(line.toInt()); } if (nodename == "dormant") { - ndevice->setDormant(line.toInt()); + ndevice->internalSetDormant(line.toInt()); } if (nodename == "operstate") { TQString friendlyState = line.lower(); friendlyState[0] = friendlyState[0].upper(); - ndevice->setState(friendlyState); + ndevice->internalSetState(friendlyState); } file.close(); } @@ -2899,44 +3051,44 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD if (s == 0) { TQString address(host); if (family == AF_INET) { - ndevice->setIpV4Address(address); + ndevice->internalSetIpV4Address(address); } if (family == AF_INET6) { address.truncate(address.findRev("%")); - ndevice->setIpV6Address(address); + ndevice->internalSetIpV6Address(address); } } s = getnameinfo(ifa->ifa_netmask, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s == 0) { TQString address(host); if (family == AF_INET) { - ndevice->setIpV4Netmask(address); + ndevice->internalSetIpV4Netmask(address); } if (family == AF_INET6) { address.truncate(address.findRev("%")); - ndevice->setIpV6Netmask(address); + ndevice->internalSetIpV6Netmask(address); } } s = getnameinfo(ifa->ifa_ifu.ifu_broadaddr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s == 0) { TQString address(host); if (family == AF_INET) { - ndevice->setIpV4Broadcast(address); + ndevice->internalSetIpV4Broadcast(address); } if (family == AF_INET6) { address.truncate(address.findRev("%")); - ndevice->setIpV6Broadcast(address); + ndevice->internalSetIpV6Broadcast(address); } } s = getnameinfo(ifa->ifa_ifu.ifu_dstaddr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s == 0) { TQString address(host); if (family == AF_INET) { - ndevice->setIpV4Destination(address); + ndevice->internalSetIpV4Destination(address); } if (family == AF_INET6) { address.truncate(address.findRev("%")); - ndevice->setIpV6Destination(address); + ndevice->internalSetIpV6Destination(address); } } } @@ -2963,16 +3115,16 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD TQString line; line = stream.readLine(); if (nodename == "rx_bytes") { - ndevice->setRxBytes(line.toDouble()); + ndevice->internalSetRxBytes(line.toDouble()); } if (nodename == "tx_bytes") { - ndevice->setTxBytes(line.toDouble()); + ndevice->internalSetTxBytes(line.toDouble()); } if (nodename == "rx_packets") { - ndevice->setRxPackets(line.toDouble()); + ndevice->internalSetRxPackets(line.toDouble()); } if (nodename == "tx_packets") { - ndevice->setTxPackets(line.toDouble()); + ndevice->internalSetTxPackets(line.toDouble()); } file.close(); } @@ -3035,7 +3187,7 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD } TDESensorDevice* sdevice = dynamic_cast(device); - sdevice->setValues(sensors); + sdevice->internalSetValues(sensors); } if (device->type() == TDEGenericDeviceType::Battery) { @@ -3057,43 +3209,43 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD TQString line; line = stream.readLine(); if (nodename == "alarm") { - bdevice->setAlarmEnergy(line.toDouble()/1000000.0); + bdevice->internalSetAlarmEnergy(line.toDouble()/1000000.0); } if (nodename == "energy_full") { - bdevice->setMaximumEnergy(line.toDouble()/1000000.0); + bdevice->internalSetMaximumEnergy(line.toDouble()/1000000.0); } if (nodename == "energy_full_design") { - bdevice->setMaximumDesignEnergy(line.toDouble()/1000000.0); + bdevice->internalSetMaximumDesignEnergy(line.toDouble()/1000000.0); } if (nodename == "energy_now") { - bdevice->setEnergy(line.toDouble()/1000000.0); + bdevice->internalSetEnergy(line.toDouble()/1000000.0); } if (nodename == "manufacturer") { - bdevice->setVendorName(line.stripWhiteSpace()); + bdevice->internalSetVendorName(line.stripWhiteSpace()); } if (nodename == "model_name") { - bdevice->setVendorModel(line.stripWhiteSpace()); + bdevice->internalSetVendorModel(line.stripWhiteSpace()); } if (nodename == "power_now") { - bdevice->setDischargeRate(line.toDouble()/1000000.0); + bdevice->internalSetDischargeRate(line.toDouble()/1000000.0); } if (nodename == "present") { - bdevice->setInstalled(line.toInt()); + bdevice->internalSetInstalled(line.toInt()); } if (nodename == "serial_number") { - bdevice->setSerialNumber(line.stripWhiteSpace()); + bdevice->internalSetSerialNumber(line.stripWhiteSpace()); } if (nodename == "status") { - bdevice->setStatus(line); + bdevice->internalSetStatus(line); } if (nodename == "technology") { - bdevice->setTechnology(line); + bdevice->internalSetTechnology(line); } if (nodename == "voltage_min_design") { - bdevice->setMinimumVoltage(line.toDouble()/1000000.0); + bdevice->internalSetMinimumVoltage(line.toDouble()/1000000.0); } if (nodename == "voltage_now") { - bdevice->setVoltage(line.toDouble()/1000000.0); + bdevice->internalSetVoltage(line.toDouble()/1000000.0); } file.close(); } @@ -3121,37 +3273,165 @@ TDEGenericDevice* TDEHardwareDevices::classifyUnknownDevice(udev_device* dev, TD TQString line; line = stream.readLine(); if (nodename == "manufacturer") { - pdevice->setVendorName(line.stripWhiteSpace()); + pdevice->internalSetVendorName(line.stripWhiteSpace()); } if (nodename == "model_name") { - pdevice->setVendorModel(line.stripWhiteSpace()); + pdevice->internalSetVendorModel(line.stripWhiteSpace()); } if (nodename == "online") { - pdevice->setOnline(line.toInt()); + pdevice->internalSetOnline(line.toInt()); } if (nodename == "serial_number") { - pdevice->setSerialNumber(line.stripWhiteSpace()); + pdevice->internalSetSerialNumber(line.stripWhiteSpace()); + } + file.close(); + } + ++valuesdirit; + } + } + } + + if (device->type() == TDEGenericDeviceType::Backlight) { + // Populate all backlight values + TDEBacklightDevice* bdevice = dynamic_cast(device); + TQString valuesnodename = systempath + "/"; + TQDir valuesdir(valuesnodename); + valuesdir.setFilter(TQDir::All); + TQString nodename; + const TQFileInfoList *dirlist = valuesdir.entryInfoList(); + if (dirlist) { + TQFileInfoListIterator valuesdirit(*dirlist); + TQFileInfo *dirfi; + while ( (dirfi = valuesdirit.current()) != 0 ) { + nodename = dirfi->fileName(); + TQFile file( valuesnodename + nodename ); + if ( file.open( IO_ReadOnly ) ) { + TQTextStream stream( &file ); + TQString line; + line = stream.readLine(); + if (nodename == "bl_power") { + TDEDisplayPowerLevel::TDEDisplayPowerLevel pl = TDEDisplayPowerLevel::On; + int rpl = line.toInt(); + if (rpl == FB_BLANK_UNBLANK) { + pl = TDEDisplayPowerLevel::On; + } + else if (rpl == FB_BLANK_POWERDOWN) { + pl = TDEDisplayPowerLevel::Off; + } + bdevice->internalSetPowerLevel(pl); + } + if (nodename == "max_brightness") { + bdevice->internalSetMaximumRawBrightness(line.toInt()); + } + if (nodename == "actual_brightness") { + bdevice->internalSetCurrentRawBrightness(line.toInt()); + } + file.close(); + } + ++valuesdirit; + } + } + } + + if (device->type() == TDEGenericDeviceType::Monitor) { + TDEMonitorDevice* mdevice = dynamic_cast(device); + TQString valuesnodename = systempath + "/"; + TQDir valuesdir(valuesnodename); + valuesdir.setFilter(TQDir::All); + TQString nodename; + const TQFileInfoList *dirlist = valuesdir.entryInfoList(); + if (dirlist) { + TQFileInfoListIterator valuesdirit(*dirlist); + TQFileInfo *dirfi; + while ( (dirfi = valuesdirit.current()) != 0 ) { + nodename = dirfi->fileName(); + TQFile file( valuesnodename + nodename ); + if ( file.open( IO_ReadOnly ) ) { + TQTextStream stream( &file ); + TQString line; + line = stream.readLine(); + if (nodename == "status") { + mdevice->internalSetConnected(line.lower() == "connected"); + } + if (nodename == "enabled") { + mdevice->internalSetEnabled(line.lower() == "enabled"); + } + if (nodename == "modes") { + TQStringList resinfo; + TQStringList resolutionsStringList = line.upper(); + while ((!stream.atEnd()) && (!line.isNull())) { + line = stream.readLine(); + if (!line.isNull()) { + resolutionsStringList.append(line.upper()); + } + } + TDEResolutionList resolutions; + resolutions.clear(); + for (TQStringList::Iterator it = resolutionsStringList.begin(); it != resolutionsStringList.end(); ++it) { + resinfo = TQStringList::split('X', *it, true); + resolutions.append(TDEResolutionPair((*(resinfo.at(0))).toUInt(), (*(resinfo.at(1))).toUInt())); + } + mdevice->internalSetResolutions(resolutions); + } + if (nodename == "dpms") { + TDEDisplayPowerLevel::TDEDisplayPowerLevel pl = TDEDisplayPowerLevel::On; + if (line == "On") { + pl = TDEDisplayPowerLevel::On; + } + else if (line == "Standby") { + pl = TDEDisplayPowerLevel::Standby; + } + else if (line == "Suspend") { + pl = TDEDisplayPowerLevel::Suspend; + } + else if (line == "Off") { + pl = TDEDisplayPowerLevel::Off; + } + mdevice->internalSetPowerLevel(pl); } file.close(); } ++valuesdirit; } } + + TQString genericPortName = mdevice->systemPath(); + genericPortName.remove(0, genericPortName.find("-")+1); + genericPortName.truncate(genericPortName.findRev("-")); + mdevice->internalSetPortType(genericPortName); + + if (mdevice->connected()) { + TQPair monitor_info = getEDIDMonitorName(device->systemPath()); + if (!monitor_info.first.isNull()) { + mdevice->internalSetVendorName(monitor_info.first); + mdevice->internalSetVendorModel(monitor_info.second); + mdevice->m_friendlyName = monitor_info.first + " " + monitor_info.second; + } + mdevice->internalSetEdid(getEDID(mdevice->systemPath())); + } + else { + mdevice->m_friendlyName = i18n("Disconnected %1 Port").arg(genericPortName); + mdevice->internalSetEdid(TQByteArray()); + mdevice->internalSetResolutions(TDEResolutionList()); + } + + // FIXME + // Much of the code in libkrandr should be integrated into/interfaced with this library } // Set basic device information again, as some information may have changed - device->setName(devicename); - device->setDeviceNode(devicenode); - device->setSystemPath(systempath); - device->setVendorID(devicevendorid); - device->setModelID(devicemodelid); - device->setVendorEncoded(devicevendoridenc); - device->setModelEncoded(devicemodelidenc); - device->setSubVendorID(devicesubvendorid); - device->setSubModelID(devicesubmodelid); - device->setDeviceDriver(devicedriver); - device->setSubsystem(devicesubsystem); - device->setPCIClass(devicepciclass); + device->internalSetName(devicename); + device->internalSetDeviceNode(devicenode); + device->internalSetSystemPath(systempath); + device->internalSetVendorID(devicevendorid); + device->internalSetModelID(devicemodelid); + device->internalSetVendorEncoded(devicevendoridenc); + device->internalSetModelEncoded(devicemodelidenc); + device->internalSetSubVendorID(devicesubvendorid); + device->internalSetSubModelID(devicesubmodelid); + device->internalSetDeviceDriver(devicedriver); + device->internalSetSubsystem(devicesubsystem); + device->internalSetPCIClass(devicepciclass); return device; } @@ -3163,7 +3443,7 @@ void TDEHardwareDevices::updateBlacklists(TDEGenericDevice* hwdevice, udev_devic // For "U3 System" fake CD if ((hwdevice->vendorID() == "08ec") && (hwdevice->modelID() == "0020") && (TQString(udev_device_get_property_value(dev, "ID_TYPE")) == "cd")) { - hwdevice->setBlacklistedForUpdate(true); + hwdevice->internalSetBlacklistedForUpdate(true); } } @@ -3247,7 +3527,7 @@ void TDEHardwareDevices::updateParentDeviceInformation(TDEGenericDevice* hwdevic } } - hwdevice->setParentDevice(parentdevice); + hwdevice->internalSetParentDevice(parentdevice); } void TDEHardwareDevices::updateParentDeviceInformation() { @@ -3276,7 +3556,7 @@ void TDEHardwareDevices::addCoreSystemDevices() { nodename = dirfi->fileName(); if (nodename != "." && nodename != "..") { hwdevice = new TDEGenericDevice(TDEGenericDeviceType::Root); - hwdevice->setSystemPath(dirfi->absFilePath()); + hwdevice->internalSetSystemPath(dirfi->absFilePath()); m_deviceList.append(hwdevice); } ++devicesdirit; @@ -3301,7 +3581,7 @@ void TDEHardwareDevices::addCoreSystemDevices() { line = line.stripWhiteSpace(); processorNumber = line.toInt(); hwdevice = new TDECPUDevice(TDEGenericDeviceType::CPU); - hwdevice->setSystemPath(TQString("/sys/devices/system/cpu/cpu%1").arg(processorNumber)); + hwdevice->internalSetSystemPath(TQString("/sys/devices/system/cpu/cpu%1").arg(processorNumber)); m_deviceList.append(hwdevice); #if 0 // Set up CPU information monitor @@ -3609,6 +3889,156 @@ TQString TDEHardwareDevices::findPNPDeviceName(TQString pnpid) { } } +TQString TDEHardwareDevices::findMonitorManufacturerName(TQString dpyid) { + TQString friendlyName = TQString::null; + + if (!dpy_id_map) { + dpy_id_map = new TDEDeviceIDMap; + + TQStringList hardware_info_directories(KGlobal::dirs()->resourceDirs("data")); + TQString hardware_info_directory_suffix("tdehwlib/pnpdev/"); + TQString hardware_info_directory; + TQString database_filename; + + for ( TQStringList::Iterator it = hardware_info_directories.begin(); it != hardware_info_directories.end(); ++it ) { + hardware_info_directory = (*it); + hardware_info_directory += hardware_info_directory_suffix; + + if (KGlobal::dirs()->exists(hardware_info_directory)) { + database_filename = hardware_info_directory + "dpy.ids"; + if (TQFile::exists(database_filename)) { + break; + } + } + } + + if (!TQFile::exists(database_filename)) { + printf("[tdehardwaredevices] Unable to locate monitor information database dpy.ids\n\r"); fflush(stdout); + return i18n("Unknown Monitor Device"); + } + + TQFile database(database_filename); + if (database.open(IO_ReadOnly)) { + TQTextStream stream(&database); + TQString line; + TQString dpyID; + TQString vendorName; + TQString deviceMapKey; + TQStringList devinfo; + while (!stream.atEnd()) { + line = stream.readLine(); + if ((!line.upper().startsWith("\t")) && (!line.upper().startsWith("#"))) { + devinfo = TQStringList::split('\t', line, false); + if (devinfo.count() > 1) { + dpyID = *(devinfo.at(0)); + vendorName = *(devinfo.at(1));; + vendorName = vendorName.stripWhiteSpace(); + deviceMapKey = dpyID.upper().stripWhiteSpace(); + if (!deviceMapKey.isNull()) { + dpy_id_map->insert(deviceMapKey, vendorName, true); + } + } + } + } + database.close(); + } + else { + printf("[tdehardwaredevices] Unable to open monitor information database %s\n\r", database_filename.ascii()); fflush(stdout); + } + } + + if (dpy_id_map) { + TQString deviceName; + + deviceName = (*dpy_id_map)[dpyid]; + + return deviceName; + } + else { + return i18n("Unknown Monitor Device"); + } +} + +TQPair TDEHardwareDevices::getEDIDMonitorName(TQString path) { + TQPair edid; + TQByteArray binaryedid = getEDID(path); + if (binaryedid.isNull()) { + return TQPair(TQString::null, TQString::null); + } + + // Get the manufacturer ID + unsigned char letter_1 = ((binaryedid[8]>>2) & 0x1F) + 0x40; + unsigned char letter_2 = (((binaryedid[8] & 0x03) << 3) | ((binaryedid[9]>>5) & 0x07)) + 0x40; + unsigned char letter_3 = (binaryedid[9] & 0x1F) + 0x40; + TQChar qletter_1 = TQChar(letter_1); + TQChar qletter_2 = TQChar(letter_2); + TQChar qletter_3 = TQChar(letter_3); + TQString manufacturer_id = TQString("%1%2%3").arg(qletter_1).arg(qletter_2).arg(qletter_3); + + // Get the model ID + unsigned int raw_model_id = (((binaryedid[10] << 8) | binaryedid[11]) << 16) & 0xFFFF0000; + // Reverse the bit order + unsigned int model_id = reverse_bits(raw_model_id); + + // Try to get the model name + bool has_friendly_name = false; + unsigned char descriptor_block[18]; + int i; + for (i=72;i<90;i++) { + descriptor_block[i-72] = binaryedid[i] & 0xFF; + } + if ((descriptor_block[0] != 0) || (descriptor_block[1] != 0) || (descriptor_block[3] != 0xFC)) { + for (i=90;i<108;i++) { + descriptor_block[i-90] = binaryedid[i] & 0xFF; + } + if ((descriptor_block[0] != 0) || (descriptor_block[1] != 0) || (descriptor_block[3] != 0xFC)) { + for (i=108;i<126;i++) { + descriptor_block[i-108] = binaryedid[i] & 0xFF; + } + } + } + + TQString monitor_name; + if ((descriptor_block[0] == 0) && (descriptor_block[1] == 0) && (descriptor_block[3] == 0xFC)) { + char* pos = strchr((char *)(descriptor_block+5), '\n'); + if (pos) { + *pos = 0; + has_friendly_name = true; + monitor_name = TQString((char *)(descriptor_block+5)); + } + else { + has_friendly_name = false; + } + } + + // Look up manufacturer name + TQString manufacturer_name = findMonitorManufacturerName(manufacturer_id); + if (manufacturer_name.isNull()) { + manufacturer_name = manufacturer_id; + } + + if (has_friendly_name) { + edid.first = TQString("%1").arg(manufacturer_name); + edid.second = TQString("%2").arg(monitor_name); + } + else { + edid.first = TQString("%1").arg(manufacturer_name); + edid.second = TQString("0x%2").arg(model_id, 0, 16); + } + + return edid; +} + +TQByteArray TDEHardwareDevices::getEDID(TQString path) { + TQFile file(TQString("%1/edid").arg(path)); + if (!file.open (IO_ReadOnly)) { + return TQByteArray(); + } + TQByteArray binaryedid = file.readAll(); + file.close(); + return binaryedid; +} + TQString TDEHardwareDevices::getFriendlyDeviceTypeStringFromType(TDEGenericDeviceType::TDEGenericDeviceType query) { TQString ret = "Unknown Device"; @@ -3694,6 +4124,9 @@ TQString TDEHardwareDevices::getFriendlyDeviceTypeStringFromType(TDEGenericDevic else if (query == TDEGenericDeviceType::Peripheral) { ret = i18n("Peripheral"); } + else if (query == TDEGenericDeviceType::Backlight) { + ret = i18n("Backlight"); + } else if (query == TDEGenericDeviceType::Battery) { ret = i18n("Battery"); } @@ -3834,6 +4267,9 @@ TQPixmap TDEHardwareDevices::getDeviceTypeIconFromType(TDEGenericDeviceType::TDE else if (query == TDEGenericDeviceType::Peripheral) { ret = DesktopIcon("kcmpci", size); } + else if (query == TDEGenericDeviceType::Backlight) { + ret = DesktopIcon("kscreensaver", size); // FIXME + } else if (query == TDEGenericDeviceType::Battery) { ret = DesktopIcon("energy", size); } diff --git a/tdecore/tdehardwaredevices.h b/tdecore/tdehardwaredevices.h index f25d80eda..c230474a1 100644 --- a/tdecore/tdehardwaredevices.h +++ b/tdecore/tdehardwaredevices.h @@ -69,6 +69,7 @@ enum TDEGenericDeviceType { Serial, Parallel, Peripheral, + Backlight, Battery, PowerSupply, Dock, @@ -213,41 +214,21 @@ class TDECORE_EXPORT TDEGenericDevice */ TQString &name(); - /** - * @param a TQString with the device name, if any - */ - void setName(TQString dn); - /** * @return a TQString with the vendor name, if any */ TQString &vendorName(); - /** - * @param a TQString with the vendor name, if any - */ - void setVendorName(TQString vn); - /** * @return a TQString with the vendor model, if any */ TQString &vendorModel(); - /** - * @param a TQString with the vendor model, if any - */ - void setVendorModel(TQString vm); - /** * @return a TQString with the serial number, if any */ TQString &serialNumber(); - /** - * @param a TQString with the serial number, if any - */ - void setSerialNumber(TQString sn); - /** * @return a TQString with a friendly name * @@ -261,11 +242,6 @@ class TDECORE_EXPORT TDEGenericDevice */ TQString &deviceBus(); - /** - * @param a TQString with the device bus name, if any - */ - void setDeviceBus(TQString db); - /** * @return a TQString with the system path, if any * @@ -274,167 +250,212 @@ class TDECORE_EXPORT TDEGenericDevice TQString &systemPath(); /** - * @param a TQString with the system path, if any + * @return a TQString with the system device node, if any * * This method is non-portable, so be careful! */ - void setSystemPath(TQString sp); + TQString &deviceNode(); /** - * @return a TQString with the system device node, if any - * - * This method is non-portable, so be careful! + * @return true if this device has been blacklisted for update actions */ - TQString &deviceNode(); + bool blacklistedForUpdate(); /** - * @param a TQString with the system device node, if any - * - * This method is non-portable, so be careful! + * @return a TQString containing a unique identifier for this device */ - void setDeviceNode(TQString sn); + TQString uniqueID(); /** - * @return true if this device has been blacklisted for update actions + * @return a TQString with the vendor ID, if any */ - bool blacklistedForUpdate(); + TQString &vendorID(); /** - * @param bl true if this device has been blacklisted for update actions + * @return a TQString with the model ID, if any */ - void setBlacklistedForUpdate(bool bl); + TQString &modelID(); /** - * @return a TQString containing a unique identifier for this device + * @return a TQString with the encoded vendor, if any */ - TQString uniqueID(); + TQString &vendorEncoded(); /** - * @return a TQString with the vendor ID, if any + * @return a TQString with the encoded model, if any */ - TQString &vendorID(); + TQString &modelEncoded(); /** - * @param a TQString with the vendor ID, if any + * @return a TQString with the subvendor ID, if any */ - void setVendorID(TQString id); + TQString &subVendorID(); /** - * @return a TQString with the model ID, if any + * @return a TQString with the submodel ID, if any */ - TQString &modelID(); + TQString &subModelID(); /** - * @param a TQString with the model ID, if any + * @return a TQString with the PCI device class, if any */ - void setModelID(TQString id); + TQString &PCIClass(); /** - * @return a TQString with the encoded vendor, if any + * @return a TQString with the module alias string, if any */ - TQString &vendorEncoded(); + TQString &moduleAlias(); /** - * @param a TQString with the encoded vendor, if any + * @return a TQString with the device driver, if any */ - void setVendorEncoded(TQString id); + TQString &deviceDriver(); /** - * @return a TQString with the encoded model, if any + * @return a TQString with the subsystem type, if any */ - TQString &modelEncoded(); + TQString &subsystem(); /** - * @param a TQString with the encoded model, if any + * @return a TDEGenericDevice* with the parent device, if any */ - void setModelEncoded(TQString id); + TDEGenericDevice* parentDevice(); /** - * @return a TQString with the subvendor ID, if any + * @return a TQString containing the friendly type name */ - TQString &subVendorID(); + virtual TQString friendlyDeviceType(); /** - * @param a TQString with the subvendor ID, if any + * @return a TQString containing the device bus ID, if any */ - void setSubVendorID(TQString id); + TQString busID(); /** - * @return a TQString with the submodel ID, if any + * Get an icon for this device + * @param size a KIcon::StdSizes structure specifying the desired icon size + * @return a TQPixmap containing the icon for the specified type */ - TQString &subModelID(); + virtual TQPixmap icon(KIcon::StdSizes size); + protected: /** - * @param a TQString with the submodel ID, if any + * @param a TQString with the device name, if any + * @internal */ - void setSubModelID(TQString id); + void internalSetName(TQString dn); /** - * @return a TQString with the PCI device class, if any + * @param a TQString with the vendor name, if any + * @internal */ - TQString &PCIClass(); + void internalSetVendorName(TQString vn); /** - * @param a TQString with the PCI device class, if any + * @param a TQString with the vendor model, if any + * @internal */ - void setPCIClass(TQString cl); + void internalSetVendorModel(TQString vm); /** - * @return a TQString with the module alias string, if any + * @param a TQString with the serial number, if any + * @internal */ - TQString &moduleAlias(); + void internalSetSerialNumber(TQString sn); /** - * @param a TQString with the module alias string, if any + * @param a TQString with the device bus name, if any + * @internal */ - void setModuleAlias(TQString ma); + void internalSetDeviceBus(TQString db); /** - * @return a TQString with the device driver, if any + * @param a TQString with the system path, if any + * @internal + * + * This method is non-portable, so be careful! */ - TQString &deviceDriver(); + void internalSetSystemPath(TQString sp); /** - * @param a TQString with the device driver, if any + * @param a TQString with the system device node, if any + * @internal + * + * This method is non-portable, so be careful! */ - void setDeviceDriver(TQString dr); + void internalSetDeviceNode(TQString sn); /** - * @return a TQString with the subsystem type, if any + * @param bl true if this device has been blacklisted for update actions + * @internal */ - TQString &subsystem(); + void internalSetBlacklistedForUpdate(bool bl); /** - * @param a TQString with the subsystem type, if any + * @param a TQString with the vendor ID, if any + * @internal */ - void setSubsystem(TQString ss); + void internalSetVendorID(TQString id); /** - * @param a TDEGenericDevice* with the parent device, if any + * @param a TQString with the model ID, if any + * @internal */ - void setParentDevice(TDEGenericDevice* pd); + void internalSetModelID(TQString id); /** - * @return a TDEGenericDevice* with the parent device, if any + * @param a TQString with the encoded vendor, if any + * @internal */ - TDEGenericDevice* parentDevice(); + void internalSetVendorEncoded(TQString id); /** - * @return a TQString containing the friendly type name + * @param a TQString with the encoded model, if any + * @internal */ - virtual TQString friendlyDeviceType(); + void internalSetModelEncoded(TQString id); /** - * @return a TQString containing the device bus ID, if any + * @param a TQString with the subvendor ID, if any + * @internal */ - TQString busID(); + void internalSetSubVendorID(TQString id); /** - * Get an icon for this device - * @param size a KIcon::StdSizes structure specifying the desired icon size - * @return a TQPixmap containing the icon for the specified type + * @param a TQString with the submodel ID, if any + * @internal */ - virtual TQPixmap icon(KIcon::StdSizes size); + void internalSetSubModelID(TQString id); + + /** + * @param a TQString with the PCI device class, if any + * @internal + */ + void internalSetPCIClass(TQString cl); + + /** + * @param a TQString with the module alias string, if any + * @internal + */ + void internalSetModuleAlias(TQString ma); + + /** + * @param a TQString with the device driver, if any + * @internal + */ + void internalSetDeviceDriver(TQString dr); + + /** + * @param a TQString with the subsystem type, if any + * @internal + */ + void internalSetSubsystem(TQString ss); + + /** + * @param a TDEGenericDevice* with the parent device, if any + * @internal + */ + void internalSetParentDevice(TDEGenericDevice* pd); private: TDEGenericDeviceType::TDEGenericDeviceType m_deviceType; @@ -486,101 +507,46 @@ class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice */ TQString &diskLabel(); - /** - * @param a TQString with the disk or partition label, if any - */ - void setDiskLabel(TQString dn); - /** * @return a TQString with the disk UUID, if any */ TQString &diskUUID(); - /** - * @param a TQString with the disk UUID, if any - */ - void setDiskUUID(TQString id); - /** * @return an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags */ TDEDiskDeviceType::TDEDiskDeviceType diskType(); - /** - * @param an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags - */ - void setDiskType(TDEDiskDeviceType::TDEDiskDeviceType tf); - - /** - * @param an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags - */ - bool isDiskOfType(TDEDiskDeviceType::TDEDiskDeviceType tf); - /** * @return an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags */ TDEDiskDeviceStatus::TDEDiskDeviceStatus diskStatus(); - /** - * @param an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags - */ - void setDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st); - - /** - * @param an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags - */ - bool checkDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus sf); - /** * @return true if media inserted, false if no media available */ bool mediaInserted(); - /** - * @param a bool with the media status - */ - void setMediaInserted(bool inserted); - /** * @return a TQString with the filesystem name, if any */ TQString &fileSystemName(); - /** - * @param a TQString with the filesystem name, if any - */ - void setFileSystemName(TQString fn); - /** * @return a TQString with the filesystem usage string, if any */ TQString &fileSystemUsage(); - /** - * @param a TQString with the filesystem usage string, if any - */ - void setFileSystemUsage(TQString fu); - /** * @return a TQStringList containing system paths to all devices with a lock on this device, if any */ TQStringList &holdingDevices(); - /** - * @param a TQStringList containing system paths to all devices with a lock on this device, if any - */ - void setHoldingDevices(TQStringList hd); - /** * @return a TQStringList containing system paths to all devices locked by this device, if any */ TQStringList &slaveDevices(); - /** - * @param a TQStringList containing system paths to all devices locked by this device, if any - */ - void setSlaveDevices(TQStringList sd); - /** * Mounts the device if not encrypted * @@ -654,6 +620,71 @@ class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice */ TQString friendlyDeviceType(); + /** + * @param an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags + */ + bool isDiskOfType(TDEDiskDeviceType::TDEDiskDeviceType tf); + + /** + * @param an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags + */ + bool checkDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus sf); + + protected: + /** + * @param a TQString with the disk or partition label, if any + * @internal + */ + void internalSetDiskLabel(TQString dn); + + /** + * @param a TQString with the disk UUID, if any + * @internal + */ + void internalSetDiskUUID(TQString id); + + /** + * @param an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags + * @internal + */ + void internalSetDiskType(TDEDiskDeviceType::TDEDiskDeviceType tf); + + /** + * @param an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags + * @internal + */ + void internalSetDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st); + + /** + * @param a bool with the media status + * @internal + */ + void internalSetMediaInserted(bool inserted); + + /** + * @param a TQString with the filesystem name, if any + * @internal + */ + void internalSetFileSystemName(TQString fn); + + /** + * @param a TQString with the filesystem usage string, if any + * @internal + */ + void internalSetFileSystemUsage(TQString fu); + + /** + * @param a TQStringList containing system paths to all devices with a lock on this device, if any + * @internal + */ + void internalSetHoldingDevices(TQStringList hd); + + /** + * @param a TQStringList containing system paths to all devices locked by this device, if any + * @internal + */ + void internalSetSlaveDevices(TQStringList sd); + private: TDEDiskDeviceType::TDEDiskDeviceType m_diskType; TDEDiskDeviceStatus::TDEDiskDeviceStatus m_diskStatus; @@ -665,6 +696,8 @@ class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice TQString m_mountPath; TQStringList m_holdingDevices; TQStringList m_slaveDevices; + + friend class TDEHardwareDevices; }; class TDECORE_EXPORT TDECPUDevice : public TDEGenericDevice @@ -687,79 +720,88 @@ class TDECORE_EXPORT TDECPUDevice : public TDEGenericDevice double &frequency(); /** - * @param a double with the current CPU frequency in MHz, if available + * @return a double with the minimum CPU frequency in MHz, if available */ - void setFrequency(double fr); + double &minFrequency(); /** - * @return a double with the minimum CPU frequency in MHz, if available + * @return a double with the maximum CPU frequency in MHz, if available */ - double &minFrequency(); + double &maxFrequency(); /** - * @param a double with the minimum CPU frequency in MHz, if available + * @return a double with the transition latency in ns, if available */ - void setMinFrequency(double fr); + double &transitionLatency(); /** - * @return a double with the maximum CPU frequency in MHz, if available + * @return a TQString with the current CPU governor policy, if available */ - double &maxFrequency(); + TQString &governor(); /** - * @param a double with the maximum CPU frequency in MHz, if available + * @return a TQString with the current CPU scaling driver, if available */ - void setMaxFrequency(double fr); + TQString &scalingDriver(); /** - * @return a double with the transition latency in ns, if available + * @return a TQStringList with the IDs of all processors that are dependent on the frequency/power settings of this one, if available */ - double &transitionLatency(); + TQStringList &dependentProcessors(); /** - * @param a double with the transition latency in ns, if available + * @return a TQStringList with all valid scaling frequencies in Hz, if available */ - void setTransitionLatency(double tl); + TQStringList &availableFrequencies(); + protected: /** - * @return a TQString with the current CPU governor policy, if available + * @param a double with the current CPU frequency in MHz, if available + * @internal */ - TQString &governor(); + void internalSetFrequency(double fr); /** - * @param a TQString with the current CPU governor policy, if available + * @param a double with the minimum CPU frequency in MHz, if available + * @internal */ - void setGovernor(TQString gr); + void internalSetMinFrequency(double fr); /** - * @return a TQString with the current CPU scaling driver, if available + * @param a double with the maximum CPU frequency in MHz, if available + * @internal */ - TQString &scalingDriver(); + void internalSetMaxFrequency(double fr); /** - * @param a TQString with the current CPU scaling driver, if available + * @param a double with the transition latency in ns, if available + * @internal */ - void setScalingDriver(TQString dr); + void internalSetTransitionLatency(double tl); /** - * @return a TQStringList with the IDs of all processors that are dependent on the frequency/power settings of this one, if available + * @param a TQString with the current CPU governor policy, if available + * @internal */ - TQStringList &dependentProcessors(); + void internalSetGovernor(TQString gr); /** - * @param a TQStringList with the IDs of all processors that are dependent on the frequency/power settings of this one, if available + * @param a TQString with the current CPU scaling driver, if available + * @internal */ - void setDependentProcessors(TQStringList dp); + void internalSetScalingDriver(TQString dr); /** - * @return a TQStringList with all valid scaling frequencies in Hz, if available + * @param a TQStringList with the IDs of all processors that are dependent on the frequency/power settings of this one, if available + * @internal */ - TQStringList &availableFrequencies(); + void internalSetDependentProcessors(TQStringList dp); /** * @param a TQStringList with all valid scaling frequencies in Hz, if available + * @internal */ - void setAvailableFrequencies(TQStringList af); + void internalSetAvailableFrequencies(TQStringList af); private: double m_frequency; @@ -770,6 +812,8 @@ class TDECORE_EXPORT TDECPUDevice : public TDEGenericDevice TQString m_scalingdriver; TQStringList m_tiedprocs; TQStringList m_frequencies; + + friend class TDEHardwareDevices; }; class TDECORE_EXPORT TDEBatteryDevice : public TDEGenericDevice @@ -792,124 +836,137 @@ class TDECORE_EXPORT TDEBatteryDevice : public TDEGenericDevice double voltage(); /** - * @param a double with the current battery voltage, if available + * @return a double with the minimum battery voltage, if available */ - void setVoltage(double vt); + double minimumVoltage(); /** - * @return a double with the minimum battery voltage, if available + * @return a double with the maximum battery voltage, if available */ - double minimumVoltage(); + double maximumVoltage(); /** - * @param a double with the minimum battery voltage, if available + * @return a double with the designed maximum battery voltage, if available */ - void setMinimumVoltage(double vt); + double maximumDesignVoltage(); /** - * @return a double with the maximum battery voltage, if available + * @return a double with the current battery energy in watt-hours, if available */ - double maximumVoltage(); + double energy(); /** - * @param a double with the maximum battery voltage, if available + * @return a double with the current battery alarm energy in watt-hours, if available */ - void setMaximumVoltage(double vt); + double alarmEnergy(); /** - * @return a double with the designed maximum battery voltage, if available + * @return a double with the maximum battery energy in watt-hours, if available */ - double maximumDesignVoltage(); + double maximumEnergy(); /** - * @param a double with the designed maximum battery voltage, if available + * @return a double with the designed maximum battery energy in watt-hours, if available */ - void setMaximumDesignVoltage(double vt); + double maximumDesignEnergy(); /** - * @return a double with the current battery energy in watt-hours, if available + * @return a double with the current battery discharge rate in volt-hours, if available */ - double energy(); + double dischargeRate(); /** - * @param a double with the current battery energy in watt-hours, if available + * @return a TQString with the battery technology, if available */ - void setEnergy(double vt); + TQString &technology(); /** - * @return a double with the current battery alarm energy in watt-hours, if available + * @return a TQString with the battery status, if available */ - double alarmEnergy(); + TQString &status(); /** - * @param a double with the current battery alarm energy in watt-hours, if available + * @return TRUE if the battery is installed */ - void setAlarmEnergy(double vt); + bool installed(); /** - * @return a double with the maximum battery energy in watt-hours, if available + * @return a double with the current battery charge in percent, if available */ - double maximumEnergy(); + double chargePercent(); + protected: /** - * @param a double with the maximum battery energy in watt-hours, if available + * @param a double with the current battery voltage, if available + * @internal */ - void setMaximumEnergy(double vt); + void internalSetVoltage(double vt); /** - * @return a double with the designed maximum battery energy in watt-hours, if available + * @param a double with the minimum battery voltage, if available + * @internal */ - double maximumDesignEnergy(); + void internalSetMinimumVoltage(double vt); /** - * @param a double with the designed maximum battery energy in watt-hours, if available + * @param a double with the maximum battery voltage, if available + * @internal */ - void setMaximumDesignEnergy(double vt); + void internalSetMaximumVoltage(double vt); /** - * @return a double with the current battery discharge rate in volt-hours, if available + * @param a double with the designed maximum battery voltage, if available + * @internal */ - double dischargeRate(); + void internalSetMaximumDesignVoltage(double vt); /** - * @param a double with the current battery discharge rate in volt-hours, if available + * @param a double with the current battery energy in watt-hours, if available + * @internal */ - void setDischargeRate(double vt); + void internalSetEnergy(double vt); /** - * @return a TQString with the battery technology, if available + * @param a double with the current battery alarm energy in watt-hours, if available + * @internal */ - TQString &technology(); + void internalSetAlarmEnergy(double vt); /** - * @param a TQString with the battery technology, if available + * @param a double with the maximum battery energy in watt-hours, if available + * @internal */ - void setTechnology(TQString tc); + void internalSetMaximumEnergy(double vt); /** - * @return a TQString with the battery status, if available + * @param a double with the designed maximum battery energy in watt-hours, if available + * @internal */ - TQString &status(); + void internalSetMaximumDesignEnergy(double vt); /** - * @param a TQString with the battery status, if available + * @param a double with the current battery discharge rate in volt-hours, if available + * @internal */ - void setStatus(TQString tc); + void internalSetDischargeRate(double vt); /** - * @return TRUE if the battery is installed + * @param a TQString with the battery technology, if available + * @internal */ - bool installed(); + void internalSetTechnology(TQString tc); /** - * @param TRUE if the battery is installed + * @param a TQString with the battery status, if available + * @internal */ - void setInstalled(bool tc); + void internalSetStatus(TQString tc); /** - * @return a double with the current battery charge in percent, if available + * @param TRUE if the battery is installed + * @internal */ - double chargePercent(); + void internalSetInstalled(bool tc); private: double m_currentVoltage; @@ -924,6 +981,8 @@ class TDECORE_EXPORT TDEBatteryDevice : public TDEGenericDevice TQString m_technology; TQString m_status; bool m_installed; + + friend class TDEHardwareDevices; }; class TDECORE_EXPORT TDEMainsPowerDevice : public TDEGenericDevice @@ -945,13 +1004,17 @@ class TDECORE_EXPORT TDEMainsPowerDevice : public TDEGenericDevice */ bool online(); + protected: /** * @param TRUE if power supply is online via mains power, FALSE if not + * @internal */ - void setOnline(bool vt); + void internalSetOnline(bool vt); private: bool m_online; + + friend class TDEHardwareDevices; }; class TDECORE_EXPORT TDENetworkDevice : public TDEGenericDevice @@ -974,159 +1037,176 @@ class TDECORE_EXPORT TDENetworkDevice : public TDEGenericDevice TQString macAddress(); /** - * @param ma a TQString containing the network device's MAC address + * @return a TQString containing the network device's operational state */ - void setMacAddress(TQString ma); + TQString state(); /** - * @return a TQString containing the network device's operational state + * @return TRUE if carrier is present, FALSE if not */ - TQString state(); + bool carrierPresent(); /** - * @param st a TQString containing the network device's operational state + * @return TRUE if device is dormant, FALSE if not */ - void setState(TQString st); + bool dormant(); /** - * @return TRUE if carrier is present, FALSE if not + * @return a TQString containing the network device's IPv4 address */ - bool carrierPresent(); + TQString ipV4Address(); /** - * @param TRUE if carrier is present, FALSE if not + * @return a TQString containing the network device's IPv6 address */ - void setCarrierPresent(bool cp); + TQString ipV6Address(); /** - * @return TRUE if device is dormant, FALSE if not + * @return a TQString containing the network device's IPv4 netmask */ - bool dormant(); + TQString ipV4Netmask(); /** - * @param TRUE if device is dormant, FALSE if not + * @return a TQString containing the network device's IPv6 netmask */ - void setDormant(bool dm); + TQString ipV6Netmask(); /** - * @return a TQString containing the network device's IPv4 address + * @return a TQString containing the network device's IPv4 broadcast */ - TQString ipV4Address(); + TQString ipV4Broadcast(); /** - * @param ad a TQString containing the network device's IPv4 address + * @return a TQString containing the network device's IPv6 broadcast */ - void setIpV4Address(TQString ad); + TQString ipV6Broadcast(); /** - * @return a TQString containing the network device's IPv6 address + * @return a TQString containing the network device's IPv4 destination */ - TQString ipV6Address(); + TQString ipV4Destination(); /** - * @param ad a TQString containing the network device's IPv6 address + * @return a TQString containing the network device's IPv6 destination */ - void setIpV6Address(TQString ad); + TQString ipV6Destination(); /** - * @return a TQString containing the network device's IPv4 netmask + * @return a double with the number of received bytes, if available */ - TQString ipV4Netmask(); + double rxBytes(); /** - * @param nm a TQString containing the network device's IPv4 netmask + * @return a double with the number of transmitted bytes, if available */ - void setIpV4Netmask(TQString nm); + double txBytes(); /** - * @return a TQString containing the network device's IPv6 netmask + * @return a double with the number of received packets, if available */ - TQString ipV6Netmask(); + double rxPackets(); /** - * @param nm a TQString containing the network device's IPv6 netmask + * @return a double with the number of transmitted packets, if available */ - void setIpV6Netmask(TQString nm); + double txPackets(); + protected: /** - * @return a TQString containing the network device's IPv4 broadcast + * @param ma a TQString containing the network device's MAC address + * @internal */ - TQString ipV4Broadcast(); + void internalSetMacAddress(TQString ma); /** - * @param br a TQString containing the network device's IPv4 broadcast + * @param st a TQString containing the network device's operational state + * @internal */ - void setIpV4Broadcast(TQString br); + void internalSetState(TQString st); /** - * @return a TQString containing the network device's IPv6 broadcast + * @param TRUE if carrier is present, FALSE if not + * @internal */ - TQString ipV6Broadcast(); + void internalSetCarrierPresent(bool cp); /** - * @param br a TQString containing the network device's IPv6 broadcast + * @param TRUE if device is dormant, FALSE if not + * @internal */ - void setIpV6Broadcast(TQString br); + void internalSetDormant(bool dm); /** - * @return a TQString containing the network device's IPv4 destination + * @param ad a TQString containing the network device's IPv4 address + * @internal */ - TQString ipV4Destination(); + void internalSetIpV4Address(TQString ad); /** - * @param ds a TQString containing the network device's IPv4 destination + * @param ad a TQString containing the network device's IPv6 address + * @internal */ - void setIpV4Destination(TQString ds); + void internalSetIpV6Address(TQString ad); /** - * @return a TQString containing the network device's IPv6 destination + * @param nm a TQString containing the network device's IPv4 netmask + * @internal */ - TQString ipV6Destination(); + void internalSetIpV4Netmask(TQString nm); /** - * @param ds a TQString containing the network device's IPv6 destination + * @param nm a TQString containing the network device's IPv6 netmask + * @internal */ - void setIpV6Destination(TQString ds); + void internalSetIpV6Netmask(TQString nm); /** - * @return a double with the number of received bytes, if available + * @param br a TQString containing the network device's IPv4 broadcast + * @internal */ - double rxBytes(); + void internalSetIpV4Broadcast(TQString br); /** - * @param rx a double with the number of received bytes, if available + * @param br a TQString containing the network device's IPv6 broadcast + * @internal */ - void setRxBytes(double rx); + void internalSetIpV6Broadcast(TQString br); /** - * @return a double with the number of transmitted bytes, if available + * @param ds a TQString containing the network device's IPv4 destination + * @internal */ - double txBytes(); + void internalSetIpV4Destination(TQString ds); /** - * @param tx a double with the number of transmitted bytes, if available + * @param ds a TQString containing the network device's IPv6 destination + * @internal */ - void setTxBytes(double tx); + void internalSetIpV6Destination(TQString ds); /** - * @return a double with the number of received packets, if available + * @param rx a double with the number of received bytes, if available + * @internal */ - double rxPackets(); + void internalSetRxBytes(double rx); /** - * @param rx a double with the number of received packets, if available + * @param tx a double with the number of transmitted bytes, if available + * @internal */ - void setRxPackets(double rx); + void internalSetTxBytes(double tx); /** - * @return a double with the number of transmitted packets, if available + * @param rx a double with the number of received packets, if available + * @internal */ - double txPackets(); + void internalSetRxPackets(double rx); /** * @param tx a double with the number of transmitted packets, if available + * @internal */ - void setTxPackets(double tx); + void internalSetTxPackets(double tx); private: TQString m_macAddress; @@ -1145,8 +1225,186 @@ class TDECORE_EXPORT TDENetworkDevice : public TDEGenericDevice double m_txbytes; double m_rxpackets; double m_txpackets; + + friend class TDEHardwareDevices; +}; + +namespace TDEDisplayPowerLevel { +enum TDEDisplayPowerLevel { + On, + Standby, + Suspend, + Off +}; +}; + +class TDECORE_EXPORT TDEBacklightDevice : public TDEGenericDevice +{ + public: + /** + * Constructor. + * @param Device type + */ + TDEBacklightDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn=TQString::null); + + /** + * Destructor. + */ + ~TDEBacklightDevice(); + + /** + * @return a TDEDisplayPowerLevel::TDEDisplayPowerLevel with the current power level + */ + TDEDisplayPowerLevel::TDEDisplayPowerLevel powerLevel(); + + /** + * @return an integer with the number of discrete control steps available + */ + int brightnessSteps(); + + /** + * @return a double with the current brightness percentage + */ + double brightnessPercent(); + + /** + * @return TRUE if permissions allow brightness can be set, FALSE if not + */ + bool canSetBrightness(); + + /** + * @return an int with the current raw brightness + */ + int rawBrightness(); + + /** + * @param br an integer with the new raw brightness value + */ + void setRawBrightness(int br); + + protected: + /** + * @param pl a TDEDisplayPowerLevel::TDEDisplayPowerLevel with the current power level + * @internal + */ + void internalSetPowerLevel(TDEDisplayPowerLevel::TDEDisplayPowerLevel pl); + + /** + * @param br an integer with the maximum raw brightness value + * @internal + */ + void internalSetMaximumRawBrightness(int br); + + /** + * @param br an integer with the current raw brightness value + * @internal + */ + void internalSetCurrentRawBrightness(int br); + + private: + TDEDisplayPowerLevel::TDEDisplayPowerLevel m_powerLevel; + int m_currentBrightness; + int m_maximumBrightness; + + friend class TDEHardwareDevices; +}; + +typedef TQPair TDEResolutionPair; +typedef TQValueList< TDEResolutionPair > TDEResolutionList; + +class TDECORE_EXPORT TDEMonitorDevice : public TDEGenericDevice +{ + public: + /** + * Constructor. + * @param Device type + */ + TDEMonitorDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn=TQString::null); + + /** + * Destructor. + */ + ~TDEMonitorDevice(); + + /** + * @return TRUE if a monitor is connected, FALSE if not + */ + bool connected(); + + /** + * @return TRUE if this port is enabled, FALSE if not + */ + bool enabled(); + + /** + * @return a TQByteArray containing this monitor's EDID information + */ + TQByteArray edid(); + + /** + * @return a TDEResolutionList containing this monitor's supported resolutions + */ + TDEResolutionList resolutions(); + + /** + * @return a TQString containing the display port type + */ + TQString portType(); + + /** + * @return a TDEDisplayPowerLevel::TDEDisplayPowerLevel with the current power level + */ + TDEDisplayPowerLevel::TDEDisplayPowerLevel powerLevel(); + + protected: + /** + * @param TRUE if a monitor is connected, FALSE if not + * @internal + */ + void internalSetConnected(bool cn); + + /** + * @param TRUE if this port is enabled, FALSE if not + * @internal + */ + void internalSetEnabled(bool en); + + /** + * @param ed a TQByteArray containing this monitor's EDID information + * @internal + */ + void internalSetEdid(TQByteArray ed); + + /** + * @param rs a TDEResolutionList containing this monitor's supported resolutions + * @internal + */ + void internalSetResolutions(TDEResolutionList rs); + + /** + * @param pt a TQString containing the display port type + * @internal + */ + void internalSetPortType(TQString pt); + + /** + * @param pl a TDEDisplayPowerLevel::TDEDisplayPowerLevel with the current power level + * @internal + */ + void internalSetPowerLevel(TDEDisplayPowerLevel::TDEDisplayPowerLevel pl); + + private: + bool m_connected; + bool m_enabled; + TQByteArray m_edid; + TDEResolutionList m_resolutions; + TQString m_portType; + TDEDisplayPowerLevel::TDEDisplayPowerLevel m_powerLevel; + + friend class TDEHardwareDevices; }; + typedef TQMap TDESensorClusterMap; class TDECORE_EXPORT TDESensorDevice : public TDEGenericDevice @@ -1168,13 +1426,17 @@ class TDECORE_EXPORT TDESensorDevice : public TDEGenericDevice */ TDESensorClusterMap values(); + protected: /** * @param a TDESensorClusterMap with the current sensor values + * @internal */ - void setValues(TDESensorClusterMap cl); + void internalSetValues(TDESensorClusterMap cl); private: TDESensorClusterMap m_sensorValues; + + friend class TDEHardwareDevices; }; typedef TQPtrList TDEGenericHardwareList; @@ -1268,6 +1530,13 @@ class TDECORE_EXPORT TDEHardwareDevices : public TQObject */ TQString findPNPDeviceName(TQString pnpid); + /** + * Look up the monitor manufacturer in the system display database + * @param pnpid a TQString containing the display manufacturer ID + * @return a TQString containing the manufacturer name, if found + */ + TQString findMonitorManufacturerName(TQString dpyid); + /** * Get a friendly string describing a device type * @param query a TDEGenericDeviceType::TDEGenericDeviceType specifying a device type @@ -1315,6 +1584,18 @@ class TDECORE_EXPORT TDEHardwareDevices : public TQObject void addCoreSystemDevices(); + /** + * Get the binary monitor EDID for the specified sysfs path + * @return a TQByteArray containing the EDID + */ + TQByteArray getEDID(TQString path); + + /** + * Get the monitor EDID name for the specified sysfs path + * @return a TQPair containing the monitor vendor and model, if available + */ + TQPair getEDIDMonitorName(TQString path); + struct udev *m_udevStruct; struct udev_monitor *m_udevMonitorStruct; TDEGenericHardwareList m_deviceList; @@ -1332,6 +1613,7 @@ class TDECORE_EXPORT TDEHardwareDevices : public TQObject TDEDeviceIDMap* pci_id_map; TDEDeviceIDMap* usb_id_map; TDEDeviceIDMap* pnp_id_map; + TDEDeviceIDMap* dpy_id_map; friend class TDEGenericDevice; friend class TDEStorageDevice;