Introduced API for inspection and selection of format capacities
This commit is contained in:
parent
a426df57d7
commit
07cef29616
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2007.01.13.211425"
|
#define Cdrskin_timestamP "2007.01.13.211639"
|
||||||
|
@ -277,6 +277,8 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
|
|||||||
0, 0);
|
0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (flag & 128) /* application prescribed format type */
|
||||||
|
flag |= 16; /* enforce re-format */
|
||||||
|
|
||||||
if (drive->current_profile == 0x14)
|
if (drive->current_profile == 0x14)
|
||||||
ok = 1; /* DVD-RW sequential */
|
ok = 1; /* DVD-RW sequential */
|
||||||
|
@ -475,7 +475,7 @@ void burn_disc_erase_sync(struct burn_drive *d, int fast)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
@param flag: bit0 = fill formatted size with zeros
|
@param flag: bit0 = fill formatted size with zeros
|
||||||
bit1, bit2 , bit4 are for d->format_unit()
|
bit1, bit2 , bit4, bit7 - bit15 are for d->format_unit()
|
||||||
*/
|
*/
|
||||||
void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
|
void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
|
||||||
{
|
{
|
||||||
@ -484,20 +484,6 @@ void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
|
|||||||
char msg[80];
|
char msg[80];
|
||||||
struct buffer buf;
|
struct buffer buf;
|
||||||
|
|
||||||
/*
|
|
||||||
#define Libburn_format_ignore_sizE 1
|
|
||||||
*/
|
|
||||||
#ifdef Libburn_format_ignore_sizE
|
|
||||||
size = 0;
|
|
||||||
#else
|
|
||||||
stages = 1 + ((flag & 1) && size > 1024 * 1024);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
d->cancel = 0;
|
|
||||||
d->busy = BURN_DRIVE_FORMATTING;
|
|
||||||
ret = d->format_unit(d, size, flag & 0x16); /* forward bits 1,2,4 */
|
|
||||||
if (ret <= 0)
|
|
||||||
d->cancel = 1;
|
|
||||||
/* reset the progress */
|
/* reset the progress */
|
||||||
d->progress.session = 0;
|
d->progress.session = 0;
|
||||||
d->progress.sessions = 1;
|
d->progress.sessions = 1;
|
||||||
@ -508,6 +494,12 @@ void burn_disc_format_sync(struct burn_drive *d, off_t size, int flag)
|
|||||||
d->progress.start_sector = 0;
|
d->progress.start_sector = 0;
|
||||||
d->progress.sectors = 0x10000;
|
d->progress.sectors = 0x10000;
|
||||||
d->progress.sector = 0;
|
d->progress.sector = 0;
|
||||||
|
stages = 1 + ((flag & 1) && size > 1024 * 1024);
|
||||||
|
d->cancel = 0;
|
||||||
|
d->busy = BURN_DRIVE_FORMATTING;
|
||||||
|
ret = d->format_unit(d, size, flag & 0xff96); /* forward bits */
|
||||||
|
if (ret <= 0)
|
||||||
|
d->cancel = 1;
|
||||||
|
|
||||||
while (!d->test_unit_ready(d) && d->get_erase_progress(d) == 0)
|
while (!d->test_unit_ready(d) && d->get_erase_progress(d) == 0)
|
||||||
sleep(1);
|
sleep(1);
|
||||||
@ -574,6 +566,44 @@ ex:;
|
|||||||
d->buffer = NULL;
|
d->buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A70112 API */
|
||||||
|
int burn_disc_get_formats(struct burn_drive *d, int *status, off_t *size,
|
||||||
|
unsigned *bl_sas, int *num_formats)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
*status = 0;
|
||||||
|
*size = 0;
|
||||||
|
*bl_sas = 0;
|
||||||
|
*num_formats = 0;
|
||||||
|
ret = d->read_format_capacities(d, 0x00);
|
||||||
|
if (ret <= 0)
|
||||||
|
return 0;
|
||||||
|
*status = d->format_descr_type;
|
||||||
|
*size = d->format_curr_max_size;
|
||||||
|
*bl_sas = d->format_curr_blsas;
|
||||||
|
*num_formats = d->num_format_descr;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A70112 API */
|
||||||
|
int burn_disc_get_format_descr(struct burn_drive *d, int index,
|
||||||
|
int *type, off_t *size, unsigned *tdp)
|
||||||
|
{
|
||||||
|
*type = 0;
|
||||||
|
*size = 0;
|
||||||
|
*tdp = 0;
|
||||||
|
if (index < 0 || index >= d->num_format_descr)
|
||||||
|
return 0;
|
||||||
|
*type = d->format_descriptors[index].type;
|
||||||
|
*size = d->format_descriptors[index].size;
|
||||||
|
*tdp = d->format_descriptors[index].tdp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
enum burn_disc_status burn_disc_get_status(struct burn_drive *d)
|
enum burn_disc_status burn_disc_get_status(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
/* ts A61007 */
|
/* ts A61007 */
|
||||||
|
@ -785,7 +785,7 @@ int burn_disc_track_lba_nwa(struct burn_drive *d, struct burn_write_opts *o,
|
|||||||
/** Tells the MMC Profile identifier of the loaded media. The drive must be
|
/** Tells the MMC Profile identifier of the loaded media. The drive must be
|
||||||
grabbed in order to get a non-zero result.
|
grabbed in order to get a non-zero result.
|
||||||
libburn currently writes only to profiles 0x09 "CD-R", 0x0a "CD-RW",
|
libburn currently writes only to profiles 0x09 "CD-R", 0x0a "CD-RW",
|
||||||
0x13 "DVD-RW restricted overwrite" or 0x1a "DVD+RW".
|
0x12 "DVD-RAM", 0x13 "DVD-RW restricted overwrite" or 0x1a "DVD+RW".
|
||||||
@param d The drive where the media is inserted.
|
@param d The drive where the media is inserted.
|
||||||
@param pno Profile Number as of mmc5r03c.pdf, table 89
|
@param pno Profile Number as of mmc5r03c.pdf, table 89
|
||||||
@param name Profile Name (e.g "CD-RW", unknown profiles have empty name)
|
@param name Profile Name (e.g "CD-RW", unknown profiles have empty name)
|
||||||
@ -842,10 +842,11 @@ void burn_read_opts_free(struct burn_read_opts *opts);
|
|||||||
void burn_disc_erase(struct burn_drive *drive, int fast);
|
void burn_disc_erase(struct burn_drive *drive, int fast);
|
||||||
|
|
||||||
|
|
||||||
/* ts A70101 - A70106 */
|
/* ts A70101 - A70112 */
|
||||||
/** Format media for use with libburn. This currently applies only 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).
|
state "Restricted Overwrite" (profile 0013h). DVD+RW can be "de-iced"
|
||||||
|
by setting bit2 of flag. Other media cannot be formatted yet.
|
||||||
@param drive The drive with the disc to format.
|
@param drive The drive with the disc to format.
|
||||||
@param size The size in bytes to be used with the format command. It should
|
@param size The size in bytes to be used with the format command. It should
|
||||||
be divisible by 32*1024. The effect of this parameter may
|
be divisible by 32*1024. The effect of this parameter may
|
||||||
@ -857,10 +858,61 @@ void burn_disc_erase(struct burn_drive *drive, int fast);
|
|||||||
bit2= format to maximum available size
|
bit2= format to maximum available size
|
||||||
bit3= -reserved-
|
bit3= -reserved-
|
||||||
bit4= enforce re-format of (partly) formatted media
|
bit4= enforce re-format of (partly) formatted media
|
||||||
|
bit7= MMC expert application mode (else libburn tries to
|
||||||
|
choose a suitable format type):
|
||||||
|
bit8 to bit15 contain the index of the format to use. See
|
||||||
|
burn_disc_get_formats(), burn_disc_get_format_descr().
|
||||||
|
Acceptable types are: 0x00, 0x10, 0x11, 0x13, 0x15, 0x26.
|
||||||
|
If bit7 is set, bit4 is set automatically.
|
||||||
*/
|
*/
|
||||||
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
|
void burn_disc_format(struct burn_drive *drive, off_t size, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A70112 */
|
||||||
|
/** Possible formatting status values */
|
||||||
|
#define BURN_FORMAT_IS_UNFORMATTED 1
|
||||||
|
#define BURN_FORMAT_IS_FORMATTED 2
|
||||||
|
#define BURN_FORMAT_IS_UNKNOWN 3
|
||||||
|
|
||||||
|
/** Inquire the formatting status, the associated sizes and the number of
|
||||||
|
available formats. The info is media specific and stems from MMC command
|
||||||
|
23h READ FORMAT CAPACITY. See mmc5r03c.pdf 6.24 for background details.
|
||||||
|
Media type can be determined via burn_disc_get_profile().
|
||||||
|
@param drive The drive with the disc to format.
|
||||||
|
@param status The current formatting status of the inserted media.
|
||||||
|
See BURN_FORMAT_IS_* macros. Note: "unknown" is the
|
||||||
|
legal status for quick formatted, yet unwritten DVD-RW.
|
||||||
|
@param size The size in bytes associated with status.
|
||||||
|
unformatted: the maximum achievable size of the media
|
||||||
|
formatted: the currently formatted capacity
|
||||||
|
unknown: maximum capacity of drive or of media
|
||||||
|
@param bl_sas Additional info "Block Length/Spare Area Size".
|
||||||
|
Expected to be constantly 2048 for non-BD media.
|
||||||
|
@param num_formats The number of available formats. To be used with
|
||||||
|
burn_disc_get_format_descr() to obtain such a format
|
||||||
|
and eventually with burn_disc_format() to select one.
|
||||||
|
@return 1 reply is valid , <=0 failure
|
||||||
|
*/
|
||||||
|
int burn_disc_get_formats(struct burn_drive *drive, int *status, off_t *size,
|
||||||
|
unsigned *bl_sas, int *num_formats);
|
||||||
|
|
||||||
|
/** Inquire parameters of an available media format.
|
||||||
|
@param drive The drive with the disc to format.
|
||||||
|
@param index The index of the format item. Beginning with 0 up to reply
|
||||||
|
parameter from burn_disc_get_formats() : num_formats - 1
|
||||||
|
@param type The format type. See mmc5r03c.pdf, 6.5, 04h FORMAT UNIT.
|
||||||
|
0x00=full, 0x10=CD-RW/DVD-RW full, 0x11=CD-RW/DVD-RW grow,
|
||||||
|
0x15=DVD-RW quick, 0x13=DVD-RW quick grow,
|
||||||
|
0x26=DVD+RW background
|
||||||
|
@param size The maximum size in bytes achievable with this format.
|
||||||
|
@param tdp Type Dependent Parameter. See mmc5r03c.pdf.
|
||||||
|
@return 1 reply is valid , <=0 failure
|
||||||
|
*/
|
||||||
|
int burn_disc_get_format_descr(struct burn_drive *drive, int index,
|
||||||
|
int *type, off_t *size, unsigned *tdp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ts A61109 : this was and is defunct */
|
/* ts A61109 : this was and is defunct */
|
||||||
/** Read a disc from the drive and write it to an fd pair. The drive must be
|
/** Read a disc from the drive and write it to an fd pair. The drive must be
|
||||||
grabbed successfully BEFORE calling this function. Always ensure that the
|
grabbed successfully BEFORE calling this function. Always ensure that the
|
||||||
@ -1156,11 +1208,11 @@ void burn_write_opts_set_multi(struct burn_write_opts *opts, int multi);
|
|||||||
|
|
||||||
/* ts A61222 */
|
/* ts A61222 */
|
||||||
/** Sets a start address for writing to media and write modes which allow to
|
/** Sets a start address for writing to media and write modes which allow to
|
||||||
choose this address at all (DVD+-RW only for now). The address is given in
|
choose this address at all (DVD+RW, DVD-RAM, DVD-RW only for now). The
|
||||||
bytes. If it is not -1 then a write run will fail if choice of start
|
address is given in bytes. If it is not -1 then a write run will fail if
|
||||||
address is not supported or if the block alignment of the address is not
|
choice of start address is not supported or if the block alignment of the
|
||||||
suitable for media and write mode. (Alignment to 32 kB blocks is advised
|
address is not suitable for media and write mode. (Alignment to 32 kB
|
||||||
with DVD media.)
|
blocks is advised with DVD media.)
|
||||||
@param opts The write opts to change
|
@param opts The write opts to change
|
||||||
@param value The address in bytes (-1 = start at default address)
|
@param value The address in bytes (-1 = start at default address)
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user