File indexing completed on 2025-03-23 04:28:11
0001 /* 0002 0003 SPDX-FileCopyrightText: 2003-2009 Sebastian Trueg <trueg@k3b.org> 0004 SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 0010 #ifndef _K3B_MMC_H_ 0011 #define _K3B_MMC_H_ 0012 0013 #include <config-k3b.h> 0014 0015 0016 namespace K3b { 0017 namespace Device 0018 { 0019 /* 0020 * struct disc_info taken from cdrwtool.h 0021 * 0022 * 0023 * disc status (status): 0024 * 00b - empty disc 0025 * 01b - incomplete disc (appendable) 0026 * 10b - Complete disc 0027 * 11b - Others 0028 * 0029 * State of last session (border) 0030 * 00b - Empty session 0031 * 01b - Incomplete session 0032 * 10b - Reserved 0033 * 11b - Complete session (only possible when disc status is complete) 0034 */ 0035 typedef struct disc_info { 0036 quint16 length; 0037 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0038 unsigned char reserved1 : 3; 0039 unsigned char erasable : 1; 0040 unsigned char border : 2; 0041 unsigned char status : 2; 0042 #else 0043 unsigned char status : 2; 0044 unsigned char border : 2; 0045 unsigned char erasable : 1; 0046 unsigned char reserved1 : 3; 0047 #endif 0048 unsigned char n_first_track; 0049 unsigned char n_sessions_l; 0050 unsigned char first_track_l; 0051 unsigned char last_track_l; 0052 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0053 unsigned char did_v : 1; 0054 unsigned char dbc_v : 1; 0055 unsigned char uru : 1; 0056 unsigned char reserved2 : 2; 0057 unsigned char dbit : 1; 0058 unsigned char bg_f_status : 1; 0059 #else 0060 unsigned char bg_f_status : 1; 0061 unsigned char dbit : 1; 0062 unsigned char reserved2 : 2; 0063 unsigned char uru : 1; 0064 unsigned char dbc_v : 1; 0065 unsigned char did_v : 1; 0066 #endif 0067 0068 /* 0069 * disc type 0070 * 00h - CD-DA of CDROM 0071 * 10h - CD-I 0072 * 20h - CD-ROM XA 0073 * FFh - Undefined 0074 * All other values are reserved 0075 */ 0076 unsigned char disc_type; 0077 unsigned char n_sessions_m; 0078 unsigned char first_track_m; 0079 unsigned char last_track_m; 0080 quint32 disc_id; 0081 0082 /* 0083 * Last session lead-in start time 0084 * if the disc is complete this shall be FF/FF/FF 0085 */ 0086 unsigned char lead_in_r; 0087 unsigned char lead_in_m; 0088 unsigned char lead_in_s; 0089 unsigned char lead_in_f; 0090 0091 /* 0092 * Last possible start time for start of lead-in 0093 * if the disc is complete this shall be FF/FF/FF 0094 */ 0095 unsigned char lead_out_r; 0096 unsigned char lead_out_m; 0097 unsigned char lead_out_s; 0098 unsigned char lead_out_f; 0099 0100 unsigned char disc_bar_code[8]; 0101 0102 // 0103 // We need to make sure the structure has a proper size 0104 // I think it needs to be a power of 2. 0105 // With ide-scsi there is no problem. But without the 0106 // GPCMD_READ_DISC_INFO command failes if the size is 34 0107 // 0108 0109 /* unsigned char reserved3; */ 0110 /* unsigned char opc_entries; */ 0111 } disc_info_t; 0112 0113 0114 0115 /* 0116 * struct track_info taken from cdrwtool.h 0117 */ 0118 typedef struct track_info { 0119 unsigned char data_length[2]; 0120 unsigned char track_number_l; 0121 unsigned char session_number_l; 0122 unsigned char reserved1; 0123 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0124 unsigned char reserved2 : 2; 0125 unsigned char damage : 1; 0126 unsigned char copy : 1; 0127 unsigned char track_mode : 4; 0128 unsigned char rt : 1; 0129 unsigned char blank : 1; 0130 unsigned char packet : 1; 0131 unsigned char fp : 1; 0132 unsigned char data_mode : 4; 0133 unsigned char reserved3 : 6; 0134 unsigned char lra_v : 1; 0135 unsigned char nwa_v : 1; 0136 #else 0137 unsigned char track_mode : 4; 0138 unsigned char copy : 1; 0139 unsigned char damage : 1; 0140 unsigned char reserved2 : 2; 0141 unsigned char data_mode : 4; 0142 unsigned char fp : 1; 0143 unsigned char packet : 1; 0144 unsigned char blank : 1; 0145 unsigned char rt : 1; 0146 unsigned char nwa_v : 1; 0147 unsigned char lra_v : 1; 0148 unsigned char reserved3 : 6; 0149 #endif 0150 unsigned char track_start[4]; 0151 unsigned char next_writable[4]; 0152 unsigned char free_blocks[4]; 0153 unsigned char packet_size[4]; 0154 unsigned char track_size[4]; 0155 unsigned char last_recorded[4]; 0156 unsigned char track_number_m; 0157 unsigned char session_number_m; 0158 unsigned char reserved4; 0159 unsigned char reserved5; 0160 unsigned char read_compatibility[4]; 0161 } track_info_t; 0162 0163 0164 /* 0165 * Use this with the GPCMD_READ_TOC_PMA_ATIP command 0166 * where format is set to 2 (Full TOC) 0167 */ 0168 struct toc_raw_track_descriptor { 0169 unsigned char session_number; 0170 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0171 unsigned char adr : 4; 0172 unsigned char control : 4; 0173 #else 0174 unsigned char control : 4; 0175 unsigned char adr : 4; 0176 #endif 0177 unsigned char tno; 0178 unsigned char point; 0179 unsigned char min; 0180 unsigned char sec; 0181 unsigned char frame; 0182 unsigned char zero; 0183 unsigned char p_min; 0184 unsigned char p_sec; 0185 unsigned char p_frame; 0186 }; 0187 0188 0189 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0190 struct cd_wr_speed_performance { 0191 unsigned char res0; /* Reserved */ 0192 unsigned char res_1_27 : 6; /* Reserved */ 0193 unsigned char rot_ctl_sel : 2; /* Rotational control selected */ 0194 unsigned char wr_speed_supp[2]; /* Supported write speed */ 0195 }; 0196 #else 0197 struct cd_wr_speed_performance { 0198 unsigned char res0; /* Reserved */ 0199 unsigned char rot_ctl_sel : 2; /* Rotational control selected */ 0200 unsigned char res_1_27 : 6; /* Reserved */ 0201 unsigned char wr_speed_supp[2]; /* Supported write speed */ 0202 }; 0203 #endif 0204 0205 0206 /** 0207 * Based on the cdrecord struct cd_mode_page_2A 0208 * MM Capabilities and Mechanical Status Page 0209 */ 0210 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0211 0212 struct mm_cap_page_2A { 0213 unsigned char PS : 1; 0214 unsigned char res_1 : 1; 0215 unsigned char page_code : 6; 0216 unsigned char page_len; /* 0x14 = 20 Bytes (MMC) */ 0217 /* 0x18 = 24 Bytes (MMC-2) */ 0218 /* 0x1C >= 28 Bytes (MMC-3) */ 0219 unsigned char res_2_67 : 2; /* Reserved */ 0220 unsigned char dvd_ram_read : 1; /* Reads DVD-RAM media */ 0221 unsigned char dvd_r_read : 1; /* Reads DVD-R media */ 0222 unsigned char dvd_rom_read : 1; /* Reads DVD ROM media */ 0223 unsigned char method2 : 1; /* Reads fixed packet method2 media */ 0224 unsigned char cd_rw_read : 1; /* Reads CD-RW media */ 0225 unsigned char cd_r_read : 1; /* Reads CD-R media */ 0226 unsigned char res_3_67 : 2; /* Reserved */ 0227 unsigned char dvd_ram_write : 1; /* Supports writing DVD-RAM media */ 0228 unsigned char dvd_r_write : 1; /* Supports writing DVD-R media */ 0229 unsigned char res_3_3 : 1; /* Reserved */ 0230 unsigned char test_write : 1; /* Supports emulation write */ 0231 unsigned char cd_rw_write : 1; /* Supports writing CD-RW media */ 0232 unsigned char cd_r_write : 1; /* Supports writing CD-R media */ 0233 unsigned char BUF : 1; /* Supports Buffer under. free rec. */ 0234 unsigned char multi_session : 1; /* Reads multi-session media */ 0235 unsigned char mode_2_form_2 : 1; /* Reads Mode-2 form 2 media */ 0236 unsigned char mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA) */ 0237 unsigned char digital_port_1 : 1; /* Supports digital output on port 1 */ 0238 unsigned char digital_port_2 : 1; /* Supports digital output on port 2 */ 0239 unsigned char composite : 1; /* Deliveres composite A/V stream */ 0240 unsigned char audio_play : 1; /* Supports Audio play operation */ 0241 unsigned char read_bar_code : 1; /* Supports reading bar codes */ 0242 unsigned char UPC : 1; /* Reads media catalog number (UPC) */ 0243 unsigned char ISRC : 1; /* Reads ISRC information */ 0244 unsigned char c2_pointers : 1; /* Supports C2 error pointers */ 0245 unsigned char rw_deint_corr : 1; /* Reads de-interleved R-W sub chan */ 0246 unsigned char rw_supported : 1; /* Reads R-W sub channel information */ 0247 unsigned char cd_da_accurate : 1; /* READ CD data stream is accurate */ 0248 unsigned char cd_da_supported : 1; /* Reads audio data with READ CD cmd */ 0249 unsigned char loading_type : 3; /* Loading mechanism type */ 0250 unsigned char res_6_4 : 1; /* Reserved */ 0251 unsigned char eject : 1; /* Ejects disc/cartr with STOP LoEj */ 0252 unsigned char prevent_jumper : 1; /* State of prev/allow jumper 0=pres */ 0253 unsigned char lock_state : 1; /* Lock state 0=unlocked 1=locked */ 0254 unsigned char lock : 1; /* PREVENT/ALLOW may lock media */ 0255 unsigned char res_7 : 2; /* Reserved */ 0256 unsigned char rw_in_lead_in : 1; /* Reads raw R-W subcode from lead in */ 0257 unsigned char side_change : 1; /* Side change capable */ 0258 unsigned char sw_slot_sel : 1; /* Load empty slot in changer */ 0259 unsigned char disk_present_rep : 1; /* Changer supports disk present rep */ 0260 unsigned char sep_chan_mute : 1; /* Mute controls each channel separately */ 0261 unsigned char sep_chan_vol : 1; /* Vol controls each channel separately */ 0262 unsigned char max_read_speed[2]; /* Max. read speed in KB/s */ 0263 /* obsolete in MMC-4 */ 0264 unsigned char num_vol_levels[2]; /* # of supported volume levels */ 0265 unsigned char buffer_size[2]; /* Buffer size for the data in KB */ 0266 unsigned char cur_read_speed[2]; /* Current read speed in KB/s */ 0267 /* obsolete in MMC-4 */ 0268 unsigned char res_16; /* Reserved */ 0269 unsigned char res_17 : 2; /* Reserved */ 0270 unsigned char length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/ 0271 unsigned char LSBF : 1; /* Set: LSB first Clear: MSB first */ 0272 unsigned char RCK : 1; /* Set: HIGH high LRCK=left channel */ 0273 unsigned char BCK : 1; /* Data valid on falling edge of BCK */ 0274 unsigned char res_17_0 : 1; /* Reserved */ 0275 unsigned char max_write_speed[2]; /* Max. write speed supported in KB/s*/ 0276 /* obsolete in MMC-4 */ 0277 unsigned char cur_write_speed[2]; /* Current write speed in KB/s */ 0278 /* obsolete in MMC-4 */ 0279 0280 /* Byte 22 ... Only in MMC-2 */ 0281 unsigned char copy_man_rev[2]; /* Copy management revision supported*/ 0282 unsigned char res_24; /* Reserved */ 0283 unsigned char res_25; /* Reserved */ 0284 0285 /* Byte 26 ... Only in MMC-3 */ 0286 unsigned char res_26; /* Reserved */ 0287 unsigned char res_27_27 : 6; /* Reserved */ 0288 unsigned char rot_ctl_sel : 2; /* Rotational control selected */ 0289 unsigned char v3_cur_write_speed[2]; /* Current write speed in KB/s */ 0290 unsigned char num_wr_speed_des[2]; /* # of wr speed perf descr. tables */ 0291 struct cd_wr_speed_performance 0292 wr_speed_des[1]; /* wr speed performance descriptor */ 0293 /* Actually more (num_wr_speed_des) */ 0294 }; 0295 0296 #else // LITTLE_ENDIAN 0297 0298 struct mm_cap_page_2A { 0299 unsigned char page_code : 6; 0300 unsigned char res_1 : 1; 0301 unsigned char PS : 1; 0302 unsigned char page_len; /* 0x14 = 20 Bytes (MMC) */ 0303 /* 0x18 = 24 Bytes (MMC-2) */ 0304 /* 0x1C >= 28 Bytes (MMC-3) */ 0305 unsigned char cd_r_read : 1; /* Reads CD-R media */ 0306 unsigned char cd_rw_read : 1; /* Reads CD-RW media */ 0307 unsigned char method2 : 1; /* Reads fixed packet method2 media */ 0308 unsigned char dvd_rom_read : 1; /* Reads DVD ROM media */ 0309 unsigned char dvd_r_read : 1; /* Reads DVD-R media */ 0310 unsigned char dvd_ram_read : 1; /* Reads DVD-RAM media */ 0311 unsigned char res_2_67 : 2; /* Reserved */ 0312 unsigned char cd_r_write : 1; /* Supports writing CD-R media */ 0313 unsigned char cd_rw_write : 1; /* Supports writing CD-RW media */ 0314 unsigned char test_write : 1; /* Supports emulation write */ 0315 unsigned char res_3_3 : 1; /* Reserved */ 0316 unsigned char dvd_r_write : 1; /* Supports writing DVD-R media */ 0317 unsigned char dvd_ram_write : 1; /* Supports writing DVD-RAM media */ 0318 unsigned char res_3_67 : 2; /* Reserved */ 0319 unsigned char audio_play : 1; /* Supports Audio play operation */ 0320 unsigned char composite : 1; /* Deliveres composite A/V stream */ 0321 unsigned char digital_port_2 : 1; /* Supports digital output on port 2 */ 0322 unsigned char digital_port_1 : 1; /* Supports digital output on port 1 */ 0323 unsigned char mode_2_form_1 : 1; /* Reads Mode-2 form 1 media (XA) */ 0324 unsigned char mode_2_form_2 : 1; /* Reads Mode-2 form 2 media */ 0325 unsigned char multi_session : 1; /* Reads multi-session media */ 0326 unsigned char BUF : 1; /* Supports Buffer under. free rec. */ 0327 unsigned char cd_da_supported : 1; /* Reads audio data with READ CD cmd */ 0328 unsigned char cd_da_accurate : 1; /* READ CD data stream is accurate */ 0329 unsigned char rw_supported : 1; /* Reads R-W sub channel information */ 0330 unsigned char rw_deint_corr : 1; /* Reads de-interleved R-W sub chan */ 0331 unsigned char c2_pointers : 1; /* Supports C2 error pointers */ 0332 unsigned char ISRC : 1; /* Reads ISRC information */ 0333 unsigned char UPC : 1; /* Reads media catalog number (UPC) */ 0334 unsigned char read_bar_code : 1; /* Supports reading bar codes */ 0335 unsigned char lock : 1; /* PREVENT/ALLOW may lock media */ 0336 unsigned char lock_state : 1; /* Lock state 0=unlocked 1=locked */ 0337 unsigned char prevent_jumper : 1; /* State of prev/allow jumper 0=pres */ 0338 unsigned char eject : 1; /* Ejects disc/cartr with STOP LoEj */ 0339 unsigned char res_6_4 : 1; /* Reserved */ 0340 unsigned char loading_type : 3; /* Loading mechanism type */ 0341 unsigned char sep_chan_vol : 1; /* Vol controls each channel separately */ 0342 unsigned char sep_chan_mute : 1; /* Mute controls each channel separately */ 0343 unsigned char disk_present_rep : 1; /* Changer supports disk present rep */ 0344 unsigned char sw_slot_sel : 1; /* Load empty slot in changer */ 0345 unsigned char side_change : 1; /* Side change capable */ 0346 unsigned char rw_in_lead_in : 1; /* Reads raw R-W subcode from lead in */ 0347 unsigned char res_7 : 2; /* Reserved */ 0348 unsigned char max_read_speed[2]; /* Max. read speed in KB/s */ 0349 /* obsolete in MMC-4 */ 0350 unsigned char num_vol_levels[2]; /* # of supported volume levels */ 0351 unsigned char buffer_size[2]; /* Buffer size for the data in KB */ 0352 unsigned char cur_read_speed[2]; /* Current read speed in KB/s */ 0353 /* obsolete in MMC-4 */ 0354 unsigned char res_16; /* Reserved */ 0355 unsigned char res_17_0 : 1; /* Reserved */ 0356 unsigned char BCK : 1; /* Data valid on falling edge of BCK */ 0357 unsigned char RCK : 1; /* Set: HIGH high LRCK=left channel */ 0358 unsigned char LSBF : 1; /* Set: LSB first Clear: MSB first */ 0359 unsigned char length : 2; /* 0=32BCKs 1=16BCKs 2=24BCKs 3=24I2c*/ 0360 unsigned char res_17 : 2; /* Reserved */ 0361 unsigned char max_write_speed[2]; /* Max. write speed supported in KB/s*/ 0362 /* obsolete in MMC-4 */ 0363 unsigned char cur_write_speed[2]; /* Current write speed in KB/s */ 0364 /* obsolete in MMC-4 */ 0365 0366 /* Byte 22 ... Only in MMC-2 */ 0367 unsigned char copy_man_rev[2]; /* Copy management revision supported*/ 0368 unsigned char res_24; /* Reserved */ 0369 unsigned char res_25; /* Reserved */ 0370 0371 /* Byte 26 ... Only in MMC-3 */ 0372 unsigned char res_26; /* Reserved */ 0373 unsigned char rot_ctl_sel : 2; /* Rotational control selected */ 0374 unsigned char res_27_27 : 6; /* Reserved */ 0375 unsigned char v3_cur_write_speed[2]; /* Current write speed in KB/s */ 0376 unsigned char num_wr_speed_des[2]; /* # of wr speed perf descr. tables */ 0377 struct cd_wr_speed_performance 0378 wr_speed_des[1]; /* wr speed performance descriptor */ 0379 /* Actually more (num_wr_speed_des) */ 0380 }; 0381 #endif 0382 0383 /** 0384 * Based on the cdrecord struct cd_mode_page_05 0385 * Write Parameters Mode Page 0386 */ 0387 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0388 struct wr_param_page_05 { /* write parameters */ 0389 unsigned char PS : 1; 0390 unsigned char res_1 : 1; 0391 unsigned char page_code : 6; 0392 unsigned char page_len; /* 0x32 = 50 Bytes */ 0393 unsigned char res_2_7 : 1; 0394 unsigned char BUFE : 1; /* Enable Bufunderrun free rec. */ 0395 unsigned char LS_V : 1; /* Link size valid */ 0396 unsigned char test_write : 1; /* Do not actually write data */ 0397 unsigned char write_type : 4; /* Session write type (PACKET/TAO...)*/ 0398 unsigned char multi_session : 2; /* Multi session write type */ 0399 unsigned char fp : 1; /* Fixed packed (if in packet mode) */ 0400 unsigned char copy : 1; /* 1st higher gen of copy prot track */ 0401 unsigned char track_mode : 4; /* Track mode (Q-sub control nibble) */ 0402 unsigned char res_4 : 4; /* Reserved */ 0403 unsigned char dbtype : 4; /* Data block type */ 0404 unsigned char link_size; /* Link Size (default is 7) */ 0405 unsigned char res_6; /* Reserved */ 0406 unsigned char res_7 : 2; /* Reserved */ 0407 unsigned char host_appl_code : 6; /* Host application code of disk */ 0408 unsigned char session_format; /* Session format (DA/CDI/XA) */ 0409 unsigned char res_9; /* Reserved */ 0410 unsigned char packet_size[4]; /* # of user datablocks/fixed packet */ 0411 unsigned char audio_pause_len[2]; /* # of blocks where index is zero */ 0412 unsigned char media_cat_number[16]; /* Media catalog Number (MCN) */ 0413 unsigned char ISRC[14]; /* ISRC for this track */ 0414 unsigned char sub_header[4]; 0415 unsigned char vendor_uniq[4]; 0416 }; 0417 0418 #else // __LITTLE_ENDIAN 0419 struct wr_param_page_05 { /* write parameters */ 0420 unsigned char page_code : 6; 0421 unsigned char res_1 : 1; 0422 unsigned char PS : 1; 0423 unsigned char p_len; /* 0x32 = 50 Bytes */ 0424 unsigned char write_type : 4; /* Session write type (PACKET/TAO...)*/ 0425 unsigned char test_write : 1; /* Do not actually write data */ 0426 unsigned char LS_V : 1; /* Link size valid */ 0427 unsigned char BUFE : 1; /* Enable Bufunderrun free rec. */ 0428 unsigned char res_2_7 : 1; 0429 unsigned char track_mode : 4; /* Track mode (Q-sub control nibble) */ 0430 unsigned char copy : 1; /* 1st higher gen of copy prot track ~*/ 0431 unsigned char fp : 1; /* Fixed packed (if in packet mode) */ 0432 unsigned char multi_session : 2; /* Multi session write type */ 0433 unsigned char dbtype : 4; /* Data block type */ 0434 unsigned char res_4 : 4; /* Reserved */ 0435 unsigned char link_size; /* Link Size (default is 7) */ 0436 unsigned char res_6; /* Reserved */ 0437 unsigned char host_appl_code : 6; /* Host application code of disk */ 0438 unsigned char res_7 : 2; /* Reserved */ 0439 unsigned char session_format; /* Session format (DA/CDI/XA) */ 0440 unsigned char res_9; /* Reserved */ 0441 unsigned char packet_size[4]; /* # of user datablocks/fixed packet */ 0442 unsigned char audio_pause_len[2]; /* # of blocks where index is zero */ 0443 unsigned char media_cat_number[16]; /* Media catalog Number (MCN) */ 0444 unsigned char ISRC[14]; /* ISRC for this track */ 0445 unsigned char sub_header[4]; 0446 unsigned char vendor_uniq[4]; 0447 }; 0448 #endif 0449 0450 0451 struct toc_track_descriptor { 0452 unsigned char res1; 0453 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0454 unsigned char adr : 4; 0455 unsigned char control : 4; 0456 #else 0457 unsigned char control : 4; 0458 unsigned char adr : 4; 0459 #endif 0460 unsigned char track_no; 0461 unsigned char res2; 0462 unsigned char start_adr[4]; 0463 }; 0464 0465 0466 struct atip_descriptor { 0467 unsigned char dataLength[2]; 0468 unsigned char res1; 0469 unsigned char res2; 0470 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0471 unsigned char ind_wr_power : 4; // indicated writing power 0472 unsigned char ddcd : 1; // DDCD 0473 unsigned char ref_speed : 3; // reference Speed 0474 unsigned char zero : 1; // 0 0475 unsigned char uru : 1; // Uru 0476 unsigned char res3 : 6; 0477 unsigned char one : 1; // 1 0478 unsigned char disc_type : 1; // Disc Type 0479 unsigned char disc_subtype : 3; // Disc Sub-Type 0480 unsigned char a1_valid : 1; 0481 unsigned char a2_valid : 1; 0482 unsigned char a3_valid : 1; 0483 #else 0484 unsigned char ref_speed : 3; // reference Speed 0485 unsigned char ddcd : 1; // DDCD 0486 unsigned char ind_wr_power : 4; // indicated writing power 0487 unsigned char res3 : 6; 0488 unsigned char uru : 1; // Uru 0489 unsigned char zero : 1; // 0 0490 unsigned char a3_valid : 1; 0491 unsigned char a2_valid : 1; 0492 unsigned char a1_valid : 1; 0493 unsigned char disc_subtype : 3; // Disc Sub-Type 0494 unsigned char disc_type : 1; // Disc Type 0495 unsigned char one : 1; // 1 0496 #endif 0497 unsigned char res4; 0498 unsigned char lead_in_m; 0499 unsigned char lead_in_s; 0500 unsigned char lead_in_f; 0501 unsigned char res5; 0502 unsigned char lead_out_m; 0503 unsigned char lead_out_s; 0504 unsigned char lead_out_f; 0505 unsigned char res6; 0506 unsigned char a1[3]; 0507 unsigned char res7; 0508 unsigned char a2[3]; 0509 unsigned char res8; 0510 unsigned char a3[3]; 0511 unsigned char res9; 0512 unsigned char s4[3]; 0513 unsigned char res10; 0514 }; 0515 0516 0517 struct mechanism_status_header { 0518 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0519 unsigned char fault : 1; 0520 unsigned char changer_state : 2; 0521 unsigned char slot_low : 5; 0522 #else 0523 unsigned char slot_low : 5; 0524 unsigned char changer_state : 2; 0525 unsigned char fault : 1; 0526 #endif 0527 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0528 unsigned char mech_state : 3; 0529 unsigned char door_open : 1; 0530 unsigned char res1 : 1; 0531 unsigned char slot_high : 3; 0532 #else 0533 unsigned char slot_high : 3; 0534 unsigned char res1 : 1; 0535 unsigned char door_open : 1; 0536 unsigned char mech_state : 3; 0537 #endif 0538 unsigned char current_lba[3]; 0539 unsigned char num_slots; 0540 unsigned char slot_len[2]; 0541 }; 0542 0543 struct mechanism_status_slot { 0544 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0545 unsigned char disc_present : 1; 0546 unsigned char res1 : 6; 0547 unsigned char change : 1; 0548 #else 0549 unsigned char change : 1; 0550 unsigned char res1 : 6; 0551 unsigned char disc_present : 1; 0552 #endif 0553 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0554 unsigned char res2 : 6; 0555 unsigned char cwp_v : 1; 0556 unsigned char cwp : 1; 0557 #else 0558 unsigned char cwp : 1; 0559 unsigned char cwp_v : 1; 0560 unsigned char res2 : 6; 0561 #endif 0562 unsigned char res3; 0563 unsigned char res4; 0564 }; 0565 0566 0567 struct inquiry { 0568 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0569 unsigned char p_qualifier : 3; 0570 unsigned char p_device_type : 5; 0571 unsigned char rmb : 1; 0572 unsigned char reserved1 : 7; 0573 #else 0574 unsigned char p_device_type : 5; 0575 unsigned char p_qualifier : 3; 0576 unsigned char reserved1 : 7; 0577 unsigned char rmb : 1; 0578 #endif 0579 unsigned char version; 0580 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0581 unsigned char interface_dep : 4; 0582 unsigned char data_format : 4; 0583 #else 0584 unsigned char data_format : 4; 0585 unsigned char interface_dep : 4; 0586 #endif 0587 unsigned char add_length; 0588 unsigned char reserved2; 0589 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0590 unsigned char bque : 1; 0591 unsigned char enc_serv : 1; 0592 unsigned char vs1 : 1; 0593 unsigned char multi_p : 1; 0594 unsigned char m_chngr : 1; 0595 unsigned char reserved3 : 1; 0596 unsigned char reserved4 : 1; 0597 unsigned char addr_16 : 1; 0598 unsigned char rel_adr : 1; 0599 unsigned char reserved5 : 1; 0600 unsigned char w_bus_16 : 1; 0601 unsigned char sync : 1; 0602 unsigned char linked : 1; 0603 unsigned char reserved6 : 1; 0604 unsigned char cmd_que : 1; 0605 unsigned char vs2 : 1; 0606 #else 0607 unsigned char addr_16 : 1; 0608 unsigned char reserved4 : 1; 0609 unsigned char reserved3 : 1; 0610 unsigned char m_chngr : 1; 0611 unsigned char multi_p : 1; 0612 unsigned char vs1 : 1; 0613 unsigned char enc_serv : 1; 0614 unsigned char bque : 1; 0615 unsigned char vs2 : 1; 0616 unsigned char cmd_que : 1; 0617 unsigned char reserved6 : 1; 0618 unsigned char linked : 1; 0619 unsigned char sync : 1; 0620 unsigned char w_bus_16 : 1; 0621 unsigned char reserved5 : 1; 0622 unsigned char rel_adr : 1; 0623 #endif 0624 unsigned char vendor[8]; 0625 unsigned char product[16]; 0626 unsigned char revision[4]; 0627 unsigned char vendor_specific[20]; 0628 unsigned char reserved7[2]; 0629 unsigned char version1[2]; 0630 unsigned char version2[2]; 0631 unsigned char version3[2]; 0632 unsigned char version4[2]; 0633 unsigned char version5[2]; 0634 unsigned char version6[2]; 0635 unsigned char version7[2]; 0636 unsigned char version8[2]; 0637 0638 // bytes 74-95: reserved 0639 // bytes 96-n: vendor specific 0640 }; 0641 0642 0643 struct ricoh_mode_page_30 { 0644 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0645 unsigned char PS : 1; 0646 unsigned char res_1 : 1; 0647 unsigned char page_code : 6; 0648 #else 0649 unsigned char page_code : 6; 0650 unsigned char res_1 : 1; 0651 unsigned char PS : 1; 0652 #endif 0653 unsigned char page_len; /* 0xE = 14 Bytes */ 0654 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0655 unsigned char res_2_67 :2; 0656 unsigned char AWSCS :1; /* Auto write speed control supp. */ 0657 unsigned char ARSCS :1; /* Auto read speed control supp. */ 0658 unsigned char res_2_23 :2; 0659 unsigned char TWBFS :1; /* Test Burn-Free sup. */ 0660 unsigned char BUEFS :1; /* Burn-Free supported */ 0661 #else 0662 unsigned char BUEFS :1; /* Burn-Free supported */ 0663 unsigned char TWBFS :1; /* Test Burn-Free sup. */ 0664 unsigned char res_2_23 :2; 0665 unsigned char ARSCS :1; /* Auto read speed control supp. */ 0666 unsigned char AWSCS :1; /* Auto write speed control supp. */ 0667 unsigned char res_2_67 :2; 0668 #endif 0669 #ifdef WORDS_BIGENDIAN // __BYTE_ORDER == __BIG_ENDIAN 0670 unsigned char res_3_67 :2; 0671 unsigned char AWSCD :1; /* Auto write speed control disabled */ 0672 unsigned char ARSCE :1; /* Auto read speed control enabled */ 0673 unsigned char res_2_13 :3; 0674 unsigned char BUEFE :1; /* Burn-Free enabled */ 0675 #else 0676 unsigned char BUEFE :1; /* Burn-Free enabled */ 0677 unsigned char res_2_13 :3; 0678 unsigned char ARSCE :1; /* Auto read speed control enabled */ 0679 unsigned char AWSCD :1; /* Auto write speed control disabled */ 0680 unsigned char res_3_67 :2; 0681 #endif 0682 unsigned char link_counter[2]; /* Burn-Free link counter */ 0683 unsigned char res[10]; /* Padding up to 16 bytes */ 0684 }; 0685 } 0686 } 0687 0688 #endif