New parameter "leave" to command -calm_drive

This commit is contained in:
Thomas Schmitt 2024-09-20 18:36:45 +02:00
parent 37c8b3f9e7
commit b1d1edcf05
9 changed files with 124 additions and 85 deletions

View File

@ -803,7 +803,7 @@ ex:
*/ */
int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag) int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
{ {
int in_is_out_too, ret, do_eject; int in_is_out_too, ret, do_eject, no_calm= 0;
struct burn_drive_info *dinfo; struct burn_drive_info *dinfo;
struct burn_drive *drive; struct burn_drive *drive;
@ -817,6 +817,9 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
flag|= 3; /* give up in/out drive to eject it */ flag|= 3; /* give up in/out drive to eject it */
} }
if(xorriso->do_calm_drive & 2)
no_calm= 16;
if((flag&1) && xorriso->in_drive_handle != NULL) { if((flag&1) && xorriso->in_drive_handle != NULL) {
Xorriso_get_drive_handles(xorriso, &dinfo, &drive, Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
"on attempt to give up drive", 0); "on attempt to give up drive", 0);
@ -830,7 +833,7 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
do_eject= 0; do_eject= 0;
} }
if(drive!=NULL) if(drive!=NULL)
isoburn_drive_release(drive, do_eject); isoburn_drive_release_v2(drive, (do_eject << 1) | no_calm);
if(dinfo!=NULL) if(dinfo!=NULL)
burn_drive_info_free(dinfo); burn_drive_info_free(dinfo);
} }

View File

@ -1565,13 +1565,21 @@ int Xorriso_option_calm_drive(struct XorrisO *xorriso, char *which, int flag)
else if(strcmp(which,"out")==0) else if(strcmp(which,"out")==0)
gu_flag= 2; gu_flag= 2;
else if(strcmp(which,"on")==0) { else if(strcmp(which,"on")==0) {
xorriso->do_calm_drive&= ~2;
xorriso->do_calm_drive|= 1; xorriso->do_calm_drive|= 1;
} else if(strcmp(which,"off")==0) { } else if(strcmp(which,"off")==0) {
xorriso->do_calm_drive&= ~1; xorriso->do_calm_drive&= ~3;
} else if(strcmp(which,"revoke")==0) { } else if(strcmp(which,"revoke")==0) {
gu_flag= 7; gu_flag= 7;
} else } else if(strcmp(which, "leave") == 0) {
xorriso->do_calm_drive&= ~1;
xorriso->do_calm_drive|= 2;
} else {
/* "all" and any unrecognized which-parameter */
gu_flag= 3; gu_flag= 3;
}
if((gu_flag & 3) == 0)
return(1);
ret= Xorriso_drive_snooze(xorriso, gu_flag); ret= Xorriso_drive_snooze(xorriso, gu_flag);
return(ret); return(ret);
} }
@ -1835,8 +1843,9 @@ int Xorriso_option_chattri(struct XorrisO *xorriso, char *chattr_text,
/* Try out whether this file is suitable for chattr */ /* Try out whether this file is suitable for chattr */
ret= Xorriso_set_lfa_flags(xorriso, NULL, optv[i], chattr_text, ret= Xorriso_set_lfa_flags(xorriso, NULL, optv[i], chattr_text,
lfa_flags, operator, 1 | 8); lfa_flags, operator, 1 | 8);
if(ret <= 0 || ret == 2) if(ret <= 0)
goto partial_failure; goto partial_failure;
ret= Findjob_new(&job, optv[i], 0); ret= Findjob_new(&job, optv[i], 0);
if(ret<=0) { if(ret<=0) {
Xorriso_no_findjob(xorriso, "-chattr_r", 0); Xorriso_no_findjob(xorriso, "-chattr_r", 0);

View File

@ -1952,7 +1952,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" [:\"emul_wide\"|\"emul_narrow\"]", " [:\"emul_wide\"|\"emul_narrow\"]",
" Enable scanning for ISO sessions on read-only drives/media", " Enable scanning for ISO sessions on read-only drives/media",
" and on overwritable media with emulated TOC.", " and on overwritable media with emulated TOC.",
" -calm_drive \"in\"|\"out\"|\"all\"|\"on\"|\"off\"", " -calm_drive \"in\"|\"out\"|\"all\"|\"on\"|\"off\"|\"leave\"",
" Reduce drive noise until it gets actually used again.", " Reduce drive noise until it gets actually used again.",
" -assert_volid pattern severity", " -assert_volid pattern severity",
" Accept input image only if its volume id matches pattern.", " Accept input image only if its volume id matches pattern.",

View File

@ -3708,8 +3708,12 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults)) if(!(is_default && no_defaults))
Xorriso_status_result(xorriso, filter, fp, flag & 2); Xorriso_status_result(xorriso, filter, fp, flag & 2);
is_default= (xorriso->do_calm_drive & 1); is_default= ((xorriso->do_calm_drive & 3) == 1);
sprintf(line,"-calm_drive %s\n", xorriso->do_calm_drive & 1 ? "on" : "off"); if(xorriso->do_calm_drive & 2) {
sprintf(line, "-calm_drive leave\n");
} else {
sprintf(line,"-calm_drive %s\n", xorriso->do_calm_drive & 1 ? "on" : "off");
}
if(!(is_default && no_defaults)) if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2); Xorriso_status_result(xorriso,filter,fp,flag&2);

View File

@ -9,7 +9,7 @@
.\" First parameter, NAME, should be all caps .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" other parameters are allowed: see man(7), man(1)
.TH XORRISO 1 "Version 1.5.7, Sep 07, 2024" .TH XORRISO 1 "Version 1.5.7, Sep 18, 2024"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -1336,17 +1336,24 @@ Setting "on:emul_wide" lets the scan continue up to the end of the medium.
This may be useful after copying a medium with \-check_media patch_lba0=on This may be useful after copying a medium with \-check_media patch_lba0=on
when not the last session was loaded. when not the last session was loaded.
.TP .TP
\fB\-calm_drive\fR "in"|"out"|"all"|"revoke"|"on"|"off" \fB\-calm_drive\fR "in"|"out"|"all"|"revoke"|"on"|"off"|"never"
Reduce drive noise until it is actually used again. Some drives stay alert Control reduction of drive noise until it is actually used again.
for substantial time after they have been used for reading. This reduces Some drives stay alert for substantial time after they have been used for
reading or writing. This reduces
the startup time for the next drive operation but can be loud and waste the startup time for the next drive operation but can be loud and waste
energy if no i/o with the drive is expected to happen soon. energy if no i/o with the drive is expected to happen soon.
.br .br
Modes "in", "out", "all" immediately calm down \-indev, \-outdev, or both, Modes "in", "out", "all" immediately calm down \-indev, \-outdev, or both,
respectively. respectively. Mode "revoke" immediately alerts both drives.
Mode "revoke" immediately alerts both. .br
Mode "on" causes \-calm_drive to be performed automatically after each \-dev, Mode "on" causes calming to be performed automatically after each \-dev,
\-indev, and \-outdev. Mode "off" disables this. \-indev, and \-outdev. Mode "off" disables this but still automatically calms
a drive when it is given up without ejecting.
Mode "leave" disables all automatic drive calming so that the drives might
stay alert even after the end of the xorriso program run.
.br
Drives will slow down on their own after some time of inactivity. This
usually happens in several steps.
.TP .TP
\fB\-ban_stdio_write\fR \fB\-ban_stdio_write\fR
Allow for writing only the usage of MMC optical drives. Disallow Allow for writing only the usage of MMC optical drives. Disallow

View File

@ -1185,16 +1185,22 @@ activate them only after image loading.
continue up to the end of the medium. This may be useful after continue up to the end of the medium. This may be useful after
copying a medium with -check_media patch_lba0=on when not the last copying a medium with -check_media patch_lba0=on when not the last
session was loaded. session was loaded.
-calm_drive "in"|"out"|"all"|"revoke"|"on"|"off" -calm_drive "in"|"out"|"all"|"revoke"|"on"|"off"|"never"
Reduce drive noise until it is actually used again. Some drives Control reduction of drive noise until it is actually used again.
stay alert for substantial time after they have been used for Some drives stay alert for substantial time after they have been
reading. This reduces the startup time for the next drive used for reading or writing. This reduces the startup time for the
operation but can be loud and waste energy if no i/o with the drive next drive operation but can be loud and waste energy if no i/o
is expected to happen soon. with the drive is expected to happen soon.
Modes "in", "out", "all" immediately calm down -indev, -outdev, or Modes "in", "out", "all" immediately calm down -indev, -outdev, or
both, respectively. Mode "revoke" immediately alerts both. Mode both, respectively. Mode "revoke" immediately alerts both drives.
"on" causes -calm_drive to be performed automatically after each Mode "on" causes calming to be performed automatically after each
-dev, -indev, and -outdev. Mode "off" disables this. -dev, -indev, and -outdev. Mode "off" disables this but still
automatically calms a drive when it is given up without ejecting.
Mode "leave" disables all automatic drive calming so that the
drives might stay alert even after the end of the xorriso program
run.
Drives will slow down on their own after some time of inactivity.
This usually happens in several steps.
-ban_stdio_write -ban_stdio_write
Allow for writing only the usage of MMC optical drives. Disallow Allow for writing only the usage of MMC optical drives. Disallow
to write the result into files of nearly arbitrary type. Once set, to write the result into files of nearly arbitrary type. Once set,
@ -6033,7 +6039,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -assess_indev_features shows filesystem features: Inquiry. (line 61) * -assess_indev_features shows filesystem features: Inquiry. (line 61)
* -auto_charset learns character set from image: Loading. (line 141) * -auto_charset learns character set from image: Loading. (line 141)
* -backslash_codes enables backslash conversion: Scripting. (line 73) * -backslash_codes enables backslash conversion: Scripting. (line 73)
* -ban_stdio_write demands real drive: Loading. (line 454) * -ban_stdio_write demands real drive: Loading. (line 460)
* -biblio_file sets biblio file name: SetWrite. (line 277) * -biblio_file sets biblio file name: SetWrite. (line 277)
* -blank erases media: Writing. (line 57) * -blank erases media: Writing. (line 57)
* -boot_image controls bootability: Bootable. (line 75) * -boot_image controls bootability: Bootable. (line 75)
@ -6073,7 +6079,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -cp_rx copies file trees to disk: Restore. (line 131) * -cp_rx copies file trees to disk: Restore. (line 131)
* -cp_rx copies file trees to disk <1>: Restore. (line 139) * -cp_rx copies file trees to disk <1>: Restore. (line 139)
* -cut_out inserts piece of data file or device: Insert. (line 139) * -cut_out inserts piece of data file or device: Insert. (line 139)
* -data_cache_size adjusts read cache size: Loading. (line 470) * -data_cache_size adjusts read cache size: Loading. (line 476)
* -dev acquires one drive for input and output: AqDrive. (line 12) * -dev acquires one drive for input and output: AqDrive. (line 12)
* -devices gets list of drives: Inquiry. (line 7) * -devices gets list of drives: Inquiry. (line 7)
* -device_links gets list of drives: Inquiry. (line 17) * -device_links gets list of drives: Inquiry. (line 17)
@ -6090,7 +6096,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top
* -dusx show directory size on disk: Navigate. (line 96) * -dusx show directory size on disk: Navigate. (line 96)
* -dux show directory size on disk: Navigate. (line 92) * -dux show directory size on disk: Navigate. (line 92)
* -dvd_obs set write block size and end alignment: SetWrite. (line 421) * -dvd_obs set write block size and end alignment: SetWrite. (line 421)
* -early_stdio_test classifies stdio drives: Loading. (line 458) * -early_stdio_test classifies stdio drives: Loading. (line 464)
* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 337) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 337)
* -eject ejects drive tray: Writing. (line 50) * -eject ejects drive tray: Writing. (line 50)
* -end writes pending session and ends program: Scripting. (line 153) * -end writes pending session and ends program: Scripting. (line 153)
@ -6335,8 +6341,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* Directory, delete, -rmdir: Manip. (line 29) * Directory, delete, -rmdir: Manip. (line 29)
* disk_path, _definition: Insert. (line 6) * disk_path, _definition: Insert. (line 6)
* Drive, accessability, -drive_class: AqDrive. (line 43) * Drive, accessability, -drive_class: AqDrive. (line 43)
* Drive, classify stdio, -early_stdio_test: Loading. (line 458) * Drive, classify stdio, -early_stdio_test: Loading. (line 464)
* Drive, demand real MMC, -ban_stdio_write: Loading. (line 454) * Drive, demand real MMC, -ban_stdio_write: Loading. (line 460)
* Drive, eject tray, -eject: Writing. (line 50) * Drive, eject tray, -eject: Writing. (line 50)
* Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input and output, -dev: AqDrive. (line 12)
* Drive, for input, -indev: AqDrive. (line 23) * Drive, for input, -indev: AqDrive. (line 23)
@ -6390,7 +6396,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top
* HFS+ serial number: Bootable. (line 455) * HFS+ serial number: Bootable. (line 455)
* hidden, set in ISO image, -hide: Manip. (line 211) * hidden, set in ISO image, -hide: Manip. (line 211)
* HP-PA boot sector, production: Bootable. (line 430) * HP-PA boot sector, production: Bootable. (line 430)
* Image reading, cache size, -data_cache_size: Loading. (line 470) * Image reading, cache size, -data_cache_size: Loading. (line 476)
* Image, demand volume ID, -assert_volid: Loading. (line 129) * Image, demand volume ID, -assert_volid: Loading. (line 129)
* Image, discard pending changes, -rollback: Writing. (line 9) * Image, discard pending changes, -rollback: Writing. (line 9)
* Image, filesystem to load, -read_fs: Loading. (line 120) * Image, filesystem to load, -read_fs: Loading. (line 120)
@ -6625,48 +6631,48 @@ Node: Commands26634
Node: ArgSort28311 Node: ArgSort28311
Node: AqDrive29805 Node: AqDrive29805
Node: Loading36962 Node: Loading36962
Node: Insert65464 Node: Insert65841
Node: SetInsert77659 Node: SetInsert78036
Node: Manip87895 Node: Manip88272
Node: CmdFind100015 Node: CmdFind100392
Node: Filter121337 Node: Filter121714
Node: Writing125959 Node: Writing126336
Node: SetWrite138453 Node: SetWrite138830
Node: Bootable169728 Node: Bootable170105
Node: Jigdo201010 Node: Jigdo201387
Node: Charset206013 Node: Charset206390
Node: Exception209342 Node: Exception209719
Node: DialogCtl215531 Node: DialogCtl215908
Node: Inquiry218133 Node: Inquiry218510
Node: Navigate230698 Node: Navigate231075
Node: Verify241915 Node: Verify242292
Node: Restore253064 Node: Restore253441
Node: Emulation265271 Node: Emulation265648
Node: Scripting276847 Node: Scripting277224
Node: Frontend284741 Node: Frontend285118
Node: Examples294367 Node: Examples294744
Node: ExDevices295545 Node: ExDevices295922
Node: ExCreate296206 Node: ExCreate296583
Node: ExDialog297506 Node: ExDialog297883
Node: ExGrowing298777 Node: ExGrowing299154
Node: ExModifying299586 Node: ExModifying299963
Node: ExBootable300096 Node: ExBootable300473
Node: ExCharset300651 Node: ExCharset301028
Node: ExPseudo301547 Node: ExPseudo301924
Node: ExCdrecord302474 Node: ExCdrecord302851
Node: ExMkisofs302794 Node: ExMkisofs303171
Node: ExGrowisofs304691 Node: ExGrowisofs305068
Node: ExException305844 Node: ExException306221
Node: ExTime306302 Node: ExTime306679
Node: ExIncBackup306760 Node: ExIncBackup307137
Node: ExRestore310786 Node: ExRestore311163
Node: ExRecovery311732 Node: ExRecovery312109
Node: Files312304 Node: Files312681
Node: Environ313638 Node: Environ314015
Node: Seealso314386 Node: Seealso314763
Node: Bugreport315150 Node: Bugreport315527
Node: Legal315741 Node: Legal316118
Node: CommandIdx316753 Node: CommandIdx317130
Node: ConceptIdx335227 Node: ConceptIdx335604
 
End Tag Table End Tag Table

View File

@ -50,7 +50,7 @@
@c man .\" First parameter, NAME, should be all caps @c man .\" First parameter, NAME, should be all caps
@c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
@c man .\" other parameters are allowed: see man(7), man(1) @c man .\" other parameters are allowed: see man(7), man(1)
@c man .TH XORRISO 1 "Version 1.5.7, Sep 07, 2024" @c man .TH XORRISO 1 "Version 1.5.7, Sep 18, 2024"
@c man .\" Please adjust this date whenever revising the manpage. @c man .\" Please adjust this date whenever revising the manpage.
@c man .\" @c man .\"
@c man .\" Some roff macros, for reference: @c man .\" Some roff macros, for reference:
@ -1604,19 +1604,26 @@ Setting "on:emul_wide" lets the scan continue up to the end of the medium.
This may be useful after copying a medium with -check_media patch_lba0=on This may be useful after copying a medium with -check_media patch_lba0=on
when not the last session was loaded. when not the last session was loaded.
@c man .TP @c man .TP
@item -calm_drive "in"|"out"|"all"|"revoke"|"on"|"off" @item -calm_drive "in"|"out"|"all"|"revoke"|"on"|"off"|"never"
@kindex -calm_drive reduces drive activity @kindex -calm_drive reduces drive activity
@cindex Drive, reduce activity, -calm_drive @cindex Drive, reduce activity, -calm_drive
Reduce drive noise until it is actually used again. Some drives stay alert Control reduction of drive noise until it is actually used again.
for substantial time after they have been used for reading. This reduces Some drives stay alert for substantial time after they have been used for
reading or writing. This reduces
the startup time for the next drive operation but can be loud and waste the startup time for the next drive operation but can be loud and waste
energy if no i/o with the drive is expected to happen soon. energy if no i/o with the drive is expected to happen soon.
@* @*
Modes "in", "out", "all" immediately calm down -indev, -outdev, or both, Modes "in", "out", "all" immediately calm down -indev, -outdev, or both,
respectively. respectively. Mode "revoke" immediately alerts both drives.
Mode "revoke" immediately alerts both. @*
Mode "on" causes -calm_drive to be performed automatically after each -dev, Mode "on" causes calming to be performed automatically after each -dev,
-indev, and -outdev. Mode "off" disables this. -indev, and -outdev. Mode "off" disables this but still automatically calms
a drive when it is given up without ejecting.
Mode "leave" disables all automatic drive calming so that the drives might
stay alert even after the end of the xorriso program run.
@*
Drives will slow down on their own after some time of inactivity. This
usually happens in several steps.
@c man .TP @c man .TP
@item -ban_stdio_write @item -ban_stdio_write
@kindex -ban_stdio_write demands real drive @kindex -ban_stdio_write demands real drive

View File

@ -381,7 +381,10 @@ struct XorrisO { /* the global context of xorriso */
int cache_tile_blocks; int cache_tile_blocks;
int cache_default; /* bit0= cache_num_tiles, bit1= cache_tile_blocks */ int cache_default; /* bit0= cache_num_tiles, bit1= cache_tile_blocks */
int do_calm_drive; /* bit0= calm down drive after acquiring it */ int do_calm_drive; /* bit0= calm down drive after acquiring it
bit1= do not calm down drive when giving it up
(The combination of bit0 and bit1 is yet undefined)
*/
char indev[SfileadrL]; char indev[SfileadrL];
void *in_drive_handle; /* interpreted only by libburnia oriented modules */ void *in_drive_handle; /* interpreted only by libburnia oriented modules */

View File

@ -1 +1 @@
#define Xorriso_timestamP "2024.09.20.162540" #define Xorriso_timestamP "2024.09.20.163618"