kodak8810: Printer is now confirmed working.

This commit is contained in:
Solomon Peachy 2019-08-13 08:48:07 -04:00
parent a1921cf334
commit 7c7ef5f7e2
4 changed files with 40 additions and 14 deletions

7
README
View File

@ -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:

View File

@ -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,

View File

@ -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";

View File

@ -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