File indexing completed on 2024-04-14 04:44:45

0001 /*
0002     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef _K3B_DEVICE_TYPES_H_
0007 #define _K3B_DEVICE_TYPES_H_
0008 
0009 #include <QFlags>
0010 
0011 namespace K3b {
0012     namespace Device {
0013         const unsigned short FEATURE_PROFILE_LIST = 0x000;
0014         const unsigned short FEATURE_CORE = 0x001;
0015         const unsigned short FEATURE_MORPHING = 0x002;
0016         const unsigned short FEATURE_REMOVABLE_MEDIA = 0x003;
0017         const unsigned short FEATURE_WRITE_PROTECT = 0x004;
0018         const unsigned short FEATURE_RANDOM_READABLE = 0x010;
0019         const unsigned short FEATURE_MULTI_READ = 0x01D;
0020         const unsigned short FEATURE_CD_READ = 0x01E;
0021         const unsigned short FEATURE_DVD_READ = 0x01F;
0022         const unsigned short FEATURE_RANDOM_WRITABLE = 0x020;
0023         const unsigned short FEATURE_INCREMENTAL_STREAMING_WRITABLE = 0x021;
0024         const unsigned short FEATURE_SECTOR_ERASABLE = 0x022;
0025         const unsigned short FEATURE_FORMATTABLE = 0x023;
0026         const unsigned short FEATURE_DEFECT_MANAGEMENT = 0x024;
0027         const unsigned short FEATURE_WRITE_ONCE = 0x025;
0028         const unsigned short FEATURE_RESTRICTED_OVERWRITE = 0x026;
0029         const unsigned short FEATURE_CD_RW_CAV_WRITE = 0x027;
0030         const unsigned short FEATURE_MRW = 0x028;
0031         const unsigned short FEATURE_ENHANCED_DEFECT_REPORTING = 0x029;
0032         const unsigned short FEATURE_DVD_PLUS_RW = 0x02A;
0033         const unsigned short FEATURE_DVD_PLUS_R = 0x02B;
0034         const unsigned short FEATURE_RIGID_RESTRICTED_OVERWRITE = 0x02C;
0035         const unsigned short FEATURE_CD_TRACK_AT_ONCE = 0x02D;
0036         const unsigned short FEATURE_CD_MASTERING = 0x02E;
0037         const unsigned short FEATURE_DVD_R_RW_WRITE = 0x02F;
0038         const unsigned short FEATURE_DDCD_READ = 0x030;
0039         const unsigned short FEATURE_DDCD_R_WRITE = 0x031;
0040         const unsigned short FEATURE_DDCD_RW_WRITE = 0x032;
0041         const unsigned short FEATURE_LAYER_JUMP_RECORDING = 0x033;
0042         const unsigned short FEATURE_CD_RW_MEDIA_WRITE_SUPPORT = 0x037;
0043         const unsigned short FEATURE_BD_PSEUDO_OVERWRITE = 0x038;
0044         const unsigned short FEATURE_DVD_PLUS_RW_DUAL_LAYER = 0x03A;            /**< since MMC5 revision 3 */
0045         const unsigned short FEATURE_DVD_PLUS_R_DUAL_LAYER = 0x03B;
0046         const unsigned short FEATURE_BD_READ = 0x040;
0047         const unsigned short FEATURE_BD_WRITE = 0x041;
0048         const unsigned short FEATURE_HD_DVD_READ = 0x050;
0049         const unsigned short FEATURE_HD_DVD_WRITE = 0x051;
0050         const unsigned short FEATURE_POWER_MANAGEMENT = 0x100;
0051         const unsigned short FEATURE_EMBEDDED_CHANGER = 0x102;
0052         const unsigned short FEATURE_CD_AUDIO_ANALOG_PLAY = 0x103;
0053         const unsigned short FEATURE_MICROCODE_UPGRADE = 0x104;
0054         const unsigned short FEATURE_TIMEOUT = 0x105;
0055         const unsigned short FEATURE_DVD_CSS = 0x106;
0056         const unsigned short FEATURE_REAL_TIME_STREAMING = 0x107;
0057         const unsigned short FEATURE_LOGICAL_UNIT_SERIAL_NUMBER = 0x108;
0058         const unsigned short FEATURE_DISC_CONTROL_BLOCKS = 0x10A;
0059         const unsigned short FEATURE_DVD_CPRM = 0x10B;
0060         const unsigned short FEATURE_FIRMWARE_DATE = 0x10C;
0061 
0062         enum Interface {
0063             SCSI,        /**< The device is accessed through the SCSI subsystem. */
0064             IDE,         /**< The device is accessed through the IDE (ATAPI) interface. */
0065             OTHER        /**< Unknown interface (this is not used as the DeviceManager does only handle SCSI and IDE anyway). */
0066         };
0067 
0068         /**
0069          * Specifies the device type. Device::type() returns a bitwise or
0070          * of device types.
0071          */
0072         enum DeviceType {
0073             DEVICE_CD_ROM = 0x1,          /**< Device reads CD-ROM media (every device in K3b supports this.) */
0074             DEVICE_CD_R = 0x2,            /**< Device writes CD-R media */
0075             DEVICE_CD_RW = 0x4,           /**< Device writes CD-RW media */
0076             DEVICE_DVD_ROM = 0x8,         /**< Device reads DVD-ROM media */
0077             DEVICE_DVD_RAM = 0x10,        /**< Device writes DVD-RAM media */
0078             DEVICE_DVD_R = 0x20,          /**< Device writes DVD-R media */
0079             DEVICE_DVD_RW = 0x40,         /**< Device writes DVD-RW media */
0080             DEVICE_DVD_R_DL = 0x80,       /**< Device writes DVD-R Dual Layer media */
0081             DEVICE_DVD_PLUS_R = 0x100,    /**< Device writes DVD+R media */
0082             DEVICE_DVD_PLUS_RW = 0x200,   /**< Device writes DVD+RW media */
0083             DEVICE_DVD_PLUS_R_DL = 0x400, /**< Device writes DVD+R Double Layer media */
0084             DEVICE_HD_DVD_ROM = 0x800,    /**< Device reads HD DVD-ROM media */
0085             DEVICE_HD_DVD_R = 0x1000,     /**< Device writes HD DVD-R media */
0086             DEVICE_HD_DVD_RAM = 0x2000,   /**< Device writes HD DVD-RAM media */
0087             DEVICE_BD_ROM = 0x4000,       /**< Device reads BD-ROM media */
0088             DEVICE_BD_R = 0x8000,         /**< Device writes BD-R media */
0089             DEVICE_BD_RE = 0x10000        /**< Device writes BD-RE media */
0090         };
0091         Q_DECLARE_FLAGS( DeviceTypes, DeviceType )
0092 
0093         /**
0094          * The different writing modes. Device::writingModes() returns a bitwise or of writing modes.
0095          */
0096         enum WritingMode {
0097             WRITINGMODE_SAO = 0x1,           /**< Device writes CD or DVD-R media in Session at once (also known as DAO) writing mode */
0098             WRITINGMODE_SAO_R96P = 0x2,      /**< Device writes CD media with packed R-W subchannels Session at once writing mode */
0099             WRITINGMODE_SAO_R96R = 0x4,      /**< Device writes CD media with raw R-W subchannels Session at once writing mode */
0100             WRITINGMODE_TAO = 0x8,           /**< Device writes CD media in Track at once writing mode */
0101             WRITINGMODE_RAW = 0x10,          /**< Device writes CD media in Raw writing mode */
0102             WRITINGMODE_RAW_R16 = 0x20,      /**< Device writes CD media with P/Q subchannels in Raw writing mode */
0103             WRITINGMODE_RAW_R96P = 0x40,     /**< Device writes CD media with packed R-W subchannels Raw writing mode */
0104             WRITINGMODE_RAW_R96R = 0x80,     /**< Device writes CD media with raw R-W subchannels Raw writing mode */
0105             WRITINGMODE_INCR_SEQ = 0x100,    /**< Device writes DVD-R(W) media in incremental sequential writing mode */
0106             WRITINGMODE_RES_OVWR = 0x200,    /**< Device writes DVD-RW media in restricted overwrite mode */
0107             WRITINGMODE_LAYER_JUMP = 0x400,  /**< Device writes DVD-R Dual layer media in Layer Jump writing mode */
0108             WRITINGMODE_RRM = 0x800,         /**< Device writes BD-R media in Random Recording Mode */
0109             WRITINGMODE_SRM = 0x1000,        /**< Device writes BD-R media in Sequential recording mode */
0110             WRITINGMODE_SRM_POW = 0x2000     /**< Device writes BD-R media in Pseudo overwrite Sequential recording mode */
0111         };
0112         Q_DECLARE_FLAGS( WritingModes, WritingMode )
0113 
0114         enum MediaState {
0115             STATE_UNKNOWN = 0x1,    /**< Media state is unknown (when an error occurred or the device is unable to determine the media state). */
0116             STATE_NO_MEDIA = 0x2,   /**< No media inserted. */
0117             STATE_COMPLETE = 0x4,   /**< The inserted media is complete. */
0118             STATE_INCOMPLETE = 0x8, /**< The inserted media is incomplete/appendable. */
0119             STATE_EMPTY = 0x10,     /**< The inserted media is empty. */
0120             STATE_ALL = STATE_COMPLETE|STATE_INCOMPLETE|STATE_EMPTY
0121         };
0122         Q_DECLARE_FLAGS( MediaStates, MediaState )
0123 
0124         enum BackGroundFormattingState {
0125             BG_FORMAT_INVALID = 0x0,
0126             BG_FORMAT_NONE = 0x1,
0127             BG_FORMAT_INCOMPLETE = 0x2,
0128             BG_FORMAT_IN_PROGRESS = 0x4,
0129             BG_FORMAT_COMPLETE = 0x8
0130         };
0131         Q_DECLARE_FLAGS( BackGroundFormattingStates, BackGroundFormattingState )
0132 
0133         /**
0134          * Defines the media types used throughout K3b.
0135          * For all groups of media a flag is defined like MEDIA_REWRITABLE_DVD.
0136          *
0137          * None of the flags is defines as 0 so we can actually include things like
0138          * MEDIA_NONE in flag combinations. This is important when specifying sets
0139          * of supported media or the like.
0140          */
0141         enum MediaType {
0142             /** Represents an unknown media type (when an error occurred) */
0143             MEDIA_UNKNOWN = 0x1,
0144 
0145             /** No medium is inserted. */
0146             MEDIA_NONE = 0x2,
0147 
0148             /** DVD-ROM media */
0149             MEDIA_DVD_ROM = 0x4,
0150 
0151             MEDIA_DVD_R = 0x8,
0152 
0153             MEDIA_DVD_R_SEQ = 0x10,
0154 
0155             /** Dual Layer DVD-R media. */
0156             MEDIA_DVD_R_DL = 0x20,
0157 
0158             MEDIA_DVD_R_DL_SEQ = 0x40,
0159 
0160             MEDIA_DVD_R_DL_JUMP = 0x80,
0161 
0162             MEDIA_DVD_RAM = 0x100,
0163 
0164             MEDIA_DVD_RW = 0x200,
0165 
0166             /** DVD-RW media formatted in Restricted Overwrite mode. */
0167             MEDIA_DVD_RW_OVWR = 0x400,
0168 
0169             /** DVD-RW media formatted in Incremental Sequential mode. */
0170             MEDIA_DVD_RW_SEQ = 0x800,
0171 
0172             MEDIA_DVD_PLUS_RW = 0x1000,
0173 
0174             MEDIA_DVD_PLUS_R = 0x2000,
0175 
0176             /** Double Layer DVD+R media. */
0177             MEDIA_DVD_PLUS_R_DL = 0x4000,
0178 
0179             /** Double Layer DVD+RW media. */
0180             MEDIA_DVD_PLUS_RW_DL = 0x8000,
0181 
0182             MEDIA_CD_ROM = 0x10000,
0183             MEDIA_CD_R = 0x20000,
0184             MEDIA_CD_RW = 0x40000,
0185             MEDIA_HD_DVD_ROM = 0x80000,
0186             MEDIA_HD_DVD_R = 0x100000,
0187             MEDIA_HD_DVD_RAM = 0x200000,
0188 
0189             /** Read-only Blu-ray Disc (BD) */
0190             MEDIA_BD_ROM = 0x400000,
0191 
0192             /** Writable Blu-ray Disc (BD-R) */
0193             MEDIA_BD_R = 0x800000,
0194 
0195             /** Writable Blu-ray Disc (BD-R) */
0196             MEDIA_BD_R_SRM = 0x1000000,
0197 
0198             /** Writable Blu-ray Disc (BD-R) */
0199             MEDIA_BD_R_SRM_POW = 0x2000000,
0200 
0201             /** Writable Blu-ray Disc (BD-R) */
0202             MEDIA_BD_R_RRM = 0x4000000,
0203 
0204             /** Rewritable Blu-ray Disc (BD-RE) */
0205             MEDIA_BD_RE = 0x8000000,
0206 
0207             /** This is a bitwise or of media types representing all writable CD media.*/
0208             MEDIA_WRITABLE_CD = MEDIA_CD_R |
0209             MEDIA_CD_RW,
0210 
0211             MEDIA_CD_ALL = MEDIA_WRITABLE_CD |
0212             MEDIA_CD_ROM,
0213 
0214             MEDIA_REWRITABLE_DVD_SL = MEDIA_DVD_RW |
0215             MEDIA_DVD_RW_OVWR |
0216             MEDIA_DVD_RW_SEQ |
0217             MEDIA_DVD_PLUS_RW,
0218 
0219             MEDIA_REWRITABLE_DVD_DL = MEDIA_DVD_PLUS_RW_DL,
0220 
0221             MEDIA_REWRITABLE_DVD = MEDIA_REWRITABLE_DVD_SL |
0222             MEDIA_DVD_PLUS_RW_DL,
0223 
0224             /** This is a bitwise or of media types representing all writable single layer DVD media. */
0225             MEDIA_WRITABLE_DVD_SL = MEDIA_REWRITABLE_DVD_SL |
0226             MEDIA_DVD_R |
0227             MEDIA_DVD_R_SEQ |
0228             MEDIA_DVD_RW |
0229             MEDIA_DVD_RW_OVWR |
0230             MEDIA_DVD_RW_SEQ |
0231             MEDIA_DVD_PLUS_RW |
0232             MEDIA_DVD_PLUS_R,
0233 
0234             /** This is a bitwise or of media types representing all writable double layer DVD media. */
0235             MEDIA_WRITABLE_DVD_DL = MEDIA_REWRITABLE_DVD_DL |
0236             MEDIA_DVD_R_DL |
0237             MEDIA_DVD_R_DL_SEQ |
0238             MEDIA_DVD_R_DL_JUMP |
0239             MEDIA_DVD_PLUS_R_DL |
0240             MEDIA_DVD_PLUS_RW_DL,
0241 
0242             /** This is a bitwise or of media types representing all writable DVD media. */
0243             MEDIA_WRITABLE_DVD = MEDIA_WRITABLE_DVD_SL |
0244             MEDIA_WRITABLE_DVD_DL,
0245 
0246             MEDIA_REWRITABLE_BD = MEDIA_BD_RE,
0247 
0248             /** This is a bitwise or of media types representing all writable BD media. */
0249             MEDIA_WRITABLE_BD = MEDIA_REWRITABLE_BD |
0250             MEDIA_BD_R |
0251             MEDIA_BD_R_SRM |
0252             MEDIA_BD_R_SRM_POW |
0253             MEDIA_BD_R_RRM,
0254 
0255             /** This is a bitwise or of media types representing all writable media. */
0256             MEDIA_WRITABLE = MEDIA_WRITABLE_CD |
0257             MEDIA_WRITABLE_DVD |
0258             MEDIA_WRITABLE_BD,
0259 
0260             MEDIA_REWRITABLE = MEDIA_CD_RW |
0261             MEDIA_REWRITABLE_DVD |
0262             MEDIA_REWRITABLE_BD,
0263 
0264             /** This is a bitwise or of media types representing all DVD-R/W media. */
0265             MEDIA_DVD_MINUS_ALL = MEDIA_DVD_R |
0266             MEDIA_DVD_R_SEQ |
0267             MEDIA_DVD_RW |
0268             MEDIA_DVD_RW_OVWR |
0269             MEDIA_DVD_RW_SEQ |
0270             MEDIA_DVD_R_DL |
0271             MEDIA_DVD_R_DL_SEQ |
0272             MEDIA_DVD_R_DL_JUMP,
0273 
0274             /** This is a bitwise or of media types representing all DVD+R/W media. */
0275             MEDIA_DVD_PLUS_ALL = MEDIA_DVD_PLUS_RW |
0276             MEDIA_DVD_PLUS_R |
0277             MEDIA_DVD_PLUS_R_DL |
0278             MEDIA_DVD_PLUS_RW_DL,
0279 
0280             MEDIA_DVD_ALL = MEDIA_WRITABLE_DVD |
0281             MEDIA_DVD_ROM,
0282 
0283             MEDIA_BD_ALL = MEDIA_WRITABLE_BD |
0284             MEDIA_BD_ROM,
0285 
0286             MEDIA_ALL = MEDIA_CD_ALL |
0287             MEDIA_DVD_ALL |
0288             MEDIA_BD_ALL
0289         };
0290         Q_DECLARE_FLAGS( MediaTypes, MediaType )
0291 
0292         enum SpeedMultiplicator {
0293             SPEED_FACTOR_CD = 175,
0294             SPEED_FACTOR_CD_MODE1 = 150,
0295             SPEED_FACTOR_DVD = 1385,
0296             SPEED_FACTOR_BD = 4496 // 4495.5
0297         };
0298 
0299         enum CopyrightProtectionSytemType {
0300             COPYRIGHT_PROTECTION_NONE = 0x0,
0301             COPYRIGHT_PROTECTION_CSS = 0x1,
0302             COPYRIGHT_PROTECTION_CPRM = 0x2,
0303             COPYRIGHT_PROTECTION_AACS_HD_DVD = 0x3,
0304             COPYRIGHT_PROTECTION_AACS_BD = 0x10
0305         };
0306 
0307         inline bool isDvdMedia( MediaTypes mediaType ) {
0308             return ( mediaType & MEDIA_DVD_ALL );
0309         }
0310 
0311         inline bool isCdMedia( MediaTypes mediaType ) {
0312             return ( mediaType & MEDIA_CD_ALL );
0313         }
0314 
0315         inline bool isBdMedia( MediaTypes mediaType ) {
0316             return ( mediaType & MEDIA_BD_ALL );
0317         }
0318 
0319         inline bool isRewritableMedia( MediaTypes mediaType ) {
0320             return ( mediaType & MEDIA_REWRITABLE );
0321         }
0322     }
0323 }
0324 
0325 Q_DECLARE_OPERATORS_FOR_FLAGS(K3b::Device::DeviceTypes)
0326 Q_DECLARE_OPERATORS_FOR_FLAGS(K3b::Device::WritingModes)
0327 Q_DECLARE_OPERATORS_FOR_FLAGS(K3b::Device::MediaStates)
0328 Q_DECLARE_OPERATORS_FOR_FLAGS(K3b::Device::BackGroundFormattingStates)
0329 Q_DECLARE_OPERATORS_FOR_FLAGS(K3b::Device::MediaTypes)
0330 
0331 #endif