s1245: Implement the canceljob command.

All that's left is the actual printing.  And testing all of this on a
real printer.
This commit is contained in:
Solomon Peachy 2015-02-08 20:34:30 -05:00
parent 06320b61db
commit 4a34c4e740
2 changed files with 39 additions and 4 deletions

9
README
View File

@ -326,13 +326,18 @@
-m Query media information -m Query media information
-u Query user string -u Query user string
-U somestring Set user string to 'somestring' -U somestring Set user string to 'somestring'
-X id Cancel print job 'id' [2]
[1] This terminates the backend as soon as the printer has acknowledged [1] This terminates the backend as soon as the printer has acknowledged
the print job, without waiting for the print job to complete. the print job, without waiting for the print job to complete.
This can also be enabled by setting the 'FAST_RETURN' environment This can also be enabled by setting the 'FAST_RETURN' environment
variable. This is the default behavior when using this backend variable. This is the default behavior when using this backend
with CUPS. with CUPS.
[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.
*************************************************************************** ***************************************************************************
BACKEND=sonyupdr150 BACKEND=sonyupdr150

View File

@ -574,6 +574,30 @@ static int shinkos1245_set_printerid(struct shinkos1245_ctx *ctx,
return 0; return 0;
} }
static int shinkos1245_canceljob(struct shinkos1245_ctx *ctx,
int id)
{
struct shinkos1245_cmd_canceljob cmd;
struct shinkos1245_resp_status sts;
int ret, num;
shinkos1245_fill_hdr(&cmd.hdr);
cmd.cmd[0] = 0x13;
cmd.id = id;
ret = shinkos1245_do_cmd(ctx, &cmd, sizeof(cmd),
&sts, sizeof(sts), &num);
if (ret < 0) {
ERROR("Failed to execute CANCELJOB command\n");
return ret;
}
if (sts.code != CMD_CODE_OK) {
ERROR("Bad return code on CANCELJOB command\n");
return -99;
}
return 0;
}
/* Structure dumps */ /* Structure dumps */
static void shinkos1245_dump_status(struct shinkos1245_resp_status *sts) static void shinkos1245_dump_status(struct shinkos1245_resp_status *sts)
@ -721,7 +745,8 @@ static void shinkos1245_cmdline(void)
DEBUG("\t\t[ -m ] # Query media\n"); DEBUG("\t\t[ -m ] # Query media\n");
DEBUG("\t\t[ -s ] # Query status\n"); DEBUG("\t\t[ -s ] # Query status\n");
DEBUG("\t\t[ -u ] # Query user string\n"); DEBUG("\t\t[ -u ] # Query user string\n");
DEBUG("\t\t[ -U sometext ] # Set user string\n"); DEBUG("\t\t[ -U sometext ] # Set user string\n");
DEBUG("\t\t[ -X jobid ] # Abort a printjob\n");
} }
int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv) int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv)
@ -732,7 +757,7 @@ int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv)
/* Reset arg parsing */ /* Reset arg parsing */
optind = 1; optind = 1;
opterr = 0; opterr = 0;
while ((i = getopt(argc, argv, "fmsuU:")) >= 0) { while ((i = getopt(argc, argv, "fmsuU:X:")) >= 0) {
switch(i) { switch(i) {
case 'f': case 'f':
if (!ctx) if (!ctx)
@ -773,6 +798,11 @@ int shinkos1245_cmdline_arg(void *vctx, int argc, char **argv)
return 1; return 1;
j = shinkos1245_set_printerid(ctx, optarg); j = shinkos1245_set_printerid(ctx, optarg);
break; break;
case 'X':
if (!ctx)
return 1;
j = shinkos1245_canceljob(ctx, atoi(optarg));
break;
default: default:
break; /* Ignore completely */ break; /* Ignore completely */
} }