From 20f6d05b8a38048eb9bedecc520fb62ca1a2620c Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 12 Aug 2015 20:56:51 -0400 Subject: [PATCH] common: Rework the early cmdline argument parsing code to improve robustness Also move fast_return out of individual backends and into common code. --- README | 133 ++++++++++----------- backend_common.c | 263 ++++++++++++++++++++++-------------------- backend_common.h | 1 + backend_mitsu9550.c | 20 +--- backend_shinkos1245.c | 16 +-- backend_shinkos2145.c | 15 +-- backend_shinkos6145.c | 16 +-- backend_shinkos6245.c | 16 +-- 8 files changed, 213 insertions(+), 267 deletions(-) diff --git a/README b/README index 5d08451..c4906ce 100644 --- a/README +++ b/README @@ -133,33 +133,56 @@ Gutenprint (eg via its gimp plugin) or the Windows print-to-file output. - Extra debugging output can be enabled by setting the DYESUB_DEBUG - environment variable or passing the '-D' argument on the command line. + All global arguments: - If you have multiple models of the same printer family connected - simultaneously, the backend will choose the first one it finds. If you - wish to target a specific device, you may specify its serial number - in the 'DEVICE' environment variable or by passing the '-S serialnum' - argument on the command line. For example, these are equivalent: + -D Increment debug level [1] + -G Display GPL text + -f Enable fast return mode if possible [2] + -B name Use Backend 'name' [3] + -S serno Use SerialNum 'serno' [4] + -V extra_vid [5] + -P extra_pid [5] + -T extra_type [5] + -d numcopies Print 'numcopies' of the supplied job - DEVICE=N782 backend filename [ arguments ] - backend -S N782 filename [ arguments ] + [1] This argument can be repeated to increase the debug level. + Alternatively, the 'DYESUB_DEBUG' environment variable can be + used. - All backends support an additional operational mode, to test out - unknown models. To use this mode, specify the VID, PID and its - internal device type as arguments or environment variables: + [2] This terminates the backend as soon as the printer has + acknowledged the print job, without waiting for the print job + to complete. This can also be enabled by setting the + 'FAST_RETURN' environment variable. This is the default behavior + when using this backend with CUPS. Not all backends support + fast return. - EXTRA_VID=04a9 EXTRA_PID=3ab1 EXTRA_TYPE=7 backend filename - backend -V 04a9 -P 3ab1 -T 7 filename + [3] Alternatively, you can use the 'BACKEND' environment variable. - The VID and PID are specified in hexidecimal, and the TYPE is - the P_XXX enumeration defined in backend_common.h. The '7' in this - example corresponds to most Canon SELPHY CP models, and is what you - would use if you were trying to get the backend to detect an - otherwise unrecognized SELPHY CP model. + [4] If you have multiple models of the same printer family connected + simultaneously, the backend will choose the first one it finds. + If you wish to target a specific device, you may specify its + serial number with this switch, or using the 'SERIAL' environment + variable. For example, these are equivalent: - If you are able to successfuly print using this technique, please let - us know so we can add the apppriate entry to the internal database. + SERIAL=N782 backend filename [ arguments ] + backend -S N782 filename [ arguments ] + + [5] All backends support an additional operational mode, to test out + unknown models. To use this mode, specify the VID, PID and its + internal device type as arguments or environment variables: + + EXTRA_VID=04a9 EXTRA_PID=3ab1 EXTRA_TYPE=7 backend filename + backend -V 04a9 -P 3ab1 -T 7 filename + + The VID and PID are specified in hexidecimal, and the TYPE is + the P_XXX enumeration defined in backend_common.h. The '7' in this + example corresponds to most Canon SELPHY CP models, and is what you + would use if you were trying to get the backend to detect an + otherwise unrecognized SELPHY CP model. + + If you are able to successfuly print using this technique, + please let us know so we can add the apppriate entry to the + internal database. Finally, some backends support additional arguments; see below: @@ -271,7 +294,6 @@ -c filename Query User tone curve from flash [1] -C filename Store User tone curve in flash [1] -e Query Error log - -f Enable Fast return from prints [2] -F Flash printer LEDs for 5 seconds -i Query printer firmware information -l filename Query Current tone curve from RAM [1] @@ -292,12 +314,6 @@ Values are unsigned 16-bit big endian, between 0 and 2047 (ie only 11 bits used) - [2] This terminates the backend as soon as the printer has acknowledged - the print job, without waiting for the print job to complete. - This can also be enabled by setting the 'FAST_RETURN' environment - variable. This is the default behavior when using this backend - with CUPS. - [3] Job ID is the Internal Job ID (reported via status) This cancels a multi-copy print job. To see which jobs are active/pending, see the output of the @@ -316,30 +332,23 @@ Valid commands: - -f Enable Fast return from prints [1] -s Query printer status -m Query media information -u Query user string -U somestring Set user string to 'somestring' - -X id Cancel print job 'id' [2] + -X id Cancel print job 'id' [1] -F Tone curve commands affect FINE table - -c filename Query User tone curve from flash [3] - -C filename Store User tone curve in flash [3] - -l filename Query Current tone curve from RAM [3] - -L filename Store Current tone curve in RAM [3] + -c filename Query User tone curve from flash [2] + -C filename Store User tone curve in flash [2] + -l filename Query Current tone curve from RAM [2] + -L filename Store Current tone curve in RAM [2] - [1] This terminates the backend as soon as the printer has acknowledged - the print job, without waiting for the print job to complete. - This can also be enabled by setting the 'FAST_RETURN' environment - variable. This is the default behavior when using this backend - with CUPS. - - [2] Job ID is the Internal Job ID (reported via status) + [1] Job ID is the Internal Job ID (reported via status) This cancels a multi-copy print job. To see which jobs are active/pending, see the output of the '-s' command, specifically the 'Bank' output. - [3] Format of tone curve file: + [2] Format of tone curve file: 256 entries each of Yellow, Magenta, Cyan mappings: Values are unsigned 16-bit big endian, between 0 and 16383 @@ -365,17 +374,16 @@ -c filename Query User tone curve from flash [1] -C filename Store User tone curve in flash [1] -e Query Error log - -f Enable Fast return from prints [2] -F Flash printer LEDs for 5 seconds -i Query printer firmware information -k num Specify standby delay (5-240 minutes) -l filename Query Current tone curve from RAM [1] -L filename Store Current tone curve in RAM [1] -m Query media information - -r Reset User tone curve to default [4] + -r Reset User tone curve to default [3] -R Reset printer to factory defaults -s Query printer status - -X id Cancel print job 'id' [3] + -X id Cancel print job 'id' [2] Notes: @@ -385,18 +393,12 @@ Values are unsigned 16-bit big endian, between 0 and 2047 (ie only 11 bits used) - [2] This terminates the backend as soon as the printer has acknowledged - the print job, without waiting for the print job to complete. - This can also be enabled by setting the 'FAST_RETURN' environment - variable. This is the default behavior when using this backend - with CUPS. - - [3] Job ID is the Internal Job ID (reported via status) + [2] Job ID is the Internal Job ID (reported via status) This cancels a multi-copy print job. To see which jobs are active/pending, see the output of the '-s' command, specifically the 'Bank' output. - [4] Default printer tone curve is a linear 'val << 3' + [3] Default printer tone curve is a linear 'val << 3' *************************************************************************** BACKEND=shinkos6245 @@ -412,17 +414,16 @@ -c filename Query User tone curve from flash [1] -C filename Store User tone curve in flash [1] -e Query Error log - -f Enable Fast return from prints [2] -F Flash printer LEDs for 5 seconds -i Query printer firmware information -k num Specify standby delay (5-240 minutes) -l filename Query Current tone curve from RAM [1] -L filename Store Current tone curve in RAM [1] -m Query media information - -r Reset User tone curve to default [4] + -r Reset User tone curve to default [3] -R Reset printer to factory defaults -s Query printer status - -X id Cancel print job 'id' [3] + -X id Cancel print job 'id' [2] Notes: @@ -432,18 +433,12 @@ Values are unsigned 16-bit big endian, between 0 and 2047 (ie only 11 bits used) - [2] This terminates the backend as soon as the printer has acknowledged - the print job, without waiting for the print job to complete. - This can also be enabled by setting the 'FAST_RETURN' environment - variable. This is the default behavior when using this backend - with CUPS. - - [3] Job ID is the Internal Job ID (reported via status) + [2] Job ID is the Internal Job ID (reported via status) This cancels a multi-copy print job. To see which jobs are active/pending, see the output of the '-s' command, specifically the 'Bank' output. - [4] Default printer tone curve is a linear 'val << 3' + [3] Default printer tone curve is a linear 'val << 3' *************************************************************************** BACKEND=sonyupdr150 @@ -494,14 +489,8 @@ Valid commands: - -m Query printer media status - -f Enable Fast return from prints [1] - - [1] This terminates the backend as soon as the printer has acknowledged - the print job, without waiting for the print job to complete. - This can also be enabled by setting the 'FAST_RETURN' environment - variable. This is the default behavior when using this backend - with CUPS. + -s Query printer status + -m Query printer media *************************************************************************** BACKEND=dnpds40 diff --git a/backend_common.c b/backend_common.c index 0e31176..8f7eb99 100644 --- a/backend_common.c +++ b/backend_common.c @@ -27,7 +27,7 @@ #include "backend_common.h" -#define BACKEND_VERSION "0.57" +#define BACKEND_VERSION "0.58" #ifndef URI_PREFIX #error "Must Define URI_PREFIX" #endif @@ -37,6 +37,7 @@ /* Global Variables */ int dyesub_debug = 0; int terminate = 0; +int fast_return = 0; /* Local Global Variables */ static int extra_vid = -1; @@ -682,16 +683,19 @@ static void print_help(char *argv0, struct dyesub_backend *backend) if (!backend) { int i; + DEBUG("Environment variables:\n"); + DEBUG(" DYESUB_DEBUG EXTRA_PID EXTRA_VID EXTRA_TYPE BACKEND SERIAL\n"); DEBUG("CUPS Usage:\n"); DEBUG("\tDEVICE_URI=someuri %s job user title num-copies options [ filename ]\n", URI_PREFIX); DEBUG("\n"); DEBUG("Standalone Usage:\n"); DEBUG("\t%s\n", URI_PREFIX); - DEBUG(" [ -D ] [ -G ]\n"); + DEBUG(" [ -D ] [ -G ] [ -f ]\n"); DEBUG(" [ -S serialnum ] [ -B backendname ] \n"); DEBUG(" [ -V extra_vid ] [ -P extra_pid ] [ -T extra_type ] \n"); DEBUG(" [ backend_specific_args ] \n"); - DEBUG(" [ -d copies ] [ - | infile ] \n"); + DEBUG(" [ -d copies ] \n"); + DEBUG(" [ - | infile ] \n"); for (i = 0; ; i++) { backend = backends[i]; if (!backend) @@ -763,7 +767,7 @@ int main (int argc, char **argv) /* First pass at cmdline parsing */ if (getenv("DYESUB_DEBUG")) - dyesub_debug++; + dyesub_debug = atoi(getenv("DYESUB_DEBUG")); if (getenv("EXTRA_PID")) extra_pid = strtol(getenv("EXTRA_PID"), NULL, 16); if (getenv("EXTRA_VID")) @@ -772,120 +776,24 @@ int main (int argc, char **argv) extra_type = atoi(getenv("EXTRA_TYPE")); if (getenv("BACKEND")) backend = find_backend(getenv("BACKEND")); - use_serno = getenv("DEVICE"); - uri = getenv("DEVICE_URI"); /* For CUPS */ + if (getenv("FAST_RETURN")) + fast_return++; + use_serno = getenv("SERIAL"); + uri = getenv("DEVICE_URI"); /* CUPS backend mode? */ - /* Try to ensure we have a sane backend for standalone mode. - CUPS mode uses 'uri' later on. */ - if (!backend) { - char *ptr = strrchr(argv[0], '/'); - if (ptr) - ptr++; - else - ptr = argv[0]; - backend = find_backend(ptr); - } - - /* Reset arg parsing */ - optind = 1; - opterr = 0; - while ((i = getopt(argc, argv, "B:d:DGhP:S:T:V:")) >= 0) { - switch(i) { - case 'B': - backend = find_backend(optarg); - if (!backend) { - fprintf(stderr, "ERROR: Unknown backend '%s'\n", optarg); - } - break; - case 'd': - copies = atoi(optarg); - break; - case 'D': - dyesub_debug++; - break; - case 'G': - print_license_blurb(); - exit(0); - case 'h': - print_help(argv[0], backend); - exit(0); - break; - case 'P': - extra_pid = strtol(optarg, NULL, 16); - break; - case 'S': - use_serno = optarg; - break; - case 'T': - extra_type = atoi(optarg); - break; - case 'V': - extra_pid = strtol(optarg, NULL, 16); - break; - default: { - /* Check to see if it is claimed by the backend */ - if (backend && backend->cmdline_arg) { - int keep = optind; - int boo; - - boo = backend->cmdline_arg(NULL, argc, argv); - backend_cmd += boo; - - if (boo > 1) - keep++; - - optind = keep; - } - break; - } - } - } - -#ifndef LIBUSB_PRE_1_0_10 - if (dyesub_debug) { - const struct libusb_version *ver; - ver = libusb_get_version(); - DEBUG(" ** running with libusb %d.%d.%d%s (%d)\n", - ver->major, ver->minor, ver->micro, (ver->rc? ver->rc : ""), ver->nano ); - } -#endif - - /* Make sure a filename was specified */ - if (!backend_cmd && (optind == argc || !argv[optind])) { - print_help(argv[0], backend); - exit(0); - } - - /* Are we running as a CUPS backend? */ if (uri) { - int base = optind; // XXX aka 1. - fname = argv[base + 5]; + /* CUPS backend mode */ + int base = optind; /* ie 1 */ + if (argc < 6) { + ERROR("Insufficient arguments\n"); + exit(1); + } if (argv[base]) jobid = atoi(argv[base]); if (argv[base + 3]) copies = atoi(argv[base + 3]); - if (fname) { /* IOW, is it specified? */ - data_fd = open(fname, O_RDONLY); - if (data_fd < 0) { - perror("ERROR:Can't open input file"); - exit(1); - } - } else { - fname = "-"; - } - - /* Ensure we're using BLOCKING I/O */ - i = fcntl(data_fd, F_GETFL, 0); - if (i < 0) { - perror("ERROR:Can't open input"); - exit(1); - } - i &= ~O_NONBLOCK; - i = fcntl(data_fd, F_SETFL, i); - if (i < 0) { - perror("ERROR:Can't open input"); - exit(1); - } + if (argc > 6) + fname = argv[base + 5]; /* Figure out backend based on URI */ { @@ -919,9 +827,87 @@ int main (int argc, char **argv) if (ptr) *ptr = 0; } + + /* Always enable fast return in CUPS mode */ + fast_return++; } else { - srand(getpid()); - jobid = rand(); + /* Standalone mode */ + + /* Try to guess backend from executable name */ + if (!backend) { + char *ptr = strrchr(argv[0], '/'); + if (ptr) + ptr++; + else + ptr = argv[0]; + backend = find_backend(ptr); + } + + /* Reset arg parsing */ + optind = 1; + opterr = 0; + while ((i = getopt(argc, argv, "B:d:DfGhP:S:T:V:")) >= 0) { + switch(i) { + case 'B': + backend = find_backend(optarg); + if (!backend) { + fprintf(stderr, "ERROR: Unknown backend '%s'\n", optarg); + exit(1); + } + break; + case 'd': + copies = atoi(optarg); + break; + case 'D': + dyesub_debug++; + break; + case 'f': + fast_return++; + break; + case 'G': + print_license_blurb(); + exit(0); + case 'h': + print_help(argv[0], backend); + exit(0); + case 'P': + extra_pid = strtol(optarg, NULL, 16); + break; + case 'S': + use_serno = optarg; + break; + case 'T': + extra_type = atoi(optarg); + break; + case 'V': + extra_pid = strtol(optarg, NULL, 16); + break; + default: { + /* Check to see if it is claimed by the backend */ + if (backend && backend->cmdline_arg) { + int keep = optind; + int boo; + + boo = backend->cmdline_arg(NULL, argc, argv); + backend_cmd += boo; + + if (boo > 1) + keep++; + + optind = keep; + } + break; + } + } + } + + /* Make sure a filename was specified */ + if (optind >= argc || !argv[optind]) { + if (!backend_cmd) + print_help(argv[0], backend); + + exit(0); + } /* Grab the filename */ fname = argv[optind]; @@ -930,16 +916,47 @@ int main (int argc, char **argv) perror("ERROR:No input file"); exit(1); } - if (fname) { - /* Open Input File */ - if (strcmp("-", fname)) { - data_fd = open(fname, O_RDONLY); - if (data_fd < 0) { - perror("ERROR:Can't open input file"); - exit(1); - } - } + + srand(getpid()); + jobid = rand(); + } + +#ifndef LIBUSB_PRE_1_0_10 + if (dyesub_debug) { + const struct libusb_version *ver; + ver = libusb_get_version(); + DEBUG(" ** running with libusb %d.%d.%d%s (%d)\n", + ver->major, ver->minor, ver->micro, (ver->rc? ver->rc : ""), ver->nano ); + } +#endif + + /* Make sure we have a sane backend */ + if (!backend) { + fprintf(stderr, "ERROR: Unknown backend\n"); + exit(1); + } + + if (fname && strcmp("-", fname)) { + data_fd = open(fname, O_RDONLY); + if (data_fd < 0) { + perror("ERROR:Can't open input file"); + exit(1); } + } else { + fname = "-"; + } + + /* Ensure we're using BLOCKING I/O */ + i = fcntl(data_fd, F_GETFL, 0); + if (i < 0) { + perror("ERROR:Can't open input"); + exit(1); + } + i &= ~O_NONBLOCK; + i = fcntl(data_fd, F_SETFL, i); + if (i < 0) { + perror("ERROR:Can't open input"); + exit(1); } /* Ignore SIGPIPE */ diff --git a/backend_common.h b/backend_common.h index 4142b41..80996d3 100644 --- a/backend_common.h +++ b/backend_common.h @@ -150,6 +150,7 @@ int read_data(struct libusb_device_handle *dev, uint8_t endp, /* Exported data */ extern int terminate; extern int dyesub_debug; +extern int fast_return; /* External data */ extern struct dyesub_backend updr150_backend; diff --git a/backend_mitsu9550.c b/backend_mitsu9550.c index 98c7353..738b1be 100644 --- a/backend_mitsu9550.c +++ b/backend_mitsu9550.c @@ -52,8 +52,6 @@ struct mitsu9550_ctx { int is_s_variant; - int fast_return; - uint16_t rows; uint16_t cols; }; @@ -149,10 +147,6 @@ static void *mitsu9550_init(void) } memset(ctx, 0, sizeof(struct mitsu9550_ctx)); - /* Use Fast return by default in CUPS mode */ - if (getenv("DEVICE_URI") || getenv("FAST_RETURN")) - ctx->fast_return = 1; - return ctx; } @@ -592,12 +586,12 @@ top: if (!sts->sts1) /* If printer transitions to idle */ break; - if (ctx->fast_return && !be16_to_cpu(sts->copies)) { /* No remaining prints */ + if (fast_return && !be16_to_cpu(sts->copies)) { /* No remaining prints */ INFO("Fast return mode enabled.\n"); break; } - if (ctx->fast_return && !sts->sts5) { /* Ready for another job */ + if (fast_return && !sts->sts5) { /* Ready for another job */ INFO("Fast return mode enabled.\n"); break; } @@ -744,7 +738,6 @@ static void mitsu9550_cmdline(void) { DEBUG("\t\t[ -m ] # Query media\n"); DEBUG("\t\t[ -s ] # Query status\n"); - DEBUG("\t\t[ -f ] # Enable fast return mode\n"); } static int mitsu9550_cmdline_arg(void *vctx, int argc, char **argv) @@ -755,7 +748,7 @@ static int mitsu9550_cmdline_arg(void *vctx, int argc, char **argv) /* Reset arg parsing */ optind = 1; opterr = 0; - while ((i = getopt(argc, argv, "mfs")) >= 0) { + while ((i = getopt(argc, argv, "ms")) >= 0) { switch(i) { case 'm': if (ctx) { @@ -769,13 +762,6 @@ static int mitsu9550_cmdline_arg(void *vctx, int argc, char **argv) break; } return 1; - - case 'f': - if (ctx) { - ctx->fast_return = 1; - break; - } - return 1; default: break; /* Ignore completely */ } diff --git a/backend_shinkos1245.c b/backend_shinkos1245.c index 094bf0a..69d6d16 100644 --- a/backend_shinkos1245.c +++ b/backend_shinkos1245.c @@ -403,7 +403,6 @@ struct shinkos1245_ctx { uint8_t endp_up; uint8_t endp_down; uint8_t jobid; - uint8_t fast_return; struct s1245_printjob_hdr hdr; @@ -1140,7 +1139,6 @@ done: static void shinkos1245_cmdline(void) { - DEBUG("\t\t[ -f ] # Use fast return mode\n"); DEBUG("\t\t[ -m ] # Query media\n"); DEBUG("\t\t[ -s ] # Query status\n"); DEBUG("\t\t[ -u ] # Query user string\n"); @@ -1161,7 +1159,7 @@ int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv) /* Reset arg parsing */ optind = 1; opterr = 0; - while ((i = getopt(argc, argv, "c:C:l:L:FfmsuU:X:")) >= 0) { + while ((i = getopt(argc, argv, "c:C:l:L:FmsuU:X:")) >= 0) { switch(i) { case 'F': if (ctx) { @@ -1193,12 +1191,6 @@ int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv) break; } return 2; - case 'f': - if (ctx) { - ctx->fast_return = 1; - break; - } - return 1; case 'm': if (ctx) { j = shinkos1245_get_media(ctx); @@ -1260,10 +1252,6 @@ static void *shinkos1245_init(void) } memset(ctx, 0, sizeof(struct shinkos1245_ctx)); - /* Use Fast return by default in CUPS mode */ - if (getenv("DEVICE_URI") || getenv("FAST_RETURN")) - ctx->fast_return = 1; - ctx->tonecurve = PARAM_TABLE_STANDARD; return ctx; @@ -1554,7 +1542,7 @@ top: break; } case S_PRINTER_SENT_DATA: - if (ctx->fast_return) { + if (fast_return) { INFO("Fast return mode enabled.\n"); state = S_FINISHED; } diff --git a/backend_shinkos2145.c b/backend_shinkos2145.c index b5c9aeb..8500b31 100644 --- a/backend_shinkos2145.c +++ b/backend_shinkos2145.c @@ -95,7 +95,6 @@ struct shinkos2145_ctx { uint8_t endp_up; uint8_t endp_down; uint8_t jobid; - uint8_t fast_return; struct s2145_printjob_hdr hdr; @@ -1294,7 +1293,7 @@ int shinkos2145_cmdline_arg(void *vctx, int argc, char **argv) /* Reset arg parsing */ optind = 1; opterr = 0; - while ((i = getopt(argc, argv, "b:c:C:efFil:L:mr:R:suU:X:")) >= 0) { + while ((i = getopt(argc, argv, "b:c:C:eFil:L:mr:R:suU:X:")) >= 0) { switch(i) { case 'b': if (ctx) { @@ -1325,12 +1324,6 @@ int shinkos2145_cmdline_arg(void *vctx, int argc, char **argv) break; } return 1; - case 'f': - if (ctx) { - ctx->fast_return = 1; - break; - } - return 1; case 'F': if (ctx) { j = flash_led(ctx); @@ -1418,10 +1411,6 @@ static void *shinkos2145_init(void) } memset(ctx, 0, sizeof(struct shinkos2145_ctx)); - /* Use Fast return by default in CUPS mode */ - if (getenv("DEVICE_URI") || getenv("FAST_RETURN")) - ctx->fast_return = 1; - return ctx; } @@ -1660,7 +1649,7 @@ static int shinkos2145_main_loop(void *vctx, int copies) { state = S_PRINTER_SENT_DATA; break; case S_PRINTER_SENT_DATA: - if (ctx->fast_return) { + if (fast_return) { INFO("Fast return mode enabled.\n"); state = S_FINISHED; } else if (sts->hdr.status == STATUS_READY || diff --git a/backend_shinkos6145.c b/backend_shinkos6145.c index 778932e..a61efed 100644 --- a/backend_shinkos6145.c +++ b/backend_shinkos6145.c @@ -99,7 +99,6 @@ struct shinkos6145_ctx { uint8_t endp_up; uint8_t endp_down; uint8_t jobid; - uint8_t fast_return; struct s6145_printjob_hdr hdr; @@ -1362,7 +1361,6 @@ static void shinkos6145_cmdline(void) DEBUG("\t\t[ -c filename ] # Get user/NV tone curve\n"); DEBUG("\t\t[ -C filename ] # Set user/NV tone curve\n"); DEBUG("\t\t[ -e ] # Query error log\n"); - DEBUG("\t\t[ -f ] # Use fast return mode\n"); DEBUG("\t\t[ -F ] # Flash Printer LED\n"); DEBUG("\t\t[ -i ] # Query printer info\n"); DEBUG("\t\t[ -k num ] # Set sleep time (5-240 minutes)\n"); @@ -1383,7 +1381,7 @@ int shinkos6145_cmdline_arg(void *vctx, int argc, char **argv) /* Reset arg parsing */ optind = 1; opterr = 0; - while ((i = getopt(argc, argv, "c:C:efFik:l:L:mr:R:sX:")) >= 0) { + while ((i = getopt(argc, argv, "c:C:eFik:l:L:mr:R:sX:")) >= 0) { switch(i) { case 'c': if (ctx) { @@ -1403,12 +1401,6 @@ int shinkos6145_cmdline_arg(void *vctx, int argc, char **argv) break; } return 1; - case 'f': - if (ctx) { - ctx->fast_return = 1; - break; - } - return 1; case 'F': if (ctx) { j = flash_led(ctx); @@ -1503,10 +1495,6 @@ static void *shinkos6145_init(void) } memset(ctx, 0, sizeof(struct shinkos6145_ctx)); - /* Use Fast return by default in CUPS mode */ - if (getenv("DEVICE_URI") || getenv("FAST_RETURN")) - ctx->fast_return = 1; - return ctx; } @@ -1786,7 +1774,7 @@ top: state = S_PRINTER_SENT_DATA; break; case S_PRINTER_SENT_DATA: - if (ctx->fast_return) { + if (fast_return) { INFO("Fast return mode enabled.\n"); state = S_FINISHED; } else if (sts->hdr.status == STATUS_READY) { diff --git a/backend_shinkos6245.c b/backend_shinkos6245.c index 4e0c011..9736471 100644 --- a/backend_shinkos6245.c +++ b/backend_shinkos6245.c @@ -94,7 +94,6 @@ struct shinkos6245_ctx { uint8_t endp_up; uint8_t endp_down; uint8_t jobid; - uint8_t fast_return; struct s6245_printjob_hdr hdr; @@ -1356,7 +1355,6 @@ static void shinkos6245_cmdline(void) DEBUG("\t\t[ -c filename ] # Get user/NV tone curve\n"); DEBUG("\t\t[ -C filename ] # Set user/NV tone curve\n"); DEBUG("\t\t[ -e ] # Query error log\n"); - DEBUG("\t\t[ -f ] # Use fast return mode\n"); DEBUG("\t\t[ -F ] # Flash Printer LED\n"); DEBUG("\t\t[ -i ] # Query printer info\n"); DEBUG("\t\t[ -k num ] # Set sleep time (5-240 minutes)\n"); @@ -1377,7 +1375,7 @@ int shinkos6245_cmdline_arg(void *vctx, int argc, char **argv) /* Reset arg parsing */ optind = 1; opterr = 0; - while ((i = getopt(argc, argv, "c:C:efFik:l:L:mr:R:sX:")) >= 0) { + while ((i = getopt(argc, argv, "c:C:eFik:l:L:mr:R:sX:")) >= 0) { switch(i) { case 'c': if (ctx) { @@ -1397,12 +1395,6 @@ int shinkos6245_cmdline_arg(void *vctx, int argc, char **argv) break; } return 1; - case 'f': - if (ctx) { - ctx->fast_return = 1; - break; - } - return 1; case 'F': if (ctx) { j = flash_led(ctx); @@ -1497,10 +1489,6 @@ static void *shinkos6245_init(void) } memset(ctx, 0, sizeof(struct shinkos6245_ctx)); - /* Use Fast return by default in CUPS mode */ - if (getenv("DEVICE_URI") || getenv("FAST_RETURN")) - ctx->fast_return = 1; - return ctx; } @@ -1771,7 +1759,7 @@ top: state = S_PRINTER_SENT_DATA; break; case S_PRINTER_SENT_DATA: - if (ctx->fast_return) { + if (fast_return) { INFO("Fast return mode enabled.\n"); state = S_FINISHED; } else if (sts->hdr.status == STATUS_READY) {