From 5ff9e12a2771ffa9d7aec4142bd9ddd507b46539 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 20 Sep 2024 18:21:29 +0200 Subject: [PATCH] New API call burn_drive_release_v2() --- cdrskin/cdrskin_timestamp.h | 2 +- libburn/drive.c | 17 +++++++++++++---- libburn/libburn.h | 19 ++++++++++++++++++- libburn/libburn.ver | 1 + 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 0c95fa1..2b8c2d0 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2024.09.15.141244" +#define Cdrskin_timestamP "2024.09.20.162105" diff --git a/libburn/drive.c b/libburn/drive.c index f48d4b6..86785d4 100644 --- a/libburn/drive.c +++ b/libburn/drive.c @@ -686,9 +686,10 @@ int burn_drive_mark_unready(struct burn_drive *d, int flag) } -/* ts A70918 : outsourced from burn_drive_release() and enhanced */ +/* ts A70918-C40918 : outsourced from burn_drive_release() and enhanced */ /** @param flag bit0-2 = mode : 0=unlock , 1=unlock+eject , 2=leave locked - bit3= do not call d->release() + bit3= do not calm drive and do not call d->release() + bit4= do not calm drive (@since 1.5.8) */ int burn_drive_release_fl(struct burn_drive *d, int flag) { @@ -719,10 +720,10 @@ int burn_drive_release_fl(struct burn_drive *d, int flag) d->unlock(d); if ((flag & 7) == 1) d->eject(d); - if (!(flag & 8)) { + if (!(flag & (8 | 16))) burn_drive_snooze(d, 0); + if (!(flag & 8)) d->release(d); - } } d->needs_sync_cache = 0; /* just to be sure */ @@ -765,6 +766,14 @@ void burn_drive_release(struct burn_drive *d, int le) } +/* API */ +/* ts C40918 */ +int burn_drive_release_v2(struct burn_drive *d, int flag) +{ + return burn_drive_release_fl(d, flag & 0x17); +} + + /* ts B11002 */ /* API */ int burn_drive_re_assess(struct burn_drive *d, int flag) diff --git a/libburn/libburn.h b/libburn/libburn.h index a55a6bf..3032302 100644 --- a/libburn/libburn.h +++ b/libburn/libburn.h @@ -1269,6 +1269,23 @@ int burn_drive_re_assess(struct burn_drive *d, int flag); void burn_drive_release(struct burn_drive *drive, int eject); +/* ts C40918 */ +/** Release a drive like with burn_drive_release() or burn_drive_leave_locked() + but with the additional option not to calm down the drive. + @param drive The drive to release. + @param flag Bitfield for control purposes: + bit0-2= mode + 0= unlock + 1= unlock+eject + 2= leave locked + bit3= reserved, submit 0 + bit4= do not calm drive + @return 1 means success, <=0 means failure + @since 1.5.8 +*/ +int burn_drive_release_v2(struct burn_drive *d, int flag); + + /* 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 @@ -4252,7 +4269,7 @@ int burn_random_access_write(struct burn_drive *d, off_t byte_address, int burn_get_read_capacity(struct burn_drive *d, int *capacity, int flag); /* ts C40303 */ -/** Like burn_get_read_capacity(), but with off_t result. +/** Like burn_get_read_capacity(), but with uncurbed off_t result. @since 1.5.8 */ int burn_get_read_capacity_v2(struct burn_drive *d, off_t *capacity, int flag); diff --git a/libburn/libburn.ver b/libburn/libburn.ver index 608de3e..0b3fe18 100644 --- a/libburn/libburn.ver +++ b/libburn/libburn.ver @@ -218,6 +218,7 @@ LIBBURN4_1.5.8 { burn_disc_get_sectors_v2; burn_disc_track_lba_nwa_v2; burn_drive_get_status_v2; +burn_drive_release_v2; burn_get_read_capacity_v2; burn_session_get_sectors_v2; burn_track_get_sectors_v2;