New API function burn_drive_leave_locked()
This commit is contained in:
parent
f17d3c9c18
commit
61b112f45a
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2007.09.18.072234"
|
#define Cdrskin_timestamP "2007.09.18.090713"
|
||||||
|
@ -114,6 +114,8 @@ void burn_drive_free_all(void)
|
|||||||
/* ts A60822 */
|
/* ts A60822 */
|
||||||
int burn_drive_is_open(struct burn_drive *d)
|
int burn_drive_is_open(struct burn_drive *d)
|
||||||
{
|
{
|
||||||
|
if (d->drive_role != 1)
|
||||||
|
return (d->stdio_fd >= 0);
|
||||||
/* ts A61021 : moved decision to sg.c */
|
/* ts A61021 : moved decision to sg.c */
|
||||||
return d->drive_is_open(d);
|
return d->drive_is_open(d);
|
||||||
}
|
}
|
||||||
@ -421,7 +423,10 @@ int burn_drive_mark_unready(struct burn_drive *d)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void burn_drive_release(struct burn_drive *d, int le)
|
/* ts A70918 : outsourced from burn_drive_release() and enhanced */
|
||||||
|
/** @param flag bit0-2 = mode : 0=unlock , 1=unlock+eject , 2=leave locked
|
||||||
|
*/
|
||||||
|
int burn_drive_release_fl(struct burn_drive *d, int flag)
|
||||||
{
|
{
|
||||||
if (d->released) {
|
if (d->released) {
|
||||||
/* ts A61007 */
|
/* ts A61007 */
|
||||||
@ -430,7 +435,7 @@ void burn_drive_release(struct burn_drive *d, int le)
|
|||||||
d->global_index, 0x00020105,
|
d->global_index, 0x00020105,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Drive is already released", 0, 0);
|
"Drive is already released", 0, 0);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ts A61007 */
|
/* ts A61007 */
|
||||||
@ -441,12 +446,13 @@ void burn_drive_release(struct burn_drive *d, int le)
|
|||||||
d->global_index, 0x00020106,
|
d->global_index, 0x00020106,
|
||||||
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
|
||||||
"Drive is busy on attempt to close", 0, 0);
|
"Drive is busy on attempt to close", 0, 0);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->drive_role == 1) {
|
if (d->drive_role == 1) {
|
||||||
|
if ((flag & 7) != 2)
|
||||||
d->unlock(d);
|
d->unlock(d);
|
||||||
if (le)
|
if ((flag & 7) == 1)
|
||||||
d->eject(d);
|
d->eject(d);
|
||||||
d->release(d);
|
d->release(d);
|
||||||
}
|
}
|
||||||
@ -455,9 +461,24 @@ void burn_drive_release(struct burn_drive *d, int le)
|
|||||||
|
|
||||||
/* ts A61125 : outsourced model aspects */
|
/* ts A61125 : outsourced model aspects */
|
||||||
burn_drive_mark_unready(d);
|
burn_drive_mark_unready(d);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* API */
|
||||||
|
void burn_drive_release(struct burn_drive *d, int le)
|
||||||
|
{
|
||||||
|
burn_drive_release_fl(d, !!le);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A70918 */
|
||||||
|
/* API */
|
||||||
|
int burn_drive_leave_locked(struct burn_drive *d, int flag)
|
||||||
|
{
|
||||||
|
return burn_drive_release_fl(d, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ts A61007 : former void burn_wait_all() */
|
/* ts A61007 : former void burn_wait_all() */
|
||||||
/* @param flag bit0= demand freed drives (else released drives) */
|
/* @param flag bit0= demand freed drives (else released drives) */
|
||||||
|
@ -829,13 +829,25 @@ int burn_drive_grab(struct burn_drive *drive, int load);
|
|||||||
|
|
||||||
/** Release a drive. This should not be done until the drive is no longer
|
/** Release a drive. This should not be done until the drive is no longer
|
||||||
busy (see burn_drive_get_status).
|
busy (see burn_drive_get_status).
|
||||||
Linux: The drive is unlocked afterwards. (O_EXCL , F_SETLK).
|
Linux: The drive device file is not reserved afterwards. (O_EXCL, F_SETLK).
|
||||||
@param drive The drive to release.
|
@param drive The drive to release.
|
||||||
@param eject Nonzero to make the drive eject the disc in it.
|
@param eject Nonzero to make the drive eject the disc in it.
|
||||||
*/
|
*/
|
||||||
void burn_drive_release(struct burn_drive *drive, int eject);
|
void burn_drive_release(struct burn_drive *drive, int eject);
|
||||||
|
|
||||||
|
|
||||||
|
/* ts A70918 */
|
||||||
|
/** Like burn_drive_release() but keeping the drive tray closed and its
|
||||||
|
eject button disabled. This physically locked drive state will last until
|
||||||
|
the drive is grabbed again and released via burn_drive_release().
|
||||||
|
Programs like eject, cdrecord, growisofs will break that ban too.
|
||||||
|
@param drive The drive to release and leave locked.
|
||||||
|
@param flag Bitfield for control purposes (unused yet, submit 0)
|
||||||
|
@return 1 means success, <=0 means failure
|
||||||
|
*/
|
||||||
|
int burn_drive_leave_locked(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
|
|
||||||
/** Returns what kind of disc a drive is holding. This function may need to be
|
/** Returns what kind of disc a drive is holding. This function may need to be
|
||||||
called more than once to get a proper status from it. See burn_disc_status
|
called more than once to get a proper status from it. See burn_disc_status
|
||||||
for details.
|
for details.
|
||||||
|
Loading…
Reference in New Issue
Block a user