Improved emulation of mode page 2A

This commit is contained in:
Thomas Schmitt 2014-03-01 10:16:03 +00:00
parent 174c22aeb7
commit 6e5c50bde4
4 changed files with 18 additions and 9 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2014.02.19.111017" #define Cdrskin_timestamP "2014.03.01.101537"

View File

@ -1222,6 +1222,7 @@ static int drive_getcaps(struct burn_drive *d, struct burn_drive_info *out)
{ {
struct burn_scsi_inquiry_data *id; struct burn_scsi_inquiry_data *id;
int i, profile; int i, profile;
struct burn_feature_descr *feat;
/* ts A61007 : now prevented in enumerate_common() */ /* ts A61007 : now prevented in enumerate_common() */
#if 0 #if 0
@ -1275,6 +1276,13 @@ static int drive_getcaps(struct burn_drive *d, struct burn_drive_info *out)
else if (profile == 0x12) else if (profile == 0x12)
out->write_dvdram = out->read_dvdram = 1; out->write_dvdram = out->read_dvdram = 1;
} }
/* Test Write bit of CD TAO, CD Mastering, DVD-R/-RW Write */
for (i = 0x002D; i <= 0x002F; i++)
if (burn_drive_has_feature(d, i, &feat, 0))
if (feat->data_lenght > 0)
out->write_simulate |=
!!(feat->data[0] & 4);
} }
out->drive = d; out->drive = d;

View File

@ -594,10 +594,10 @@ struct burn_drive_info
to inquire a device file address. ^^^^^ ALWAYS ^^^^^^^*/ to inquire a device file address. ^^^^^ ALWAYS ^^^^^^^*/
char location[17]; char location[17];
/* DEPRECATION: /* NOTE: The capability to write particular media types is also
Start of information from mode page 2Ah which is declared announced by their profile number being in the list returned
obsolete by MMC-5. Do not rely on this, if you can get a by burn_drive_get_all_profile(). This is the only way to
meaningful reply from burn_drive_get_all_profiles() inquire types DVD-RW, DVD+R, DVD+R DL, DVD+RW, BD-R, BD-RE.
*/ */
/** Can the drive read DVD-RAM discs */ /** Can the drive read DVD-RAM discs */
unsigned int read_dvdram:1; unsigned int read_dvdram:1;
@ -622,13 +622,12 @@ struct burn_drive_info
/** Can the drive simulate a write */ /** Can the drive simulate a write */
unsigned int write_simulate:1; unsigned int write_simulate:1;
/** Can the drive report C2 errors */ /** DEPRECATED: Can the drive report C2 errors */
unsigned int c2_errors:1; unsigned int c2_errors:1;
/** The size of the drive's buffer (in kilobytes) */ /** DEPRECATED: The size of the drive's buffer (in kilobytes) */
int buffer_size; int buffer_size;
/* End of DEPRECATION */
/** /**
* The supported block types in tao mode. * The supported block types in tao mode.
@ -1646,7 +1645,7 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
/** Format media for use with libburn. This currently applies to DVD-RW /** Format media for use with libburn. This currently applies to DVD-RW
in state "Sequential Recording" (profile 0014h) which get formatted to in state "Sequential Recording" (profile 0014h) which get formatted to
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced" state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
by setting bit2 of flag. DVD-RAM and BD-RE may get formatted initially by setting bit4 of flag. DVD-RAM and BD-RE may get formatted initially
or re-formatted to adjust their Defect Managment. or re-formatted to adjust their Defect Managment.
This function usually returns while the drive is still in the process This function usually returns while the drive is still in the process
of formatting. The formatting is done, when burn_drive_get_status() of formatting. The formatting is done, when burn_drive_get_status()

View File

@ -151,6 +151,8 @@ struct burn_feature_descr {
*/ */
unsigned char data_lenght; unsigned char data_lenght;
/* Additional bytes after the first 4 bytes of the descriptor */
unsigned char *data; unsigned char *data;
struct burn_feature_descr *next; struct burn_feature_descr *next;