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:
parent
6c587b3576
commit
2269ba3ebd
9
README
9
README
|
@ -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 ***
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
|
@ -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'
|
||||
#
|
||||
|
|
|
BIN
testjobs/dnp_ds480_4x8.raw
(Stored with Git LFS)
Normal file
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
BIN
testjobs/dnp_ds680_4x6.raw
(Stored with Git LFS)
Normal file
Binary file not shown.
Loading…
Reference in a new issue