Introduced API functions burn_drive_scan_and_grab() burn_drive_get_adr()
This commit is contained in:
parent
377756a52a
commit
d6df47920e
@ -415,9 +415,48 @@ int burn_drive_is_banned(char *device_address)
|
|||||||
int burn_drive_is_open(struct burn_drive *d)
|
int burn_drive_is_open(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
/* a bit more detailed case distinction than needed */
|
/* a bit more detailed case distinction than needed */
|
||||||
if(d->fd == -1337)
|
if (d->fd == -1337)
|
||||||
return 0;
|
return 0;
|
||||||
if(d->fd < 0)
|
if (d->fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ts A60823 */
|
||||||
|
/** Aquire a drive with known persistent address.
|
||||||
|
*/
|
||||||
|
int burn_drive_scan_and_grab(struct burn_drive_info *drives[], char* adr,
|
||||||
|
int load)
|
||||||
|
{
|
||||||
|
unsigned int n_drives;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
burn_drive_clear_whitelist();
|
||||||
|
burn_drive_add_whitelist(adr);
|
||||||
|
while (!burn_drive_scan(drives, &n_drives));
|
||||||
|
if (n_drives <= 0)
|
||||||
|
return 0;
|
||||||
|
if (load) {
|
||||||
|
/* RIP-14.5 + LITE-ON 48125S produce a false status
|
||||||
|
if tray was unloaded */
|
||||||
|
/* Therefore the first grab is just for loading */
|
||||||
|
ret= burn_drive_grab(drives[0]->drive, 1);
|
||||||
|
if (ret != 1)
|
||||||
|
return -1;
|
||||||
|
burn_drive_release(drives[0]->drive,0);
|
||||||
|
}
|
||||||
|
ret = burn_drive_grab(drives[0]->drive, load);
|
||||||
|
if (ret != 1)
|
||||||
|
return -1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ts A60823 */
|
||||||
|
/** Inquire the persistent address of the given drive. */
|
||||||
|
int burn_drive_get_adr(struct burn_drive_info *drive, char adr[])
|
||||||
|
{
|
||||||
|
assert(strlen(drive->location) < BURN_DRIVE_ADR_LEN);
|
||||||
|
strcpy(adr,drive->location);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -469,6 +469,38 @@ struct burn_message* burn_get_message(void);
|
|||||||
/** Frees a burn_message structure */
|
/** Frees a burn_message structure */
|
||||||
void burn_message_free(struct burn_message *msg);
|
void burn_message_free(struct burn_message *msg);
|
||||||
|
|
||||||
|
/* ts A60823 */
|
||||||
|
/** Aquire a drive with known persistent address.This is the sysadmin friendly
|
||||||
|
way to open one drive and to leave all others untouched. It bundles
|
||||||
|
the following API calls to form a non-obtrusive way to use libburn:
|
||||||
|
burn_drive_add_whitelist() , burn_drive_scan() , burn_drive_grab()
|
||||||
|
You are *strongly urged* to use this call whenever you know the drive
|
||||||
|
address in advance.
|
||||||
|
If not, then you have to use directly above calls. In that case, you are
|
||||||
|
*strongly urged* to end the libburn session as soon as possible,
|
||||||
|
including a call to burn_finish(). This is to release any unintended
|
||||||
|
drive which might get exclusively occupied and not released by
|
||||||
|
burn_drive_scan().
|
||||||
|
You may start a new libburn session and should then use the function
|
||||||
|
described here with an address obtained after burn_drive_scan() via
|
||||||
|
a call of burn_drive_get_adr(&(drives[driveno]), adr) .
|
||||||
|
@param drives On success returns a one element array with the drive
|
||||||
|
(cdrom/burner). Thus use with driveno 0 only. On failure
|
||||||
|
the array has no valid elements at all.
|
||||||
|
The returned array should be freed via burn_drive_info_free()
|
||||||
|
when it is no longer needed, and before calling a scan
|
||||||
|
function again.
|
||||||
|
This is a result from call burn_drive_scan(). See there.
|
||||||
|
Use with driveno 0 only.
|
||||||
|
@param adr The persistent address of the desired drive. Either obtained
|
||||||
|
by burn_drive_get_adr() or guessed skillfully by application
|
||||||
|
resp. its user.
|
||||||
|
@param load Nonzero to make the drive attempt to load a disc (close its
|
||||||
|
tray door, etc).
|
||||||
|
@return 1 = success , 0 = drive not found , -1 = other error
|
||||||
|
*/
|
||||||
|
int burn_drive_scan_and_grab(struct burn_drive_info *drives[], char* adr,
|
||||||
|
int load);
|
||||||
|
|
||||||
/* ts A51221 */
|
/* ts A51221 */
|
||||||
/** Maximum number of particularly permissible drive addresses */
|
/** Maximum number of particularly permissible drive addresses */
|
||||||
@ -495,11 +527,24 @@ void burn_drive_clear_whitelist(void);
|
|||||||
*/
|
*/
|
||||||
int burn_drive_scan(struct burn_drive_info *drives[],
|
int burn_drive_scan(struct burn_drive_info *drives[],
|
||||||
unsigned int *n_drives);
|
unsigned int *n_drives);
|
||||||
|
|
||||||
/** Frees a burn_drive_info array returned by burn_drive_scan
|
/** Frees a burn_drive_info array returned by burn_drive_scan
|
||||||
@param info The array to free
|
@param info The array to free
|
||||||
*/
|
*/
|
||||||
void burn_drive_info_free(struct burn_drive_info *info);
|
void burn_drive_info_free(struct burn_drive_info *info);
|
||||||
|
|
||||||
|
/* ts A60823 */
|
||||||
|
/** Maximum length+1 to expect with a persistent drive address string */
|
||||||
|
#define BURN_DRIVE_ADR_LEN 1024
|
||||||
|
|
||||||
|
/** Inquire the persistent address of the given drive.
|
||||||
|
@param drive The drive to inquire. Usually some &(drives[driveno])
|
||||||
|
@param adr An application provided array of at least BURN_DRIVE_ADR_LEN
|
||||||
|
characters size. The persistent address gets copied to it.
|
||||||
|
*/
|
||||||
|
int burn_drive_get_adr(struct burn_drive_info *drive, char adr[]);
|
||||||
|
|
||||||
|
|
||||||
/** Grab a drive. This must be done before the drive can be used (for reading,
|
/** Grab a drive. This must be done before the drive can be used (for reading,
|
||||||
writing, etc). It may be neccesary to call this function more than once
|
writing, etc). It may be neccesary to call this function more than once
|
||||||
to grab a drive. See burn_grab for details.
|
to grab a drive. See burn_grab for details.
|
||||||
|
Loading…
Reference in New Issue
Block a user