|
|
|
@ -95,10 +95,10 @@ struct printer_data { |
|
|
|
|
int8_t paper_code_offset; /* Offset in readback for paper type */ |
|
|
|
|
int8_t paper_code_offset2; /* Offset in readback for paper type (2nd) */ |
|
|
|
|
uint8_t (*error_detect)(uint8_t *rdbuf); |
|
|
|
|
char *(*pgcode_names)(uint8_t *rdbuf, struct printer_data *printer); |
|
|
|
|
char *(*pgcode_names)(uint8_t *rdbuf, struct printer_data *printer, int *numtype); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static char *generic_pgcode_names(uint8_t *rdbuf, struct printer_data *printer) |
|
|
|
|
static char *generic_pgcode_names(uint8_t *rdbuf, struct printer_data *printer, int *numtype) |
|
|
|
|
{ |
|
|
|
|
uint8_t pgcode = 0, pgcode2 = 0; |
|
|
|
|
|
|
|
|
@ -107,6 +107,8 @@ static char *generic_pgcode_names(uint8_t *rdbuf, struct printer_data *printer) |
|
|
|
|
if (printer->paper_code_offset2 != -1) |
|
|
|
|
pgcode2 = rdbuf[printer->paper_code_offset2]; |
|
|
|
|
|
|
|
|
|
*numtype = pgcode & 0xf; |
|
|
|
|
|
|
|
|
|
switch(pgcode & 0xf) { |
|
|
|
|
case 0x01: return "P"; |
|
|
|
|
case 0x02: return "L"; |
|
|
|
@ -237,11 +239,12 @@ static uint8_t cp790_error_detect(uint8_t *rdbuf) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static char *cp10_pgcode_names(uint8_t *rdbuf, struct printer_data *printer) |
|
|
|
|
static char *cp10_pgcode_names(uint8_t *rdbuf, struct printer_data *printer, int *numtype) |
|
|
|
|
{ |
|
|
|
|
UNUSED(rdbuf); |
|
|
|
|
UNUSED(printer); |
|
|
|
|
|
|
|
|
|
*numtype = 3; |
|
|
|
|
return "C"; /* Printer only supports one media type */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -580,7 +583,7 @@ static int canonselphy_get_status(struct canonselphy_ctx *ctx) |
|
|
|
|
if (ret < 0) |
|
|
|
|
return CUPS_BACKEND_FAILED; |
|
|
|
|
|
|
|
|
|
INFO("Media type: %s\n", ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer) : "Unknown"); |
|
|
|
|
INFO("Media type: %s\n", ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer, &ret) : "Unknown"); |
|
|
|
|
ctx->printer->error_detect(rdbuf); |
|
|
|
|
|
|
|
|
|
return CUPS_BACKEND_OK; |
|
|
|
@ -665,11 +668,13 @@ static int canonselphy_attach(void *vctx, struct libusb_device_handle *dev, int |
|
|
|
|
ctx->marker.levelnow = 0; /* Out of media */ |
|
|
|
|
else |
|
|
|
|
ctx->marker.levelnow = -3; /* Unknown but OK */ |
|
|
|
|
ctx->marker.name = ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer) : "Unknown"; |
|
|
|
|
|
|
|
|
|
ctx->marker.name = ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer, &ctx->marker.numtype) : "Unknown"; |
|
|
|
|
} else { |
|
|
|
|
// XXX handle MEDIA_CODE at some point.
|
|
|
|
|
// we don't do any error checking here.
|
|
|
|
|
ctx->marker.name = "Unknown"; |
|
|
|
|
ctx->marker.numtype = -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return CUPS_BACKEND_OK; |
|
|
|
|