Enabled writing to DVD-RAM

This commit is contained in:
Thomas Schmitt 2007-01-12 16:26:31 +00:00
parent c5a6042af8
commit 6e3e02ddf9
6 changed files with 64 additions and 31 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "January 2, 2007"
.TH CDRSKIN 1 "January 12, 2007"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -16,7 +16,8 @@
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
cdrskin \- burns preformatted data to CD-R, CD-RW or DVD+/-RW via libburn.
cdrskin \- burns preformatted data to CD-R, CD-RW, DVD+/-RW, DVD-RAM
via libburn.
.SH SYNOPSIS
.B cdrskin
.RI [ options | track_source_addresses ]
@ -45,7 +46,7 @@ Multi session on CD (follow-up sessions in TAO only).
.br
Bus scan, burnfree, speed options, retrieving media info, padding, fifo.
.br
Burning of a single data track to DVD+RW or DVD-RW.
Burning of a single data track to DVD+RW, DVD-RW or DVD-RAM.
.br
See section EXAMPLES at the end of this text.
.PP
@ -107,17 +108,18 @@ Multiple cycles of blanking and overwriting with random numbers might be.
.PP
.B Recordable DVD Media:
.br
Currently only types DVD+RW and DVD-RW can be burned via cdrskin.
Currently only types DVD+RW, DVD-RW and DVD-RAM can be burned via cdrskin.
.br
DVD+RW media get treated as blank media regardless wether they hold data
or not. Options -audio and -multi are not allowed. Only one track is allowed.
DVD+RW and DVD-RAM media get treated as blank media regardless wether they
hold data or not. They need no special initial formatting.
Options -audio and -multi are not allowed. Only one track is allowed.
-toc does not return information about the media content.
Speed is counted in DVD units (i.e. 1x = 1,385,000 bytes/second). Currently
there is no difference between -sao and -tao. If ever, then -tao will be the
mode which preserves the current behavior.
.br
DVD-RW need to be formatted to state "Restricted Overwrite". They then behave
much like CD-RW. This formatting can be done by option
DVD-RW need to be formatted to state "Restricted Overwrite". Then they behave
much like DVD+RW. This formatting can be done by option
.B blank=format_overwrite
It is necessary for unused media, for media written or blanked by cdrecord,
for media which have been written unformatted by growisofs or blanked by
@ -478,8 +480,10 @@ interpretation of eventual startup files. See section FILES below.
Accept only the last argument of the command line as track source address.
.TP
.BI write_start_address= byte_offset
Set the address on media where to start writing the track. With DVD+RW
byte_offset must be aligned to 2 KB blocks. With DVD-RW alignment is 32 kB.
Set the address on media where to start writing the track. With DVD+RW or
DVD-RAM byte_offset must be aligned to 2 KB blocks, but better is 32 kB.
With DVD-RW 32 kB alignment is mandatory.
.br
Other media are not suitable for this option yet.
.PP
Alphabetical list of options which are only intended for very special

View File

@ -3808,10 +3808,15 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
printf("Current: CD-R\n");
}
if(strstr(profile_name,"DVD")==profile_name) {
/* These are dummy messages for project scdbackup, so its media recognition
gets a hint that the media is suitable and not in need of blanking.
scdbackup will learn to interpret cdrskin's DVD messages but the
current stable version needs to believe it is talking to its own
growisofs_wrapper. So this is an emulation of an emulator.
*/
printf("book type: %s (emulated booktype)\n", profile_name);
if(profile_number==0x13)
printf(
"cdrskin: for sdvdbackup: \"(growisofs mode Restricted Overwrite)\"\n");
if(profile_number==0x13) /* DVD-RW */
printf("cdrskin: message for sdvdbackup: \"(growisofs mode Restricted Overwrite)\"\n");
} else {
printf("ATIP info from disk:\n");
if(burn_disc_erasable(drive)) {
@ -4443,8 +4448,9 @@ int Cdrskin_activate_write_mode(struct CdrskiN *skin, enum burn_disc_status s,
if(s == BURN_DISC_APPENDABLE) {
strcpy(skin->preskin->write_mode_name,"TAO");
was_still_default= 2; /*<<< prevents trying of SAO if drive dislikes TAO*/
} else if(strstr(profile_name,"DVD+RW")==profile_name ||
profile_number == 0x13) { /* DVD-RW Restricted Overwrite */
} else if(profile_number==0x1a || profile_number==0x13 ||
profile_number==0x12) {
/* DVD+RW , DVD-RW Restricted Overwrite , DVD-RAM */
strcpy(skin->preskin->write_mode_name,"TAO");
} else {
strcpy(skin->preskin->write_mode_name,"SAO");

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2007.01.11.131716"
#define Cdrskin_timestamP "2007.01.12.162239"

View File

@ -38,10 +38,12 @@ extern struct libdax_msgs *libdax_messenger;
#define Libburn_support_dvd_plus_rW 1
/* ts A61229 */
/*
*/
#define Libburn_support_dvd_minusrw_overW 1
/* ts A70112 */
#define Libburn_support_dvd_raM 1
/* Progress report (with Libburn_support_dvd_plus_rW defined):
ts A61219 : It seems to work with a used (i.e. thoroughly formatted) DVD+RW.
Error messages of class DEBUG appear because of inability to
@ -62,6 +64,7 @@ extern struct libdax_msgs *libdax_messenger;
really seems to work without such a page.
ts A70101 : Formatted DVD-RW media. Success is varying with media, but
dvd+rw-format does not do better with the same media.
ts A70112 : Support for writing to DVD-RAM.
Todo:
Determine first free lba for appending data.
@ -167,8 +170,9 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa)
memcpy(c.opcode, MMC_TRACK_INFO, sizeof(MMC_TRACK_INFO));
c.opcode[1] = 1;
if(trackno<=0) {
if (d->current_profile == 0x1a || d->current_profile == 0x13)
/* DVD+RW or DVD-RW restricted overwrite*/
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12 )
/* DVD+RW , DVD-RW restricted overwrite , DVD-RAM */
c.opcode[5] = 1;
else /* mmc5r03c.pdf: valid only for CD, DVD+R, DVD+R DL */
c.opcode[5] = 0xFF;
@ -610,10 +614,13 @@ void mmc_read_disc_info(struct burn_drive *d)
*/
d->bg_format_status = data[7] & 3;
/* ts A61219 : preliminarily declare all DVD+RW blank,
(which is not the same as bg_format_status==0 "blank") */
/* ts A61229 : same for DVD-RW Restricted overwrite */
if (d->current_profile == 0x1a || d->current_profile == 0x13)
/* Preliminarily declare blank:
ts A61219 : DVD+RW (is not bg_format_status==0 "blank")
ts A61229 : same for DVD-RW Restricted overwrite
ts A70112 : same for DVD-RAM
*/
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12)
d->status = BURN_DISC_BLANK;
}
@ -1101,6 +1108,10 @@ void mmc_get_configuration(struct burn_drive *d)
if (cp == 0x13)
d->current_is_supported_profile = 1;
#endif
#ifdef Libburn_support_dvd_raM
if (cp == 0x12)
d->current_is_supported_profile = 1;
#endif
/* >>> see mmc5r03c.pdf 5.2
Interpret list of profile and feature descriptors.

View File

@ -434,6 +434,10 @@ void spc_getcaps(struct burn_drive *d)
spc_inquiry(d);
spc_sense_caps(d);
spc_sense_error_params(d);
/* <<< for debugging. >>> ??? to be fixely included here ?
mmc_read_format_capacities(d, -1);
*/
}
/*

View File

@ -918,7 +918,8 @@ int burn_dvd_write_session(struct burn_write_opts *o,
if (ret <= 0)
break;
}
if (strcmp(d->current_profile_text,"DVD+RW")==0) {
if (d->current_profile == 0x1a) {
/* DVD+RW */
ret = burn_disc_close_session_dvd_plus_rw(o, s);
if (ret <= 0)
return 0;
@ -927,6 +928,9 @@ int burn_dvd_write_session(struct burn_write_opts *o,
ret = burn_disc_close_session_dvd_minus_rw(o, s);
if (ret <= 0)
return 0;
} else if (d->current_profile == 0x12) {
/* DVD-RAM */
/* ??? any finalization needed ? */;
}
return 1;
}
@ -1056,13 +1060,14 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
goto early_failure;
}
if (d->current_profile == 0x1a || d->current_profile == 0x13) {
/* DVD+RW or DVD-RW Restricted Overwrite */
if (d->current_profile == 0x1a || d->current_profile == 0x13 ||
d->current_profile == 0x12) {
/* DVD+RW , DVD-RW Restricted Overwrite , DVD-RAM */
if (disc->sessions!=1 || disc->session[0]->tracks>1
|| o->multi ) {
sprintf(msg,
"Burning is restricted to a single track and no multi-session"
);
"Burning is restricted to a single track and no multi-session on %s",
d->current_profile_text);
libdax_msgs_submit(libdax_messenger, d->global_index,
0x0002011f,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
@ -1070,7 +1075,8 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
goto early_failure;
}
}
if (d->current_profile == 0x1a) { /* DVD+RW */
if (d->current_profile == 0x1a || d->current_profile == 0x12) {
/* DVD+RW , DVD-RAM */
if (o->start_byte >= 0 && (o->start_byte % 2048)) {
sprintf(msg,
"Write start address not properly aligned to 2048");
@ -1080,6 +1086,8 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
msg, 0,0);
goto early_failure;
}
ret = 1;
if (d->current_profile == 0x1a)
ret = burn_disc_setup_dvd_plus_rw(o, disc);
if (ret <= 0) {
sprintf(msg,