common: Add proper definitions for special CUPS marker levels.

And report STATE(media-empty) globally based on this.
This commit is contained in:
Solomon Peachy 2019-12-11 23:18:39 -05:00
parent b7560192b9
commit 13d62550f3
16 changed files with 42 additions and 42 deletions

View File

@ -641,7 +641,7 @@ static int canonselphy_attach(void *vctx, struct libusb_device_handle *dev, int
/* Fill out marker structure */ /* Fill out marker structure */
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->marker.levelmax = -1; /* Unknown */ ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
if (test_mode < TEST_MODE_NOATTACH) { if (test_mode < TEST_MODE_NOATTACH) {
/* Read printer status. Twice. */ /* Read printer status. Twice. */
@ -656,9 +656,9 @@ static int canonselphy_attach(void *vctx, struct libusb_device_handle *dev, int
return CUPS_BACKEND_FAILED; return CUPS_BACKEND_FAILED;
if (ctx->printer->error_detect(rdbuf)) if (ctx->printer->error_detect(rdbuf))
ctx->marker.levelnow = 0; /* Out of media */ ctx->marker.levelnow = 0;
else else
ctx->marker.levelnow = -3; /* Unknown but OK */ ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
ctx->marker.name = ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer, &ctx->marker.numtype) : "Unknown"; ctx->marker.name = ctx->printer->pgcode_names? ctx->printer->pgcode_names(rdbuf, ctx->printer, &ctx->marker.numtype) : "Unknown";
} else { } else {
@ -1115,7 +1115,7 @@ static int canonselphy_query_markers(void *vctx, struct marker **markers, int *c
if (ctx->printer->error_detect(rdbuf)) if (ctx->printer->error_detect(rdbuf))
ctx->marker.levelnow = 0; ctx->marker.levelnow = 0;
else else
ctx->marker.levelnow = -3; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
*markers = &ctx->marker; *markers = &ctx->marker;
*count = 1; *count = 1;

View File

@ -225,11 +225,11 @@ static int selphyneo_attach(void *vctx, struct libusb_device_handle *dev, int ty
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->marker.name = selphynew_pgcodes(rdback.data[6]); ctx->marker.name = selphynew_pgcodes(rdback.data[6]);
ctx->marker.numtype = rdback.data[6]; ctx->marker.numtype = rdback.data[6];
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
if (rdback.data[2]) { if (rdback.data[2]) {
ctx->marker.levelnow = 0; ctx->marker.levelnow = 0;
} else { } else {
ctx->marker.levelnow = -3; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
} }
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
@ -506,7 +506,7 @@ static int selphyneo_query_markers(void *vctx, struct marker **markers, int *cou
if (rdback.data[2]) if (rdback.data[2])
ctx->marker.levelnow = 0; ctx->marker.levelnow = 0;
else else
ctx->marker.levelnow = -3; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
*markers = &ctx->marker; *markers = &ctx->marker;
*count = 1; *count = 1;

View File

@ -31,7 +31,7 @@
#include <errno.h> #include <errno.h>
#include <signal.h> #include <signal.h>
#define BACKEND_VERSION "0.98" #define BACKEND_VERSION "0.99"
#ifndef URI_PREFIX #ifndef URI_PREFIX
#error "Must Define URI_PREFIX" #error "Must Define URI_PREFIX"
#endif #endif
@ -1462,13 +1462,13 @@ minimal:
ATTR("marker-message="); ATTR("marker-message=");
for (i = 0 ; i < marker_count; i++) { for (i = 0 ; i < marker_count; i++) {
switch (markers[i].levelnow) { switch (markers[i].levelnow) {
case -1: case CUPS_MARKER_UNAVAILABLE:
DEBUG2("'\"Unable to query remaining prints on %s media\"'", markers[i].name); DEBUG2("'\"Unable to query remaining prints on %s media\"'", markers[i].name);
break; break;
case -2: case CUPS_MARKER_UNKNOWN:
DEBUG2("'\"Unknown remaining prints on %s media\"'", markers[i].name); DEBUG2("'\"Unknown remaining prints on %s media\"'", markers[i].name);
break; break;
case -3: case CUPS_MARKER_UNKNOWN_OK:
DEBUG2("'\"One or more remaining prints on %s media\"'", markers[i].name); DEBUG2("'\"One or more remaining prints on %s media\"'", markers[i].name);
break; break;
default: default:
@ -1481,6 +1481,11 @@ minimal:
DEBUG2("\n"); DEBUG2("\n");
} }
if (markers[0].levelnow == 0)
STATE("+media-empty\n");
else if (markers[0].levelnow > 0 || markers[0].levelnow == CUPS_MARKER_UNKNOWN_OK)
STATE("-media-empty\n");
/* If we're running as a CUPS backend, report the media type */ /* If we're running as a CUPS backend, report the media type */
if (full && getenv("DEVICE_URI")) { if (full && getenv("DEVICE_URI")) {
for (i = 0 ; i < marker_count ; i++) { for (i = 0 ; i < marker_count ; i++) {

View File

@ -295,6 +295,10 @@ extern struct dyesub_backend BACKEND;
#define CUPS_BACKEND_RETRY 6 /* Retry later */ #define CUPS_BACKEND_RETRY 6 /* Retry later */
#define CUPS_BACKEND_RETRY_CURRENT 7 /* Retry immediately */ #define CUPS_BACKEND_RETRY_CURRENT 7 /* Retry immediately */
#define CUPS_MARKER_UNAVAILABLE -1
#define CUPS_MARKER_UNKNOWN -2
#define CUPS_MARKER_UNKNOWN_OK -3
/* Argument processing */ /* Argument processing */
#define GETOPT_LIST_GLOBAL "d:DfGhv" #define GETOPT_LIST_GLOBAL "d:DfGhv"
#define GETOPT_PROCESS_GLOBAL \ #define GETOPT_PROCESS_GLOBAL \

View File

@ -1225,7 +1225,7 @@ static int dnpds40_attach(void *vctx, struct libusb_device_handle *dev, int type
ctx->marker[0].name = ctx->media_text; ctx->marker[0].name = ctx->media_text;
ctx->marker[0].numtype = ctx->media; ctx->marker[0].numtype = ctx->media;
ctx->marker[0].levelmax = ctx->media_count_new; ctx->marker[0].levelmax = ctx->media_count_new;
ctx->marker[0].levelnow = -2; ctx->marker[0].levelnow = CUPS_MARKER_UNKNOWN;
ctx->marker_count = 1; ctx->marker_count = 1;
if (ctx->type == P_DNP_DS80D) { if (ctx->type == P_DNP_DS80D) {
@ -1233,7 +1233,7 @@ static int dnpds40_attach(void *vctx, struct libusb_device_handle *dev, int type
ctx->marker[1].name = dnpds80_duplex_media_types(ctx->duplex_media); ctx->marker[1].name = dnpds80_duplex_media_types(ctx->duplex_media);
ctx->marker[1].numtype = ctx->duplex_media; ctx->marker[1].numtype = ctx->duplex_media;
ctx->marker[1].levelmax = ctx->marker[0].levelmax/2; ctx->marker[1].levelmax = ctx->marker[0].levelmax/2;
ctx->marker[1].levelnow = -2; ctx->marker[1].levelnow = CUPS_MARKER_UNKNOWN;
ctx->marker_count++; ctx->marker_count++;
} }
@ -3084,10 +3084,10 @@ static int dnpds40_query_markers(void *vctx, struct marker **markers, int *count
ctx->marker[1].levelnow = 0; ctx->marker[1].levelnow = 0;
break; break;
case DUPLEX_UNIT_PAPER_PROTECTIVE: case DUPLEX_UNIT_PAPER_PROTECTIVE:
ctx->marker[1].levelnow = -1; ctx->marker[1].levelnow = CUPS_MARKER_UNAVAILABLE;
break; break;
case DUPLEX_UNIT_PAPER_PRESENT: case DUPLEX_UNIT_PAPER_PRESENT:
ctx->marker[1].levelnow = -3; ctx->marker[1].levelnow = CUPS_MARKER_UNKNOWN_OK;
break; break;
} }
} }

View File

@ -301,8 +301,8 @@ static int kodak1400_attach(void *vctx, struct libusb_device_handle *dev, int ty
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->marker.name = "Unknown"; ctx->marker.name = "Unknown";
ctx->marker.numtype = -1; ctx->marker.numtype = -1;
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -397,7 +397,7 @@ static int kodak605_attach(void *vctx, struct libusb_device_handle *dev, int typ
ctx->marker.name = kodak6_mediatypes(ctx->media->type); ctx->marker.name = kodak6_mediatypes(ctx->media->type);
ctx->marker.numtype = ctx->media->type; ctx->marker.numtype = ctx->media->type;
ctx->marker.levelmax = 100; /* Ie percentage */ ctx->marker.levelmax = 100; /* Ie percentage */
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -738,7 +738,7 @@ static int kodak6800_attach(void *vctx, struct libusb_device_handle *dev, int ty
ctx->marker.name = kodak6_mediatypes(ctx->media_type); ctx->marker.name = kodak6_mediatypes(ctx->media_type);
ctx->marker.numtype = ctx->media_type; ctx->marker.numtype = ctx->media_type;
ctx->marker.levelmax = 100; /* Ie percentage */ ctx->marker.levelmax = 100; /* Ie percentage */
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -452,8 +452,8 @@ static int magicard_attach(void *vctx, struct libusb_device_handle *dev, int typ
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; // XXX YMCK too! ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; // XXX YMCK too!
ctx->marker.name = "Unknown"; // LC1/LC3/LC6/LC8 ctx->marker.name = "Unknown"; // LC1/LC3/LC6/LC8
ctx->marker.numtype = -1; ctx->marker.numtype = -1;
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -146,8 +146,8 @@ static int mitsup95d_attach(void *vctx, struct libusb_device_handle *dev, int ty
ctx->marker.color = "#000000"; /* Ie black! */ ctx->marker.color = "#000000"; /* Ie black! */
ctx->marker.name = "Unknown"; ctx->marker.name = "Unknown";
ctx->marker.numtype = -1; ctx->marker.numtype = -1;
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }
@ -557,7 +557,7 @@ static int mitsup95d_query_markers(void *vctx, struct marker **markers, int *cou
if (mitsup95d_get_status(ctx, queryresp)) if (mitsup95d_get_status(ctx, queryresp))
return CUPS_BACKEND_FAILED; return CUPS_BACKEND_FAILED;
ctx->marker.levelnow = -3; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
if (ctx->type == P_MITSU_P95D) { if (ctx->type == P_MITSU_P95D) {
if (queryresp[6] & 0x40) { if (queryresp[6] & 0x40) {
@ -569,13 +569,6 @@ static int mitsup95d_query_markers(void *vctx, struct marker **markers, int *cou
} }
} }
/* Lot state */
if (ctx->marker.levelnow)
STATE("-media-empty\n");
else
STATE("+media-empty\n");
*markers = &ctx->marker; *markers = &ctx->marker;
*count = 1; *count = 1;

View File

@ -977,7 +977,7 @@ static int shinkos1245_attach(void *vctx, struct libusb_device_handle *dev, int
ctx->marker.name = ctx->media_8x12 ? "8x12" : "8x10"; ctx->marker.name = ctx->media_8x12 ? "8x12" : "8x10";
ctx->marker.numtype = ctx->media_8x12; ctx->marker.numtype = ctx->media_8x12;
ctx->marker.levelmax = ctx->media_8x12 ? 230 : 280; ctx->marker.levelmax = ctx->media_8x12 ? 230 : 280;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -890,7 +890,7 @@ static int shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, int
ctx->marker.name = sinfonia_print_codes(ctx->media_code, 0); ctx->marker.name = sinfonia_print_codes(ctx->media_code, 0);
ctx->marker.numtype = ctx->media_code; ctx->marker.numtype = ctx->media_code;
ctx->marker.levelmax = media_prints; ctx->marker.levelmax = media_prints;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -1049,7 +1049,7 @@ static int shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, int
ctx->marker.name = print_ribbons(ctx->media.ribbon_code); ctx->marker.name = print_ribbons(ctx->media.ribbon_code);
ctx->marker.numtype = ctx->media.ribbon_code; ctx->marker.numtype = ctx->media.ribbon_code;
ctx->marker.levelmax = ribbon_sizes(ctx->media.ribbon_code); ctx->marker.levelmax = ribbon_sizes(ctx->media.ribbon_code);
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -1015,7 +1015,7 @@ static int shinkos6245_attach(void *vctx, struct libusb_device_handle *dev, int
ctx->marker.name = ribbon_sizes(ctx->media.ribbon_code); ctx->marker.name = ribbon_sizes(ctx->media.ribbon_code);
ctx->marker.numtype = ctx->media.ribbon_code; ctx->marker.numtype = ctx->media.ribbon_code;
ctx->marker.levelmax = 100; ctx->marker.levelmax = 100;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }

View File

@ -121,8 +121,8 @@ static int upd_attach(void *vctx, struct libusb_device_handle *dev, int type,
ctx->marker.name = "Unknown"; ctx->marker.name = "Unknown";
ctx->marker.numtype = -1; ctx->marker.numtype = -1;
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }
@ -583,10 +583,8 @@ static int upd_query_markers(void *vctx, struct marker **markers, int *count)
if (ctx->stsbuf.sts1 == 0x40 || if (ctx->stsbuf.sts1 == 0x40 ||
ctx->stsbuf.sts1 == 0x08) { ctx->stsbuf.sts1 == 0x08) {
ctx->marker.levelnow = 0; ctx->marker.levelnow = 0;
STATE("+media-empty\n");
} else { } else {
ctx->marker.levelnow = -3; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN_OK;
STATE("-media-empty\n");
} }
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;

View File

@ -142,8 +142,8 @@ static int updneo_attach(void *vctx, struct libusb_device_handle *dev, int type,
ctx->marker.name = "Unknown"; ctx->marker.name = "Unknown";
ctx->marker.numtype = -1; ctx->marker.numtype = -1;
ctx->marker.levelmax = -1; ctx->marker.levelmax = CUPS_MARKER_UNAVAILABLE;
ctx->marker.levelnow = -2; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
} else { } else {
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->native_bpp = 3; ctx->native_bpp = 3;