mitsu70x: Add support for the DNP DS480 and DS680 models.

These are variations of the Mitsubishi D70, and were only ever sold
as part of a complete minilab-eseque system.
This commit is contained in:
Solomon Peachy 2023-07-23 17:40:54 -04:00
parent 6c587b3576
commit 2269ba3ebd
9 changed files with 92 additions and 14 deletions

9
README
View file

@ -36,6 +36,8 @@
DNP DS620 / DS620A / Citizen CX-02
DNP DS820 / DS820A / Citizen CX-02W
DNP QW410 / Citizen CZ-01
DNP DS480
DNP DS680
Fujifilm ASK-300
HiTi P461 (aka Prinhome)
HiTi P510 series
@ -967,6 +969,7 @@
mitsubishi-d70dw mitsubishi-d80dw mitsubishi-k60dw
fujifilm-ask-300 mitsubishi-d707dw mitsubishi-k60dws
dnp-ds480 dnp-ds680
Model IDs for backwards compatibility with older releases:
@ -974,6 +977,8 @@
Verified supported printers:
DNP DS480
DNP DS680
Fujifilm ASK-300
Kodak 305
Mitsubishi CP-D70DW
@ -983,14 +988,14 @@
Mitsubishi CP-D80DW
Mitsubishi CP-K60DW-S
Unsupported printers (Unknown VID/PID):
Unsupported printers (Unknown USB PIDs):
Mitsubishi CP-D80DW-S
Development was sponsored in part by:
Schreiber & Freunde GmbH & Co. KG
A generous benefactor who wishes to remain anonymous
Three generous benefactors who wish to remain anonymous
*** VERY IMPORTANT ***

View file

@ -110,6 +110,7 @@ enum {
P_DNP_DS820,
P_DNP_DSRX1,
P_DNP_QW410,
P_DNP_DSX80,
P_ES1,
P_ES2_20,
P_ES3_30,

View file

@ -1,7 +1,7 @@
/*
* Mitsubishi Photo Printer Comon Code
*
* (c) 2013-2021 Solomon Peachy <pizza@shaftnet.org>
* (c) 2013-2023 Solomon Peachy <pizza@shaftnet.org>
*
* The latest version of this program can be found at:
*
@ -342,6 +342,13 @@ const char *mitsu_media_types(int printer, uint8_t brand, uint8_t type)
return "CK-D723 (6x9)";
else if (type == 0x0f)
return "CK-D720 (6x8)";
} else if (brand == 0xd6) { /* DNP */
if (type == 0x74)
return "DNP 5x7";
else if (type == 0x7f)
return "DNP 6x8";
else if (type == 0x90)
return "DNP 4x8";
}
return "Unknown";

View file

@ -1,7 +1,7 @@
/*
* Mitsubishi CP-D70/D707 Photo Printer CUPS backend -- libusb-1.0 version
*
* (c) 2013-2022 Solomon Peachy <pizza@shaftnet.org>
* (c) 2013-2023 Solomon Peachy <pizza@shaftnet.org>
*
* The latest version of this program can be found at:
*
@ -574,7 +574,6 @@ static const char *mitsu70x_errors(uint8_t *err)
return "Unknown error";
}
#define CMDBUF_LEN 512
#define READBACK_LEN 256
@ -780,11 +779,18 @@ static void *mitsu70x_combine_jobs(const void *vjob1,
finalpad = 0;
lamoffset = 0;
break;
case 1228: /* D70, ASK300, D80 */
newrows = 2730;
newpad = 38;
finalpad = 236;
lamoffset = 12;
case 1228: /* D70, ASK300, D80, DS480/DS680 */
if (job1->cols == 1264) { // DS480 4" wide..
newrows = 2494;
newpad = 38;
finalpad = 0;
lamoffset = 12;
} else {
newrows = 2730;
newpad = 38;
finalpad = 236;
lamoffset = 12;
}
break;
case 1076: /* EK305, K60 3.5x5" prints */
newrows = 2190;
@ -1031,6 +1037,20 @@ repeat:
WARNING("Print job has wrong submodel specifier (%x)\n", mhdr.hdr[3]);
mhdr.hdr[3] = 0x80;
}
} else if (ctx->conn->type == P_DNP_DSX80) { // XXX Correct when we get it.
job->laminatefname = "D70MAT01.raw";
job->lutfname = "CPD70L01.lut";
if (mhdr.speed == 3 || mhdr.speed == 4) {
mhdr.speed = 3; /* Super Fine */
job->cpcfname = "CPD70S01.cpc";
} else {
job->cpcfname = "CPD70N01.cpc";
}
if (mhdr.hdr[3] != 0x04) {
WARNING("Print job has wrong submodel specifier (%x)\n", mhdr.hdr[3]);
mhdr.hdr[3] = 0x04;
}
}
if (!mhdr.use_lut)
job->lutfname = NULL;
@ -1140,6 +1160,18 @@ repeat:
bypass_raw:
for (i = 0 ; i < ctx->num_decks ; i++) {
switch (ctx->medias[i]) {
case 0x0: // 4x8 (DS480 only)
if (job->rows == 1228 ||
job->rows == 1614 ||
job->rows == 2422 ||
job->rows == 2494)
job->decks_ok[i] = 1;
if (job->rows == 2422 ||
job->rows == 2494)
job->decks_exact[i] = 1;
if (job->cols != 1264)
job->decks_ok[i] = job->decks_exact[i] = 0;
break;
case 0x1: // 5x3.5
if (job->rows == 1076)
job->decks_ok[i] = 1;
@ -1199,7 +1231,8 @@ bypass_raw:
if (ctx->medias[0] == 0xf ||
ctx->medias[0] == 0x5 ||
ctx->medias[1] == 0xf || /* Two decks possible */
ctx->medias[1] == 0x5)
ctx->medias[1] == 0x5 ||
ctx->medias[0] == 0x00 /* DS480 only */)
job->common.can_combine = !job->raw_format;
} else if (job->rows == 1076) {
if (ctx->conn->type == P_KODAK_305 ||
@ -2195,6 +2228,8 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_ctx *ctx,
uint8_t memory = ~resp->memory;
INFO("Model : ");
if (resp->model[5] == '-')
resp->model[5] = ' ';
for (i = 0 ; i < 6 ; i++) {
DEBUG2("%c", le16_to_cpu(resp->model[i]) & 0x7f);
}
@ -2584,7 +2619,7 @@ static const char *mitsu70x_prefixes[] = {
/* Exported */
const struct dyesub_backend mitsu70x_backend = {
.name = "Mitsubishi CP-D70 family",
.version = "0.107" " (lib " LIBMITSU_VER ")",
.version = "0.108" " (lib " LIBMITSU_VER ")",
.flags = BACKEND_FLAG_DUMMYPRINT,
.uri_prefixes = mitsu70x_prefixes,
.cmdline_usage = mitsu70x_cmdline,
@ -2607,6 +2642,8 @@ const struct dyesub_backend mitsu70x_backend = {
{ 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"},
{ 0x1452, 0x8e01, P_DNP_DSX80, NULL, "dnp-ds680"},
{ 0x1452, 0x8f01, P_DNP_DSX80, NULL, "dnp-ds480"},
{ 0, 0, 0, NULL, NULL}
}
};
@ -2634,14 +2671,14 @@ const struct dyesub_backend mitsu70x_backend = {
(padded by NULLs to a 512-byte boundary)
PP == 0x01 on D70x/D80, 0x00 on K60, 0x90 on K305, 0x80 on ASK300
PP == 0x01 on D70x/D80, 0x00 on K60, 0x90 on K305, 0x80 on ASK300, 0x04 on DSx80
JJ JJ == Job ID, can leave at 00 00
XX XX == columns
YY YY == rows
QQ QQ == lamination columns (equal to XX XX)
ZZ ZZ == lamination rows (YY YY + 12 on D70x/D80/ASK300, YY YY on others)
RR RR == "rewind inhibit", 01 01 enabled, normally 00 00 (All but D70x/A300)
SS == Print mode: 00 = Fine, 03 = SuperFine (D70x/D80 only), 04 = UltraFine
SS == Print mode: 00 = Fine, 03 = SuperFine (D70x/D80/DSx80 only), 04 = UltraFine
(Matte requires Superfine or Ultrafine)
UU == 00 = Auto, 01 = Lower Deck (required for !D70x), 02 = Upper Deck
LL == lamination enable, 00 == on, 01 == off

View file

@ -282,6 +282,12 @@
# DNP QW410
0x1452 0x9201 blacklist
# DNP DS480
0x1452 0x8f01 blacklist
# DNP DS680
0x1452 0x8e01 blacklist
# CIAAT Brava 21
0x10ce 0x001e blacklist

View file

@ -527,6 +527,20 @@ fujifilm-ask-300,0x04cb,0x5006,0xf,PageSize=w432h576;StpSharpen=9
fujifilm-ask-300,0x04cb,0x5006,0x4,PageSize=w360h360
fujifilm-ask-300,0x04cb,0x5006,0x4,PageSize=w360h504
#
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h288;StpPrintSpeed=Fine
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h382;StpPrintSpeed=Fine
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=Fine
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576-div2;StpPrintSpeed=Fine
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=SuperFine
dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=SuperFine;StpLaminate=Matte
#
dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h432;StpPrintSpeed=Fine
dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=Fine
dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576-div2;StpPrintSpeed=Fine
dnp-ds680,0x1452,0x8e01,0x4,PageSize=w360h504;StpPrintSpeed=Fine
dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=SuperFine
dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=SuperFine;StpLaminate=Matte
#
dnp-ds40,0x1343,0x0003,400,PageSize=w288h432;Resolution=300x300dpi
dnp-ds40,0x1343,0x0003,400,PageSize=w288h432-div2;Resolution=300x300dpi
dnp-ds40,0x1343,0x0003,400,PageSize=w432h432;Resolution=300x300dpi

1 #gp_printername,vid,pid,type,gp_options[,pano_options]
527 fujifilm-ask-300,0x04cb,0x5006,0x4,PageSize=w360h360
528 fujifilm-ask-300,0x04cb,0x5006,0x4,PageSize=w360h504
529 #
530 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h288;StpPrintSpeed=Fine
531 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h382;StpPrintSpeed=Fine
532 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=Fine
533 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576-div2;StpPrintSpeed=Fine
534 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=SuperFine
535 dnp-ds480,0x1452,0x8f01,0x0,PageSize=w288h576;StpPrintSpeed=SuperFine;StpLaminate=Matte
536 #
537 dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h432;StpPrintSpeed=Fine
538 dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=Fine
539 dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576-div2;StpPrintSpeed=Fine
540 dnp-ds680,0x1452,0x8e01,0x4,PageSize=w360h504;StpPrintSpeed=Fine
541 dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=SuperFine
542 dnp-ds680,0x1452,0x8e01,0xf,PageSize=w288h576;StpPrintSpeed=SuperFine;StpLaminate=Matte
543 #
544 dnp-ds40,0x1343,0x0003,400,PageSize=w288h432;Resolution=300x300dpi
545 dnp-ds40,0x1343,0x0003,400,PageSize=w288h432-div2;Resolution=300x300dpi
546 dnp-ds40,0x1343,0x0003,400,PageSize=w432h432;Resolution=300x300dpi

View file

@ -164,6 +164,8 @@ fujiask300,0x04cb,0x5006,mitsu_d70x_4x6-16bpp.raw,0xf
fujiask300,0x04cb,0x5006,mitsu_d70x_4x6-8bpp.raw,0xf
fujiask300,0x04cb,0x5006,mitsu_d70x_7x5-8bpp.raw,0x4
fujiask300,0x04cb,0x5006,mitsu_d70x_4x6-8bpp.raw,0x2
dnp-ds480,0x1452,0x8f01,dnp_ds480_4x8.raw,0x0
dnp-ds680,0x1452,0x8e01,dnp_ds680_4x6.raw,0xf
#
# 'mitsud90'
#

1 #backend,vid,pid,filename,mediatype
164 fujiask300,0x04cb,0x5006,mitsu_d70x_4x6-8bpp.raw,0xf
165 fujiask300,0x04cb,0x5006,mitsu_d70x_7x5-8bpp.raw,0x4
166 fujiask300,0x04cb,0x5006,mitsu_d70x_4x6-8bpp.raw,0x2
167 dnp-ds480,0x1452,0x8f01,dnp_ds480_4x8.raw,0x0
168 dnp-ds680,0x1452,0x8e01,dnp_ds680_4x6.raw,0xf
169 #
170 # 'mitsud90'
171 #

BIN
testjobs/dnp_ds480_4x8.raw (Stored with Git LFS) Normal file

Binary file not shown.

BIN
testjobs/dnp_ds680_4x6.raw (Stored with Git LFS) Normal file

Binary file not shown.