parent
0984f01947
commit
8bc5f3a294
@ -0,0 +1,317 @@
|
|||||||
|
/* This file is part of the TDE libraries
|
||||||
|
Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||||
|
(C) 2013 Golubev Alexander <fatzer2@gmail.com>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License version 2 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tdegenericdevice.h"
|
||||||
|
|
||||||
|
#include <tqpixmap.h>
|
||||||
|
|
||||||
|
#include "tdeglobal.h"
|
||||||
|
#include "tdelocale.h"
|
||||||
|
|
||||||
|
#include "tdehardwaredevices.h"
|
||||||
|
|
||||||
|
TDEGenericDevice::TDEGenericDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TQObject() {
|
||||||
|
m_deviceType = dt;
|
||||||
|
m_deviceName = dn;
|
||||||
|
|
||||||
|
m_parentDevice = 0;
|
||||||
|
m_friendlyName = TQString::null;
|
||||||
|
m_blacklistedForUpdate = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEGenericDevice::~TDEGenericDevice() {
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEGenericDeviceType::TDEGenericDeviceType TDEGenericDevice::type() {
|
||||||
|
return m_deviceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::name() {
|
||||||
|
return m_deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetName(TQString dn) {
|
||||||
|
m_deviceName = dn;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::vendorName() {
|
||||||
|
return m_vendorName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetVendorName(TQString vn) {
|
||||||
|
m_vendorName = vn;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::vendorModel() {
|
||||||
|
return m_vendorModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetVendorModel(TQString vm) {
|
||||||
|
m_vendorModel = vm;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::serialNumber() {
|
||||||
|
return m_serialNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetSerialNumber(TQString sn) {
|
||||||
|
m_serialNumber = sn;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::systemPath() {
|
||||||
|
if (!m_systemPath.endsWith("/")) {
|
||||||
|
m_systemPath += "/";
|
||||||
|
}
|
||||||
|
return m_systemPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetSystemPath(TQString sp) {
|
||||||
|
m_systemPath = sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::deviceNode() {
|
||||||
|
return m_deviceNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetDeviceNode(TQString sn) {
|
||||||
|
m_deviceNode = sn;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::deviceBus() {
|
||||||
|
return m_deviceBus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetDeviceBus(TQString db) {
|
||||||
|
m_deviceBus = db;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::uniqueID() {
|
||||||
|
m_uniqueID = m_systemPath+m_deviceNode;
|
||||||
|
return m_uniqueID;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::vendorID() {
|
||||||
|
return m_vendorID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetVendorID(TQString id) {
|
||||||
|
m_vendorID = id;
|
||||||
|
m_vendorID.replace("0x", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::modelID() {
|
||||||
|
return m_modelID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetModelID(TQString id) {
|
||||||
|
m_modelID = id;
|
||||||
|
m_modelID.replace("0x", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::vendorEncoded() {
|
||||||
|
return m_vendorenc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetVendorEncoded(TQString id) {
|
||||||
|
m_vendorenc = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::modelEncoded() {
|
||||||
|
return m_modelenc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetModelEncoded(TQString id) {
|
||||||
|
m_modelenc = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::subVendorID() {
|
||||||
|
return m_subvendorID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetSubVendorID(TQString id) {
|
||||||
|
m_subvendorID = id;
|
||||||
|
m_subvendorID.replace("0x", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::PCIClass() {
|
||||||
|
return m_pciClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetPCIClass(TQString cl) {
|
||||||
|
m_pciClass = cl;
|
||||||
|
m_pciClass.replace("0x", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::moduleAlias() {
|
||||||
|
return m_modAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetModuleAlias(TQString ma) {
|
||||||
|
m_modAlias = ma;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::deviceDriver() {
|
||||||
|
return m_deviceDriver;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetDeviceDriver(TQString dr) {
|
||||||
|
m_deviceDriver = dr;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::subsystem() {
|
||||||
|
return m_subsystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetSubsystem(TQString ss) {
|
||||||
|
m_subsystem = ss;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::subModelID() {
|
||||||
|
return m_submodelID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetSubModelID(TQString id) {
|
||||||
|
m_submodelID = id;
|
||||||
|
m_submodelID.replace("0x", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetParentDevice(TDEGenericDevice* pd) {
|
||||||
|
m_parentDevice = pd;
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEGenericDevice* TDEGenericDevice::parentDevice() {
|
||||||
|
return m_parentDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQPixmap TDEGenericDevice::icon(TDEIcon::StdSizes size) {
|
||||||
|
return TDEGlobal::hardwareDevices()->getDeviceTypeIconFromType(type(), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEGenericDevice::blacklistedForUpdate() {
|
||||||
|
return m_blacklistedForUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEGenericDevice::internalSetBlacklistedForUpdate(bool bl) {
|
||||||
|
m_blacklistedForUpdate = bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::friendlyDeviceType() {
|
||||||
|
return TDEGlobal::hardwareDevices()->getFriendlyDeviceTypeStringFromType(type());
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::busID() {
|
||||||
|
TQString busid = m_systemPath;
|
||||||
|
busid = busid.remove(0, busid.findRev("/")+1);
|
||||||
|
busid = busid.remove(0, busid.find(":")+1);
|
||||||
|
return busid;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEGenericDevice::friendlyName() {
|
||||||
|
if (m_friendlyName.isNull()) {
|
||||||
|
if (type() == TDEGenericDeviceType::RootSystem) {
|
||||||
|
m_friendlyName = "Linux System";
|
||||||
|
}
|
||||||
|
else if (type() == TDEGenericDeviceType::Root) {
|
||||||
|
TQString friendlyDriverName = systemPath();
|
||||||
|
friendlyDriverName.truncate(friendlyDriverName.length()-1);
|
||||||
|
friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1);
|
||||||
|
m_friendlyName = friendlyDriverName;
|
||||||
|
}
|
||||||
|
else if (m_modAlias.lower().startsWith("pci")) {
|
||||||
|
m_friendlyName = TDEGlobal::hardwareDevices()->findPCIDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID);
|
||||||
|
}
|
||||||
|
else if (m_modAlias.lower().startsWith("usb")) {
|
||||||
|
m_friendlyName = TDEGlobal::hardwareDevices()->findUSBDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TQString acpigentype = systemPath();
|
||||||
|
acpigentype.truncate(acpigentype.length()-1);
|
||||||
|
acpigentype.remove(0, acpigentype.findRev("/")+1);
|
||||||
|
TQString pnpgentype = acpigentype;
|
||||||
|
pnpgentype.truncate(pnpgentype.find(":"));
|
||||||
|
if (pnpgentype.startsWith("PNP")) {
|
||||||
|
m_friendlyName = TDEGlobal::hardwareDevices()->findPNPDeviceName(pnpgentype);
|
||||||
|
}
|
||||||
|
else if (acpigentype.startsWith("device:")) {
|
||||||
|
acpigentype.remove(0, acpigentype.findRev(":")+1);
|
||||||
|
acpigentype.prepend("0x");
|
||||||
|
m_friendlyName = i18n("ACPI Node %1").arg(acpigentype.toUInt(0,0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_friendlyName.isNull()) {
|
||||||
|
// Could not identify based on model/vendor codes
|
||||||
|
// Try to construct something from the model/vendor strings if they are available
|
||||||
|
if (!m_vendorName.isNull() && !m_vendorModel.isNull()) {
|
||||||
|
m_friendlyName = m_vendorName + " " + m_vendorModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_friendlyName.isNull()) {
|
||||||
|
// Could not identify based on model/vendor
|
||||||
|
// Guess by type
|
||||||
|
if (type() == TDEGenericDeviceType::CPU) {
|
||||||
|
m_friendlyName = name();
|
||||||
|
}
|
||||||
|
else if (type() == TDEGenericDeviceType::Event) {
|
||||||
|
// Use parent node name
|
||||||
|
if (m_parentDevice) {
|
||||||
|
return m_parentDevice->friendlyName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_friendlyName = i18n("Generic Event Device");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type() == TDEGenericDeviceType::Input) {
|
||||||
|
// Use parent node name
|
||||||
|
if (m_parentDevice) {
|
||||||
|
return m_parentDevice->friendlyName();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_friendlyName = i18n("Generic Input Device");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Guess by driver
|
||||||
|
else if (!m_deviceDriver.isNull()) {
|
||||||
|
TQString friendlyDriverName = m_deviceDriver.lower();
|
||||||
|
friendlyDriverName[0] = friendlyDriverName[0].upper();
|
||||||
|
m_friendlyName = i18n("Generic %1 Device").arg(friendlyDriverName);
|
||||||
|
}
|
||||||
|
else if (m_systemPath.lower().startsWith("/sys/devices/virtual")) {
|
||||||
|
TQString friendlyDriverName = systemPath();
|
||||||
|
friendlyDriverName.truncate(friendlyDriverName.length()-1);
|
||||||
|
friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1);
|
||||||
|
if (!friendlyDriverName.isNull()) {
|
||||||
|
m_friendlyName = i18n("Virtual Device %1").arg(friendlyDriverName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_friendlyName = i18n("Unknown Virtual Device");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// I really have no idea what this peripheral is; say so!
|
||||||
|
m_friendlyName = i18n("Unknown Device") + " " + name();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_friendlyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "tdegenericdevice.moc"
|
@ -0,0 +1,388 @@
|
|||||||
|
/* This file is part of the TDE libraries
|
||||||
|
Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||||
|
(C) 2013 Golubev Alexander <fatzer2@gmail.com>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License version 2 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TDEGENERICDEVICE_H
|
||||||
|
#define _TDEGENERICDEVICE_H
|
||||||
|
|
||||||
|
#include <tqobject.h>
|
||||||
|
#include <tqstring.h>
|
||||||
|
|
||||||
|
#include "tdelibs_export.h"
|
||||||
|
#include "kicontheme.h"
|
||||||
|
|
||||||
|
// Keep readGenericDeviceTypeFromString(), getFriendlyDeviceTypeStringFromType(), and getDeviceTypeIconFromType() in tdehardwaredevices.cpp in sync with this enum
|
||||||
|
namespace TDEGenericDeviceType {
|
||||||
|
enum TDEGenericDeviceType {
|
||||||
|
Root,
|
||||||
|
RootSystem,
|
||||||
|
CPU,
|
||||||
|
GPU,
|
||||||
|
RAM,
|
||||||
|
Bus,
|
||||||
|
I2C,
|
||||||
|
MDIO,
|
||||||
|
Mainboard,
|
||||||
|
Disk,
|
||||||
|
SCSI,
|
||||||
|
StorageController,
|
||||||
|
Mouse,
|
||||||
|
Keyboard,
|
||||||
|
HID,
|
||||||
|
Modem,
|
||||||
|
Monitor,
|
||||||
|
Network,
|
||||||
|
Printer,
|
||||||
|
Scanner,
|
||||||
|
Sound,
|
||||||
|
VideoCapture,
|
||||||
|
IEEE1394,
|
||||||
|
PCMCIA,
|
||||||
|
Camera,
|
||||||
|
TextIO,
|
||||||
|
Serial,
|
||||||
|
Parallel,
|
||||||
|
Peripheral,
|
||||||
|
Backlight,
|
||||||
|
Battery,
|
||||||
|
PowerSupply,
|
||||||
|
Dock,
|
||||||
|
ThermalSensor,
|
||||||
|
ThermalControl,
|
||||||
|
BlueTooth,
|
||||||
|
Bridge,
|
||||||
|
Platform,
|
||||||
|
Cryptography,
|
||||||
|
Event,
|
||||||
|
Input,
|
||||||
|
PNP,
|
||||||
|
OtherACPI,
|
||||||
|
OtherUSB,
|
||||||
|
OtherMultimedia,
|
||||||
|
OtherPeripheral,
|
||||||
|
OtherSensor,
|
||||||
|
OtherVirtual,
|
||||||
|
Other,
|
||||||
|
Last = Other
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class TDECORE_EXPORT TDEGenericDevice : public TQObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
* @param Device type
|
||||||
|
*/
|
||||||
|
TDEGenericDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn=TQString::null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
|
~TDEGenericDevice();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TDEGenericDeviceType::TDEGenericDeviceType specifying the device type
|
||||||
|
*/
|
||||||
|
TDEGenericDeviceType::TDEGenericDeviceType type();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the device name, if any
|
||||||
|
*/
|
||||||
|
TQString name();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the vendor name, if any
|
||||||
|
*/
|
||||||
|
TQString vendorName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the vendor model, if any
|
||||||
|
*/
|
||||||
|
TQString vendorModel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the serial number, if any
|
||||||
|
*/
|
||||||
|
TQString serialNumber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with a friendly name
|
||||||
|
*
|
||||||
|
* While TDE tries very hard to generate and return a friendly name for this device,
|
||||||
|
* sometimes the best it will be able to do is "Unknown Device [xxxx:yyyy]"
|
||||||
|
*/
|
||||||
|
virtual TQString friendlyName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the device bus name, if any
|
||||||
|
*/
|
||||||
|
TQString deviceBus();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the system path, if any
|
||||||
|
*
|
||||||
|
* This method is non-portable, so be careful!
|
||||||
|
*/
|
||||||
|
TQString systemPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the system device node, if any
|
||||||
|
*
|
||||||
|
* This method is non-portable, so be careful!
|
||||||
|
*/
|
||||||
|
TQString deviceNode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if this device has been blacklisted for update actions
|
||||||
|
*/
|
||||||
|
bool blacklistedForUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString containing a unique identifier for this device
|
||||||
|
*/
|
||||||
|
TQString uniqueID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the vendor ID, if any
|
||||||
|
*/
|
||||||
|
TQString vendorID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the model ID, if any
|
||||||
|
*/
|
||||||
|
TQString modelID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the encoded vendor, if any
|
||||||
|
*/
|
||||||
|
TQString vendorEncoded();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the encoded model, if any
|
||||||
|
*/
|
||||||
|
TQString modelEncoded();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the subvendor ID, if any
|
||||||
|
*/
|
||||||
|
TQString subVendorID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the submodel ID, if any
|
||||||
|
*/
|
||||||
|
TQString subModelID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the PCI device class, if any
|
||||||
|
*/
|
||||||
|
TQString PCIClass();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the module alias string, if any
|
||||||
|
*/
|
||||||
|
TQString moduleAlias();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the device driver, if any
|
||||||
|
*/
|
||||||
|
TQString deviceDriver();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the subsystem type, if any
|
||||||
|
*/
|
||||||
|
TQString subsystem();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TDEGenericDevice* with the parent device, if any
|
||||||
|
*/
|
||||||
|
TDEGenericDevice* parentDevice();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString containing the friendly type name
|
||||||
|
*/
|
||||||
|
virtual TQString friendlyDeviceType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString containing the device bus ID, if any
|
||||||
|
*/
|
||||||
|
TQString busID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an icon for this device
|
||||||
|
* @param size a TDEIcon::StdSizes structure specifying the desired icon size
|
||||||
|
* @return a TQPixmap containing the icon for the specified type
|
||||||
|
*/
|
||||||
|
virtual TQPixmap icon(TDEIcon::StdSizes size);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* @param a TQString with the device name, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetName(TQString dn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the vendor name, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetVendorName(TQString vn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the vendor model, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetVendorModel(TQString vm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the serial number, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetSerialNumber(TQString sn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the device bus name, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetDeviceBus(TQString db);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the system path, if any
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* This method is non-portable, so be careful!
|
||||||
|
*/
|
||||||
|
void internalSetSystemPath(TQString sp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the system device node, if any
|
||||||
|
* @internal
|
||||||
|
*
|
||||||
|
* This method is non-portable, so be careful!
|
||||||
|
*/
|
||||||
|
void internalSetDeviceNode(TQString sn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bl true if this device has been blacklisted for update actions
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetBlacklistedForUpdate(bool bl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the vendor ID, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetVendorID(TQString id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the model ID, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetModelID(TQString id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the encoded vendor, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetVendorEncoded(TQString id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the encoded model, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetModelEncoded(TQString id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the subvendor ID, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
void internalSetSubVendorID(TQString id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param a TQString with the submodel ID, if any
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
TQString m_deviceName;
|
||||||
|
TQString m_systemPath;
|
||||||
|
TQString m_deviceNode;
|
||||||
|
TQString m_vendorName;
|
||||||
|
TQString m_vendorModel;
|
||||||
|
TQString m_serialNumber;
|
||||||
|
TQString m_deviceBus;
|
||||||
|
TQString m_uniqueID;
|
||||||
|
TQString m_vendorID;
|
||||||
|
TQString m_modelID;
|
||||||
|
TQString m_vendorenc;
|
||||||
|
TQString m_modelenc;
|
||||||
|
TQString m_subvendorID;
|
||||||
|
TQString m_submodelID;
|
||||||
|
TQString m_pciClass;
|
||||||
|
TQString m_modAlias;
|
||||||
|
TQString m_deviceDriver;
|
||||||
|
TQString m_subsystem;
|
||||||
|
TQString m_friendlyName;
|
||||||
|
bool m_blacklistedForUpdate;
|
||||||
|
TDEGenericDevice* m_parentDevice;
|
||||||
|
|
||||||
|
// Internal use only!
|
||||||
|
TQStringList m_externalSubtype;
|
||||||
|
TQString m_externalRulesFile;
|
||||||
|
TQString m_udevtype;
|
||||||
|
TQString m_udevdevicetypestring;
|
||||||
|
TQString udevdevicetypestring_alt;
|
||||||
|
|
||||||
|
friend class TDEHardwareDevices;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _TDEGENERICDEVICE_H
|
@ -0,0 +1,721 @@
|
|||||||
|
/* This file is part of the TDE libraries
|
||||||
|
Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||||
|
(C) 2013 Golubev Alexander <fatzer2@gmail.com>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License version 2 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tdestoragedevice.h"
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <linux/cdrom.h>
|
||||||
|
|
||||||
|
// uDisks2 integration
|
||||||
|
#if defined(WITH_UDISKS) || defined(WITH_UDISKS2)
|
||||||
|
#include <tqdbusdata.h>
|
||||||
|
#include <tqdbusmessage.h>
|
||||||
|
#include <tqdbusproxy.h>
|
||||||
|
#include <tqdbusvariant.h>
|
||||||
|
#include <tqdbusconnection.h>
|
||||||
|
#include <tqdbuserror.h>
|
||||||
|
#include <tqdbusdatamap.h>
|
||||||
|
#include <tqdbusobjectpath.h>
|
||||||
|
#endif // defined(WITH_UDISKS) || defined(WITH_UDISKS2)
|
||||||
|
#if defined(WITH_UDISKS)
|
||||||
|
#include "tqdbusdatalist.h"
|
||||||
|
#endif // ddefined(WITH_UDISKS)
|
||||||
|
|
||||||
|
#include <tqpixmap.h>
|
||||||
|
#include <tqfile.h>
|
||||||
|
|
||||||
|
#include "tdelocale.h"
|
||||||
|
#include "tdeglobal.h"
|
||||||
|
#include "kiconloader.h"
|
||||||
|
#include "tdetempfile.h"
|
||||||
|
|
||||||
|
#include "tdehardwaredevices.h"
|
||||||
|
|
||||||
|
TDEStorageDevice::TDEStorageDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn), m_mediaInserted(true) {
|
||||||
|
m_diskType = TDEDiskDeviceType::Null;
|
||||||
|
m_diskStatus = TDEDiskDeviceStatus::Null;
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEStorageDevice::~TDEStorageDevice() {
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEDiskDeviceType::TDEDiskDeviceType TDEStorageDevice::diskType() {
|
||||||
|
return m_diskType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetDiskType(TDEDiskDeviceType::TDEDiskDeviceType dt) {
|
||||||
|
m_diskType = dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::isDiskOfType(TDEDiskDeviceType::TDEDiskDeviceType tf) {
|
||||||
|
return ((m_diskType&tf)!=TDEDiskDeviceType::Null);
|
||||||
|
}
|
||||||
|
|
||||||
|
TDEDiskDeviceStatus::TDEDiskDeviceStatus TDEStorageDevice::diskStatus() {
|
||||||
|
return m_diskStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st) {
|
||||||
|
m_diskStatus = st;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::checkDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus sf) {
|
||||||
|
return ((m_diskStatus&sf)!=(TDEDiskDeviceStatus::TDEDiskDeviceStatus)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::lockDriveMedia(bool lock) {
|
||||||
|
int fd = open(deviceNode().ascii(), O_RDWR | O_NONBLOCK);
|
||||||
|
if (fd < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ioctl(fd, CDROM_LOCKDOOR, (lock)?1:0) != 0) {
|
||||||
|
close(fd);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
close(fd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ejectDriveUDisks(TDEStorageDevice* sdevice) {
|
||||||
|
#ifdef WITH_UDISKS
|
||||||
|
TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
|
||||||
|
if (dbusConn.isConnected()) {
|
||||||
|
TQString blockDeviceString = sdevice->deviceNode();
|
||||||
|
blockDeviceString.replace("/dev/", "");
|
||||||
|
blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString;
|
||||||
|
|
||||||
|
// Eject the drive!
|
||||||
|
TQT_DBusError error;
|
||||||
|
TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn);
|
||||||
|
if (driveControl.canSend()) {
|
||||||
|
TQValueList<TQT_DBusData> params;
|
||||||
|
TQT_DBusDataList options;
|
||||||
|
params << TQT_DBusData::fromList(options);
|
||||||
|
TQT_DBusMessage reply = driveControl.sendWithReply("DriveEject", params, &error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
// Error!
|
||||||
|
printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#else // WITH_UDISKS
|
||||||
|
return FALSE;
|
||||||
|
#endif // WITH_UDISKS
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ejectDriveUDisks2(TDEStorageDevice* sdevice) {
|
||||||
|
#ifdef WITH_UDISKS2
|
||||||
|
TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus);
|
||||||
|
if (dbusConn.isConnected()) {
|
||||||
|
TQString blockDeviceString = sdevice->deviceNode();
|
||||||
|
blockDeviceString.replace("/dev/", "");
|
||||||
|
blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString;
|
||||||
|
TQT_DBusProxy hardwareControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.DBus.Properties", dbusConn);
|
||||||
|
if (hardwareControl.canSend()) {
|
||||||
|
// get associated udisks2 drive path
|
||||||
|
TQT_DBusError error;
|
||||||
|
TQValueList<TQT_DBusData> params;
|
||||||
|
params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Block") << TQT_DBusData::fromString("Drive");
|
||||||
|
TQT_DBusMessage reply = hardwareControl.sendWithReply("Get", params, &error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
// Error!
|
||||||
|
printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
|
||||||
|
TQT_DBusObjectPath driveObjectPath = reply[0].toVariant().value.toObjectPath();
|
||||||
|
if (!driveObjectPath.isValid()) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = TQT_DBusError();
|
||||||
|
TQT_DBusProxy driveInformation("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.DBus.Properties", dbusConn);
|
||||||
|
// can eject?
|
||||||
|
TQValueList<TQT_DBusData> params;
|
||||||
|
params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Drive") << TQT_DBusData::fromString("Ejectable");
|
||||||
|
TQT_DBusMessage reply = driveInformation.sendWithReply("Get", params, &error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
// Error!
|
||||||
|
printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) {
|
||||||
|
bool ejectable = reply[0].toVariant().value.toBool();
|
||||||
|
if (!ejectable) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eject the drive!
|
||||||
|
TQT_DBusProxy driveControl("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.UDisks2.Drive", dbusConn);
|
||||||
|
TQValueList<TQT_DBusData> params;
|
||||||
|
TQT_DBusDataMap<TQString> options(TQT_DBusData::Variant);
|
||||||
|
params << TQT_DBusData::fromStringKeyMap(options);
|
||||||
|
TQT_DBusMessage reply = driveControl.sendWithReply("Eject", params, &error);
|
||||||
|
if (error.isValid()) {
|
||||||
|
// Error!
|
||||||
|
printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#else // WITH_UDISKS2
|
||||||
|
return FALSE;
|
||||||
|
#endif // WITH_UDISKS2
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::ejectDrive() {
|
||||||
|
if (ejectDriveUDisks2(this)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#ifdef WITH_UDISKS2
|
||||||
|
printf("[tdehwlib] Failed to eject drive '%s' via udisks2, falling back to alternate mechanism\n", deviceNode().ascii());
|
||||||
|
#endif // WITH_UDISKS2
|
||||||
|
if (ejectDriveUDisks(this)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
#ifdef WITH_UDISKS
|
||||||
|
printf("[tdehwlib] Failed to eject drive '%s' via udisks, falling back to alternate mechanism\n", deviceNode().ascii());
|
||||||
|
#endif // WITH_UDISKS
|
||||||
|
TQString command = TQString("eject -v '%1' 2>&1").arg(deviceNode());
|
||||||
|
|
||||||
|
FILE *exepipe = popen(command.ascii(), "r");
|
||||||
|
if (exepipe) {
|
||||||
|
TQString pmount_output;
|
||||||
|
char buffer[8092];
|
||||||
|
pmount_output = fgets(buffer, sizeof(buffer), exepipe);
|
||||||
|
int retcode = pclose(exepipe);
|
||||||
|
if (retcode == 0) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("[tdehwlib] Failed to eject drive '%s' via 'eject' command\n", deviceNode().ascii());
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("[tdehwlib] Failed to eject drive '%s' via 'eject' command\n", deviceNode().ascii());
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::ejectDriveMedia() {
|
||||||
|
int fd = open(deviceNode().ascii(), O_RDWR | O_NONBLOCK);
|
||||||
|
if (fd < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ioctl(fd, CDROMEJECT) != 0) {
|
||||||
|
close(fd);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
close(fd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::diskLabel() {
|
||||||
|
return m_diskName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetDiskLabel(TQString dn) {
|
||||||
|
m_diskName = dn;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::mediaInserted() {
|
||||||
|
return m_mediaInserted;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetMediaInserted(bool inserted) {
|
||||||
|
m_mediaInserted = inserted;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::fileSystemName() {
|
||||||
|
return m_fileSystemName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetFileSystemName(TQString fn) {
|
||||||
|
m_fileSystemName = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::fileSystemUsage() {
|
||||||
|
return m_fileSystemUsage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetFileSystemUsage(TQString fu) {
|
||||||
|
m_fileSystemUsage = fu;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::diskUUID() {
|
||||||
|
return m_diskUUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetDiskUUID(TQString id) {
|
||||||
|
m_diskUUID = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQStringList TDEStorageDevice::holdingDevices() {
|
||||||
|
return m_holdingDevices;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetHoldingDevices(TQStringList hd) {
|
||||||
|
m_holdingDevices = hd;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQStringList TDEStorageDevice::slaveDevices() {
|
||||||
|
return m_slaveDevices;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDEStorageDevice::internalSetSlaveDevices(TQStringList sd) {
|
||||||
|
m_slaveDevices = sd;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::friendlyName() {
|
||||||
|
// Return the actual storage device name
|
||||||
|
TQString devicevendorid = vendorEncoded();
|
||||||
|
TQString devicemodelid = modelEncoded();
|
||||||
|
|
||||||
|
devicevendorid.replace("\\x20", " ");
|
||||||
|
devicemodelid.replace("\\x20", " ");
|
||||||
|
|
||||||
|
devicevendorid = devicevendorid.stripWhiteSpace();
|
||||||
|
devicemodelid = devicemodelid.stripWhiteSpace();
|
||||||
|
devicevendorid = devicevendorid.simplifyWhiteSpace();
|
||||||
|
devicemodelid = devicemodelid.simplifyWhiteSpace();
|
||||||
|
|
||||||
|
TQString devicename = devicevendorid + " " + devicemodelid;
|
||||||
|
|
||||||
|
devicename = devicename.stripWhiteSpace();
|
||||||
|
devicename = devicename.simplifyWhiteSpace();
|
||||||
|
|
||||||
|
if (devicename != "") {
|
||||||
|
return devicename;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Camera)) {
|
||||||
|
return TDEGenericDevice::friendlyName();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Floppy)) {
|
||||||
|
return friendlyDeviceType();
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString label = diskLabel();
|
||||||
|
if (label.isNull()) {
|
||||||
|
if (deviceSize() > 0) {
|
||||||
|
if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) {
|
||||||
|
label = i18n("%1 Removable Device").arg(deviceFriendlySize());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
label = i18n("%1 Fixed Storage Device").arg(deviceFriendlySize());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!label.isNull()) {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
return friendlyDeviceType();
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::friendlyDeviceType() {
|
||||||
|
TQString ret = i18n("Hard Disk Drive");
|
||||||
|
|
||||||
|
// Keep this in sync with TDEStorageDevice::icon(TDEIcon::StdSizes size) below
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Floppy)) {
|
||||||
|
ret = i18n("Floppy Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Optical)) {
|
||||||
|
ret = i18n("Optical Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CDROM)) {
|
||||||
|
ret = i18n("CDROM Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CDRW)) {
|
||||||
|
ret = i18n("CDRW Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDROM)) {
|
||||||
|
ret = i18n("DVD Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDRW)) {
|
||||||
|
ret = i18n("DVDRW Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDRAM)) {
|
||||||
|
ret = i18n("DVDRAM Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Zip)) {
|
||||||
|
ret = i18n("Zip Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Tape)) {
|
||||||
|
ret = i18n("Tape Drive");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Camera)) {
|
||||||
|
ret = i18n("Digital Camera");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::HDD)) {
|
||||||
|
ret = i18n("Hard Disk Drive");
|
||||||
|
if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) {
|
||||||
|
ret = i18n("Removable Storage");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CompactFlash)) {
|
||||||
|
ret = i18n("Compact Flash");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::MemoryStick)) {
|
||||||
|
ret = i18n("Memory Stick");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::SmartMedia)) {
|
||||||
|
ret = i18n("Smart Media");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::SDMMC)) {
|
||||||
|
ret = i18n("Secure Digital");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::RAM)) {
|
||||||
|
ret = i18n("Random Access Memory");
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Loop)) {
|
||||||
|
ret = i18n("Loop Device");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQPixmap TDEStorageDevice::icon(TDEIcon::StdSizes size) {
|
||||||
|
TQPixmap ret = DesktopIcon("hdd_unmount", size);
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Floppy)) {
|
||||||
|
ret = DesktopIcon("3floppy_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Optical)) {
|
||||||
|
ret = DesktopIcon("cdrom_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CDROM)) {
|
||||||
|
ret = DesktopIcon("cdrom_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CDRW)) {
|
||||||
|
ret = DesktopIcon("cdwriter_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDROM)) {
|
||||||
|
ret = DesktopIcon("dvd_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDRW)) {
|
||||||
|
ret = DesktopIcon("dvd_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::DVDRAM)) {
|
||||||
|
ret = DesktopIcon("dvd_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Zip)) {
|
||||||
|
ret = DesktopIcon("zip_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Tape)) {
|
||||||
|
ret = DesktopIcon("tape_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Camera)) {
|
||||||
|
ret = DesktopIcon("camera_unmount");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::HDD)) {
|
||||||
|
ret = DesktopIcon("hdd_unmount", size);
|
||||||
|
if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) {
|
||||||
|
ret = DesktopIcon("usbpendrive_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::CompactFlash)) {
|
||||||
|
ret = DesktopIcon("compact_flash_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::MemoryStick)) {
|
||||||
|
ret = DesktopIcon("memory_stick_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::SmartMedia)) {
|
||||||
|
ret = DesktopIcon("smart_media_unmount", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::SDMMC)) {
|
||||||
|
ret = DesktopIcon("sd_mmc_unmount", size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::RAM)) {
|
||||||
|
ret = DesktopIcon("memory", size);
|
||||||
|
}
|
||||||
|
if (isDiskOfType(TDEDiskDeviceType::Loop)) {
|
||||||
|
ret = DesktopIcon("blockdevice", size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long TDEStorageDevice::deviceSize() {
|
||||||
|
TQString bsnodename = systemPath();
|
||||||
|
bsnodename.append("/queue/physical_block_size");
|
||||||
|
TQFile bsfile( bsnodename );
|
||||||
|
TQString blocksize;
|
||||||
|
if ( bsfile.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &bsfile );
|
||||||
|
blocksize = stream.readLine();
|
||||||
|
bsfile.close();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Drat, I can't get a guaranteed block size. Assume a block size of 512, as everything I have read indicates that /sys/block/<dev>/size is given in terms of a 512 byte block...
|
||||||
|
blocksize = "512";
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString dsnodename = systemPath();
|
||||||
|
dsnodename.append("/size");
|
||||||
|
TQFile dsfile( dsnodename );
|
||||||
|
TQString devicesize;
|
||||||
|
if ( dsfile.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &dsfile );
|
||||||
|
devicesize = stream.readLine();
|
||||||
|
dsfile.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((unsigned long long)blocksize.toULong()*(unsigned long long)devicesize.toULong());
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::deviceFriendlySize() {
|
||||||
|
return TDEHardwareDevices::bytesToFriendlySizeString(deviceSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::mountPath() {
|
||||||
|
// See if this device node is mounted
|
||||||
|
// This requires parsing /proc/mounts, looking for deviceNode()
|
||||||
|
|
||||||
|
// The Device Mapper throws a monkey wrench into this
|
||||||
|
// It likes to advertise mounts as /dev/mapper/<something>,
|
||||||
|
// where <something> is listed in <system path>/dm/name
|
||||||
|
|
||||||
|
// First, ensure that all device information (mainly holders/slaves) is accurate
|
||||||
|
TDEGlobal::hardwareDevices()->rescanDeviceInformation(this);
|
||||||
|
|
||||||
|
TQString dmnodename = systemPath();
|
||||||
|
dmnodename.append("/dm/name");
|
||||||
|
TQFile namefile( dmnodename );
|
||||||
|
TQString dmaltname;
|
||||||
|
if ( namefile.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &namefile );
|
||||||
|
dmaltname = stream.readLine();
|
||||||
|
namefile.close();
|
||||||
|
}
|
||||||
|
if (!dmaltname.isNull()) {
|
||||||
|
dmaltname.prepend("/dev/mapper/");
|
||||||
|
}
|
||||||
|
|
||||||
|
TQStringList lines;
|
||||||
|
TQFile file( "/proc/mounts" );
|
||||||
|
if ( file.open( IO_ReadOnly ) ) {
|
||||||
|
TQTextStream stream( &file );
|
||||||
|
TQString line;
|
||||||
|
while ( !stream.atEnd() ) {
|
||||||
|
line = stream.readLine();
|
||||||
|
TQStringList mountInfo = TQStringList::split(" ", line, true);
|
||||||
|
TQString testNode = *mountInfo.at(0);
|
||||||
|
// Check for match
|
||||||
|
if ((testNode == deviceNode()) || (testNode == dmaltname) || (testNode == ("/dev/disk/by-uuid/" + diskUUID()))) {
|
||||||
|
TQString ret = *mountInfo.at(1);
|
||||||
|
ret.replace("\\040", " ");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
lines += line;
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// While this device is not directly mounted, it could concievably be mounted via the Device Mapper
|
||||||
|
// If so, try to retrieve the mount path...
|
||||||
|
TQStringList slaveDeviceList = holdingDevices();
|
||||||
|
for ( TQStringList::Iterator slavedevit = slaveDeviceList.begin(); slavedevit != slaveDeviceList.end(); ++slavedevit ) {
|
||||||
|
// Try to locate this device path in the TDE device tree
|
||||||
|
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
|
||||||
|
TDEGenericDevice *hwdevice = hwdevices->findBySystemPath(*slavedevit);
|
||||||
|
if ((hwdevice) && (hwdevice->type() == TDEGenericDeviceType::Disk)) {
|
||||||
|
TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice);
|
||||||
|
return sdevice->mountPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TQString::null;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::mountDevice(TQString mediaName, TQString mountOptions, TQString* errRet, int* retcode) {
|
||||||
|
int internal_retcode;
|
||||||
|
if (!retcode) {
|
||||||
|
retcode = &internal_retcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString ret = mountPath();
|
||||||
|
|
||||||
|
if (!ret.isNull()) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create dummy password file
|
||||||
|
KTempFile passwordFile(TQString::null, "tmp", 0600);
|
||||||
|
passwordFile.setAutoDelete(true);
|
||||||
|
|
||||||
|
TQString passFileName = passwordFile.name();
|
||||||
|
TQString devNode = deviceNode();
|
||||||
|
passFileName.replace("'", "'\\''");
|
||||||
|
devNode.replace("'", "'\\''");
|
||||||
|
mediaName.replace("'", "'\\''");
|
||||||
|
TQString command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1").arg(passFileName).arg(mountOptions).arg(devNode).arg(mediaName);
|
||||||
|
|
||||||
|
FILE *exepipe = popen(command.ascii(), "r");
|
||||||
|
if (exepipe) {
|
||||||
|
TQString pmount_output;
|
||||||
|
char buffer[8092];
|
||||||
|
pmount_output = fgets(buffer, sizeof(buffer), exepipe);
|
||||||
|
*retcode = pclose(exepipe);
|
||||||
|
if (errRet) {
|
||||||
|
*errRet = pmount_output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update internal mount data
|
||||||
|
TDEGlobal::hardwareDevices()->processModifiedMounts();
|
||||||
|
|
||||||
|
ret = mountPath();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString TDEStorageDevice::mountEncryptedDevice(TQString passphrase, TQString mediaName, TQString mountOptions, TQString* errRet, int* retcode) {
|
||||||
|
int internal_retcode;
|
||||||
|
if (!retcode) {
|
||||||
|
retcode = &internal_retcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString ret = mountPath();
|
||||||
|
|
||||||
|
if (!ret.isNull()) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create dummy password file
|
||||||
|
KTempFile passwordFile(TQString::null, "tmp", 0600);
|
||||||
|
passwordFile.setAutoDelete(true);
|
||||||
|
TQFile* pwFile = passwordFile.file();
|
||||||
|
if (!pwFile) {
|
||||||
|
return TQString::null;
|
||||||
|
}
|
||||||
|
|
||||||
|
pwFile->writeBlock(passphrase.ascii(), passphrase.length());
|
||||||
|
pwFile->flush();
|
||||||
|
|
||||||
|
TQString passFileName = passwordFile.name();
|
||||||
|
TQString devNode = deviceNode();
|
||||||
|
passFileName.replace("'", "'\\''");
|
||||||
|
devNode.replace("'", "'\\''");
|
||||||
|
mediaName.replace("'", "'\\''");
|
||||||
|
TQString command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1").arg(passFileName).arg(mountOptions).arg(devNode).arg(mediaName);
|
||||||
|
|
||||||
|
FILE *exepipe = popen(command.ascii(), "r");
|
||||||
|
if (exepipe) {
|
||||||
|
TQString pmount_output;
|
||||||
|
char buffer[8092];
|
||||||
|
pmount_output = fgets(buffer, sizeof(buffer), exepipe);
|
||||||
|
*retcode = pclose(exepipe);
|
||||||
|
if (errRet) {
|
||||||
|
*errRet = pmount_output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update internal mount data
|
||||||
|
TDEGlobal::hardwareDevices()->processModifiedMounts();
|
||||||
|
|
||||||
|
ret = mountPath();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDEStorageDevice::unmountDevice(TQString* errRet, int* retcode) {
|
||||||
|
int internal_retcode;
|
||||||
|
if (!retcode) {
|
||||||
|
retcode = &internal_retcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
TQString mountpoint = mountPath();
|
||||||
|
|
||||||
|
if (mountpoint.isNull()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
mountpoint.replace("'", "'\\''");
|
||||||
|
TQString command = TQString("pumount '%1' 2>&1").arg(mountpoint);
|
||||||
|
FILE *exepipe = popen(command.ascii(), "r");
|
||||||
|
if (exepipe) {
|
||||||
|
TQString pmount_output;
|
||||||
|
char buffer[8092];
|
||||||
|
pmount_output = fgets(buffer, sizeof(buffer), exepipe);
|
||||||
|
*retcode = pclose(exepipe);
|
||||||
|
if (*retcode == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (errRet) {
|
||||||
|
*errRet = pmount_output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update internal mount data
|
||||||
|
TDEGlobal::hardwareDevices()->processModifiedMounts();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "tdestoragedevice.moc"
|
@ -0,0 +1,342 @@
|
|||||||
|
/* This file is part of the TDE libraries
|
||||||
|
Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||||
|
(C) 2013 Golubev Alexander <fatzer2@gmail.com>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License version 2 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TDESTORAGEDEVICE_H
|
||||||
|
#define _TDESTORAGEDEVICE_H
|
||||||
|
|
||||||
|
#include "tdegenericdevice.h"
|
||||||
|
|
||||||
|
// Keep readDiskDeviceSubtypeFromString() in tdehardwaredevices.cpp in sync with this enum
|
||||||
|
namespace TDEDiskDeviceType {
|
||||||
|
enum TDEDiskDeviceType {
|
||||||
|
Null = 0x00000000,
|
||||||
|
MediaDevice = 0x00000001,
|
||||||
|
Floppy = 0x00000002,
|
||||||
|
CDROM = 0x00000004,
|
||||||
|
CDRW = 0x00000008,
|
||||||
|
DVDROM = 0x00000010,
|
||||||
|
DVDRAM = 0x00000020,
|
||||||
|
DVDRW = 0x00000040,
|
||||||
|
BDROM = 0x00000080,
|
||||||
|
BDRW = 0x00000100,
|
||||||
|
Zip = 0x00000200,
|
||||||
|
Jaz = 0x00000400,
|
||||||
|
Camera = 0x00000800,
|
||||||
|
LUKS = 0x00001000,
|
||||||
|
OtherCrypted = 0x00002000,
|
||||||
|
CDAudio = 0x00004000,
|
||||||
|
CDVideo = 0x00008000,
|
||||||
|
DVDVideo = 0x00010000,
|
||||||
|
BDVideo = 0x00020000,
|
||||||
|
Flash = 0x00040000,
|
||||||
|
USB = 0x00080000,
|
||||||
|
Tape = 0x00100000,
|
||||||
|
HDD = 0x00200000,
|
||||||
|
Optical = 0x00400000,
|
||||||
|
RAM = 0x00800000,
|
||||||
|
Loop = 0x01000000,
|
||||||
|
CompactFlash = 0x02000000,
|
||||||
|
MemoryStick = 0x04000000,
|
||||||
|
SmartMedia = 0x08000000,
|
||||||
|
SDMMC = 0x10000000,
|
||||||
|
UnlockedCrypt = 0x20000000,
|
||||||
|
Other = 0x80000000
|
||||||
|
};
|
||||||
|
|
||||||
|
inline TDEDiskDeviceType operator|(TDEDiskDeviceType a, TDEDiskDeviceType b)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceType>(static_cast<int>(a) | static_cast<int>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline TDEDiskDeviceType operator&(TDEDiskDeviceType a, TDEDiskDeviceType b)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceType>(static_cast<int>(a) & static_cast<int>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline TDEDiskDeviceType operator~(TDEDiskDeviceType a)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceType>(~static_cast<int>(a));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace TDEDiskDeviceStatus {
|
||||||
|
enum TDEDiskDeviceStatus {
|
||||||
|
Null = 0x00000000,
|
||||||
|
Mountable = 0x00000001,
|
||||||
|
Removable = 0x00000002,
|
||||||
|
Inserted = 0x00000004,
|
||||||
|
Blank = 0x00000008,
|
||||||
|
UsedByDevice = 0x00000010,
|
||||||
|
UsesDevice = 0x00000020,
|
||||||
|
ContainsFilesystem = 0x00000040,
|
||||||
|
Hotpluggable = 0x00000080,
|
||||||
|
Other = 0x80000000
|
||||||
|
};
|
||||||
|
|
||||||
|
inline TDEDiskDeviceStatus operator|(TDEDiskDeviceStatus a, TDEDiskDeviceStatus b)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceStatus>(static_cast<int>(a) | static_cast<int>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline TDEDiskDeviceStatus operator&(TDEDiskDeviceStatus a, TDEDiskDeviceStatus b)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceStatus>(static_cast<int>(a) & static_cast<int>(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline TDEDiskDeviceStatus operator~(TDEDiskDeviceStatus a)
|
||||||
|
{
|
||||||
|
return static_cast<TDEDiskDeviceStatus>(~static_cast<int>(a));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TDECORE_EXPORT TDEStorageDevice : public TDEGenericDevice
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
* @param Device type
|
||||||
|
*/
|
||||||
|
TDEStorageDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn=TQString::null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
|
~TDEStorageDevice();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the disk or partition label, if any
|
||||||
|
*/
|
||||||
|
TQString diskLabel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the disk UUID, if any
|
||||||
|
*/
|
||||||
|
TQString diskUUID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return an OR-ed combination of TDEDiskDeviceType::TDEDiskDeviceType type flags
|
||||||
|
*/
|
||||||
|
TDEDiskDeviceType::TDEDiskDeviceType diskType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return an OR-ed combination of TDEDiskDeviceStatus::TDEDiskDeviceStatus type flags
|
||||||
|
*/
|
||||||
|
TDEDiskDeviceStatus::TDEDiskDeviceStatus diskStatus();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if media inserted, false if no media available
|
||||||
|
*/
|
||||||
|
bool mediaInserted();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the filesystem name, if any
|
||||||
|
*/
|
||||||
|
TQString fileSystemName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the filesystem usage string, if any
|
||||||
|
*/
|
||||||
|
TQString fileSystemUsage();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQStringList containing system paths to all devices with a lock on this device, if any
|
||||||
|
*/
|
||||||
|
TQStringList holdingDevices();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQStringList containing system paths to all devices locked by this device, if any
|
||||||
|
*/
|
||||||
|
TQStringList slaveDevices();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mounts the device if not encrypted
|
||||||
|
*
|
||||||
|
* @param a TQString containing a requested mount name under /media, if desired
|
||||||
|
* @param a TQString containing any mount options for pmount, if desired
|
||||||
|
* @param a pointer to a TQString which will be populated with any error messages from pmount, if desired
|
||||||
|
* @param a pointer to an integer which will be populated with the return code from pmount, if desired
|
||||||
|
*
|
||||||
|
* @return a TQString with the mount path, if successful
|
||||||
|
*/
|
||||||
|
TQString mountDevice(TQString mediaName=TQString::null, TQString mountOptions=TQString::null, TQString* errRet=0, int* retcode=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mounts the encrypted device if the correct passphrase is given
|
||||||
|
*
|
||||||
|
* @param a TQString containing the passphrase
|
||||||
|
* @param a TQString containing a requested mount name under /media, if desired
|
||||||
|
* @param a TQString containing any mount options for pmount, if desired
|
||||||
|
* @param a pointer to a TQString which will be populated with any error messages from pmount, if desired
|
||||||
|
* @param a pointer to an integer which will be populated with the return code from pmount, if desired
|
||||||
|
*
|
||||||
|
* @return a TQString with the mount path, if successful
|
||||||
|
*/
|
||||||
|
TQString mountEncryptedDevice(TQString passphrase, TQString mediaName=TQString::null, TQString mountOptions=TQString::null, TQString* errRet=0, int* retcode=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unmounts the device
|
||||||
|
*
|
||||||
|
* @param a pointer to a TQString which will be populated with any error messages from pmount, if desired
|
||||||
|
* @param a pointer to an integer which will be populated with the return code from pmount, if desired
|
||||||
|
*
|
||||||
|
* @return TRUE if unmount was successful
|
||||||
|
*/
|
||||||
|
bool unmountDevice(TQString* errRet, int* retcode=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the mount path, if mounted
|
||||||
|
*/
|
||||||
|
TQString mountPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return an unsigned long with the device size in bytes
|
||||||
|
*/
|
||||||
|
unsigned long long deviceSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with the device size in human readable form
|
||||||
|
*/
|
||||||
|
TQString deviceFriendlySize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an icon for this device
|
||||||
|
* @param size a TDEIcon::StdSizes structure specifying the desired icon size
|
||||||
|
* @return a TQPixmap containing the icon for the specified type
|
||||||
|
*
|
||||||
|
* This method overrides TDEGenericDevice::icon(TDEIcon::StdSizes size)
|
||||||
|
*/
|
||||||
|
TQPixmap icon(TDEIcon::StdSizes size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString with a friendly name
|
||||||
|
*
|
||||||
|
* This method overrides TDEGenericDevice::friendlyName()
|
||||||
|
*/
|
||||||
|
TQString friendlyName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a TQString containing the friendly type name
|
||||||
|
*
|
||||||
|
* This method overrides TDEGenericDevice::friendlyDeviceType()
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TRUE to engage media lock, FALSE to disable it
|
||||||
|
* @return TRUE on success, FALSE on failure
|
||||||
|
*
|
||||||
|
* This method currently works on CD-ROM drives and similar devices
|
||||||
|
*/
|
||||||
|
bool lockDriveMedia(bool lock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TRUE on success, FALSE on failure
|
||||||
|
*
|
||||||
|
* This method currently works on CD-ROM drives and similar devices
|
||||||
|
*/
|
||||||
|
bool ejectDriveMedia();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TRUE on success, FALSE on failure
|
||||||
|
*
|
||||||
|
* This method currently works on all removable storage devices
|
||||||
|
*/
|
||||||
|
bool ejectDrive();
|
||||||
|
|
||||||
|
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;
|
||||||
|
TQString m_diskName;
|
||||||
|
TQString m_diskUUID;
|
||||||
|
TQString m_fileSystemName;
|
||||||
|
TQString m_fileSystemUsage;
|
||||||
|
bool m_mediaInserted;
|
||||||
|
TQString m_mountPath;
|
||||||
|
TQStringList m_holdingDevices;
|
||||||
|
TQStringList m_slaveDevices;
|
||||||
|
|
||||||
|
friend class TDEHardwareDevices;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _TDESTORAGEDEVICE_H
|
Loading…
Reference in new issue