1 | /* |
2 | SPDX-FileCopyrightText: 2006-2007 Kevin Ottens <ervin@kde.org> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
5 | */ |
6 | |
7 | #ifndef SOLID_STORAGEDRIVE_H |
8 | #define SOLID_STORAGEDRIVE_H |
9 | |
10 | #include <solid/solid_export.h> |
11 | |
12 | #include <solid/deviceinterface.h> |
13 | |
14 | namespace Solid |
15 | { |
16 | class StorageDrivePrivate; |
17 | class Device; |
18 | |
19 | /** |
20 | * @class Solid::StorageDrive storagedrive.h <Solid/StorageDrive> |
21 | * |
22 | * This device interface is available on storage devices. |
23 | * |
24 | * A storage is anything that can contain a set of volumes (card reader, |
25 | * hard disk, cdrom drive...). It's a particular kind of block device. |
26 | */ |
27 | class SOLID_EXPORT StorageDrive : public DeviceInterface |
28 | { |
29 | Q_OBJECT |
30 | Q_PROPERTY(Bus bus READ bus) |
31 | Q_PROPERTY(DriveType driveType READ driveType) |
32 | Q_PROPERTY(bool removable READ isRemovable) |
33 | Q_PROPERTY(bool hotpluggable READ isHotpluggable) |
34 | Q_PROPERTY(bool inUse READ isInUse) |
35 | Q_PROPERTY(qulonglong size READ size) |
36 | Q_PROPERTY(QDateTime timeDetected READ timeDetected CONSTANT) |
37 | Q_PROPERTY(QDateTime timeMediaDetected READ timeDetected) |
38 | |
39 | Q_DECLARE_PRIVATE(StorageDrive) |
40 | friend class Device; |
41 | |
42 | public: |
43 | /** |
44 | * This enum type defines the type of bus a storage device is attached to. |
45 | * |
46 | * - Ide : An Integrated Drive Electronics (IDE) bus, also known as ATA |
47 | * - Usb : An Universal Serial Bus (USB) |
48 | * - Ieee1394 : An Ieee1394 bus, also known as Firewire |
49 | * - Scsi : A Small Computer System Interface bus |
50 | * - Sata : A Serial Advanced Technology Attachment (SATA) bus |
51 | * - Platform : A legacy bus that is part of the underlying platform |
52 | */ |
53 | enum Bus { Ide, Usb, Ieee1394, Scsi, Sata, Platform }; |
54 | Q_ENUM(Bus) |
55 | |
56 | /** |
57 | * This enum type defines the type of drive a storage device can be. |
58 | * |
59 | * - HardDisk : A hard disk |
60 | * - CdromDrive : An optical drive |
61 | * - Floppy : A floppy disk drive |
62 | * - Tape : A tape drive |
63 | * - CompactFlash : A Compact Flash card reader |
64 | * - MemoryStick : A Memory Stick card reader |
65 | * - SmartMedia : A Smart Media card reader |
66 | * - SdMmc : A SecureDigital/MultiMediaCard card reader |
67 | * - Xd : A xD card reader |
68 | */ |
69 | enum DriveType { HardDisk, CdromDrive, Floppy, Tape, CompactFlash, MemoryStick, SmartMedia, SdMmc, Xd }; |
70 | Q_ENUM(DriveType) |
71 | |
72 | private: |
73 | /** |
74 | * Creates a new StorageDrive object. |
75 | * You generally won't need this. It's created when necessary using |
76 | * Device::as(). |
77 | * |
78 | * @param backendObject the device interface object provided by the backend |
79 | * @see Solid::Device::as() |
80 | */ |
81 | SOLID_NO_EXPORT explicit StorageDrive(QObject *backendObject); |
82 | |
83 | public: |
84 | /** |
85 | * Destroys a StorageDrive object. |
86 | */ |
87 | ~StorageDrive() override; |
88 | |
89 | /** |
90 | * Get the Solid::DeviceInterface::Type of the StorageDrive device interface. |
91 | * |
92 | * @return the StorageDrive device interface type |
93 | * @see Solid::DeviceInterface::Type |
94 | */ |
95 | static Type deviceInterfaceType() |
96 | { |
97 | return DeviceInterface::StorageDrive; |
98 | } |
99 | |
100 | /** |
101 | * Retrieves the type of physical interface this storage device is |
102 | * connected to. |
103 | * |
104 | * @return the bus type |
105 | * @see Solid::StorageDrive::Bus |
106 | */ |
107 | Bus bus() const; |
108 | |
109 | /** |
110 | * Retrieves the type of this storage drive. |
111 | * |
112 | * @return the drive type |
113 | * @see Solid::StorageDrive::DriveType |
114 | */ |
115 | DriveType driveType() const; |
116 | |
117 | /** |
118 | * Indicates if the media contained by this drive can be removed. |
119 | * |
120 | * For example memory card can be removed from the drive by the user, |
121 | * while partitions can't be removed from hard disks. |
122 | * |
123 | * @return true if media can be removed, false otherwise. |
124 | */ |
125 | bool isRemovable() const; |
126 | |
127 | /** |
128 | * Indicates if this storage device can be plugged or unplugged while |
129 | * the computer is running. |
130 | * |
131 | * @return true if this storage supports hotplug, false otherwise |
132 | */ |
133 | bool isHotpluggable() const; |
134 | |
135 | /** |
136 | * Retrieves this drives size in bytes. |
137 | * |
138 | * @return the size of this drive |
139 | */ |
140 | qulonglong size() const; |
141 | |
142 | /** |
143 | * Indicates if the storage device is currently in use |
144 | * i.e. if at least one child storage access is |
145 | * mounted |
146 | * |
147 | * @return true if at least one child storage access is mounted |
148 | */ |
149 | bool isInUse() const; |
150 | |
151 | /** |
152 | * Returns the time the drive was deteced. |
153 | * Typically this means the time a drive was plugged in, or the computer rebooted |
154 | * |
155 | * An invalid datetime may be returned if the underlying information is not available |
156 | * @since 6.0 |
157 | */ |
158 | QDateTime timeDetected() const; |
159 | |
160 | /** |
161 | * Returns the time media in the drive was deteced. |
162 | * Typically this means the time a card was inserted into a reader, or the computer rebooted |
163 | * |
164 | * An invalid datetime may be returned if the underlying information is not available |
165 | * @since 6.0 |
166 | */ |
167 | QDateTime timeMediaDetected() const; |
168 | |
169 | protected: |
170 | /** |
171 | * @internal |
172 | */ |
173 | SOLID_NO_EXPORT StorageDrive(StorageDrivePrivate &dd, QObject *backendObject); |
174 | }; |
175 | } |
176 | |
177 | #endif // SOLID_STORAGEDRIVE_H |
178 | |