s6145: Handle the CS2-c / S6145-5A "hashtag" printer's native media size

This commit is contained in:
Solomon Peachy 2020-08-08 16:36:23 -04:00
parent c3b605b7c5
commit 8244e13db1
1 changed files with 37 additions and 14 deletions

View File

@ -570,27 +570,49 @@ static const char *s2245_error_codes(uint8_t major, uint8_t minor)
#define RIBBON_5x7 0x03 #define RIBBON_5x7 0x03
#define RIBBON_6x8 0x04 #define RIBBON_6x8 0x04
#define RIBBON_6x9 0x05 #define RIBBON_6x9 0x05
// XXX what about 89xXXXmm ribbons?
static int ribbon_sizes (uint8_t v) { #define RIBBON_89x60mm 0x01
static int ribbon_sizes (uint8_t v, uint8_t is_card, uint8_t is_2245) {
if (is_card) {
return 450;
}
switch (v) { switch (v) {
case RIBBON_4x6: case RIBBON_4x6:
return 300; if (is_2245)
return 900;
else
return 300;
case RIBBON_3_5x5: case RIBBON_3_5x5:
return 340; return 340;
case RIBBON_5x7: case RIBBON_5x7:
return 170; return 170;
case RIBBON_6x8: case RIBBON_6x8:
return 150; if (is_2245)
return 450;
else
return 150;
case RIBBON_6x9: case RIBBON_6x9:
return 130; // XXX guessed return 130; // XXX guessed
// XXX 89x??? rubbons.
default: default:
return 300; // don't want 0. if (is_2245)
return 450;
else
return 300;
} }
} }
static const char *print_ribbons (uint8_t v) { static const char *print_ribbons (uint8_t v, uint8_t is_card) {
if (is_card) {
if (v == RIBBON_89x60mm)
return "89x60mm";
else if (v == RIBBON_NONE)
return "None";
else
return "Unknown";
}
switch (v) { switch (v) {
case RIBBON_NONE: case RIBBON_NONE:
return "None"; return "None";
@ -604,7 +626,6 @@ static const char *print_ribbons (uint8_t v) {
return "6x8"; return "6x8";
case RIBBON_6x9: case RIBBON_6x9:
return "6x9"; return "6x9";
// XXX 89x??? ribbons.
default: default:
return "Unknown"; return "Unknown";
} }
@ -646,6 +667,8 @@ struct shinkos6145_ctx {
char serial[32]; char serial[32];
char fwver[32]; char fwver[32];
int is_card; /* card printer model */
struct marker marker; struct marker marker;
struct sinfonia_6x45_mediainfo_resp media; struct sinfonia_6x45_mediainfo_resp media;
@ -800,11 +823,11 @@ static int get_status(struct shinkos6145_ctx *ctx)
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
} }
static void dump_mediainfo(struct sinfonia_6x45_mediainfo_resp *resp) static void dump_mediainfo(struct sinfonia_6x45_mediainfo_resp *resp, int is_card)
{ {
int i; int i;
INFO("Loaded Media Type: %s\n", print_ribbons(resp->ribbon_code)); INFO("Loaded Media Type: %s\n", print_ribbons(resp->ribbon_code, is_card));
INFO("Supported Print Sizes: %u entries:\n", resp->count); INFO("Supported Print Sizes: %u entries:\n", resp->count);
for (i = 0 ; i < resp->count ; i++) { for (i = 0 ; i < resp->count ; i++) {
INFO(" %02d: C 0x%02x (%s), %04ux%04u, P 0x%02x (%s)\n", i, INFO(" %02d: C 0x%02x (%s), %04ux%04u, P 0x%02x (%s)\n", i,
@ -1165,7 +1188,7 @@ static int shinkos6145_cmdline_arg(void *vctx, int argc, char **argv)
j = sinfonia_settonecurve(&ctx->dev, UPDATE_TARGET_TONE_CURRENT, optarg); j = sinfonia_settonecurve(&ctx->dev, UPDATE_TARGET_TONE_CURRENT, optarg);
break; break;
case 'm': case 'm':
dump_mediainfo(&ctx->media); dump_mediainfo(&ctx->media, ctx->is_card);
break; break;
case 'q': case 'q':
j = shinkos6145_dump_eeprom(ctx, optarg); j = shinkos6145_dump_eeprom(ctx, optarg);
@ -1298,9 +1321,9 @@ static int shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, int
} }
ctx->marker.color = "#00FFFF#FF00FF#FFFF00"; ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->marker.name = print_ribbons(ctx->media.ribbon_code); ctx->marker.name = print_ribbons(ctx->media.ribbon_code, ctx->is_card);
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->is_card, ctx->dev.type == P_SHINKO_S2245);
ctx->marker.levelnow = CUPS_MARKER_UNKNOWN; ctx->marker.levelnow = CUPS_MARKER_UNKNOWN;
return CUPS_BACKEND_OK; return CUPS_BACKEND_OK;
@ -1990,7 +2013,7 @@ static const char *shinkos6145_prefixes[] = {
struct dyesub_backend shinkos6145_backend = { struct dyesub_backend shinkos6145_backend = {
.name = "Shinko/Sinfonia CHC-S6145/CS2/S2245/S3", .name = "Shinko/Sinfonia CHC-S6145/CS2/S2245/S3",
.version = "0.42" " (lib " LIBSINFONIA_VER ")", .version = "0.43" " (lib " LIBSINFONIA_VER ")",
.uri_prefixes = shinkos6145_prefixes, .uri_prefixes = shinkos6145_prefixes,
.cmdline_usage = shinkos6145_cmdline, .cmdline_usage = shinkos6145_cmdline,
.cmdline_arg = shinkos6145_cmdline_arg, .cmdline_arg = shinkos6145_cmdline_arg,