From ed8e2f18b11ae45a97a5ec18a48abad97caafda0 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Mon, 6 May 2019 13:38:09 -0400 Subject: [PATCH] shinko: Some minor cleanups. My goal here is to eventually unify these backends. --- backend_shinkos2145.c | 33 ++++++++++++++++++++++++--------- backend_shinkos6145.c | 21 ++++++++++++++------- backend_shinkos6245.c | 18 +++++++++++++----- 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/backend_shinkos2145.c b/backend_shinkos2145.c index 5130b3b..9ebb106 100644 --- a/backend_shinkos2145.c +++ b/backend_shinkos2145.c @@ -65,7 +65,7 @@ struct s2145_printjob_hdr { uint32_t unk6; uint32_t method; - uint32_t mode; + uint32_t oc_mode; uint32_t unk7; uint32_t unk8; @@ -986,8 +986,8 @@ static void dump_mediainfo(struct s2145_mediainfo_resp *resp) for (i = 0 ; i < resp->count ; i++) { INFO(" %02d: C 0x%02x (%s), %04ux%04u, M 0x%02x (%s), P 0x%02x (%s)\n", i, resp->items[i].code, print_sizes(resp->items[i].code), - le16_to_cpu(resp->items[i].columns), - le16_to_cpu(resp->items[i].rows), + resp->items[i].columns, + resp->items[i].rows, resp->items[i].media_type, media_types(resp->items[i].media_type), resp->items[i].print_type, print_methods(resp->items[i].print_type)); } @@ -1386,7 +1386,6 @@ static int shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, int uint8_t endp_up, uint8_t endp_down, uint8_t jobid) { struct shinkos2145_ctx *ctx = vctx; - int i; ctx->dev = dev; ctx->endp_up = endp_up; @@ -1404,6 +1403,7 @@ static int shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, int struct s2145_cmd_hdr cmd; struct s2145_mediainfo_resp *resp = (struct s2145_mediainfo_resp *) rdbuf; int num = 0; + int i; cmd.cmd = cpu_to_le16(S2145_CMD_MEDIAINFO); cmd.len = cpu_to_le16(0); @@ -1417,6 +1417,12 @@ static int shinkos2145_attach(void *vctx, struct libusb_device_handle *dev, int } memcpy(&ctx->media, resp, sizeof(ctx->media)); + /* Byteswap media descriptor.. */ + for (i = 0 ; i < ctx->media.count ; i++) { + ctx->media.items[i].columns = le16_to_cpu(ctx->media.items[i].columns); + ctx->media.items[i].rows = le16_to_cpu(ctx->media.items[i].rows); + } + /* Figure out the media type... */ for (i = 0 ; i < ctx->media.count ; i++) { if (print_counts(ctx->media.items[i].code) < media_prints) { @@ -1465,7 +1471,8 @@ static void shinkos2145_teardown(void *vctx) { #define SINFONIA_HDR_LEN (SINFONIA_HDR1_LEN + SINFONIA_HDR2_LEN) #define SINFONIA_DPI 300 -int sinfonia_read_parse(int data_fd, uint32_t model, void *vhdr, uint8_t **data, int *datalen) +int sinfonia_read_parse(int data_fd, uint32_t model, void *vhdr, + uint8_t **data, int *datalen) { uint32_t *hdr = vhdr; int ret, i; @@ -1550,6 +1557,14 @@ int sinfonia_read_parse(int data_fd, uint32_t model, void *vhdr, uint8_t **data, return CUPS_BACKEND_CANCEL; } + /* Fill in what's left */ + // *copies = + // *oc_mode = + // *media = + // *method = + // *cols = + // *rows = + return CUPS_BACKEND_OK; } @@ -1603,8 +1618,8 @@ static int shinkos2145_main_loop(void *vctx, const void *vjob) { /* Validate print sizes */ for (i = 0; i < ctx->media.count ; i++) { /* Look for matching media */ - if (le16_to_cpu(ctx->media.items[i].columns) == cpu_to_le16(job->hdr.columns) && - le16_to_cpu(ctx->media.items[i].rows) == cpu_to_le16(job->hdr.rows) && + if (ctx->media.items[i].columns == job->hdr.columns && + ctx->media.items[i].rows == job->hdr.rows && ctx->media.items[i].print_type == job->hdr.method) break; } @@ -1689,7 +1704,7 @@ top: print->columns = cpu_to_le16(job->hdr.columns); print->rows = cpu_to_le16(job->hdr.rows); print->media = job->hdr.media; - print->mode = job->hdr.mode; + print->mode = job->hdr.oc_mode; print->method = job->hdr.method; if ((ret = s2145_do_cmd(ctx, @@ -1838,7 +1853,7 @@ static const char *shinkos2145_prefixes[] = { struct dyesub_backend shinkos2145_backend = { .name = "Shinko/Sinfonia CHC-S2145/S2", - .version = "0.57", + .version = "0.58", .uri_prefixes = shinkos2145_prefixes, .cmdline_usage = shinkos2145_cmdline, .cmdline_arg = shinkos2145_cmdline_arg, diff --git a/backend_shinkos6145.c b/backend_shinkos6145.c index e720e7e..32f8e58 100644 --- a/backend_shinkos6145.c +++ b/backend_shinkos6145.c @@ -99,7 +99,7 @@ enum { struct s6145_printjob_hdr { uint32_t len1; /* Fixed at 0x10 */ uint32_t model; /* Equal to the printer model (eg '6245' or '1245' decimal) */ - uint32_t media_w; /* 0x02 for 5", 0x03 for 6" */ + uint32_t media_w; /* 0x02 for 5", 0x03 for 6" <-- IGNORED by backend. */ uint32_t unk3; /* Fixed at 0x01 */ uint32_t len2; /* Fixed at 0x64 */ @@ -108,7 +108,7 @@ struct s6145_printjob_hdr { uint32_t unk6; uint32_t method; /* 0x00 normal, 0x02 4x6*2, 0x04 2x6*2, 0x05 6x6+2x6 */ - uint32_t qual; /* 0x00 default, 0x01 std */ + uint32_t qual; /* 0x00 default, 0x01 std <-- IGNORED by backend */ uint32_t oc_mode; /* 0x00 default, 0x01 off, 0x02 glossy, 0x03 matte */ uint32_t unk8; @@ -1366,8 +1366,8 @@ static void dump_mediainfo(struct s6145_mediainfo_resp *resp) for (i = 0 ; i < resp->count ; i++) { INFO(" %02d: C 0x%02x (%s), %04ux%04u, P 0x%02x (%s)\n", i, resp->items[i].media_code, print_sizes(resp->items[i].media_code), - le16_to_cpu(resp->items[i].columns), - le16_to_cpu(resp->items[i].rows), + resp->items[i].columns, + resp->items[i].rows, resp->items[i].print_method, print_methods(resp->items[i].print_method)); } } @@ -1938,6 +1938,13 @@ static int shinkos6145_attach(void *vctx, struct libusb_device_handle *dev, int return CUPS_BACKEND_FAILED; } memcpy(&ctx->media, resp, sizeof(*resp)); + + /* Byteswap media descriptor.. */ + int i; + for (i = 0 ; i < ctx->media.count ; i++) { + ctx->media.items[i].columns = le16_to_cpu(ctx->media.items[i].columns); + ctx->media.items[i].rows = le16_to_cpu(ctx->media.items[i].rows); + } } else { int media_code = RIBBON_6x8; if (getenv("MEDIA_CODE")) @@ -2184,8 +2191,8 @@ static int shinkos6145_main_loop(void *vctx, const void *vjob) { /* Validate print sizes */ for (i = 0; i < media->count ; i++) { /* Look for matching media */ - if (le16_to_cpu(media->items[i].columns) == job->hdr.columns && - le16_to_cpu(media->items[i].rows) == job->hdr.rows && + if (media->items[i].columns == job->hdr.columns && + media->items[i].rows == job->hdr.rows && media->items[i].print_method == job->hdr.method && media->items[i].media_code == job->hdr.media) break; @@ -2487,7 +2494,7 @@ static const char *shinkos6145_prefixes[] = { struct dyesub_backend shinkos6145_backend = { .name = "Shinko/Sinfonia CHC-S6145/CS2", - .version = "0.32", + .version = "0.33", .uri_prefixes = shinkos6145_prefixes, .cmdline_usage = shinkos6145_cmdline, .cmdline_arg = shinkos6145_cmdline_arg, diff --git a/backend_shinkos6245.c b/backend_shinkos6245.c index 4cf0472..90f7de5 100644 --- a/backend_shinkos6245.c +++ b/backend_shinkos6245.c @@ -1128,8 +1128,8 @@ static void dump_mediainfo(struct s6245_mediainfo_resp *resp) for (i = 0 ; i < resp->count ; i++) { INFO(" %02d: C 0x%02x (%s), %04ux%04u, P 0x%02x (%s)\n", i, resp->items[i].media_code, print_sizes(resp->items[i].media_code), - le16_to_cpu(resp->items[i].columns), - le16_to_cpu(resp->items[i].rows), + resp->items[i].columns, + resp->items[i].rows, resp->items[i].print_method, print_methods(resp->items[i].print_method)); } } @@ -1494,6 +1494,14 @@ static int shinkos6245_attach(void *vctx, struct libusb_device_handle *dev, int ERROR("Failed to execute %s command\n", cmd_names(cmd.cmd)); return CUPS_BACKEND_FAILED; } + + /* Byteswap media descriptor.. */ + int i; + for (i = 0 ; i < ctx->media.count ; i++) { + ctx->media.items[i].columns = le16_to_cpu(ctx->media.items[i].columns); + ctx->media.items[i].rows = le16_to_cpu(ctx->media.items[i].rows); + } + } else { int media_code = 0x12; if (getenv("MEDIA_CODE")) @@ -1607,8 +1615,8 @@ static int shinkos6245_main_loop(void *vctx, const void *vjob) { /* Validate print sizes */ for (i = 0; i < ctx->media.count ; i++) { /* Look for matching media */ - if (le16_to_cpu(ctx->media.items[i].columns) == cpu_to_le16(job->hdr.columns) && - le16_to_cpu(ctx->media.items[i].rows) == cpu_to_le16(job->hdr.rows)) + if (ctx->media.items[i].columns == job->hdr.columns && + ctx->media.items[i].rows == job->hdr.rows) break; } if (i == ctx->media.count) { @@ -1860,7 +1868,7 @@ static const char *shinkos6245_prefixes[] = { struct dyesub_backend shinkos6245_backend = { .name = "Shinko/Sinfonia CHC-S6245", - .version = "0.16WIP", + .version = "0.17WIP", .uri_prefixes = shinkos6245_prefixes, .cmdline_usage = shinkos6245_cmdline, .cmdline_arg = shinkos6245_cmdline_arg,