Add routine to report MMC capabilities of a drive. Add that to the
cd-drive program.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# $Id: Makefile.am,v 1.22 2005/04/30 02:04:29 rocky Exp $
|
||||
# $Id: Makefile.am,v 1.23 2005/04/30 09:42:37 rocky Exp $
|
||||
#
|
||||
# Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
#
|
||||
@@ -24,7 +24,8 @@ if !DISABLE_CPP
|
||||
SUBDIRS = C++
|
||||
endif
|
||||
noinst_PROGRAMS = audio cdtext device drives iso1 iso2 iso3 isofuzzy \
|
||||
mmc1 mmc2 paranoia paranoia2 tracks sample3 sample4
|
||||
mmc1 mmc2 paranoia paranoia2 tracks \
|
||||
sample3 sample4
|
||||
|
||||
INCLUDES = -I$(top_srcdir) $(LIBCDIO_CFLAGS)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: mmc.h,v 1.19 2005/03/21 09:19:06 rocky Exp $
|
||||
$Id: mmc.h,v 1.20 2005/04/30 09:42:37 rocky Exp $
|
||||
|
||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -498,6 +498,20 @@ mmc_audio_read_subchannel (CdIo_t *p_cdio,
|
||||
/*out*/ cdio_drive_write_cap_t *p_write_cap,
|
||||
/*out*/ cdio_drive_misc_cap_t *p_misc_cap);
|
||||
|
||||
typedef enum {
|
||||
CDIO_MMC_LEVEL_WEIRD,
|
||||
CDIO_MMC_LEVEL_1,
|
||||
CDIO_MMC_LEVEL_2,
|
||||
CDIO_MMC_LEVEL_3,
|
||||
CDIO_MMC_LEVEL_NONE
|
||||
} cdio_mmc_level_t;
|
||||
|
||||
/*!
|
||||
Get the MMC level supported by the device.
|
||||
*/
|
||||
cdio_mmc_level_t mmc_get_drive_mmc_cap(CdIo_t *p_cdio);
|
||||
|
||||
|
||||
/*!
|
||||
Get the DVD type associated with cd object.
|
||||
|
||||
@@ -546,7 +560,7 @@ mmc_audio_read_subchannel (CdIo_t *p_cdio,
|
||||
/*!
|
||||
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 sincle mmc_feature_interface_t.
|
||||
routine could probably return the single mmc_feature_interface_t.
|
||||
@return true if we have the interface and false if not.
|
||||
*/
|
||||
bool_3way_t mmc_have_interface( CdIo_t *p_cdio,
|
||||
|
||||
@@ -168,6 +168,7 @@ mmc_audio_state2str
|
||||
mmc_eject_media
|
||||
mmc_get_blocksize
|
||||
mmc_get_discmode
|
||||
mmc_get_drive_mmc_cap
|
||||
mmc_get_dvd_struct_physical
|
||||
mmc_get_cmd_len
|
||||
mmc_get_media_changed
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Common Multimedia Command (MMC) routines.
|
||||
|
||||
$Id: mmc.c,v 1.25 2005/03/23 11:15:25 rocky Exp $
|
||||
$Id: mmc.c,v 1.26 2005/04/30 09:42:37 rocky Exp $
|
||||
|
||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -731,6 +731,36 @@ mmc_get_drive_cap (CdIo_t *p_cdio,
|
||||
return;
|
||||
}
|
||||
|
||||
/*!
|
||||
Get the MMC level supported by the device.
|
||||
*/
|
||||
cdio_mmc_level_t
|
||||
mmc_get_drive_mmc_cap(CdIo_t *p_cdio)
|
||||
{
|
||||
uint8_t buf[256] = { 0, };
|
||||
uint8_t len;
|
||||
int rc = mmc_mode_sense(p_cdio, buf, sizeof(buf),
|
||||
CDIO_MMC_CAPABILITIES_PAGE);
|
||||
|
||||
if (DRIVER_OP_SUCCESS != rc) {
|
||||
return CDIO_MMC_LEVEL_NONE;
|
||||
}
|
||||
|
||||
len = buf[1];
|
||||
if (16 > len) {
|
||||
return CDIO_MMC_LEVEL_WEIRD;
|
||||
} else if (28 <= len) {
|
||||
return CDIO_MMC_LEVEL_3;
|
||||
} else if (24 <= len) {
|
||||
return CDIO_MMC_LEVEL_2;
|
||||
printf("MMC 2");
|
||||
} else if (20 <= len) {
|
||||
return CDIO_MMC_LEVEL_1;
|
||||
} else {
|
||||
return CDIO_MMC_LEVEL_WEIRD;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
Get the DVD type associated with cd object.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
$Id: cd-drive.c,v 1.19 2005/04/11 01:37:38 rocky Exp $
|
||||
$Id: cd-drive.c,v 1.20 2005/04/30 09:42:37 rocky Exp $
|
||||
|
||||
Copyright (C) 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||
|
||||
@@ -146,6 +146,34 @@ _log_handler (cdio_log_level_t level, const char message[])
|
||||
gl_default_cdio_log_handler (level, message);
|
||||
}
|
||||
|
||||
/*! Prints out SCSI-MMC drive features */
|
||||
static void
|
||||
print_mmc_drive_level(CdIo_t *p_cdio)
|
||||
{
|
||||
cdio_mmc_level_t mmc_level = mmc_get_drive_mmc_cap(p_cdio);
|
||||
|
||||
printf( "CD-ROM drive supports " );
|
||||
|
||||
switch(mmc_level) {
|
||||
case CDIO_MMC_LEVEL_WEIRD:
|
||||
printf("some nonstandard or degenerate set of MMC\n");
|
||||
break;
|
||||
case CDIO_MMC_LEVEL_1:
|
||||
printf("MMC 1\n");
|
||||
break;
|
||||
case CDIO_MMC_LEVEL_2:
|
||||
printf("MMC 2\n");
|
||||
break;
|
||||
case CDIO_MMC_LEVEL_3:
|
||||
printf("MMC 3\n");
|
||||
break;
|
||||
case CDIO_MMC_LEVEL_NONE:
|
||||
printf("no MMC\n");
|
||||
break;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
/* Initialize global variables. */
|
||||
static void
|
||||
init(void)
|
||||
@@ -228,6 +256,8 @@ main(int argc, const char *argv[])
|
||||
cdio_hwinfo_t hwinfo;
|
||||
CdIo_t *p_cdio = cdio_open(*ppsz_cd, driver_id);
|
||||
|
||||
print_mmc_drive_level(p_cdio);
|
||||
|
||||
printf("%28s: %s\n", "Drive", *ppsz_cd);
|
||||
|
||||
if (p_cdio) {
|
||||
|
||||
Reference in New Issue
Block a user