From 1dfdba7b7dd30af8c5c2f6c251664534370fef67 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 25 Jul 2004 03:05:18 +0000 Subject: [PATCH] sector.h: add more DVD types. _cdio_linux.c: Add ability in GNU/Linux to determine if a drive has a DVD in it. cd-info: show the drive type. --- include/cdio/sector.h | 39 +++++++++++++++++++++++++++++++-------- lib/_cdio_linux.c | 22 ++++++++++++++++++++-- src/cd-info.c | 24 +++++++++++++++++++++--- 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/include/cdio/sector.h b/include/cdio/sector.h index 07eaff8b..975bcceb 100644 --- a/include/cdio/sector.h +++ b/include/cdio/sector.h @@ -1,5 +1,5 @@ /* - $Id: sector.h,v 1.23 2004/07/24 05:42:09 rocky Exp $ + $Id: sector.h,v 1.24 2004/07/25 03:05:18 rocky Exp $ Copyright (C) 2000 Herbert Valerio Riedel Copyright (C) 2003, 2004 Rocky Bernstein @@ -85,17 +85,40 @@ typedef enum { and GNU/Linux /usr/include/linux/cdrom.h and we've added DVD. */ typedef enum { - CDIO_DISC_MODE_CD_DA, /**< CD-DA */ - CDIO_DISC_MODE_CD_DATA_1, /**< CD-ROM form 1 mode 1 */ - CDIO_DISC_MODE_CD_DATA_2, /**< CD-ROM form 1 mode 2 */ - CDIO_DISC_MODE_CD_XA_2_1, /**< CD-ROM XA form2 mode 1 */ - CDIO_DISC_MODE_CD_XA_2_2, /**< CD-ROM XA form2 mode 2 */ - CDIO_DISC_MODE_CD_MIXED, /**< CD-ROM XA and CD-I */ - CDIO_DISC_MODE_DVD, /**< some sort of DVD */ + CDIO_DISC_MODE_CD_DA, /**< CD-DA */ + CDIO_DISC_MODE_CD_DATA_1, /**< CD-ROM form 1 mode 1 */ + CDIO_DISC_MODE_CD_DATA_2, /**< CD-ROM form 1 mode 2 */ + CDIO_DISC_MODE_CD_XA_2_1, /**< CD-ROM XA form2 mode 1 */ + CDIO_DISC_MODE_CD_XA_2_2, /**< CD-ROM XA form2 mode 2 */ + CDIO_DISC_MODE_CD_MIXED, /**< CD-ROM XA and CD-I */ + CDIO_DISC_MODE_DVD_ROM, /**< DVD ROM (e.g. movies) */ + CDIO_DISC_MODE_DVD_RAM, /**< DVD-RAM */ + CDIO_DISC_MODE_DVD_R, /**< DVD-R */ + CDIO_DISC_MODE_DVD_RW, /**< DVD-RW */ + CDIO_DISC_MODE_DVD_PR, /**< DVD+R */ + CDIO_DISC_MODE_DVD_PRW, /**< DVD+RW */ + CDIO_DISC_MODE_DVD_OTHER, /**< Unknown/unclassified DVD type */ CDIO_DISC_MODE_NO_INFO, CDIO_DISC_MODE_ERROR } discmode_t; +#define CDIO_DISC_MODE_DVD \ + (CDIO_DISC_MODE_DVD_ROM \ + | CDIO_DISC_MODE_DVD_RAM \ + | CDIO_DISC_MODE_DVD_R \ + | CDIO_DISC_MODE_DVD_RW \ + | CDIO_DISC_MODE_DVD_PR \ + | CDIO_DISC_MODE_DVD_PRW \ + | CDIO_DISC_MODE_DVD_OTHER) + +#define CDIO_DISC_MODE_CD \ + (CDIO_DISC_MODE_CD_DA \ + | CDIO_DISC_MODE_CD_DATA_1 \ + | CDIO_DISC_MODE_CD_DATA_2 \ + | CDIO_DISC_MODE_CD_XA_2_1 \ + | CDIO_DISC_MODE_CD_XA_2_2 \ + | CDIO_DISC_MODE_CD_MIXED) + /*! Information that can be obtained through a Read Subchannel command. */ diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index a9478533..e8fcb335 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.75 2004/07/24 05:42:09 rocky Exp $ + $Id: _cdio_linux.c,v 1.76 2004/07/25 03:05:18 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.75 2004/07/24 05:42:09 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.76 2004/07/25 03:05:18 rocky Exp $"; #include @@ -168,6 +168,24 @@ _get_discmode_linux (void *p_user_data) _img_private_t *p_env = p_user_data; int32_t i_discmode; + + /* See if this is a DVD. */ + dvd_struct dvd; /* DVD READ STRUCT for layer 0. */ + + dvd.physical.type = DVD_STRUCT_PHYSICAL; + dvd.physical.layer_num = 0; + if (0 == ioctl (p_env->gen.fd, DVD_READ_STRUCT, &dvd)) { + switch(dvd.physical.layer[0].book_type) { + case 0: return CDIO_DISC_MODE_DVD_ROM; + case 1: return CDIO_DISC_MODE_DVD_RAM; + case 2: return CDIO_DISC_MODE_DVD_R; + case 3: return CDIO_DISC_MODE_DVD_RW; + case 8: return CDIO_DISC_MODE_DVD_RW; + case 9: return CDIO_DISC_MODE_DVD_RW; + default: return CDIO_DISC_MODE_DVD_OTHER; + } + } + i_discmode = ioctl (p_env->gen.fd, CDROM_DISC_STATUS); if (i_discmode < 0) return CDIO_DISC_MODE_ERROR; diff --git a/src/cd-info.c b/src/cd-info.c index 8031ce07..3e0b2ee9 100644 --- a/src/cd-info.c +++ b/src/cd-info.c @@ -1,5 +1,5 @@ /* - $Id: cd-info.c,v 1.74 2004/07/24 14:23:39 rocky Exp $ + $Id: cd-info.c,v 1.75 2004/07/25 03:05:18 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 1996, 1997, 1998 Gerd Knorr @@ -1031,8 +1031,26 @@ main(int argc, const char *argv[]) case CDIO_DISC_MODE_CD_MIXED: printf("CD-ROM mixed mode"); break; - case CDIO_DISC_MODE_DVD: - printf("some sort of DVD"); + case CDIO_DISC_MODE_DVD_ROM: + printf("DVD-ROM"); + break; + case CDIO_DISC_MODE_DVD_RAM: + printf("DVD-RAM"); + break; + case CDIO_DISC_MODE_DVD_R: + printf("DVD-R"); + break; + case CDIO_DISC_MODE_DVD_RW: + printf("DVD-RW"); + break; + case CDIO_DISC_MODE_DVD_PR: + printf("DVD+R"); + break; + case CDIO_DISC_MODE_DVD_PRW: + printf("DVD+RW"); + break; + case CDIO_DISC_MODE_DVD_OTHER: + printf("Unknown/unclassified DVD"); break; case CDIO_DISC_MODE_NO_INFO: printf("No information");