From 7c7ef5f7e2da489a42f341b872e83aabcdcfae2b Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Tue, 13 Aug 2019 08:48:07 -0400 Subject: [PATCH] kodak8810: Printer is now confirmed working. --- README | 7 +++++-- backend_shinkos6245.c | 37 ++++++++++++++++++++++++++++--------- backend_sinfonia.c | 1 + backend_sinfonia.h | 9 ++++++--- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/README b/README index 2626933..3f8d760 100644 --- a/README +++ b/README @@ -43,6 +43,7 @@ Kodak 6800 Photo Printer Kodak 6850 Photo Printer Kodak 7000 Photo Printer + Kodak 8810 Photo Printer Magicard Tango 2E Mitsubishi CP-3800DW Mitsubishi CP-9550D/DW/DW-S/DZ/DZ-S @@ -69,7 +70,6 @@ ICI Imagedata OP900 Kodak 6900 Kodak 7010 / 7015 - Kodak 8810 Magicard Rio 2E (and other Magicard models) Mitsubishi CP-3020D/DE and CP-3020DA/DAE Mitsubishi CP-9000DW, CP-9500DW, and CP-9600DW-S @@ -710,10 +710,13 @@ shinkos6245 hitip910 + Verified supported printers: + + Kodak 8810 + Work-in-process printers: HiTi P910L - Kodak 8810 Shinko CHC-S6245 (aka "Sinfonia CE1") Valid commands: diff --git a/backend_shinkos6245.c b/backend_shinkos6245.c index 5b7a321..75883c9 100644 --- a/backend_shinkos6245.c +++ b/backend_shinkos6245.c @@ -59,7 +59,9 @@ struct s6245_print_cmd { uint16_t count; uint16_t columns; uint16_t rows; - uint8_t reserved[8]; // columns and rows repeated, then nulls + uint16_t columns2; + uint16_t rows2; + uint8_t reserved[4]; uint8_t mode; uint8_t method; uint8_t reserved2; @@ -357,6 +359,8 @@ struct s6245_mediainfo_resp { #define RIBBON_8x10 0x11 #define RIBBON_8x12 0x12 +#define RIBBON_8x12K 0x04 /* EK8810 */ + static const char *ribbon_sizes (uint8_t v) { switch (v) { case RIBBON_NONE: @@ -364,6 +368,7 @@ static const char *ribbon_sizes (uint8_t v) { case RIBBON_8x10: return "8x10"; case RIBBON_8x12: + case RIBBON_8x12K: return "8x12"; default: return "Unknown"; @@ -591,7 +596,11 @@ int shinkos6245_cmdline_arg(void *vctx, int argc, char **argv) j = sinfonia_settonecurve(&ctx->dev, TONECURVE_USER, optarg); break; case 'e': - j = get_errorlog(ctx); + if (ctx->dev.type == P_KODAK_8810) { + j = sinfonia_geterrorlog(&ctx->dev); + } else { + j = get_errorlog(ctx); + } break; case 'F': j = sinfonia_flashled(&ctx->dev); @@ -758,7 +767,7 @@ static int shinkos6245_main_loop(void *vctx, const void *vjob) { int ret, num; uint8_t cmdbuf[CMDBUF_LEN]; - int i, last_state = -1, state = S_IDLE; + int last_state = -1, state = S_IDLE; uint8_t mcut; int copies; @@ -792,6 +801,8 @@ static int shinkos6245_main_loop(void *vctx, const void *vjob) { } // XXX what about mcut |= PRINT_METHOD_DISABLE_ERR; +#if 0 + int i; /* Validate print sizes */ for (i = 0; i < ctx->media.count ; i++) { /* Look for matching media */ @@ -803,9 +814,18 @@ static int shinkos6245_main_loop(void *vctx, const void *vjob) { ERROR("Incorrect media loaded for print!\n"); return CUPS_BACKEND_HOLD; } +#else + if (ctx->media.ribbon_code != RIBBON_8x12 && + ctx->media.ribbon_code != RIBBON_8x12K && + job->jp.rows > 3000) { + ERROR("Incorrect media loaded for print!\n"); + return CUPS_BACKEND_HOLD; + } + +#endif /* Send Set Time */ - { + if (ctx->dev.type != P_KODAK_8810) { struct s6245_settime_cmd *settime = (struct s6245_settime_cmd *)cmdbuf; time_t now = time(NULL); struct tm *cur = localtime(&now); @@ -904,11 +924,10 @@ top: memset(cmdbuf, 0, CMDBUF_LEN); print->hdr.cmd = cpu_to_le16(SINFONIA_CMD_PRINTJOB); print->hdr.len = cpu_to_le16(sizeof (*print) - sizeof(*cmd)); - print->id = ctx->jobid; print->count = cpu_to_le16(copies); - print->columns = cpu_to_le16(job->jp.columns); - print->rows = cpu_to_le16(job->jp.rows); + print->columns = print->columns2 = cpu_to_le16(job->jp.columns); + print->rows = print->rows2 = cpu_to_le16(job->jp.rows); print->mode = job->jp.oc_mode; print->method = mcut; @@ -1044,8 +1063,8 @@ static const char *shinkos6245_prefixes[] = { }; struct dyesub_backend shinkos6245_backend = { - .name = "Shinko/Sinfonia CHC-S6245", - .version = "0.20WIP" " (lib " LIBSINFONIA_VER ")", + .name = "Sinfonia CHC-S6245 / Kodak 8810", + .version = "0.21" " (lib " LIBSINFONIA_VER ")", .uri_prefixes = shinkos6245_prefixes, .cmdline_usage = shinkos6245_cmdline, .cmdline_arg = shinkos6245_cmdline_arg, diff --git a/backend_sinfonia.c b/backend_sinfonia.c index c28a22e..d799fa0 100644 --- a/backend_sinfonia.c +++ b/backend_sinfonia.c @@ -812,6 +812,7 @@ const char *sinfonia_print_codes (uint8_t v, int eightinch) { case CODE_8x10: return "8x10"; case CODE_8x12: + case CODE_8x12K: return "8x12"; case CODE_8x4: return "8x4"; diff --git a/backend_sinfonia.h b/backend_sinfonia.h index 5279679..c0c2c40 100644 --- a/backend_sinfonia.h +++ b/backend_sinfonia.h @@ -27,7 +27,7 @@ * */ -#define LIBSINFONIA_VER "0.07" +#define LIBSINFONIA_VER "0.08" #define SINFONIA_HDR1_LEN 0x10 #define SINFONIA_HDR2_LEN 0x64 @@ -45,7 +45,7 @@ struct sinfonia_job_param { uint32_t quality; - int mattedepth; + int mattedepth; uint32_t dust; uint32_t ext_flags; @@ -326,9 +326,9 @@ struct sinfonia_printcmd18_hdr { uint16_t columns; uint16_t rows; uint8_t reserved[8]; // columns and rows repeated, then nulls - uint8_t media; uint8_t oc_mode; uint8_t method; + uint8_t media; // reserved? } __attribute__((packed)); struct sinfonia_printcmd28_hdr { @@ -363,6 +363,9 @@ struct sinfonia_printcmd28_hdr { #define CODE_8x6_2 0x32 #define CODE_8x4_3 0x40 +#define CODE_8x12K 0x02 /* Kodak 8810 */ + + #define CODE_89x60mm 0x10 #define CODE_89x59mm 0x11 #define CODE_89x58mm 0x12