Add access to GPCMD_INQUIRY
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: mmc-tool.c,v 1.6 2006/04/12 09:30:14 rocky Exp $
|
$Id: mmc-tool.c,v 1.7 2006/04/12 14:49:21 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2006 Rocky Bernstein <rocky@cpan.org>
|
Copyright (C) 2006 Rocky Bernstein <rocky@cpan.org>
|
||||||
|
|
||||||
@@ -60,6 +60,7 @@ typedef enum {
|
|||||||
OP_CLOSETRAY,
|
OP_CLOSETRAY,
|
||||||
OP_EJECT,
|
OP_EJECT,
|
||||||
OP_IDLE,
|
OP_IDLE,
|
||||||
|
OP_INQUIRY,
|
||||||
OP_MODE_SENSE_2A,
|
OP_MODE_SENSE_2A,
|
||||||
OP_MCN,
|
OP_MCN,
|
||||||
OP_SPEED,
|
OP_SPEED,
|
||||||
@@ -100,7 +101,9 @@ parse_options (int argc, char *argv[])
|
|||||||
|
|
||||||
const char* helpText =
|
const char* helpText =
|
||||||
"Usage: %s [OPTION...]\n"
|
"Usage: %s [OPTION...]\n"
|
||||||
" Issues libcdio Multimedia commands\n"
|
" Issues libcdio Multimedia commands. Operations occur in the order\n"
|
||||||
|
" in which the options are given and a given operation may appear\n"
|
||||||
|
" more than once to have it run more than once.\n"
|
||||||
"options: \n"
|
"options: \n"
|
||||||
" -b, --blocksize[=INT] set blocksize. If no block size or a \n"
|
" -b, --blocksize[=INT] set blocksize. If no block size or a \n"
|
||||||
" zero blocksize is given we return the\n"
|
" zero blocksize is given we return the\n"
|
||||||
@@ -110,6 +113,8 @@ parse_options (int argc, char *argv[])
|
|||||||
" -c, --close drive close drive via ALLOW_MEDIUM_REMOVAL\n"
|
" -c, --close drive close drive via ALLOW_MEDIUM_REMOVAL\n"
|
||||||
" -e, --eject [drive] eject drive via ALLOW_MEDIUM_REMOVAL\n"
|
" -e, --eject [drive] eject drive via ALLOW_MEDIUM_REMOVAL\n"
|
||||||
" and a MMC START/STOP command\n"
|
" and a MMC START/STOP command\n"
|
||||||
|
" -i, --inquiry print HW info via INQUIRY\n"
|
||||||
|
" via MMC START/STOP command"
|
||||||
" -I, --idle set CD-ROM to idle or power down\n"
|
" -I, --idle set CD-ROM to idle or power down\n"
|
||||||
" via MMC START/STOP command"
|
" via MMC START/STOP command"
|
||||||
" -m, --mcn get media catalog number (AKA UPC)\n"
|
" -m, --mcn get media catalog number (AKA UPC)\n"
|
||||||
@@ -125,12 +130,12 @@ parse_options (int argc, char *argv[])
|
|||||||
" --usage Display brief usage message\n";
|
" --usage Display brief usage message\n";
|
||||||
|
|
||||||
const char* usageText =
|
const char* usageText =
|
||||||
"Usage: %s [-a|--access-mode STRING] [-m|--mode MODE-TYPE]\n"
|
"Usage: %s [-b|--blocksize[=INT]] [-m|--mcn]\n"
|
||||||
" [-s|--speed INT]\n"
|
" [-I|--idle] [-I|inquiry] [-m[-s|--speed-KB INT]\n"
|
||||||
" [-V|--version] [-?|--help] [--usage]\n";
|
" [-V|--version] [-?|--help] [--usage]\n";
|
||||||
|
|
||||||
/* Command-line options */
|
/* Command-line options */
|
||||||
const char* optionsString = "b::c:C::e::Is:V?";
|
const char* optionsString = "b::c:C::e::Iis:V?";
|
||||||
struct option optionsTable[] = {
|
struct option optionsTable[] = {
|
||||||
|
|
||||||
{"blocksize", optional_argument, &i_blocksize, 'b' },
|
{"blocksize", optional_argument, &i_blocksize, 'b' },
|
||||||
@@ -138,6 +143,7 @@ parse_options (int argc, char *argv[])
|
|||||||
{"drive-cap", optional_argument, NULL, 'C'},
|
{"drive-cap", optional_argument, NULL, 'C'},
|
||||||
{"eject", optional_argument, NULL, 'e'},
|
{"eject", optional_argument, NULL, 'e'},
|
||||||
{"idle", no_argument, NULL, 'I'},
|
{"idle", no_argument, NULL, 'I'},
|
||||||
|
{"inquiry", no_argument, NULL, 'i'},
|
||||||
{"mcn", no_argument, NULL, 'm'},
|
{"mcn", no_argument, NULL, 'm'},
|
||||||
{"speed-KB", required_argument, NULL, 's'},
|
{"speed-KB", required_argument, NULL, 's'},
|
||||||
{"speed-X", required_argument, NULL, 'S'},
|
{"speed-X", required_argument, NULL, 'S'},
|
||||||
@@ -184,6 +190,11 @@ parse_options (int argc, char *argv[])
|
|||||||
if (optarg) op.arg.psz = strdup(optarg);
|
if (optarg) op.arg.psz = strdup(optarg);
|
||||||
push_op(&op);
|
push_op(&op);
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
op.op = OP_INQUIRY;
|
||||||
|
op.arg.psz=NULL;
|
||||||
|
push_op(&op);
|
||||||
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
op.op = OP_IDLE;
|
op.op = OP_IDLE;
|
||||||
op.arg.psz=NULL;
|
op.arg.psz=NULL;
|
||||||
@@ -484,6 +495,19 @@ main(int argc, char *argv[])
|
|||||||
report(stdout, "%s (mmc_start_stop_media - powerdown): %s\n",
|
report(stdout, "%s (mmc_start_stop_media - powerdown): %s\n",
|
||||||
program_name, cdio_driver_errmsg(rc));
|
program_name, cdio_driver_errmsg(rc));
|
||||||
break;
|
break;
|
||||||
|
case OP_INQUIRY:
|
||||||
|
{
|
||||||
|
cdio_hwinfo_t hw_info = { "", "", ""};
|
||||||
|
if (mmc_get_hwinfo(p_cdio, &hw_info)) {
|
||||||
|
printf("%-8s: %s\n%-8s: %s\n%-8s: %s\n",
|
||||||
|
"Vendor" , hw_info.psz_vendor,
|
||||||
|
"Model" , hw_info.psz_model,
|
||||||
|
"Revision", hw_info.psz_revision);
|
||||||
|
} else {
|
||||||
|
report(stdout, "%s (mmc_gpcmd_inquiry error)\n", program_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case OP_MCN:
|
case OP_MCN:
|
||||||
{
|
{
|
||||||
char *psz_mcn = mmc_get_mcn(p_cdio);
|
char *psz_mcn = mmc_get_mcn(p_cdio);
|
||||||
@@ -493,7 +517,6 @@ main(int argc, char *argv[])
|
|||||||
} else
|
} else
|
||||||
report(stdout, "%s (mmc_get_mcn): can't retrieve\n", program_name);
|
report(stdout, "%s (mmc_get_mcn): can't retrieve\n", program_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user