mitsu70x: Support Mitsubishi CP-K60DW-S "HG" media
Apparently there's a "media subtype' field, and HG media needs a different calibration data file.
This commit is contained in:
parent
466222ea68
commit
aaa63cac89
|
@ -75,6 +75,7 @@ struct mitsu70x_ctx {
|
|||
|
||||
struct marker marker[2];
|
||||
uint8_t medias[2];
|
||||
uint8_t media_subtypes[2];
|
||||
|
||||
uint16_t last_l;
|
||||
uint16_t last_u;
|
||||
|
@ -221,7 +222,8 @@ struct mitsu70x_status_deck {
|
|||
uint8_t rsvd_b[3]; /* K60 [3] == ?? */
|
||||
uint8_t media_brand;
|
||||
uint8_t media_type;
|
||||
uint8_t rsvd_c[2];
|
||||
uint8_t media_subtype; /* K60 only? */
|
||||
uint8_t rsvd_c[1];
|
||||
int16_t capacity; /* media capacity */
|
||||
int16_t remain; /* media remaining */
|
||||
uint8_t rsvd_d[2];
|
||||
|
@ -285,12 +287,13 @@ struct mitsu70x_calinfo_resp { /* Interpretations valid for ASK300 */
|
|||
1b 45 48 [30 31 32] <-- No resp [30 any deck, 31 is lower, 32 is upper?]
|
||||
1b 45 4a [30 31 32] <-- No resp [30 any deck, 31 is lower, 32 is upper?]
|
||||
1b 45 53 00 10 [ ...? ] XX XX . "set printer number"..
|
||||
1b 45 53 90 00 0a [ ... 9 bytes of something ] 10
|
||||
1b 52 XX 00 <-- XX = something + 0x51
|
||||
1b 54 00 [00 31 32] <-- No resp [00 any, 31 lower, 32 upper???]
|
||||
1b 54 31 00 "feed and cut"
|
||||
1b 54 53 90 00 0a 00 00 00 00 00 00 00 00 00 00
|
||||
1b 56 34 [31 32]
|
||||
1b 5a 43 00
|
||||
1b 56 34 [31 32] <-- 6 byte response, last two bytes are value.
|
||||
1b 5a 43 00 <-- No resp
|
||||
1b 67 18 ... (??)
|
||||
1b 6a ... Various test commands
|
||||
1b 6e ... (??)
|
||||
|
@ -646,6 +649,7 @@ static int mitsu70x_attach(void *vctx, struct dyesub_connection *conn, uint8_t j
|
|||
ctx->marker[0].levelmax = be16_to_cpu(resp.lower.capacity);
|
||||
ctx->marker[0].levelnow = be16_to_cpu(resp.lower.remain);
|
||||
ctx->medias[0] = resp.lower.media_type & 0xf;
|
||||
ctx->media_subtypes[0] = resp.lower.media_subtype;
|
||||
|
||||
if (ctx->num_decks == 2) {
|
||||
ctx->marker[1].color = "#00FFFF#FF00FF#FFFF00";
|
||||
|
@ -654,6 +658,7 @@ static int mitsu70x_attach(void *vctx, struct dyesub_connection *conn, uint8_t j
|
|||
ctx->marker[1].levelmax = be16_to_cpu(resp.upper.capacity);
|
||||
ctx->marker[1].levelnow = be16_to_cpu(resp.upper.remain);
|
||||
ctx->medias[1] = resp.upper.media_type & 0xf;
|
||||
ctx->media_subtypes[1] = resp.upper.media_subtype;
|
||||
}
|
||||
|
||||
/* Store the FW version */
|
||||
|
@ -963,7 +968,7 @@ repeat:
|
|||
|
||||
if (mhdr.speed == 3) {
|
||||
job->cpcfname = "CPD80S01.cpc";
|
||||
job->ecpcfname = "CPD80E01.cpc";
|
||||
job->ecpcfname = "CPD80E01.cpc"; /* For SuperFine in rewind mode, depending on image.. */
|
||||
} else if (mhdr.speed == 4) {
|
||||
job->cpcfname = "CPD80U01.cpc";
|
||||
job->ecpcfname = NULL;
|
||||
|
@ -981,9 +986,15 @@ repeat:
|
|||
|
||||
if (mhdr.speed == 3 || mhdr.speed == 4) {
|
||||
mhdr.speed = 4; /* Ultra Fine */
|
||||
job->cpcfname = "CPS60T03.cpc";
|
||||
if (ctx->media_subtypes[0] == 0x10) /* HG media */
|
||||
job->cpcfname = "CPS60H03.cpc";
|
||||
else
|
||||
job->cpcfname = "CPS60T03.cpc";
|
||||
} else {
|
||||
job->cpcfname = "CPS60T01.cpc";
|
||||
if (ctx->media_subtypes[0] == 0x10) /* HG media */
|
||||
job->cpcfname = "CPS60H01.cpc";
|
||||
else
|
||||
job->cpcfname = "CPS60T01.cpc";
|
||||
}
|
||||
if (mhdr.hdr[3] != 0x00) {
|
||||
WARNING("Print job has wrong submodel specifier (%x)\n", mhdr.hdr[3]);
|
||||
|
@ -2202,10 +2213,11 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_ctx *ctx,
|
|||
INFO("Lower Temperature: %s\n", mitsu_temperatures(resp->lower.temperature));
|
||||
INFO("Lower Mechanical Status: %s\n",
|
||||
mitsu70x_mechastatus(resp->lower.mecha_status));
|
||||
INFO("Lower Media Type: %s (%02x/%02x)\n",
|
||||
INFO("Lower Media Type: %s (%02x/%02x/%02x)\n",
|
||||
mitsu_media_types(ctx->conn->type, resp->lower.media_brand, resp->lower.media_type),
|
||||
resp->lower.media_brand,
|
||||
resp->lower.media_type);
|
||||
resp->lower.media_type,
|
||||
resp->lower.media_subtype);
|
||||
INFO("Lower Prints Remaining: %03d/%03d\n",
|
||||
be16_to_cpu(resp->lower.remain),
|
||||
be16_to_cpu(resp->lower.capacity));
|
||||
|
@ -2224,10 +2236,11 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_ctx *ctx,
|
|||
INFO("Upper Temperature: %s\n", mitsu_temperatures(resp->upper.temperature));
|
||||
INFO("Upper Mechanical Status: %s\n",
|
||||
mitsu70x_mechastatus(resp->upper.mecha_status));
|
||||
INFO("Upper Media Type: %s (%02x/%02x)\n",
|
||||
INFO("Upper Media Type: %s (%02x/%02x/%02x)\n",
|
||||
mitsu_media_types(ctx->conn->type, resp->upper.media_brand, resp->upper.media_type),
|
||||
resp->upper.media_brand,
|
||||
resp->upper.media_type);
|
||||
resp->upper.media_type,
|
||||
resp->upper.media_subtype);
|
||||
INFO("Upper Prints Remaining: %03d/%03d\n",
|
||||
be16_to_cpu(resp->upper.remain),
|
||||
be16_to_cpu(resp->upper.capacity));
|
||||
|
@ -2537,7 +2550,7 @@ static const char *mitsu70x_prefixes[] = {
|
|||
/* Exported */
|
||||
const struct dyesub_backend mitsu70x_backend = {
|
||||
.name = "Mitsubishi CP-D70 family",
|
||||
.version = "0.103" " (lib " LIBMITSU_VER ")",
|
||||
.version = "0.104" " (lib " LIBMITSU_VER ")",
|
||||
.flags = BACKEND_FLAG_DUMMYPRINT,
|
||||
.uri_prefixes = mitsu70x_prefixes,
|
||||
.cmdline_usage = mitsu70x_cmdline,
|
||||
|
@ -2556,7 +2569,7 @@ const struct dyesub_backend mitsu70x_backend = {
|
|||
.devices = {
|
||||
{ 0x06d3, 0x3b30, P_MITSU_D70X, NULL, "mitsubishi-d70dw"},
|
||||
{ 0x06d3, 0x3b30, P_MITSU_D70X, NULL, "mitsubishi-d707dw"}, /* Duplicate */
|
||||
{ 0x06d3, 0x3b31, P_MITSU_K60, NULL, "mitsubishi-k60dw"},
|
||||
{ 0x06d3, 0x3b31, P_MITSU_K60, NULL, "mitsubishi-k60dw"}, // variation type?
|
||||
{ 0x06d3, 0x3b36, P_MITSU_D80, NULL, "mitsubishi-d80dw"},
|
||||
{ 0x040a, 0x404f, P_KODAK_305, NULL, "kodak-305"},
|
||||
{ 0x04cb, 0x5006, P_FUJI_ASK300, NULL, "fujifilm-ask-300"},
|
||||
|
|
|
@ -413,6 +413,7 @@ static const char *mitsud90_error_codes(const uint8_t *code)
|
|||
case 0x70:
|
||||
case 0x71:
|
||||
case 0x73:
|
||||
case 0x74:
|
||||
case 0x75:
|
||||
return "Mechanical Error (check ribbon and power cycle)";
|
||||
case 0x82:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue