summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2017-11-23 07:13:03 -0500
committerSolomon Peachy <pizza@shaftnet.org>2017-11-23 07:13:03 -0500
commit0d348f23bd0427ecf17b3398e3fe6b82a0c1b9c9 (patch)
tree021dcb42a9daa78aecd3e1be3627945711dad625
parentb9f6a24cbd7384a1b36077bf7410e9af83a43db2 (diff)
downloadselphy_print-0d348f23bd0427ecf17b3398e3fe6b82a0c1b9c9.tar.gz
selphy_print-0d348f23bd0427ecf17b3398e3fe6b82a0c1b9c9.tar.bz2
selphy_print-0d348f23bd0427ecf17b3398e3fe6b82a0c1b9c9.zip
magicard: It works!
-rw-r--r--README9
-rw-r--r--backend_magicard.c47
-rw-r--r--blacklist3
3 files changed, 46 insertions, 13 deletions
diff --git a/README b/README
index eba40bb..b0d57d1 100644
--- a/README
+++ b/README
@@ -52,6 +52,7 @@
Mitsubishi P95DW
Mitsubishi P93DW
Fujifilm ASK-300
+ Magicard Tango 2E
Work-in-progress Printers:
@@ -72,7 +73,7 @@
Shinko CHC-S6245 (aka Sinfonia CE1)
Sony UP-CR10L (aka DNP DS-SL10)
Shinko CHC-S6145-5A (aka Sinfonia CS2-c)
- Magicard Tango 2E (and other Magicard models)
+ Magicard Rio 2E (and other Magicard models)
***************************************************************************
@@ -788,9 +789,13 @@ Notes:
***************************************************************************
BACKEND=magicard
- Work-in-progress printers:
+ Verified supported printers:
Tango 2E
+
+ Work-in-progress printers:
+
+ Rio 2E
(And all others)
This backend supports additional commands:
diff --git a/backend_magicard.c b/backend_magicard.c
index 7cf15e2..7636584 100644
--- a/backend_magicard.c
+++ b/backend_magicard.c
@@ -331,7 +331,6 @@ static void downscale_and_extract(uint32_t pixels,
uint8_t *y_o, uint8_t *m_o, uint8_t *c_o, uint8_t *k_o)
{
uint32_t i;
- uint8_t k_shift = 0;
for (i = 0 ; i < pixels; i++)
{
@@ -341,6 +340,7 @@ static void downscale_and_extract(uint32_t pixels,
uint32_t row;
uint32_t col;
uint32_t b_offset;
+ uint8_t b_shift;
/* Downscale color planes from 8bpp -> 6bpp; */
y = *y_i++ >> 2;
@@ -356,32 +356,32 @@ static void downscale_and_extract(uint32_t pixels,
/* Compute row number and offsets */
row = i / 672;
col = i - (row * 672);
- b_offset = (col * 6) / 8;
- k_shift = (col * 6) % 8;
+ b_offset = col / 8;
+ b_shift = 7 - (col - (b_offset * 8));
/* Now, for each row, break it down into sub-chunks */
for (j = 0 ; j < 6 ; j++) {
- if (k_shift == 0) {
+ if (b_shift == 7) {
y_o[row * 504 + j * 84 + b_offset] = 0;
m_o[row * 504 + j * 84 + b_offset] = 0;
c_o[row * 504 + j * 84 + b_offset] = 0;
}
if (y & (1 << j))
- y_o[row * 504 + j * 84 + b_offset] |= (1 << k_shift);
+ y_o[row * 504 + j * 84 + b_offset] |= (1 << b_shift);
if (m & (1 << j))
- m_o[row * 504 + j * 84 + b_offset] |= (1 << k_shift);
+ m_o[row * 504 + j * 84 + b_offset] |= (1 << b_shift);
if (c & (1 << j))
- c_o[row * 504 + j * 84 + b_offset] |= (1 << k_shift);
+ c_o[row * 504 + j * 84 + b_offset] |= (1 << b_shift);
}
/* And resin black, if enabled */
if (k_o) {
- if (k_shift == 0) {
- k_o[row * 504 + b_offset] = 0;
+ if (b_shift == 7) {
+ k_o[row * 84 + b_offset] = 0;
}
if (k)
- k_o[row * 504 + b_offset] |= (1 << k_shift);
+ k_o[row * 84 + b_offset] |= (1 << b_shift);
}
}
}
@@ -701,7 +701,7 @@ static int magicard_cmdline_arg(void *vctx, int argc, char **argv)
struct dyesub_backend magicard_backend = {
.name = "Magicard family",
- .version = "0.03WIP",
+ .version = "0.04",
.uri_prefix = "magicard",
.cmdline_arg = magicard_cmdline_arg,
.cmdline_usage = magicard_cmdline,
@@ -719,4 +719,29 @@ struct dyesub_backend magicard_backend = {
/* Magicard family Spool file format
+ This one was rather fun to figure out.
+
+ * Job starts with a sequence of 64 '0x05'
+ * Command sequence starts with 0x01
+ * Commands are textual and comma-separated.
+ * Most are passed through ignored, except for:
+ * SZB, SZG, SZR, SZK -- indicate length of respective data plane
+ * IMF -- Image format (BGR/BGRK/K)
+ * X-GP-8 -- Tells backend to convert from Gutenprint's 8bpp data
+ * X-GP-RK -- Tells backend to extract K channel from color data
+ * Command sequence ends with 0x1c
+ * Image plane data follows, in the order of the SZ# entries
+ * Plane lengths are specified by the SZ# entry.
+ * Color planes are actually Y/M/C rather than B/G/R!
+ * Each plane terminates with 0x1c __ 0x3a, where __ is 0x42, 0x47, 0x52,
+ and 0x4b for B/G/R/K respectively. Terminator is _not_ part of length.
+ * Image data is 6bpp for B/G/R and 1bpp for K, 672*1016 pixels
+ * Organized in a series of 84-byte rows.
+ * Byte data is LSB first.
+ * Each row is a single stripe of a single bit of a pixel, so
+ color data is b0b0b0b0.. b1b1b1b1.. .. b5b5b5b5.
+ * Job ends with 0x03
+
+
+
*/
diff --git a/blacklist b/blacklist
index aa58232..08b0fdf 100644
--- a/blacklist
+++ b/blacklist
@@ -220,3 +220,6 @@
# HiTi P910L
0x0d16 0x000e blacklist
+
+# Magicard Tango 2E
+0x0c1f 0x1800 blacklist