| 1 |
#ifndef __STRUCT_H__ |
| 2 |
#define __STRUCT_H__ |
| 3 |
|
| 4 |
/* |
| 5 |
* cdrecord/cdrtools QĆ |
| 6 |
* http://www.fokus.fhg.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html |
| 7 |
*/ |
| 8 |
|
| 9 |
#include "aspi.h" |
| 10 |
|
| 11 |
#if defined(WIN32) || defined(__i386__) || defined(__x86_64__) |
| 12 |
#define BIT_FIELDS_LTOH /* Intel */ |
| 13 |
#endif |
| 14 |
|
| 15 |
struct _MODEPAGE_HEADER { |
| 16 |
#ifdef BIT_FIELDS_LTOH |
| 17 |
BYTE p_code : 6; |
| 18 |
BYTE res : 1; |
| 19 |
BYTE parsave : 1; |
| 20 |
BYTE p_len; |
| 21 |
#else |
| 22 |
BYTE parsave : 1; |
| 23 |
BYTE res : 1; |
| 24 |
BYTE p_code : 6; |
| 25 |
BYTE p_len; |
| 26 |
#endif |
| 27 |
}; |
| 28 |
|
| 29 |
struct _MODEPAGE01 { /* Error Recovery Parameters */ |
| 30 |
#ifdef BIT_FIELDS_LTOH |
| 31 |
struct _MODEPAGE_HEADER header; |
| 32 |
BYTE disa_correction : 1; /* Byte 2 */ |
| 33 |
BYTE term_on_rec_err : 1; |
| 34 |
BYTE report_rec_err : 1; |
| 35 |
BYTE en_early_corr : 1; |
| 36 |
BYTE read_continuous : 1; |
| 37 |
BYTE tranfer_block : 1; |
| 38 |
BYTE en_auto_reall_r : 1; |
| 39 |
BYTE en_auto_reall_w : 1; /* Byte 2 */ |
| 40 |
BYTE rd_retry_count; /* Byte 3 */ |
| 41 |
BYTE correction_span; |
| 42 |
BYTE head_offset_count; |
| 43 |
BYTE data_strobe_offset; |
| 44 |
BYTE res; |
| 45 |
BYTE wr_retry_count; |
| 46 |
BYTE res_tape[2]; |
| 47 |
BYTE recov_timelim[2]; |
| 48 |
#else |
| 49 |
struct _MODEPAGE_HEADER header; |
| 50 |
BYTE en_auto_reall_w : 1; /* Byte 2 */ |
| 51 |
BYTE en_auto_reall_r : 1; |
| 52 |
BYTE tranfer_block : 1; |
| 53 |
BYTE read_continuous : 1; |
| 54 |
BYTE en_early_corr : 1; |
| 55 |
BYTE report_rec_err : 1; |
| 56 |
BYTE term_on_rec_err : 1; |
| 57 |
BYTE disa_correction : 1; /* Byte 2 */ |
| 58 |
BYTE rd_retry_count; /* Byte 3 */ |
| 59 |
BYTE correction_span; |
| 60 |
BYTE head_offset_count; |
| 61 |
BYTE data_strobe_offset; |
| 62 |
BYTE res; |
| 63 |
BYTE wr_retry_count; |
| 64 |
BYTE res_tape[2]; |
| 65 |
BYTE recov_timelim[2]; |
| 66 |
#endif |
| 67 |
}; |
| 68 |
|
| 69 |
struct _MODEPAGE05 { /* Write Parameters */ |
| 70 |
#ifdef BIT_FIELDS_LTOH |
| 71 |
struct _MODEPAGE_HEADER header; |
| 72 |
BYTE write_type : 4; /* Session write type (PACKET/TAO...)*/ |
| 73 |
BYTE test_write : 1; /* Do not actually write data */ |
| 74 |
BYTE LS_V : 1; /* Link size valid */ |
| 75 |
BYTE BUFE : 1; /* Enable Bufunderrun free rec. */ |
| 76 |
BYTE res_2_7 : 1; |
| 77 |
BYTE track_mode : 4; /* Track mode (Q-sub control nibble) */ |
| 78 |
BYTE copy : 1; /* 1st higher gen of copy prot track ~*/ |
| 79 |
BYTE fp : 1; /* Fixed packed (if in packet mode) */ |
| 80 |
BYTE multi_session : 2; /* Multi session write type */ |
| 81 |
BYTE dbtype : 4; /* Data block type */ |
| 82 |
BYTE res_4 : 4; /* Reserved */ |
| 83 |
BYTE link_size; /* Link Size (default is 7) */ |
| 84 |
BYTE res_6; /* Reserved */ |
| 85 |
BYTE host_appl_code : 6; /* Host application code of disc */ |
| 86 |
BYTE res_7 : 2; /* Reserved */ |
| 87 |
BYTE session_format; /* Session format (DA/CDI/XA) */ |
| 88 |
BYTE res_9; /* Reserved */ |
| 89 |
BYTE packet_size[4]; /* # of user datablocks/fixed packet */ |
| 90 |
BYTE audio_pause_len[2]; /* # of blocks where index is zero */ |
| 91 |
BYTE mc_val; /* MCN valid */ |
| 92 |
BYTE media_cat_number[13]; /* Media catalog Number (MCN) */ |
| 93 |
BYTE res_30_31[2]; |
| 94 |
BYTE tc_val; /* ISRC valid */ |
| 95 |
BYTE ISRC[12]; /* ISRC for this track */ |
| 96 |
BYTE res_45_47; |
| 97 |
BYTE sub_header[4]; |
| 98 |
BYTE vendor_uniq[4]; |
| 99 |
#else |
| 100 |
struct _MODEPAGE_HEADER header; |
| 101 |
BYTE res_2_7 : 1; |
| 102 |
BYTE BUFE : 1; /* Enable Bufunderrun free rec. */ |
| 103 |
BYTE LS_V : 1; /* Link size valid */ |
| 104 |
BYTE test_write : 1; /* Do not actually write data */ |
| 105 |
BYTE write_type : 4; /* Session write type (PACKET/TAO...)*/ |
| 106 |
BYTE multi_session : 2; /* Multi session write type */ |
| 107 |
BYTE fp : 1; /* Fixed packed (if in packet mode) */ |
| 108 |
BYTE copy : 1; /* 1st higher gen of copy prot track ~*/ |
| 109 |
BYTE track_mode : 4; /* Track mode (Q-sub control nibble) */ |
| 110 |
BYTE res_4 : 4; /* Reserved */ |
| 111 |
BYTE dbtype : 4; /* Data block type */ |
| 112 |
BYTE link_size; /* Link Size (default is 7) */ |
| 113 |
BYTE res_6; /* Reserved */ |
| 114 |
BYTE res_7 : 2; /* Reserved */ |
| 115 |
BYTE host_appl_code : 6; /* Host application code of disc */ |
| 116 |
BYTE session_format; /* Session format (DA/CDI/XA) */ |
| 117 |
BYTE res_9; /* Reserved */ |
| 118 |
BYTE packet_size[4]; /* # of user datablocks/fixed packet */ |
| 119 |
BYTE audio_pause_len[2]; /* # of blocks where index is zero */ |
| 120 |
BYTE mc_val; /* MCN valid */ |
| 121 |
BYTE media_cat_number[13]; /* Media catalog Number (MCN) */ |
| 122 |
BYTE res_30_31[2]; |
| 123 |
BYTE tc_val; /* ISRC valid */ |
| 124 |
BYTE ISRC[12]; /* ISRC for this track */ |
| 125 |
BYTE res_45_47; |
| 126 |
BYTE sub_header[4]; |
| 127 |
BYTE vendor_uniq[4]; |
| 128 |
#endif |
| 129 |
}; |
| 130 |
|
| 131 |
/* write_type */ |
| 132 |
#define MP05WT_PACKET 0 |
| 133 |
#define MP05WT_TAO 1 |
| 134 |
#define MP05WT_SAO 2 |
| 135 |
#define MP05WT_RAW 3 |
| 136 |
/* track_mode */ |
| 137 |
#define MP05TM_AUDIO 0 |
| 138 |
#define MP05TM_DATA 4 |
| 139 |
#define MP05TM_DATAINC 5 |
| 140 |
/* dbtype */ |
| 141 |
#define MP05DBT_CDDA_2352 0 |
| 142 |
#define MP05DBT_CDDA_2368 1 |
| 143 |
#define MP05DBT_CDDA_2448 2 |
| 144 |
#define MP05DBT_RAW 3 |
| 145 |
#define MP05DBT_MODE1 8 |
| 146 |
#define MP05DBT_MODE2 9 |
| 147 |
#define MP05DBT_XA1_2048 10 |
| 148 |
#define MP05DBT_XA1_2056 11 |
| 149 |
#define MP05DBT_XA2 12 |
| 150 |
#define MP05DBT_MIX 13 |
| 151 |
/* session_format */ |
| 152 |
#define MP05SF_CDDA_CDROM 0x00 |
| 153 |
#define MP05SF_CDI 0x10 |
| 154 |
#define MP05SF_CDROM_XA 0x20 |
| 155 |
|
| 156 |
|
| 157 |
|
| 158 |
struct _WRITESPEED_PERFOMANCE { |
| 159 |
BYTE res0; /* Reserved */ |
| 160 |
BYTE rot_ctl_sel : 2; /* Rotational control selected */ |
| 161 |
BYTE res_1_27 : 6; /* Reserved */ |
| 162 |
BYTE wr_speed_supp[2]; /* Supported write speed */ |
| 163 |
}; |
| 164 |
|
| 165 |
struct _MODEPAGE2A { /* Mechanical Status */ |
| 166 |
#ifdef BIT_FIELDS_LTOH |
| 167 |
struct _MODEPAGE_HEADER header; |
| 168 |
BYTE cd_r_read : 1; /* Reads CD-R media */ |
| 169 |
BYTE cd_rw_read : 1; /* Reads CD-RW media */ |
| 170 |
BYTE method2 : 1; /* Reads fixed packet method2 media */ |
| 171 |
BYTE dvd_rom_read : 1; /* Reads DVD ROM media */ |
| 172 |
BYTE dvd_r_read : 1; /* Reads DVD-R media */ |
| 173 |
BYTE dvd_ram_read : 1; /* Reads DVD-RAM media */ |
| 174 |
BYTE res_2_67 : 2; /* Reserved */ |
| 175 |
|
| 176 |
BYTE cd_r_write : 1; /* Supports writing CD-R media */ |
| 177 |
BYTE cd_rw_write : 1; /* Supports writing CD-RW media */ |
| 178 |
BYTE test_write : 1; /* Supports emulation write */ |
| 179 |
BYTE res_3_3 : 1; /* Reserved */ |
| 180 |
BYTE dvd_r_write : 1; /* Supports writing DVD-R media */ |
| 181 |
BYTE dvd_ram_write : 1; /* Supports writing DVD-RAM media */ |
| 182 |
BYTE res_3_67 : 2; /* Reserved */ |
| 183 |
|
| 184 |
BYTE audio_play : 1; /* Supports Audio play operation */ |
| 185 |
BYTE composite : 1; /* Deliveres composite A/V stream */ |
| 186 |
BYTE digital_port_2 : 1; /* Supports digital output on port 2 */ |
| 187 |
BYTE digital_port_1 : 1; /* Supports digital output on port 1 */ |
| 188 |
BYTE mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA) */ |
| 189 |
BYTE mode_2_form_2 : 1; /* Reads Mode-2 form 2 media */ |
| 190 |
BYTE multi_session : 1; /* Reads multi-session media */ |
| 191 |
BYTE BUF : 1; /* Supports Buffer under. free rec. */ |
| 192 |
|
| 193 |
BYTE cd_da_supported : 1; /* Reads audio data with READ CD cmd */ |
| 194 |
BYTE cd_da_accurate : 1; /* READ CD data stream is accurate */ |
| 195 |
BYTE rw_supported : 1; /* Reads R-W sub channel information */ |
| 196 |
BYTE rw_deint_corr : 1; /* Reads de-interleved R-W sub chan */ |
| 197 |
BYTE c2_pointers : 1; /* Supports C2 error pointers */ |
| 198 |
BYTE ISRC : 1; /* Reads ISRC information */ |
| 199 |
BYTE UPC : 1; /* Reads media catalog number (UPC) */ |
| 200 |
BYTE read_bar_code : 1; /* Supports reading bar codes */ |
| 201 |
|
| 202 |
BYTE lock : 1; /* PREVENT/ALLOW may lock media */ |
| 203 |
BYTE lock_state : 1; /* Lock state 0=unlocked 1=locked */ |
| 204 |
BYTE prevent_jumper : 1; /* State of prev/allow jumper 0=pres */ |
| 205 |
BYTE eject : 1; /* Ejects disc/cartr with STOP LoEj */ |
| 206 |
BYTE res_6_4 : 1; /* Reserved */ |
| 207 |
BYTE loading_type : 3; /* Loading mechanism type */ |
| 208 |
|
| 209 |
BYTE sep_chan_vol : 1; /* Vol controls each channel separat */ |
| 210 |
BYTE sep_chan_mute : 1; /* Mute controls each channel separat*/ |
| 211 |
BYTE disc_present_rep: 1; /* Changer supports disc present rep */ |
| 212 |
BYTE sw_slot_sel : 1; /* Load empty slot in changer */ |
| 213 |
BYTE side_change : 1; /* Side change capable */ |
| 214 |
BYTE pw_in_lead_in : 1; /* Reads raw P-W sucode from lead in */ |
| 215 |
BYTE res_7 : 2; /* Reserved */ |
| 216 |
|
| 217 |
BYTE max_read_speed[2]; /* Max. read speed in KB/s */ |
| 218 |
BYTE num_vol_levels[2]; /* # of supported volume levels */ |
| 219 |
BYTE buffer_size[2]; /* Buffer size for the data in KB */ |
| 220 |
BYTE cur_read_speed[2]; /* Current read speed in KB/s */ |
| 221 |
BYTE res_16; /* Reserved */ |
| 222 |
BYTE res_17_0 : 1; /* Reserved */ |
| 223 |
BYTE BCK : 1; /* Data valid on falling edge of BCK */ |
| 224 |
BYTE RCK : 1; /* Set: HIGH high LRCK=left channel */ |
| 225 |
BYTE LSBF : 1; /* Set: LSB first Clear: MSB first */ |
| 226 |
BYTE length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/ |
| 227 |
BYTE res_17 : 2; /* Reserved */ |
| 228 |
BYTE max_write_speed[2]; /* Max. write speed supported in KB/s*/ |
| 229 |
BYTE cur_write_speed[2]; /* Current write speed in KB/s */ |
| 230 |
|
| 231 |
/* Byte 22 ... Only in MMC-2 */ |
| 232 |
BYTE copy_man_rev[2]; /* Copy management revision supported*/ |
| 233 |
BYTE res_24; /* Reserved */ |
| 234 |
BYTE res_25; /* Reserved */ |
| 235 |
|
| 236 |
/* Byte 26 ... Only in MMC-3 */ |
| 237 |
BYTE res_26; /* Reserved */ |
| 238 |
BYTE res_27_27 : 6; /* Reserved */ |
| 239 |
BYTE rot_ctl_sel : 2; /* Rotational control selected */ |
| 240 |
BYTE v3_cur_write_speed[2]; /* Current write speed in KB/s */ |
| 241 |
BYTE num_wr_speed_des[2]; /* # of wr speed perf descr. tables */ |
| 242 |
struct _WRITESPEED_PERFOMANCE wr_speed_des[1]; /* wr speed performance descriptor */ |
| 243 |
/* Actually more (num_wr_speed_des) */ |
| 244 |
#else |
| 245 |
struct _MODEPAGE_HEADER header; |
| 246 |
BYTE res_2_67 : 2; /* Reserved */ |
| 247 |
BYTE dvd_ram_read : 1; /* Reads DVD-RAM media */ |
| 248 |
BYTE dvd_r_read : 1; /* Reads DVD-R media */ |
| 249 |
BYTE dvd_rom_read : 1; /* Reads DVD ROM media */ |
| 250 |
BYTE method2 : 1; /* Reads fixed packet method2 media */ |
| 251 |
BYTE cd_rw_read : 1; /* Reads CD-RW media */ |
| 252 |
BYTE cd_r_read : 1; /* Reads CD-R media */ |
| 253 |
|
| 254 |
BYTE res_3_67 : 2; /* Reserved */ |
| 255 |
BYTE dvd_ram_write : 1; /* Supports writing DVD-RAM media */ |
| 256 |
BYTE dvd_r_write : 1; /* Supports writing DVD-R media */ |
| 257 |
BYTE res_3_3 : 1; /* Reserved */ |
| 258 |
BYTE test_write : 1; /* Supports emulation write */ |
| 259 |
BYTE cd_rw_write : 1; /* Supports writing CD-RW media */ |
| 260 |
BYTE cd_r_write : 1; /* Supports writing CD-R media */ |
| 261 |
|
| 262 |
BYTE BUF : 1; /* Supports Buffer under. free rec. */ |
| 263 |
BYTE multi_session : 1; /* Reads multi-session media */ |
| 264 |
BYTE mode_2_form_2 : 1; /* Reads Mode-2 form 2 media */ |
| 265 |
BYTE mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA) */ |
| 266 |
BYTE digital_port_1 : 1; /* Supports digital output on port 1 */ |
| 267 |
BYTE digital_port_2 : 1; /* Supports digital output on port 2 */ |
| 268 |
BYTE composite : 1; /* Deliveres composite A/V stream */ |
| 269 |
BYTE audio_play : 1; /* Supports Audio play operation */ |
| 270 |
|
| 271 |
BYTE read_bar_code : 1; /* Supports reading bar codes */ |
| 272 |
BYTE UPC : 1; /* Reads media catalog number (UPC) */ |
| 273 |
BYTE ISRC : 1; /* Reads ISRC information */ |
| 274 |
BYTE c2_pointers : 1; /* Supports C2 error pointers */ |
| 275 |
BYTE rw_deint_corr : 1; /* Reads de-interleved R-W sub chan */ |
| 276 |
BYTE rw_supported : 1; /* Reads R-W sub channel information */ |
| 277 |
BYTE cd_da_accurate : 1; /* READ CD data stream is accurate */ |
| 278 |
BYTE cd_da_supported : 1; /* Reads audio data with READ CD cmd */ |
| 279 |
|
| 280 |
BYTE loading_type : 3; /* Loading mechanism type */ |
| 281 |
BYTE res_6_4 : 1; /* Reserved */ |
| 282 |
BYTE eject : 1; /* Ejects disc/cartr with STOP LoEj */ |
| 283 |
BYTE prevent_jumper : 1; /* State of prev/allow jumper 0=pres */ |
| 284 |
BYTE lock_state : 1; /* Lock state 0=unlocked 1=locked */ |
| 285 |
BYTE lock : 1; /* PREVENT/ALLOW may lock media */ |
| 286 |
|
| 287 |
BYTE res_7 : 2; /* Reserved */ |
| 288 |
BYTE pw_in_lead_in : 1; /* Reads raw P-W sucode from lead in */ |
| 289 |
BYTE side_change : 1; /* Side change capable */ |
| 290 |
BYTE sw_slot_sel : 1; /* Load empty slot in changer */ |
| 291 |
BYTE disc_present_rep: 1; /* Changer supports disc present rep */ |
| 292 |
BYTE sep_chan_mute : 1; /* Mute controls each channel separat*/ |
| 293 |
BYTE sep_chan_vol : 1; /* Vol controls each channel separat */ |
| 294 |
|
| 295 |
BYTE max_read_speed[2]; /* Max. read speed in KB/s */ |
| 296 |
BYTE num_vol_levels[2]; /* # of supported volume levels */ |
| 297 |
BYTE buffer_size[2]; /* Buffer size for the data in KB */ |
| 298 |
BYTE cur_read_speed[2]; /* Current read speed in KB/s */ |
| 299 |
BYTE res_16; /* Reserved */ |
| 300 |
BYTE res_17 : 2; /* Reserved */ |
| 301 |
BYTE length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/ |
| 302 |
BYTE LSBF : 1; /* Set: LSB first Clear: MSB first */ |
| 303 |
BYTE RCK : 1; /* Set: HIGH high LRCK=left channel */ |
| 304 |
BYTE BCK : 1; /* Data valid on falling edge of BCK */ |
| 305 |
BYTE res_17_0 : 1; /* Reserved */ |
| 306 |
BYTE max_write_speed[2]; /* Max. write speed supported in KB/s*/ |
| 307 |
BYTE cur_write_speed[2]; /* Current write speed in KB/s */ |
| 308 |
|
| 309 |
/* Byte 22 ... Only in MMC-2 */ |
| 310 |
BYTE copy_man_rev[2]; /* Copy management revision supported*/ |
| 311 |
BYTE res_24; /* Reserved */ |
| 312 |
BYTE res_25; /* Reserved */ |
| 313 |
|
| 314 |
/* Byte 26 ... Only in MMC-3 */ |
| 315 |
BYTE res_26; /* Reserved */ |
| 316 |
BYTE rot_ctl_sel : 2; /* Rotational control selected */ |
| 317 |
BYTE res_27_27 : 6; /* Reserved */ |
| 318 |
BYTE v3_cur_write_speed[2]; /* Current write speed in KB/s */ |
| 319 |
BYTE num_wr_speed_des[2]; /* # of wr speed perf descr. tables */ |
| 320 |
struct _WRITESPEED_PERFOMANCE wr_speed_des[1]; /* wr speed performance descriptor */ |
| 321 |
/* Actually more (num_wr_speed_des) */ |
| 322 |
#endif |
| 323 |
}; |
| 324 |
|
| 325 |
struct _OPCTABLE { |
| 326 |
BYTE opc_speed[2]; |
| 327 |
BYTE opc_val[6]; |
| 328 |
}; |
| 329 |
|
| 330 |
struct _DISCINFO { |
| 331 |
#ifdef BIT_FIELDS_LTOH |
| 332 |
BYTE data_len[2]; /* Data len without this info */ |
| 333 |
BYTE disc_status : 2; /* Status of the disc */ |
| 334 |
BYTE sess_status : 2; /* Status of last session */ |
| 335 |
BYTE erasable : 1; /* disc is erasable */ |
| 336 |
BYTE res2 : 3; /* Reserved */ |
| 337 |
BYTE first_track; /* # of first track on disc */ |
| 338 |
BYTE numsess_lsb; /* # of sessions */ |
| 339 |
BYTE first_track_ls_lsb; /* First track in last sessaion */ |
| 340 |
BYTE last_track_ls_lsb; /* Last track in last sessaion */ |
| 341 |
BYTE bgformat_stat : 2; /* B.G. format status */ |
| 342 |
BYTE dbit : 1; /* dirty bit */ |
| 343 |
BYTE res7_3 : 1; /* Reserved */ |
| 344 |
BYTE dac_v : 1; /* disc application code valid */ |
| 345 |
BYTE uru : 1; /* This is an unrestricted disc */ |
| 346 |
BYTE dbc_v : 1; /* disc bar code valid */ |
| 347 |
BYTE did_v : 1; /* disc id valid */ |
| 348 |
BYTE disc_type; /* disc type */ |
| 349 |
BYTE numsess_msb; /* # of session(high byte) */ |
| 350 |
BYTE first_track_ls_msb; /* First track in last session(high byte) */ |
| 351 |
BYTE last_track_ls_msb; /* Last track in last session(high byte) */ |
| 352 |
BYTE disc_id[4]; /* disc identification */ |
| 353 |
BYTE last_lead_in[4]; /* Last session lead in time */ |
| 354 |
BYTE last_lead_out[4]; /* Last session lead out time */ |
| 355 |
BYTE disc_barcode[8]; /* disc bar code */ |
| 356 |
BYTE disc_app_code; /* disc application code */ |
| 357 |
BYTE num_opc_entries; /* # of OPC table entries */ |
| 358 |
struct _OPCTABLE opc_table[1]; /* OPC table */ |
| 359 |
#else |
| 360 |
BYTE data_len[2]; /* Data len without this info */ |
| 361 |
BYTE res2 : 3; /* Reserved */ |
| 362 |
BYTE erasable : 1; /* disc is erasable */ |
| 363 |
BYTE sess_status : 2; /* Status of last session */ |
| 364 |
BYTE disc_status : 2; /* Status of the disc */ |
| 365 |
BYTE first_track; /* # of first track on disc */ |
| 366 |
BYTE numsess_lsb; /* # of sessions */ |
| 367 |
BYTE first_track_ls_lsb; /* First track in last sessaion */ |
| 368 |
BYTE last_track_ls_lsb; /* Last track in last sessaion */ |
| 369 |
BYTE did_v : 1; /* disc id valid */ |
| 370 |
BYTE dbc_v : 1; /* disc bar code valid */ |
| 371 |
BYTE uru : 1; /* This is an unrestricted disc */ |
| 372 |
BYTE dac_v : 1; /* disc application code valid */ |
| 373 |
BYTE res7_3 : 1; /* Reserved */ |
| 374 |
BYTE dbit : 1; /* dirty bit */ |
| 375 |
BYTE bgformat_stat : 2; /* B.G. format status */ |
| 376 |
BYTE disc_type; /* disc type */ |
| 377 |
BYTE numsess_msb; /* # of session(high byte) */ |
| 378 |
BYTE first_track_ls_msb; /* First track in last session(high byte) */ |
| 379 |
BYTE last_track_ls_msb; /* Last track in last session(high byte) */ |
| 380 |
BYTE disc_id[4]; /* disc identification */ |
| 381 |
BYTE last_lead_in[4]; /* Last session lead in time */ |
| 382 |
BYTE last_lead_out[4]; /* Last session lead out time */ |
| 383 |
BYTE disc_barcode[8]; /* disc bar code */ |
| 384 |
BYTE disc_app_code; /* disc application code */ |
| 385 |
BYTE num_opc_entries; /* # of OPC table entries */ |
| 386 |
struct _OPCTABLE opc_table[1]; /* OPC table */ |
| 387 |
#endif |
| 388 |
}; |
| 389 |
|
| 390 |
/* disc_type */ |
| 391 |
#define DISCTYPE_CDDA_DATA 0x00 |
| 392 |
#define DISCTYPE_CDI 0x10 |
| 393 |
#define DISCTYPE_CDROM_XA 0x20 |
| 394 |
/* disc_status */ |
| 395 |
#define DISCSTAT_EMPTY 0 |
| 396 |
#define DISCSTAT_INCOMPLETE 1 |
| 397 |
#define DISCSTAT_COMPLETE 2 |
| 398 |
#define DISCSTAT_OTHER 3 /* non-write protected Random Writable media */ |
| 399 |
/* sess_status */ |
| 400 |
#define SESSSTAT_EMPTY 0 |
| 401 |
#define SESSSTAT_INCOMPLETE 1 |
| 402 |
#define SESSSTAT_COMPLETE 3 |
| 403 |
/* bgformat_stat */ |
| 404 |
#define BGFSTAT_NOTFORMATTED 0 |
| 405 |
#define BGFSTAT_INACTIVE 1 |
| 406 |
#define BGFSTAT_ACTIVE 2 |
| 407 |
#define BGFSTAT_COMPLETED 3 |
| 408 |
|
| 409 |
|
| 410 |
struct _TRACKINFO { |
| 411 |
#ifdef BIT_FIELDS_LTOH |
| 412 |
BYTE data_len[2]; /* Data len without this info */ |
| 413 |
BYTE track_number_lsb; /* Track number for this info */ |
| 414 |
BYTE session_number_lsb; /* Session number for this info */ |
| 415 |
BYTE res4; /* Reserved */ |
| 416 |
BYTE track_mode : 4; /* Track mode (Q-sub control) */ |
| 417 |
BYTE copy : 1; /* This track is a higher copy */ |
| 418 |
BYTE damage : 1; /* if 1 & nwa_valid 0: inc track*/ |
| 419 |
BYTE res5_67 : 2; /* Reserved */ |
| 420 |
BYTE data_mode : 4; /* Data mode of this track */ |
| 421 |
BYTE fp : 1; /* This is a fixed packet track */ |
| 422 |
BYTE packet : 1; /* This track is in packet mode */ |
| 423 |
BYTE blank : 1; /* This is an invisible track */ |
| 424 |
BYTE rt : 1; /* This is a reserved track */ |
| 425 |
BYTE nwa_valid : 1; /* Next writable addr valid */ |
| 426 |
BYTE lra_valid : 1; /* Last recorded addr valid */ |
| 427 |
BYTE res7_16 : 6; /* Reserved */ |
| 428 |
BYTE track_start[4]; /* Track start address */ |
| 429 |
BYTE next_writable_addr[4]; /* Next writable address */ |
| 430 |
BYTE free_blocks[4]; /* Free usr blocks in this track*/ |
| 431 |
BYTE packet_size[4]; /* Packet size if in fixed mode */ |
| 432 |
BYTE track_size[4]; /* # of user data blocks in trk */ |
| 433 |
BYTE last_rec_addr[4]; /* Last recorded addr */ |
| 434 |
BYTE track_number_msb; /* Track number for this info(high byte) */ |
| 435 |
BYTE session_number_msb; /* Session number for this info(high byte) */ |
| 436 |
BYTE res[2]; /* Reserved */ |
| 437 |
#else |
| 438 |
BYTE data_len[2]; /* Data len without this info */ |
| 439 |
BYTE track_number_lsb; /* Track number for this info */ |
| 440 |
BYTE session_number_lsb; /* Session number for this info */ |
| 441 |
BYTE res4; /* Reserved */ |
| 442 |
BYTE res5_67 : 2; /* Reserved */ |
| 443 |
BYTE damage : 1; /* if 1 & nwa_valid 0: inc track*/ |
| 444 |
BYTE copy : 1; /* This track is a higher copy */ |
| 445 |
BYTE track_mode : 4; /* Track mode (Q-sub control) */ |
| 446 |
BYTE rt : 1; /* This is a reserved track */ |
| 447 |
BYTE blank : 1; /* This is an invisible track */ |
| 448 |
BYTE packet : 1; /* This track is in packet mode */ |
| 449 |
BYTE fp : 1; /* This is a fixed packet track */ |
| 450 |
BYTE data_mode : 4; /* Data mode of this track */ |
| 451 |
BYTE res7_16 : 6; /* Reserved */ |
| 452 |
BYTE lra_valid : 1; /* Last recorded addr valid */ |
| 453 |
BYTE nwa_valid : 1; /* Next writable addr valid */ |
| 454 |
BYTE track_start[4]; /* Track start address */ |
| 455 |
BYTE next_writable_addr[4]; /* Next writable address */ |
| 456 |
BYTE free_blocks[4]; /* Free usr blocks in this track*/ |
| 457 |
BYTE packet_size[4]; /* Packet size if in fixed mode */ |
| 458 |
BYTE track_size[4]; /* # of user data blocks in trk */ |
| 459 |
BYTE last_rec_addr[4]; /* Last recorded addr */ |
| 460 |
BYTE track_number_msb; /* Track number for this info(high byte) */ |
| 461 |
BYTE session_number_msb; /* Session number for this info(high byte) */ |
| 462 |
BYTE res[2]; /* Reserved */ |
| 463 |
#endif |
| 464 |
}; |
| 465 |
|
| 466 |
|
| 467 |
struct _FEATURE_HEADER { /* for GET CONFIGURATION */ |
| 468 |
BYTE data_len[4]; |
| 469 |
BYTE res45[2]; |
| 470 |
BYTE cur_profile[2]; |
| 471 |
}; |
| 472 |
|
| 473 |
|
| 474 |
|
| 475 |
struct _FORMATLIST_HEADER { |
| 476 |
#ifdef BIT_FIELDS_LTOH |
| 477 |
BYTE res1; /* Reserved */ |
| 478 |
BYTE vs : 1; /* Vendor Specific */ |
| 479 |
BYTE immed : 1; /* Immediate */ |
| 480 |
BYTE tryout : 1; |
| 481 |
BYTE ip : 1; /* Initialization Pattern */ |
| 482 |
BYTE stpf : 1; /* Stop format */ |
| 483 |
BYTE dcrt : 1; /* Disable Certification */ |
| 484 |
BYTE dpry : 1; /* Disable Primary */ |
| 485 |
BYTE fov : 1; /* Format option valid */ |
| 486 |
BYTE fmtdesc_len[2]; /* Format descriptor length */ |
| 487 |
#else |
| 488 |
BYTE res1; /* Reserved */ |
| 489 |
BYTE fov : 1; /* Format option valid */ |
| 490 |
BYTE dpry : 1; /* Disable Primary */ |
| 491 |
BYTE dcrt : 1; /* Disable Certification */ |
| 492 |
BYTE stpf : 1; /* Stop format */ |
| 493 |
BYTE ip : 1; /* Initialization Pattern */ |
| 494 |
BYTE tryout : 1; |
| 495 |
BYTE immed : 1; /* Immediate */ |
| 496 |
BYTE vs : 1; /* Vendor Specific */ |
| 497 |
BYTE fmtdesc_len[2]; /* Format descriptor length */ |
| 498 |
#endif |
| 499 |
}; |
| 500 |
|
| 501 |
struct _CDRW_FORMATDESC { |
| 502 |
#ifdef BIT_FIELDS_LTOH |
| 503 |
BYTE res0_61 : 6; /* Reserved */ |
| 504 |
BYTE grow : 1; /* Grow session */ |
| 505 |
BYTE session : 1; /* New session */ |
| 506 |
BYTE res1_3[3]; /* Reserved */ |
| 507 |
BYTE format_size[4]; /* Format size */ |
| 508 |
#else |
| 509 |
BYTE session : 1; /* New session */ |
| 510 |
BYTE grow : 1; /* Grow session */ |
| 511 |
BYTE res0_61 : 6; /* Reserved */ |
| 512 |
BYTE res1_3[3]; /* Reserved */ |
| 513 |
BYTE format_size[4]; /* Format size */ |
| 514 |
#endif |
| 515 |
}; |
| 516 |
|
| 517 |
struct _FORMATDESC { |
| 518 |
#ifdef BIT_FIELDS_LTOH |
| 519 |
BYTE num_blocks[4]; /* # of blocks */ |
| 520 |
BYTE res4_21 : 2; /* Reserved */ |
| 521 |
BYTE format_type : 6; /* Format type */ |
| 522 |
BYTE param[3]; /* Parameter */ |
| 523 |
#else |
| 524 |
BYTE num_blocks[4]; /* # of blocks */ |
| 525 |
BYTE format_type : 6; /* Format type */ |
| 526 |
BYTE res4_21 : 2; /* Reserved */ |
| 527 |
BYTE param[3]; /* Parameter */ |
| 528 |
#endif |
| 529 |
}; |
| 530 |
/* format_type */ |
| 531 |
#define FDFT_FULL 0x10 |
| 532 |
#define FDFT_GROW 0x11 |
| 533 |
#define FDFT_ADD 0x12 |
| 534 |
#define FDFT_QUICKGROW 0x13 |
| 535 |
#define FDFT_QUICKADD 0x14 |
| 536 |
#define FDFT_QUICK 0x15 |
| 537 |
#define FDFT_CDMRW 0x24 |
| 538 |
#define FDFT_DVDPRW 0x26 |
| 539 |
|
| 540 |
|
| 541 |
/* for READ FORMAT CAPACITIES */ |
| 542 |
struct _FORMATCAPA_HEADER { |
| 543 |
BYTE res[3]; /* Reserved */ |
| 544 |
BYTE list_len; /* Capacity list length */ |
| 545 |
}; |
| 546 |
|
| 547 |
struct _FORMATCURMAXDESC { |
| 548 |
#ifdef BIT_FIELDS_LTOH |
| 549 |
BYTE num_blocks[4]; /* # of blocks */ |
| 550 |
BYTE desc_type : 2; /* Descriptor type */ |
| 551 |
BYTE res4_72 : 6; /* Reserved */ |
| 552 |
BYTE param[3]; /* Parameter */ |
| 553 |
#else |
| 554 |
BYTE num_blocks[4]; /* # of blocks */ |
| 555 |
BYTE res4_72 : 6; /* Reserved */ |
| 556 |
BYTE desc_type : 2; /* Descriptor type */ |
| 557 |
BYTE param[3]; /* Parameter */ |
| 558 |
#endif |
| 559 |
}; |
| 560 |
|
| 561 |
|
| 562 |
struct _PERFORMANCEDESC { |
| 563 |
#ifdef BIT_FIELDS_LTOH |
| 564 |
BYTE mrw : 1; /* Mix read write */ |
| 565 |
BYTE exact : 1; /* Exact */ |
| 566 |
BYTE rdd : 1; /* Restore drive default */ |
| 567 |
BYTE wrc : 2; /* Write rotation control */ |
| 568 |
BYTE res0_75 : 3; /* Reserved */ |
| 569 |
BYTE res13[3]; /* Reserved */ |
| 570 |
BYTE start_lba[4]; /* Start LBA */ |
| 571 |
BYTE end_lba[4]; /* End LBA */ |
| 572 |
BYTE read_size[4]; /* Read size */ |
| 573 |
BYTE read_time[4]; /* Read time */ |
| 574 |
BYTE write_size[4]; /* Write size */ |
| 575 |
BYTE write_time[4]; /* Write time */ |
| 576 |
#else |
| 577 |
BYTE res0_75 : 3; /* Reserved */ |
| 578 |
BYTE wrc : 2; /* Write rotation control */ |
| 579 |
BYTE rdd : 1; /* Restore drive default */ |
| 580 |
BYTE exact : 1; /* Exact */ |
| 581 |
BYTE mrw : 1; /* Mix read write */ |
| 582 |
BYTE res13[3]; /* Reserved */ |
| 583 |
BYTE start_lba[4]; /* Start LBA */ |
| 584 |
BYTE end_lba[4]; /* End LBA */ |
| 585 |
BYTE read_size[4]; /* Read size */ |
| 586 |
BYTE read_time[4]; /* Read time */ |
| 587 |
BYTE write_size[4]; /* Write size */ |
| 588 |
BYTE write_time[4]; /* Write time */ |
| 589 |
#endif |
| 590 |
}; |
| 591 |
|
| 592 |
|
| 593 |
struct _TOCHEADER { |
| 594 |
BYTE len[2]; |
| 595 |
BYTE first; |
| 596 |
BYTE last; |
| 597 |
}; |
| 598 |
|
| 599 |
struct _FULLTOCDESC { |
| 600 |
BYTE sess_num; |
| 601 |
#ifdef BIT_FIELDS_LTOH |
| 602 |
BYTE control : 4; |
| 603 |
BYTE adr : 4; |
| 604 |
#else |
| 605 |
BYTE adr : 4; |
| 606 |
BYTE control : 4; |
| 607 |
#endif |
| 608 |
BYTE track; |
| 609 |
BYTE point; |
| 610 |
BYTE amin; |
| 611 |
BYTE asec; |
| 612 |
BYTE aframe; |
| 613 |
BYTE res7; |
| 614 |
BYTE pmin; |
| 615 |
BYTE psec; |
| 616 |
BYTE pframe; |
| 617 |
}; |
| 618 |
|
| 619 |
|
| 620 |
struct _CUESHEET { |
| 621 |
BYTE ctladr; /* CTL/ADR for this track */ |
| 622 |
BYTE tno; /* This track number */ |
| 623 |
BYTE index; /* Index within this track */ |
| 624 |
BYTE dataform; /* Data form */ |
| 625 |
BYTE scms; /* Serial copy management */ |
| 626 |
BYTE min; /* Absolute time minutes */ |
| 627 |
BYTE sec; /* Absolute time seconds */ |
| 628 |
BYTE frame; /* Absolute time frames */ |
| 629 |
}; |
| 630 |
|
| 631 |
#define CSCTL_AUDIO 0x00 |
| 632 |
#define CSCTL_DATA 0x40 |
| 633 |
#define CSADR_NORMAL 0x01 |
| 634 |
#define CSADR_MCN 0x02 |
| 635 |
#define CSADR_ISRC 0x03 |
| 636 |
|
| 637 |
|
| 638 |
|
| 639 |
/* fBXN^Cv */ |
| 640 |
#define DT_UNKNOWN 0x0000 /* ˘mfBXN */ |
| 641 |
#define DT_CDROM 0x0008 /* CD-ROM */ |
| 642 |
#define DT_CDR 0x0009 /* CD-R */ |
| 643 |
#define DT_CDRW 0x000a /* CD-RW */ |
| 644 |
#define DT_DVDROM 0x0010 /* DVD-ROM */ |
| 645 |
#define DT_DVDR 0x0011 /* DVD-R */ |
| 646 |
#define DT_DVDRAM 0x0012 /* DVD-RAM */ |
| 647 |
#define DT_DVDRWO 0x0013 /* DVD-RW(tH[}bgĎ) */ |
| 648 |
#define DT_DVDRWS 0x0014 /* DVD-RW(V[PVL^) */ |
| 649 |
#define DT_DVDPRW 0x001A /* DVD+RW */ |
| 650 |
#define DT_DVDPR 0x001B /* DVD+R */ |
| 651 |
|
| 652 |
#define DT_CD_FAMILY(d) (d==DT_CDROM||d==DT_CDR||d==DT_CDRW) |
| 653 |
#define DT_DVD_FAMILY(d) (d>=DT_DVDROM) |
| 654 |
#define DT_WRITABLE(d) \ |
| 655 |
(d==DT_CDR||d==DT_CDRW||\ |
| 656 |
d==DT_DVDR||d==DT_DVDRWO||d==DT_DVDRWS||d==DT_DVDPRW||d==DT_DVDPR) |
| 657 |
|
| 658 |
#endif /* !__STRUCT_H__ */ |