February 17, 2015 @ 23:17 EST
Progress on the Shinko S1245, S6145, and S6245
A few weeks ago, a kind gentleman at Sinfonia sent me a pile of documentation on their S1245, S6145, and S6245 printers.
The S6145 and S6245 use a similar command language to the S2145, but the S1245 is quite different. So I decided to start with the latter, and created a new backend for it. It's now complete, but needs testing.
Support for the S6245 will probably follow, likely added into the existing S2145 backend as most of their code will be shared.
Unfortunately, the S6145 is another matter. While its command language is quite similar to the S2145, it has some peculiar data format requirements.
While the spool data is packed 8-bit RGB, the printer driver (aka our backend) is expected to convert it to 16-bit planar YMC+L data. That is easy enough to accomplish, except the data also needs to be massaged via an unknown algorithm combined with an opaque data blob that the printer supplies.
If this sounds familiar, it's because that sounds eerily similar to what the Mitsubishi K60/D70/D707/D80 printers require, complete with a file providing the raw lamination data and pile of tabular data that feeds into the transformation algorithm. This is strong evidence that the S6145, the CIAAT Brava 21, Kodak 305, and those Mitsubishi models all use the same basic print engine.
The Sinfonia rep wasn't able to provide any further details on the algorithm, though he did provide a set of binary x86 and x86_64 libraries that perform the necessary transformations. So it's a sort of bad news, good news situation.
Anyway. At this point, the S1245 backend is ready for testing, and since I can't justify buying yet another high-end photo printer, that means I'll need a volunteer to test this stuff out.
In the mean time, I'll probably work on support for the S6245, which will also eventually need testing. Then I'll move on to the S6145, get the core backend in place, then teach myself some x86_64 assembly and get to reverse-engineering the necessary algoritms and maybe eventually get somewhere.
So, does anyone have a spare S1245, S6245, and/or S6145 printer to toss my way? It's for a good cause!
January 18, 2015 @ 08:36 EST
January 07, 2015 @ 06:58 EST
Happy new year, y'all...
Due to some major unexpected expenses and an annoying (if minor) bout of pneumonia, my new year's plans were considerably less ambitious than in recent years.
This time, I watched the sunrise from Alice Wainright Park, with a view over Biscayne Bay, in the Vizcaya district of Miami.
It was a fallback position, because for some ungodly reason the powers that be locked up all parks on both Key Biscane and Virginia Key.
I'm not sure if I'll write up some sort of retrospective of the year, but I have been keeping myself busy.
December 01, 2014 @ 20:33 EST
November 22, 2014 @ 08:35 EST
The current state of the Mitsubishi CP-D70DW, CP-D707DW, CP-K60DW-S, and CP-D80DW printers under Linux
Over the last month or so, I've received on average two questions a week about these printers, mostly along the same lines of "I can't print with them, help!"
The short answer
They don't work with Linux, and this isn't likely to change anytime soon.
The longer answer
With the Mitsubishi CP-D70 and D707, If you use the Gutenprint 5.2.11-cvs code later than August 14, and the backend code from at least October 4, you will be able to successfully generate prints. The CP-K60 still won't print at all due to incomplete knowledge about printer backend protocol, and I have not seen what changes the CP-D80 incorporates.
Unfortunately, while the CP-D70 and D707 are able to successfully print, the output is all screwed up. The Windows drivers perform non-linear color scaling that requires gamma correction; this is annoying but would be straightforward to figure out, except the drivers are also doing some sort dithering.
How bad is this dithering? A test job with six nominal colors results in a printjob that contains over 18,000 (16-bit) color values. Even a simple "print a page with a single, pure color" job results in dozens (if not hundreds) of colors as the driver adjusts the intensity according to some unknown algorithm.
The pithy answer
Mitsubishi actually wrote Linux drivers for all of these (and other!) printers, but only provides them as part of their Kiosk solutions, not for normal end-users. So, don't reward manufacturers that snub Linux users, and support those who do.
The alternative answer
There are many competitive alternatives (both price-wise and performance-wise) which have solid support under Linux. In particular, here's what I'd recommend if you want a kiosk-class, workhorse photo printer:
- DNP DS40, RX1, or DS80
- Citizen CX, CX-W, or CY
- Shinko S2145 / Sinfonia S2
- Kodak 6800, 6850, or 605
- Sony UP-DR150 or UP-DR200
Several other models from these manufacturers should (in theory) work okay, but the above represents a known-good list. Note the utter lack of any Mitsubishi models; as of this writing, none of their printers play well with Linux.
The pleading answer
In case anyone over at Mitsubishi is reading this, how about tossing me some documentation and a printer or three to play with? Proper Linux support will only help you sell more printers!
November 21, 2014 @ 17:40 EST
November 10, 2014 @ 19:44 EST
November 08, 2014 @ 10:42 EST
November 08, 2014 @ 10:27 EST
October 29, 2014 @ 22:38 EDT
Further printer work
Okay, so I guess I was wrong about additional printer hacking. Despite the 12-hour days at the office over the past few weeks (we got our first silicon back, and software is the ring that binds everything together in the darkness), I'm still spending time writing code when I get home.
First, I added support for the Sony UP-CR10L and its rebadged bretheren, the DNP SL10. I've had these on my to-do list for a while; I'd already decoded everything and updated the existing UP-DR150/200 backend to handle the new bits, but never got around to adding proper support into Gutenprint. That's now done, and once I get the USB PIDs, it should JustWork(tm).
Beyond that, I've knocked out a few things on the bug list. One I just fixed affected pipelined printingon the DNP/Citizen printers, and it was most easily triggered by multi-page print jobs. With Gutenprint 5.2.10's backend, the printer would just abort the job after the first page, but if you were using a development snapshot after 2014-06-04, it would automatically retry the job, resulting in an endless printing of page 1 over and over again.
The bug was due to the backend mistakenly treating the "Printing, with one available buffer for a 300dpi or small 600dpi job" status as an error.
At least folks won't have to wait for the next Gutenprint release to pick up the latest backend code.
I have a rather large photo backlog from the past month to sort through. That will be my weekend project..
October 19, 2014 @ 23:49 EDT
I just committed initial support for the Shinko/Sinfonia CHC-S1245, CHS-S6145, and CHC-S6245 into Gutenprint. They use printjob structures similar to the S2145, and appear to share the same basic driver core, so the odds are high that the existing S2145 backend will work with only minor changes.
So, if there's anyone out there with one of those models (or better yet, some low-level documentation on their communication protocol) drop me a note, and from there we should be able to get things working pretty quickly.
There's still the CHC-S8145 and the DP-1045 to sort out, but those are for another time.
I think that's it for printer hacking for a while, barring bugfixes and the ongoing Mitsubishi CP-D70/D707/K60 saga. Testers needed...
October 17, 2014 @ 23:33 EDT
More dyesub printer work
The Citizen CW-01 is now confirmed working, and the necessary code has been committed into Gutenprint. With luck, the next release will take less than two years! This should also work with the Olmec OP-900, but I'll need a USB ID in order to add that to the backend.
Meanwhile, I just committed initial support for the Kodak 305 and Kodak 8810 printers to Gutenprint. It's unknown if they need an intelligent backend, but I suppose time will tell. As always, testers welcome.
Here's my current to-do list:
- Kodak 8800, 7000/7010/7015, and D4000
- Mitsubishi CP-D80DW and CP-9600DW
- Shinko S1245, S6145/S6145-5A, S5245, S8145, and DP-1045
- Sony UP-CR10L and UP-CR20L (aka DNP SL-10 and SL-20)
These models need USB IDs:
- Citizen CW-02, OP900, OP900-II
- Mitsubishi CP-3800DW
These models need testing:
- Mitsubishi CP-3020D/DA/DE/DAE, CP-9550D/DW, and CP-9810D/DW
- Kodak 8500, 9180, 8810, and 305
I've received inquires about various HiTi models, but without access to the printers (or at least complete USB sniffs of print generation with specific settings logged) I won't be able to make any progress. Their windows spool format is some sort of (compressed!) intermediate language rather than something that's natively dumped to the printer.
Finally, the Mitsubishi CP-D70/D707/K60 remain problematic; despite a lot of work on the backend we're no closer to figuring out the necessary color scaling/dithering the windows drivers employ so the color output from Gutenprint is pretty lousy.
This isn't how I'd intended to spend my Friday night. With luck the fever will finally break tonight so I can get out and about tomorrow..
October 06, 2014 @ 23:13 EDT
Further adventures with printers: The Citizen CW-01
A few days ago, someone with a Citizen CW-01 popped up on the Gutenprint mailing list. Due to its lineage, I'd assumed it (and its bretheren, the OP900) was related to the newer CW and CY families, and would work with the DS40 backend once the USB PID was known.
It turns out that the printer operates at 334dpi natively, so some additional work was needed. I'm not sure how I'd missed that. So, after some decoding of the WinXP print jobs, I discover the spool format is quite simple, and looks nothing like the newer CX/CY series.
So I ask the user to obtain some sniffs of the printer comms, and he delivered two dumps that look quite similar to the CX/CY, differing only in a couple of parameters.
So, it was pretty easy to whip up a new backend. It's out for testing now, and with luck, in a few days I'll be able to declare the CW-01 as officially supported by Gutenprint, so it'll work under Linux.
It'll be a bit more work to figure out how much of the CX/CY's status/info command set works with the CW-01, and I suspect the 600dpi support needs some more work, but for now, it's out of my hands.
In other news, another Mitsubishi CP-D70DW user popped up, sent me some detailed sniffs, and let me remote into his system for some interactive debugging; many, many bugfixes to the backend later, and it seems to be handle everything I know how to throw at it. With luck it'll also fix the CP-K60DW functionality as well.
Unfortunately, the CP-D70/D707/K60 employ a seriously screwy nonlinear tone curve/smoothing approach that I haven't been able to model, so Gutenprint's output is pretty lousy. Such is the fate of reverse-engineering efforts..
September 23, 2014 @ 21:27 EDT
September 11, 2014 @ 20:21 EDT
September 07, 2014 @ 09:01 EDT
In the death throes of my last two relationships, I made a couple of large-ish, almost-but-not-quite impulse purchases. The last time, it was an eighteen-year-old pickup truck. This time, it was a seven-year-old travel/camper trailer:
Naturally, there were several reasons for these purchases, but in the end I think it was a matter of making progress towards my long-term goals and dreams -- And a burning desire to not let the fact that I was once again going at things alone stopping me from actually doing what I wanted with my life.
The truck, and now this trailer, were incremental steps towards the goal of a more outdoorsy life, not just in the camping-over-random-weekends-year-round sense, but more importantly, the epic roadtrip and the ability to be more nomadic and still support myself while practicing my trade.
It's high time I stop tying myself down and take advantage of my freedom of movement. After my last move, I built an[other] empty nest in a place considerably larger than I actually needed, to hold stuff I mostly don't care about (or use) anyway. It's also a big burden financially, and that's hurting my long-term plans, all of which require a decent chunk of cash.
This nesting makes more sense if I'm living with someone else, but since I'm not and will likely remain that way, why maintain the trappings of a life I do not (and will not) have when it actively interferes with what I want?
...Which brings me back to my not-quite-impulse purchases -- I bought the truck to enable a dream, and later the camper to help realize that dream. It's my dream, my journey.. and one worth travelling.
September 06, 2014 @ 08:15 EDT
Shining on thieves on the garden wall..
September 01, 2014 @ 23:07 EDT
September 01, 2014 @ 21:05 EDT
We are but a grain of sand on an endless beach..
August 28, 2014 @ 19:01 EDT
August 27, 2014 @ 21:58 EDT
A word to the foolish: Don't.
August 24, 2014 @ 18:51 EDT
August 24, 2014 @ 08:03 EDT
Demystifying the Mitsubishi CP-D70DW/D707DW/K60DW
In recent weeks, I've had folks with access to Mitsubishi's CP-D70DW and CP-K60DW-S photo printers pop up and offer to help figure out what it would take to get Gutenprint to properly support them.
In short order, I managed to fix the backend/spooler for the CP-D70x series, but the CP-K60 is still elusive -- I'm going to need USB sniffs of the Windows drivers doing their thing to figure out just what I need to tweak. Hopefully this contact will be able to do that for me.
But in both cases, the USB sniffs are only part of the problem. It turns out my original reverse-engineering of the spool file format was lacking.
Oh, the structure of the files is reasonably well understood now; there's two 512-byte headers present, followed by three (or four, if matte lamination is enabled) planes of 16-bit Y/M/C data.
Once the backend was working properly with the D70, the reports were that gutenprint's output was way too dark, which indidated that the color data needed to be gamma-corrected or otherwise have some sort of curve applied.
Naturally, reality turned out to be a lot messier. I whipped up a simple program to analyze the raw spool files in an initial attempt to get a baseline for the correction curves.. and that's where things got quite wonky.
My test jobs were all generated by Windows; indeed it's the standard Windows XP printer test page. There are a total of six colors present in the image; black, white, and the four colored panes of the windows logo. Straightforward, right?
The D70x test jobs had about 38,000 unique color values in each plane. The K60 had nearly 58,000. Out of 65,536 possible values. In other words, they're doing some sort of contiunuous tone smoothing, and there's no nice, neat mapping from input RGB values to what the printer spits out -- Not even for "black" and "white". WTF? How am I supposed to proceed from here? Start disassembling the Windows driver?
So at this point, it's not looking likely I'm going to be able to figure this out without spending a lot of soul-sucking time reverse-enginnering x86 assembly. I have better things to do, unless someone wants to pay me more money than this is worth.
One fun tidbit is that Mitsubishi's current photo kiosks run Linux, and as such they've already written native Linux drivers for these things.
In the mean time, if you want a kiosk-scale photo printer that works great with Linux, DNP/Citizen and Shinko/Sinfonia have current models that have first-class support, and the now-discontinued Kodak 6800/6850/605 and Sony UP-DR150/DR200 models also work well.
So. Mitsubishi, feel free to toss some documentation (and a printer or three) my way. It'll only help you sell more printers!
August 22, 2014 @ 21:27 EDT
August 20, 2014 @ 14:55 EDT
RSS feeds, oh my!
For several years now, I've been using Tiny Tiny RSS to keep track of literally hundreds of RSS feeds. One of its features is I can republish a selection of what I want as an independent feed. While I've been marking stuff for republishing, I never did share the URL of that feed with anyone.
So without further ado, here's the Stuff Solomon Finds Interesting RSS feed.
The content is rather varied, from techincal to legal to sappy to photographic and everything in between. Be warned -- it's sometimes not family-friendly in subject or content.
In other news, I've been writing a lot lately, but it hasn't been for public consumption. If you want to know, ask...
Posted by Solomon Peachy | Permanent link & Comments