libcdio  0.82
Data Structures | Defines | Typedefs | Enumerations | Functions | Variables
mmc.h File Reference

Common definitions for MMC (Multimedia Commands). Applications include this for direct MMC access. More...

#include <cdio/cdio.h>
#include <cdio/types.h>
#include <cdio/dvd.h>
#include <cdio/audio.h>

Go to the source code of this file.

Data Structures

struct  mmc_audio_volume_entry_s
struct  mmc_audio_volume_s
struct  mmc_cdb_s
 A Command Descriptor Block (CDB) used in sending MMC commands. More...
struct  mmc_feature_list_header_s
 Format of header block in data returned from an MMC GET_CONFIGURATION command. More...
struct  mmc_subchannel_s

Defines

#define MMC_TIMEOUT_DEFAULT   6000
#define MMC_READ_TIMEOUT_DEFAULT   3*60*1000
#define MAX_CDB_LEN   12
#define CDIO_MMC_SET_COMMAND(cdb, command)   cdb[0] = command
#define CDIO_MMC_SET_READ_TYPE(cdb, sector_type)   cdb[1] = (sector_type << 2)
#define CDIO_MMC_GETPOS_LEN16(p, pos)   (p[pos]<<8) + p[pos+1]
#define CDIO_MMC_GET_LEN16(p)   (p[0]<<8) + p[1]
#define CDIO_MMC_GET_LEN32(p)   (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];
#define CDIO_MMC_SET_LEN16(cdb, pos, len)
#define CDIO_MMC_SET_READ_LBA(cdb, lba)
#define CDIO_MMC_SET_START_TRACK(cdb, command)   cdb[6] = command
#define CDIO_MMC_SET_READ_LENGTH24(cdb, len)
#define CDIO_MMC_SET_READ_LENGTH16(cdb, len)   CDIO_MMC_SET_LEN16(cdb, 7, len)
#define CDIO_MMC_SET_READ_LENGTH8(cdb, len)   cdb[8] = (len ) & 0xff
#define CDIO_MMC_MCSB_ALL_HEADERS   0xf
#define CDIO_MMC_SET_MAIN_CHANNEL_SELECTION_BITS(cdb, val)   cdb[9] = val << 3;

Typedefs

typedef struct
mmc_audio_volume_entry_s 
mmc_audio_volume_entry_t
typedef struct mmc_audio_volume_s mmc_audio_volume_t
typedef struct mmc_cdb_s mmc_cdb_t
 A Command Descriptor Block (CDB) used in sending MMC commands.
typedef struct
mmc_feature_list_header_s 
cdio_mmc_feature_list_header_t
 Format of header block in data returned from an MMC GET_CONFIGURATION command.
typedef enum mmc_direction_s cdio_mmc_direction_t
typedef struct mmc_subchannel_s cdio_mmc_subchannel_t

Enumerations

enum  cdio_mmc_gpcmd_t {
  CDIO_MMC_GPCMD_INQUIRY = 0x12, CDIO_MMC_GPCMD_MODE_SELECT_6 = 0x15, CDIO_MMC_GPCMD_MODE_SENSE_6 = 0x1a, CDIO_MMC_GPCMD_START_STOP = 0x1b,
  CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL = 0x1e, CDIO_MMC_GPCMD_READ_10 = 0x28, CDIO_MMC_GPCMD_READ_SUBCHANNEL = 0x42, CDIO_MMC_GPCMD_READ_TOC = 0x43,
  CDIO_MMC_GPCMD_READ_HEADER = 0x44, CDIO_MMC_GPCMD_PLAY_AUDIO_10 = 0x45, CDIO_MMC_GPCMD_GET_CONFIGURATION = 0x46, CDIO_MMC_GPCMD_PLAY_AUDIO_MSF = 0x47,
  CDIO_MMC_GPCMD_PLAY_AUDIO_TI = 0x48, CDIO_MMC_GPCMD_PLAY_TRACK_REL_10 = 0x49, CDIO_MMC_GPCMD_GET_EVENT_STATUS = 0x4a, CDIO_MMC_GPCMD_PAUSE_RESUME = 0x4b,
  CDIO_MMC_GPCMD_READ_DISC_INFO = 0x51, CDIO_MMC_GPCMD_MODE_SELECT_10 = 0x55, CDIO_MMC_GPCMD_MODE_SENSE_10 = 0x5a, CDIO_MMC_GPCMD_PLAY_AUDIO_12 = 0xa5,
  CDIO_MMC_GPCMD_LOAD_UNLOAD = 0xa6, CDIO_MMC_GPCMD_READ_12 = 0xa8, CDIO_MMC_GPCMD_PLAY_TRACK_REL_12 = 0xa9, CDIO_MMC_GPCMD_READ_DVD_STRUCTURE = 0xad,
  CDIO_MMC_GPCMD_READ_MSF = 0xb9, CDIO_MMC_GPCMD_SET_SPEED = 0xbb, CDIO_MMC_GPCMD_READ_CD = 0xbe, CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS = 0xc4,
  CDIO_MMC_GPCMD_PLAYBACK_CONTROL = 0xc9, CDIO_MMC_GPCMD_READ_CDDA = 0xd8, CDIO_MMC_GPCMD_READ_CDXA = 0xdb, CDIO_MMC_GPCMD_READ_ALL_SUBCODES = 0xdf
}
 The opcode-portion (generic packet commands) of an MMC command. More...
enum  cdio_mmc_read_sub_state_t {
  CDIO_MMC_READ_SUB_ST_INVALID = 0x00, CDIO_MMC_READ_SUB_ST_PLAY = 0x11, CDIO_MMC_READ_SUB_ST_PAUSED = 0x12, CDIO_MMC_READ_SUB_ST_COMPLETED = 0x13,
  CDIO_MMC_READ_SUB_ST_ERROR = 0x14, CDIO_MMC_READ_SUB_ST_NO_STATUS = 0x15
}
enum  cdio_mmc_read_cd_type_t {
  CDIO_MMC_READ_TYPE_ANY = 0, CDIO_MMC_READ_TYPE_CDDA = 1, CDIO_MMC_READ_TYPE_MODE1 = 2, CDIO_MMC_READ_TYPE_MODE2 = 3,
  CDIO_MMC_READ_TYPE_M2F1 = 4, CDIO_MMC_READ_TYPE_M2F2 = 5
}
enum  cdio_mmc_readtoc_t {
  CDIO_MMC_READTOC_FMT_TOC = 0, CDIO_MMC_READTOC_FMT_SESSION = 1, CDIO_MMC_READTOC_FMT_FULTOC = 2, CDIO_MMC_READTOC_FMT_PMA = 3,
  CDIO_MMC_READTOC_FMT_ATIP = 4, CDIO_MMC_READTOC_FMT_CDTEXT = 5
}
enum  cdio_mmc_mode_page_t {
  CDIO_MMC_R_W_ERROR_PAGE = 0x01, CDIO_MMC_WRITE_PARMS_PAGE = 0x05, CDIO_MMC_CDR_PARMS_PAGE = 0x0d, CDIO_MMC_AUDIO_CTL_PAGE = 0x0e,
  CDIO_MMC_POWER_PAGE = 0x1a, CDIO_MMC_FAULT_FAIL_PAGE = 0x1c, CDIO_MMC_TO_PROTECT_PAGE = 0x1d, CDIO_MMC_CAPABILITIES_PAGE = 0x2a,
  CDIO_MMC_ALL_PAGES = 0x3f
}
enum  cdio_mmc_get_conf_t { CDIO_MMC_GET_CONF_ALL_FEATURES = 0, CDIO_MMC_GET_CONF_CURRENT_FEATURES = 1, CDIO_MMC_GET_CONF_NAMED_FEATURE = 2 }
enum  cdio_mmc_feature_t {
  CDIO_MMC_FEATURE_PROFILE_LIST = 0x000, CDIO_MMC_FEATURE_CORE = 0x001, CDIO_MMC_FEATURE_MORPHING = 0x002, CDIO_MMC_FEATURE_REMOVABLE_MEDIUM = 0x003,
  CDIO_MMC_FEATURE_WRITE_PROTECT = 0x004, CDIO_MMC_FEATURE_RANDOM_READABLE = 0x010, CDIO_MMC_FEATURE_MULTI_READ = 0x01D, CDIO_MMC_FEATURE_CD_READ = 0x01E,
  CDIO_MMC_FEATURE_DVD_READ = 0x01F, CDIO_MMC_FEATURE_RANDOM_WRITABLE = 0x020, CDIO_MMC_FEATURE_INCR_WRITE = 0x021, CDIO_MMC_FEATURE_SECTOR_ERASE = 0x022,
  CDIO_MMC_FEATURE_FORMATABLE = 0x023, CDIO_MMC_FEATURE_DEFECT_MGMT = 0x024, CDIO_MMC_FEATURE_WRITE_ONCE = 0x025, CDIO_MMC_FEATURE_RESTRICT_OVERW = 0x026,
  CDIO_MMC_FEATURE_CD_RW_CAV = 0x027, CDIO_MMC_FEATURE_MRW = 0x028, CDIO_MMC_FEATURE_ENHANCED_DEFECT = 0x029, CDIO_MMC_FEATURE_DVD_PRW = 0x02A,
  CDIO_MMC_FEATURE_DVD_PR = 0x02B, CDIO_MMC_FEATURE_RIGID_RES_OVERW = 0x02C, CDIO_MMC_FEATURE_CD_TAO = 0x02D, CDIO_MMC_FEATURE_CD_SAO = 0x02E,
  CDIO_MMC_FEATURE_DVD_R_RW_WRITE = 0x02F, CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE = 0x037, CDIO_MMC_FEATURE_DVD_PR_2_LAYER = 0x03B, CDIO_MMC_FEATURE_POWER_MGMT = 0x100,
  CDIO_MMC_FEATURE_CDDA_EXT_PLAY = 0x103, CDIO_MMC_FEATURE_MCODE_UPGRADE = 0x104, CDIO_MMC_FEATURE_TIME_OUT = 0x105, CDIO_MMC_FEATURE_DVD_CSS = 0x106,
  CDIO_MMC_FEATURE_RT_STREAMING = 0x107, CDIO_MMC_FEATURE_LU_SN = 0x108, CDIO_MMC_FEATURE_FIRMWARE_DATE = 0x1FF
}
enum  cdio_mmc_feature_profile_t {
  CDIO_MMC_FEATURE_PROF_NON_REMOVABLE = 0x0001, CDIO_MMC_FEATURE_PROF_REMOVABLE = 0x0002, CDIO_MMC_FEATURE_PROF_MO_ERASABLE = 0x0003, CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE = 0x0004,
  CDIO_MMC_FEATURE_PROF_AS_MO = 0x0005, CDIO_MMC_FEATURE_PROF_CD_ROM = 0x0008, CDIO_MMC_FEATURE_PROF_CD_R = 0x0009, CDIO_MMC_FEATURE_PROF_CD_RW = 0x000A,
  CDIO_MMC_FEATURE_PROF_DVD_ROM = 0x0010, CDIO_MMC_FEATURE_PROF_DVD_R_SEQ = 0x0011, CDIO_MMC_FEATURE_PROF_DVD_RAM = 0x0012, CDIO_MMC_FEATURE_PROF_DVD_RW_RO = 0x0013,
  CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ = 0x0014, CDIO_MMC_FEATURE_PROF_DVD_PRW = 0x001A, CDIO_MMC_FEATURE_PROF_DVD_PR = 0x001B, CDIO_MMC_FEATURE_PROF_DDCD_ROM = 0x0020,
  CDIO_MMC_FEATURE_PROF_DDCD_R = 0x0021, CDIO_MMC_FEATURE_PROF_DDCD_RW = 0x0022, CDIO_MMC_FEATURE_PROF_DVD_PR2 = 0x002B, CDIO_MMC_FEATURE_PROF_NON_CONFORM = 0xFFFF
}
enum  cdio_mmc_feature_interface_t {
  CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED = 0, CDIO_MMC_FEATURE_INTERFACE_SCSI = 1, CDIO_MMC_FEATURE_INTERFACE_ATAPI = 2, CDIO_MMC_FEATURE_INTERFACE_IEEE_1394 = 3,
  CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A = 4, CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH = 5
}
enum  mmc_direction_s { SCSI_MMC_DATA_READ, SCSI_MMC_DATA_WRITE }
enum  cdio_mmc_level_t {
  CDIO_MMC_LEVEL_WEIRD, CDIO_MMC_LEVEL_1, CDIO_MMC_LEVEL_2, CDIO_MMC_LEVEL_3,
  CDIO_MMC_LEVEL_NONE
}

Functions

driver_return_code_t mmc_audio_read_subchannel (CdIo_t *p_cdio, cdio_subchannel_t *p_subchannel)
const char * mmc_audio_state2str (uint8_t i_audio_state)
driver_return_code_t mmc_eject_media (const CdIo_t *p_cdio)
const char * mmc_feature2str (int i_feature)
const char * mmc_feature_profile2str (int i_feature_profile)
uint8_t mmc_get_cmd_len (uint8_t mmc_cmd)
int mmc_get_blocksize (CdIo_t *p_cdio)
driver_return_code_t mmc_close_tray (CdIo_t *p_cdio)
lsn_t mmc_get_disc_last_lsn (const CdIo_t *p_cdio)
discmode_t mmc_get_discmode (const CdIo_t *p_cdio)
void mmc_get_drive_cap (CdIo_t *p_cdio, cdio_drive_read_cap_t *p_read_cap, cdio_drive_write_cap_t *p_write_cap, cdio_drive_misc_cap_t *p_misc_cap)
cdio_mmc_level_t mmc_get_drive_mmc_cap (CdIo_t *p_cdio)
discmode_t mmc_get_dvd_struct_physical (const CdIo_t *p_cdio, cdio_dvd_struct_t *s)
int mmc_get_event_status (const CdIo_t *p_cdio, uint8_t out_buf[2])
int mmc_get_tray_status (const CdIo_t *p_cdio)
bool mmc_get_hwinfo (const CdIo_t *p_cdio, cdio_hwinfo_t *p_hw_info)
int mmc_get_media_changed (const CdIo_t *p_cdio)
char * mmc_get_mcn (const CdIo_t *p_cdio)
driver_return_code_t mmc_audio_get_volume (CdIo_t *p_cdio, mmc_audio_volume_t *p_volume)
bool_3way_t mmc_have_interface (CdIo_t *p_cdio, cdio_mmc_feature_interface_t e_interface)
int mmc_mode_sense (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
int mmc_mode_sense_10 (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
int mmc_mode_sense_6 (CdIo_t *p_cdio, void *p_buf, int i_size, int page)
driver_return_code_t mmc_read_cd (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, int expected_sector_type, bool b_digital_audio_play, bool b_sync, uint8_t header_codes, bool b_user_data, bool b_edc_ecc, uint8_t c2_error_information, uint8_t subchannel_selection, uint16_t i_blocksize, uint32_t i_blocks)
driver_return_code_t mmc_read_data_sectors (CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, uint16_t i_blocksize, uint32_t i_blocks)
driver_return_code_t mmc_read_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, int read_sector_type, uint32_t i_blocks)
driver_return_code_t mmc_run_cmd (const CdIo_t *p_cdio, unsigned int i_timeout_ms, const mmc_cdb_t *p_cdb, cdio_mmc_direction_t e_direction, unsigned int i_buf, void *p_buf)
driver_return_code_t mmc_run_cmd_len (const CdIo_t *p_cdio, unsigned int i_timeout_ms, const mmc_cdb_t *p_cdb, unsigned int i_cdb, cdio_mmc_direction_t e_direction, unsigned int i_buf, void *p_buf)
driver_return_code_t mmc_set_blocksize (const CdIo_t *p_cdio, uint16_t i_blocksize)
driver_return_code_t mmc_set_drive_speed (const CdIo_t *p_cdio, int i_drive_speed)
driver_return_code_t mmc_set_speed (const CdIo_t *p_cdio, int i_Kbs_speed)
driver_return_code_t mmc_start_stop_media (const CdIo_t *p_cdio, bool b_eject, bool b_immediate, uint8_t power_condition)

Variables

uint32_t mmc_timeout_ms
uint32_t mmc_read_timeout_ms
PRAGMA_BEGIN_PACKED struct
mmc_audio_volume_entry_s 
GNUC_PACKED
cdio_mmc_feature_t debug_cdio_mmc_feature
cdio_mmc_feature_interface_t debug_cdio_mmc_feature_interface
cdio_mmc_feature_profile_t debug_cdio_mmc_feature_profile
cdio_mmc_get_conf_t debug_cdio_mmc_get_conf
cdio_mmc_gpcmd_t debug_cdio_mmc_gpcmd
cdio_mmc_read_sub_state_t debug_cdio_mmc_read_sub_state
cdio_mmc_read_cd_type_t debug_cdio_mmc_read_cd_type
cdio_mmc_readtoc_t debug_cdio_mmc_readtoc
cdio_mmc_mode_page_t debug_cdio_mmc_mode_page

Detailed Description

Common definitions for MMC (Multimedia Commands). Applications include this for direct MMC access.


Define Documentation

#define CDIO_MMC_GET_LEN16 (   p)    (p[0]<<8) + p[1]
#define CDIO_MMC_GET_LEN32 (   p)    (p[0] << 24) + (p[1] << 16) + (p[2] << 8) + p[3];
#define CDIO_MMC_GETPOS_LEN16 (   p,
  pos 
)    (p[pos]<<8) + p[pos+1]
#define CDIO_MMC_MCSB_ALL_HEADERS   0xf
#define CDIO_MMC_SET_COMMAND (   cdb,
  command 
)    cdb[0] = command
#define CDIO_MMC_SET_LEN16 (   cdb,
  pos,
  len 
)
Value:
cdb[pos  ] = (len >>  8) & 0xff;              \
  cdb[pos+1] = (len      ) & 0xff
#define CDIO_MMC_SET_MAIN_CHANNEL_SELECTION_BITS (   cdb,
  val 
)    cdb[9] = val << 3;
#define CDIO_MMC_SET_READ_LBA (   cdb,
  lba 
)
Value:
cdb[2] = (lba >> 24) & 0xff; \
  cdb[3] = (lba >> 16) & 0xff; \
  cdb[4] = (lba >>  8) & 0xff; \
  cdb[5] = (lba      ) & 0xff
#define CDIO_MMC_SET_READ_LENGTH16 (   cdb,
  len 
)    CDIO_MMC_SET_LEN16(cdb, 7, len)
#define CDIO_MMC_SET_READ_LENGTH24 (   cdb,
  len 
)
Value:
cdb[6] = (len >> 16) & 0xff; \
  cdb[7] = (len >>  8) & 0xff; \
  cdb[8] = (len      ) & 0xff
#define CDIO_MMC_SET_READ_LENGTH8 (   cdb,
  len 
)    cdb[8] = (len ) & 0xff
#define CDIO_MMC_SET_READ_TYPE (   cdb,
  sector_type 
)    cdb[1] = (sector_type << 2)
#define CDIO_MMC_SET_START_TRACK (   cdb,
  command 
)    cdb[6] = command
#define MAX_CDB_LEN   12

The largest Command Descriptor Block (CDB) size. The possible sizes are 6, 10, and 12 bytes.

#define MMC_READ_TIMEOUT_DEFAULT   3*60*1000

The default read timeout is 3 minutes.

#define MMC_TIMEOUT_DEFAULT   6000

The default timeout (non-read) is 6 seconds.


Typedef Documentation

An enumeration indicating whether an MMC command is sending data or getting data.

Format of header block in data returned from an MMC GET_CONFIGURATION command.

typedef struct mmc_cdb_s mmc_cdb_t

A Command Descriptor Block (CDB) used in sending MMC commands.


Enumeration Type Documentation

Enumerator:
CDIO_MMC_FEATURE_INTERFACE_UNSPECIFIED 
CDIO_MMC_FEATURE_INTERFACE_SCSI 
CDIO_MMC_FEATURE_INTERFACE_ATAPI 
CDIO_MMC_FEATURE_INTERFACE_IEEE_1394 
CDIO_MMC_FEATURE_INTERFACE_IEEE_1394A 
CDIO_MMC_FEATURE_INTERFACE_FIBRE_CH 

Profile profile codes used in GET_CONFIGURATION - PROFILE LIST.

Enumerator:
CDIO_MMC_FEATURE_PROF_NON_REMOVABLE 

Re-writable disk, capable of changing behavior

CDIO_MMC_FEATURE_PROF_REMOVABLE 

disk Re-writable; with removable media

CDIO_MMC_FEATURE_PROF_MO_ERASABLE 

Erasable Magneto-Optical disk with sector erase capability

CDIO_MMC_FEATURE_PROF_MO_WRITE_ONCE 

Write Once Magneto-Optical write once

CDIO_MMC_FEATURE_PROF_AS_MO 

Advance Storage Magneto-Optical

CDIO_MMC_FEATURE_PROF_CD_ROM 

Read only Compact Disc capable

CDIO_MMC_FEATURE_PROF_CD_R 

Write once Compact Disc capable

CDIO_MMC_FEATURE_PROF_CD_RW 

CD-RW Re-writable Compact Disc capable

CDIO_MMC_FEATURE_PROF_DVD_ROM 

Read only DVD

CDIO_MMC_FEATURE_PROF_DVD_R_SEQ 

Re-recordable DVD using Sequential recording

CDIO_MMC_FEATURE_PROF_DVD_RAM 

Re-writable DVD

CDIO_MMC_FEATURE_PROF_DVD_RW_RO 

Re-recordable DVD using Restricted Overwrite

CDIO_MMC_FEATURE_PROF_DVD_RW_SEQ 

Re-recordable DVD using Sequential recording

CDIO_MMC_FEATURE_PROF_DVD_PRW 

DVD+RW - DVD ReWritable

CDIO_MMC_FEATURE_PROF_DVD_PR 

DVD+R - DVD Recordable

CDIO_MMC_FEATURE_PROF_DDCD_ROM 

Read only DDCD

CDIO_MMC_FEATURE_PROF_DDCD_R 

DDCD-R Write only DDCD

CDIO_MMC_FEATURE_PROF_DDCD_RW 

Re-Write only DDCD

CDIO_MMC_FEATURE_PROF_DVD_PR2 

DVD+R - DVD Recordable double layer

CDIO_MMC_FEATURE_PROF_NON_CONFORM 

The Logical Unit does not conform to any Profile.

FEATURE codes used in GET CONFIGURATION.

Enumerator:
CDIO_MMC_FEATURE_PROFILE_LIST 

Profile List Feature

CDIO_MMC_FEATURE_CORE 
CDIO_MMC_FEATURE_MORPHING 

Report/prevent operational changes

CDIO_MMC_FEATURE_REMOVABLE_MEDIUM 

Removable Medium Feature

CDIO_MMC_FEATURE_WRITE_PROTECT 

Write Protect Feature

CDIO_MMC_FEATURE_RANDOM_READABLE 

Random Readable Feature

CDIO_MMC_FEATURE_MULTI_READ 

Multi-Read Feature

CDIO_MMC_FEATURE_CD_READ 

CD Read Feature

CDIO_MMC_FEATURE_DVD_READ 

DVD Read Feature

CDIO_MMC_FEATURE_RANDOM_WRITABLE 

Random Writable Feature

CDIO_MMC_FEATURE_INCR_WRITE 

Incremental Streaming Writable Feature

CDIO_MMC_FEATURE_SECTOR_ERASE 

Sector Erasable Feature

CDIO_MMC_FEATURE_FORMATABLE 

Formattable Feature

CDIO_MMC_FEATURE_DEFECT_MGMT 

Management Ability of the Logical Unit/media system to provide an apparently defect-free space.

CDIO_MMC_FEATURE_WRITE_ONCE 

Write Once Feature

CDIO_MMC_FEATURE_RESTRICT_OVERW 

Restricted Overwrite Feature

CDIO_MMC_FEATURE_CD_RW_CAV 

CD-RW CAV Write Feature

CDIO_MMC_FEATURE_MRW 

MRW Feature

CDIO_MMC_FEATURE_ENHANCED_DEFECT 

Enhanced Defect Reporting

CDIO_MMC_FEATURE_DVD_PRW 

DVD+RW Feature

CDIO_MMC_FEATURE_DVD_PR 

DVD+R Feature

CDIO_MMC_FEATURE_RIGID_RES_OVERW 

Rigid Restricted Overwrite

CDIO_MMC_FEATURE_CD_TAO 

CD Track at Once

CDIO_MMC_FEATURE_CD_SAO 

CD Mastering (Session at Once)

CDIO_MMC_FEATURE_DVD_R_RW_WRITE 

DVD-R/RW Write

CDIO_MMC_FEATURE_CD_RW_MEDIA_WRITE 

CD-RW Media Write Support

CDIO_MMC_FEATURE_DVD_PR_2_LAYER 

DVD+R Double Layer

CDIO_MMC_FEATURE_POWER_MGMT 

Initiator and device directed power management

CDIO_MMC_FEATURE_CDDA_EXT_PLAY 

Ability to play audio CDs via the Logical Unit's own analog output

CDIO_MMC_FEATURE_MCODE_UPGRADE 
CDIO_MMC_FEATURE_TIME_OUT 

Ability to respond to all commands within a specific time

CDIO_MMC_FEATURE_DVD_CSS 

Ability to perform DVD CSS/CPPM authentication and RPC

CDIO_MMC_FEATURE_RT_STREAMING 

Ability to read and write using Initiator requested performance parameters

CDIO_MMC_FEATURE_LU_SN 

The Logical Unit has a unique identifier.

CDIO_MMC_FEATURE_FIRMWARE_DATE 

Firmware creation date report

Return type codes for GET_CONFIGURATION.

Enumerator:
CDIO_MMC_GET_CONF_ALL_FEATURES 

all features without regard to currency.

CDIO_MMC_GET_CONF_CURRENT_FEATURES 

features which are currently in effect (e.g. based on medium inserted).

CDIO_MMC_GET_CONF_NAMED_FEATURE 

just the feature named in the GET_CONFIGURATION cdb.

The opcode-portion (generic packet commands) of an MMC command.

In general, those opcodes that end in 6 take a 6-byte command descriptor, those that end in 10 take a 10-byte descriptor and those that in in 12 take a 12-byte descriptor.

(Not that you need to know that, but it seems to be a big deal in the MMC specification.)

Enumerator:
CDIO_MMC_GPCMD_INQUIRY 

Request drive information.

CDIO_MMC_GPCMD_MODE_SELECT_6 

Select medium (6 bytes).

CDIO_MMC_GPCMD_MODE_SENSE_6 

Get medium or device information. Should be issued before MODE SELECT to get mode support or save current settings. (6 bytes).

CDIO_MMC_GPCMD_START_STOP 

Enable/disable Disc operations. (6 bytes).

CDIO_MMC_GPCMD_ALLOW_MEDIUM_REMOVAL 

Enable/disable Disc removal. (6 bytes).

CDIO_MMC_GPCMD_READ_10 

Group 2 Commands (CDB's here are 10-bytes) Read data from drive (10 bytes).

CDIO_MMC_GPCMD_READ_SUBCHANNEL 

Read Sub-Channel data. (10 bytes).

CDIO_MMC_GPCMD_READ_TOC 

READ TOC/PMA/ATIP. (10 bytes).

CDIO_MMC_GPCMD_READ_HEADER 
CDIO_MMC_GPCMD_PLAY_AUDIO_10 

Begin audio playing at current position (10 bytes).

CDIO_MMC_GPCMD_GET_CONFIGURATION 

Get drive Capabilities (10 bytes)

CDIO_MMC_GPCMD_PLAY_AUDIO_MSF 

Begin audio playing at specified MSF (10 bytes).

CDIO_MMC_GPCMD_PLAY_AUDIO_TI 
CDIO_MMC_GPCMD_PLAY_TRACK_REL_10 

Play audio at the track relative LBA. (10 bytes). Doesn't seem to be part of MMC standards but is handled by Plextor drives.

CDIO_MMC_GPCMD_GET_EVENT_STATUS 

Report events and Status.

CDIO_MMC_GPCMD_PAUSE_RESUME 

Stop or restart audio playback. (10 bytes). Used with a PLAY command.

CDIO_MMC_GPCMD_READ_DISC_INFO 

Get CD information. (10 bytes).

CDIO_MMC_GPCMD_MODE_SELECT_10 

Select medium (10-bytes).

CDIO_MMC_GPCMD_MODE_SENSE_10 

Get medium or device information. Should be issued before MODE SELECT to get mode support or save current settings. (6 bytes).

CDIO_MMC_GPCMD_PLAY_AUDIO_12 

Group 5 Commands (CDB's here are 12-bytes) Begin audio playing at current position (12 bytes)

CDIO_MMC_GPCMD_LOAD_UNLOAD 

Load/unload a Disc (12 bytes)

CDIO_MMC_GPCMD_READ_12 

Read data from drive (12 bytes).

CDIO_MMC_GPCMD_PLAY_TRACK_REL_12 

Play audio at the track relative LBA. (12 bytes). Doesn't seem to be part of MMC standards but is handled by Plextor drives.

CDIO_MMC_GPCMD_READ_DVD_STRUCTURE 

Get DVD structure info from media (12 bytes).

CDIO_MMC_GPCMD_READ_MSF 

Read almost any field of a CD sector at specified MSF. (12 bytes).

CDIO_MMC_GPCMD_SET_SPEED 

Set drive speed (12 bytes). This is listed as optional in ATAPI 2.6, but is (curiously) missing from Mt. Fuji, Table 57. It is mentioned in Mt. Fuji Table 377 as an MMC command for SCSI devices though... Most ATAPI drives support it.

CDIO_MMC_GPCMD_READ_CD 

Read almost any field of a CD sector at current location. (12 bytes).

CDIO_MMC_GPCMD_CD_PLAYBACK_STATUS 

Vendor-unique Commands SONY unique = command

CDIO_MMC_GPCMD_PLAYBACK_CONTROL 

SONY unique = command

CDIO_MMC_GPCMD_READ_CDDA 

Vendor unique = command

CDIO_MMC_GPCMD_READ_CDXA 

Vendor unique = command

CDIO_MMC_GPCMD_READ_ALL_SUBCODES 

Vendor unique = command

Enumerator:
CDIO_MMC_LEVEL_WEIRD 
CDIO_MMC_LEVEL_1 
CDIO_MMC_LEVEL_2 
CDIO_MMC_LEVEL_3 
CDIO_MMC_LEVEL_NONE 

Page codes for MODE SENSE and MODE SET.

Enumerator:
CDIO_MMC_R_W_ERROR_PAGE 
CDIO_MMC_WRITE_PARMS_PAGE 
CDIO_MMC_CDR_PARMS_PAGE 
CDIO_MMC_AUDIO_CTL_PAGE 
CDIO_MMC_POWER_PAGE 
CDIO_MMC_FAULT_FAIL_PAGE 
CDIO_MMC_TO_PROTECT_PAGE 
CDIO_MMC_CAPABILITIES_PAGE 
CDIO_MMC_ALL_PAGES 

Level values that can go into READ_CD

Enumerator:
CDIO_MMC_READ_TYPE_ANY 

All types

CDIO_MMC_READ_TYPE_CDDA 

Only CD-DA sectors

CDIO_MMC_READ_TYPE_MODE1 

mode1 sectors (user data = 2048)

CDIO_MMC_READ_TYPE_MODE2 

mode2 sectors form1 or form2

CDIO_MMC_READ_TYPE_M2F1 

mode2 sectors form1

CDIO_MMC_READ_TYPE_M2F2 

mode2 sectors form2

Read Subchannel states

Enumerator:
CDIO_MMC_READ_SUB_ST_INVALID 

audio status not supported

CDIO_MMC_READ_SUB_ST_PLAY 

audio play operation in progress

CDIO_MMC_READ_SUB_ST_PAUSED 

audio play operation paused

CDIO_MMC_READ_SUB_ST_COMPLETED 

audio play successfully completed

CDIO_MMC_READ_SUB_ST_ERROR 

audio play stopped due to error

CDIO_MMC_READ_SUB_ST_NO_STATUS 

no current audio status to return

Format values for READ_TOC

Enumerator:
CDIO_MMC_READTOC_FMT_TOC 
CDIO_MMC_READTOC_FMT_SESSION 
CDIO_MMC_READTOC_FMT_FULTOC 
CDIO_MMC_READTOC_FMT_PMA 

Q subcode data

CDIO_MMC_READTOC_FMT_ATIP 

includes media type

CDIO_MMC_READTOC_FMT_CDTEXT 

CD-TEXT info

An enumeration indicating whether an MMC command is sending data or getting data.

Enumerator:
SCSI_MMC_DATA_READ 
SCSI_MMC_DATA_WRITE 

Function Documentation

Get the output port volumes and port selections used on AUDIO PLAY commands via a MMC MODE SENSE command using the CD Audio Control Page.

Read Audio Subchannel information

Parameters:
p_cdiothe CD object to be acted upon.
p_subchannelplace for returned subchannel information
const char* mmc_audio_state2str ( uint8_t  i_audio_state)

Return a string containing the name of the audio state as returned from the Q_SUBCHANNEL.

Close tray using a MMC START STOP command.

Eject using MMC commands. If CD-ROM is "locked" we'll unlock it. Command is not "immediate" -- we'll wait for the command to complete. For a more general (and lower-level) routine,

See also:
mmc_start_stop_media.
const char* mmc_feature2str ( int  i_feature)

Return a string containing the name of the given feature

const char* mmc_feature_profile2str ( int  i_feature_profile)

Return a string containing the name of the given feature

int mmc_get_blocksize ( CdIo_t p_cdio)

Get the block size used in read requests, via MMC.

Returns:
the blocksize if > 0; error if <= 0
uint8_t mmc_get_cmd_len ( uint8_t  mmc_cmd)

Return the length in bytes of the Command Descriptor Buffer (CDB) for a given MMC command. The length will be either 6, 10, or 12.

lsn_t mmc_get_disc_last_lsn ( const CdIo_t p_cdio)

Get the lsn of the end of the CD

Returns:
the lsn. On error return CDIO_INVALID_LSN.
discmode_t mmc_get_discmode ( const CdIo_t p_cdio)

Return the discmode as reported by the MMC Read (FULL) TOC command.

Information was obtained from Section 5.1.13 (Read TOC/PMA/ATIP) pages 56-62 from the MMC draft specification, revision 10a at http://www.t10.org/ftp/t10/drafts/mmc/mmc-r10a.pdf See especially tables 72, 73 and 75.

void mmc_get_drive_cap ( CdIo_t p_cdio,
cdio_drive_read_cap_t p_read_cap,
cdio_drive_write_cap_t p_write_cap,
cdio_drive_misc_cap_t p_misc_cap 
)

Get drive capabilities for a device.

Returns:
the drive capabilities.

Get the MMC level supported by the device.

Get the DVD type associated with cd object.

Returns:
the DVD discmode.
int mmc_get_event_status ( const CdIo_t p_cdio,
uint8_t  out_buf[2] 
)

Return results of media status

Parameters:
p_cdiothe CD object to be acted upon.
out_bufmedia status code from operation
Returns:
DRIVER_OP_SUCCESS (0) if we got the status. return codes are the same as driver_return_code_t
bool mmc_get_hwinfo ( const CdIo_t p_cdio,
cdio_hwinfo_t p_hw_info 
)

Get the CD-ROM hardware info via an MMC INQUIRY command.

Returns:
true if we were able to get hardware info, false if we had an error.
char* mmc_get_mcn ( const CdIo_t p_cdio)

Get the media catalog number (MCN) from the CD via MMC.

Returns:
the media catalog number r NULL if there is none or we don't have the ability to get it.

Note: string is malloc'd so caller has to free() the returned string when done with it.

int mmc_get_media_changed ( const CdIo_t p_cdio)

Find out if media has changed since the last call.

Parameters:
p_cdiothe CD object to be acted upon.
Returns:
1 if media has changed since last call, 0 if not. Error return codes are the same as driver_return_code_t
int mmc_get_tray_status ( const CdIo_t p_cdio)

Find out if media tray is open or closed.

Parameters:
p_cdiothe CD object to be acted upon.
Returns:
1 if media is open, 0 if closed. Error return codes are the same as driver_return_code_t

Report if CD-ROM has a praticular kind of interface (ATAPI, SCSCI, ...) Is it possible for an interface to have serveral? If not this routine could probably return the single mmc_feature_interface_t.

Returns:
true if we have the interface and false if not.
int mmc_mode_sense ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (6- or 10-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.
int mmc_mode_sense_10 ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (10-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.
int mmc_mode_sense_6 ( CdIo_t p_cdio,
void *  p_buf,
int  i_size,
int  page 
)

Run a MODE_SENSE command (6-byte version) and put the results in p_buf

Returns:
DRIVER_OP_SUCCESS if we ran the command ok.
driver_return_code_t mmc_read_cd ( const CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
int  expected_sector_type,
bool  b_digital_audio_play,
bool  b_sync,
uint8_t  header_codes,
bool  b_user_data,
bool  b_edc_ecc,
uint8_t  c2_error_information,
uint8_t  subchannel_selection,
uint16_t  i_blocksize,
uint32_t  i_blocks 
)

Issue a MMC READ_CD command.

Parameters:
p_cdioobject to read from
p_bufPlace to store data. The caller should ensure that p_buf can hold at least i_blocksize * i_blocks bytes.
i_lsnsector to read
expected_sector_typerestricts reading to a specific CD sector type. Only 3 bits with values 1-5 are used: 0 all sector types 1 CD-DA sectors only 2 Mode 1 sectors only 3 Mode 2 formless sectors only. Note in contrast to all other values an MMC CD-ROM is not required to support this mode. 4 Mode 2 Form 1 sectors only 5 Mode 2 Form 2 sectors only
b_digital_audio_playControl error concealment when the data being read is CD-DA. If the data being read is not CD-DA, this parameter is ignored. If the data being read is CD-DA and DAP is false zero, then the user data returned should not be modified by flaw obscuring mechanisms such as audio data mute and interpolate. If the data being read is CD-DA and DAP is true, then the user data returned should be modified by flaw obscuring mechanisms such as audio data mute and interpolate.

b_sync_header return the sync header (which will probably have the same value as CDIO_SECTOR_SYNC_HEADER of size CDIO_CD_SYNC_SIZE).

Parameters:
header_codesHeader Codes refer to the sector header and the sub-header that is present in mode 2 formed sectors:

0 No header information is returned. 1 The 4-byte sector header of data sectors is be returned, 2 The 8-byte sector sub-header of mode 2 formed sectors is returned. 3 Both sector header and sub-header (12 bytes) is returned. The Header preceeds the rest of the bytes (e.g. user-data bytes) that might get returned.

Parameters:
b_user_dataReturn user data if true.

For CD-DA, the User Data is CDIO_CD_FRAMESIZE_RAW bytes.

For Mode 1, The User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE.

For Mode 2 formless, The User Data is M2RAW_SECTOR_SIZE bytes beginning at offset CDIO_CD_HEADER_SIZE+CDIO_CD_SUBHEADER_SIZE.

For data Mode 2, form 1, User Data is ISO_BLOCKSIZE bytes beginning at offset CDIO_CD_XA_SYNC_HEADER.

For data Mode 2, form 2, User Data is 2 324 bytes beginning at offset CDIO_CD_XA_SYNC_HEADER.

Parameters:
b_sync
b_edc_ecctrue if we return EDC/ECC error detection/correction bits.

The presence and size of EDC redundancy or ECC parity is defined according to sector type:

CD-DA sectors have neither EDC redundancy nor ECC parity.

Data Mode 1 sectors have 288 bytes of EDC redundancy, Pad, and ECC parity beginning at offset 2064.

Data Mode 2 formless sectors have neither EDC redundancy nor ECC parity

Data Mode 2 form 1 sectors have 280 bytes of EDC redundancy and ECC parity beginning at offset 2072

Data Mode 2 form 2 sectors optionally have 4 bytes of EDC redundancy beginning at offset 2348.

Parameters:
c2_error_informationIf true associate a bit with each sector for C2 error The resulting bit field is ordered exactly as the main channel bytes. Each 8-bit boundary defines a byte of flag bits.
subchannel_selectionsubchannel-selection bits

0 No Sub-channel data shall be returned. (0 bytes) 1 RAW P-W Sub-channel data shall be returned. (96 byte) 2 Formatted Q sub-channel data shall be transferred (16 bytes) 3 Reserved 4 Corrected and de-interleaved R-W sub-channel (96 bytes) 5-7 Reserved

Parameters:
i_blocksizesize of the a block expected to be returned
i_blocksnumber of blocks expected to be returned.
driver_return_code_t mmc_read_data_sectors ( CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
uint16_t  i_blocksize,
uint32_t  i_blocks 
)

Read just the user data part of some sort of data sector (via mmc_read_cd).

Parameters:
p_cdioobject to read from
p_bufplace to read data into. The caller should make sure this location can store at least CDIO_CD_FRAMESIZE, M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE depending on the kind of sector getting read. If you don't know whether you have a Mode 1/2, Form 1/ Form 2/Formless sector best to reserve space for the maximum, M2RAW_SECTOR_SIZE.
i_lsnsector to read
i_blocksizesize of each block
i_blocksnumber of blocks to read
driver_return_code_t mmc_read_sectors ( const CdIo_t p_cdio,
void *  p_buf,
lsn_t  i_lsn,
int  read_sector_type,
uint32_t  i_blocks 
)

Read sectors using SCSI-MMC GPCMD_READ_CD. Can read only up to 25 blocks.

driver_return_code_t mmc_run_cmd ( const CdIo_t p_cdio,
unsigned int  i_timeout_ms,
const mmc_cdb_t p_cdb,
cdio_mmc_direction_t  e_direction,
unsigned int  i_buf,
void *  p_buf 
)

Run a Multimedia command (MMC).

Parameters:
p_cdioCD structure set by cdio_open().
i_timeout_mstime in milliseconds we will wait for the command to complete.
p_cdbCDB bytes. All values that are needed should be set on input. We'll figure out what the right CDB length should be.
e_directiondirection the transfer is to go.
i_bufSize of buffer
p_bufBuffer for data, both sending and receiving.
Returns:
0 if command completed successfully.
driver_return_code_t mmc_run_cmd_len ( const CdIo_t p_cdio,
unsigned int  i_timeout_ms,
const mmc_cdb_t p_cdb,
unsigned int  i_cdb,
cdio_mmc_direction_t  e_direction,
unsigned int  i_buf,
void *  p_buf 
)

Run a Multimedia command (MMC) specifying the CDB length. The motivation here is for example ot use in is an undocumented debug command for LG drives (namely E7), whose length is being miscalculated by mmc_get_cmd_len(); it doesn't follow the usual code number to length conventions. Patch supplied by SukkoPera.

Parameters:
p_cdioCD structure set by cdio_open().
i_timeout_mstime in milliseconds we will wait for the command to complete.
p_cdbCDB bytes. All values that are needed should be set on input.
i_cdbnumber of CDB bytes.
e_directiondirection the transfer is to go.
i_bufSize of buffer
p_bufBuffer for data, both sending and receiving.
Returns:
0 if command completed successfully.
driver_return_code_t mmc_set_blocksize ( const CdIo_t p_cdio,
uint16_t  i_blocksize 
)

Set the block size for subsequest read requests, via MMC.

driver_return_code_t mmc_set_drive_speed ( const CdIo_t p_cdio,
int  i_drive_speed 
)

Set the drive speed in CD-ROM speed units.

Parameters:
p_cdioCD structure set by cdio_open().
i_drive_speedspeed in CD-ROM speed units. Note this not Kbs as would be used in the MMC spec or in mmc_set_speed(). To convert CD-ROM speed units to Kbs, multiply the number by 176 (for raw data) and by 150 (for filesystem data). On many CD-ROM drives, specifying a value too large will result in using the fastest speed.
Returns:
the drive speed if greater than 0. -1 if we had an error. is -2 returned if this is not implemented for the current driver.
See also:
cdio_set_speed and mmc_set_speed
driver_return_code_t mmc_set_speed ( const CdIo_t p_cdio,
int  i_Kbs_speed 
)

Set the drive speed in K bytes per second.

Parameters:
p_cdioCD structure set by cdio_open().
i_Kbs_speedspeed in K bytes per second. Note this is not in standard CD-ROM speed units, e.g. 1x, 4x, 16x as it is in cdio_set_speed. To convert CD-ROM speed units to Kbs, multiply the number by 176 (for raw data) and by 150 (for filesystem data). Also note that ATAPI specs say that a value less than 176 will result in an error. On many CD-ROM drives, specifying a value too large will result in using the fastest speed.
Returns:
the drive speed if greater than 0. -1 if we had an error. is -2 returned if this is not implemented for the current driver.
See also:
cdio_set_speed and mmc_set_drive_speed
driver_return_code_t mmc_start_stop_media ( const CdIo_t p_cdio,
bool  b_eject,
bool  b_immediate,
uint8_t  power_condition 
)

Load or Unload media using a MMC START STOP command.

Parameters:
p_cdiothe CD object to be acted upon.
b_ejecteject if true and close tray if false
b_immediatewait or don't wait for operation to complete
power_conditionSet CD-ROM to idle/standby/sleep. If nonzero eject/load is ignored, so set to 0 if you want to eject or load.
See also:
mmc_eject_media or mmc_close_tray

Variable Documentation

The below variables are trickery to force the above enum symbol values to be recorded in debug symbol tables. They are used to allow one to refer to the enumeration value names in the typedefs above in a debugger and debugger expressions

Set this to the maximum value in milliseconds that we will wait on an MMC read command.

uint32_t mmc_timeout_ms

Set this to the maximum value in milliseconds that we will wait on an MMC command.


Generated for libcdio by doxygen 1.7.6.1