Pizza is currently certified at Master level.

Name: Solomon Peachy
Member since: 2001-10-04 19:49:21
Last Login: 2016-05-10 10:00:25

FOAF RDF Share This



A human being should be able to change a diaper,
plan an invasion, butcher a hog, conn a ship, design a
building, write a sonnet, balance accounts, build a wall,
set a bone, comfort the dying, take orders, give orders,
cooperate, act alone, pitch manure, solve equations, analyze
a new problem, program a computer, cook a tasty meal,
fight efficiently, die gallantly.

Specialization is for insects.

-- Robert A. Heinlein, "The Notebooks of
Lazarus Long"

Currently residing in sunny
, I'm employed by href="">AbsoluteValue Systems
to write 802.11 network drivers for Linux and other
miscellaneous embedded-type stuffs.

My main passion
these days is photography;
href="">here is the portal to
it all.


Recent blog entries by Pizza

Syndication: RSS 2.0

Mitsubishi CP-D70 family, now with more Raspberry Pi Goodness!

Back in March, my reverse-engineered processing library for the Mitsubishi CP-D70DW family of printers reached quality pairity with the official Windows/OSX drivers and their SDK. This was a huge milestone; it's now possible to drive these printers using entirely Free Software, with no quality compromises, on non-x86 CPU architectures. To do this, you will need Gutenprint 5.2.13-pre1 or newer, along with an up-to-date lib70x snapshot.

Here are the happy models:

  • Mitsubishi CP-D70DW
  • Mitsubishi CP-D707DW
  • Mitsubishi CP-D80DW
  • Mitsubishi CP-K60DW-S
  • Kodak 305
  • Fujifilm ASK-300 [completely untested]

I held off on announcing this achivement due to one rather annoying problem. It seems most folks interested in using this family of printers wanted to do so using the popular Raspberry Pi systems. Unfortunately, for (at the time) unknown reasons, the CP-D70DW spectacularly failed to print with RPi systems, with the image data failing to transfer to the printer.

To further complicate things, I was unable to recreate the problem on the Kodak 305 (aka a rebadged CP-K60DW-S) and an RPi2. Software-based sniffs were useless, and things stayed at this impasse for quite some time.

What finally broke the logjam was one particularly motivated user running into a similar problem with an RPi3 and a CP-D80DW model -- but only when there was nothing plugged into the ethernet controller. This was a bizarre development, and a working theory that there was something funky going on with the RPi's onboard SMSC USB hub/ethernet chip began to develop.

He convinced Mitsubishi/Europe that it was in their interests to help figure this problem out, and I soon found myself with a CP-D80DW and several boxes of media on my doorstep and a backchannel to their technical team.

Try as I might, I was unable to recreate the problem on a RPi1 or RPi2, but on an RPi3, I was finally able to trigger the failure. Armed with a true USB sniffer and a copy of the USB spec, I was able to rapidly identify what was acutally going on.

The USB2 spec (section 8.5.1) dictates that, when in high-speed mode, a flow control mechanism (NYET/PING/[N]ACK) be used to maximize transfer throughput. NYET is sent by the device after a successful transfer to signal that it can't accept more. The controller then starts polling the device with PING requests, with the printer responding with a NACK until it's ready, at which point it responds with an ACK.

The problem, in a nutshell, is that the RPi's USB controller ends up sending the PING requests so rapidly -- about 400 nanoseconds apart) that it effectively triggers a denial-of-service (DoS) situation in the printer. The funny thing is that the RPi's controller starts with a PING interval of about 1.2 microseconds, and everything is fine until it pulls in the timing, triggering the DoS.

(A regular PC with an xHCI controller demonstrates variable PING timing; it starts at about 400ns, but backs off to about a 4us interval)

If other USB traffic is present, then the bus is too busy to send the PINGs so rapidly, and the printer is fine. Notably, simply establishing a physical link with the onboard (USB-attached) ethernet controller (even if the interface is "down") generates sufficient traffic to mitigate the problem. Plugging in a thumbdrive and dumping data back or forth is also more than adequate.

I've reported this problem to both Mitsubishi and the RPi kernel folks. I don't think one can expect much progress on the root cause of this problem, but the above workarounds are at least adequate to using these printers with RPi systems.

...Enjoy, folks, and happy printing.

Syndicated 2017-06-15 23:04:06 from I Dream of Rain (Posts about free_software)

Mitsubishi P95D

The Mitsubishi P95D is the latest model in a line of Medical/Scientific monochromatic thermal printers that can often be found attached to the likes of Ultrasound stations.

As of December 20th, it now has first-class Linux support as part of Gutenprint, complete with status/error reporting, mutiple copy support, custom page sizes, and every other feature the printer exports.

I may try to extend support to older models in the family (P93 and P91) or other MedSci thermal printers if there's any interest.

Oh, here's a shot of the P95 in action:


Update 2017/02/11 The Mitsubishi P93D now has first-class support as well.

Syndicated 2017-01-07 02:59:11 from I Dream of Rain (Posts about free_software)

Improvements for newer Canon SELPHY models

About a year of so ago I added support for the newer Canon SELPHY printers (CP820, CP910, CP1000, and CP1200) into Gutenprint. Despite using the same media kits as their older siblings, under their plasic bodies they sported a new print engine that worked fairly differently.

Slightly different print sizes, a Y'CbCr image format, and, surprisingly, they appeared to be sane USB Printer class models and not require a special backend to handle communications.

Fast forward to last week, and it turns out that was a premature assessment. While the printers didn't require any special handholding to print a single image, they would lock up if one would send over two jobs back-to-back. Canon still can't implement proper flow control.

Time to break out the sniffer and capture some multi-page jobs! A quick flurry of hacking later, and the 'canonselphyneo' backend was born. It brings along sane flow control, status reporting, and error detection on par with the selphyneo's older siblings.

I also discovered the 'L' print size was incorrect. All of this will will be in Gutenprint 5.2.12-pre5 or newer, but the current backend can always be grabbed from my selphy_print repository.

Oh, as I write this, I don't have the USB IDs for the CP820 or CP1000 models. I need those so they'll be recognized by the backend. Holler if you have one!

Update 2017/01/06: I now have the CP1000 ID; only the CP820 is missing.

Syndicated 2016-12-10 02:30:20 from I Dream of Rain (Posts about free_software)

Call for testing on Mitsubishi printers

In the past I've written about the particularly poor level of support for Mitsubishi printers under Linux. In the past couple of months, that has changed substantially, although not due to any action or assistance on Mitsubishi's part.

Gutenprint 5.2.11 had usable support for the CP-9550DW and CP-9550DW-S models, including an intelligent backend that handled the printer communications. However, the rest of the CP-9xxx family wasn't supported.

The 5.2.12 release of Gutenprint will support most of the CP-9xxx family. This includes a considerable amount of work on the backend, genericizing it so that the other models can be cleanly handled. This was a rather disruptive change, so it's possible the formerly-working CP-9550 family has regressed. Beyond that, the newly-supported models need testing to confirm that everything functions as expected.

Here is the list of all models affected by this development:

  • CP-9000DW
  • CP-9500DW
  • CP-9550DW (previously working, needs retesting)
  • CP-9550DW-S (previously working, needs retesting)
  • CP-9600DW (confirmed working)
  • CP-9600DW-S
  • CP-9800DW
  • CP-9800DW-S (confirmed working!)
  • CP-9810DW
  • CP-9820DW-S

Also, I still need testers for the following models:

  • DNP DS80DX
  • Sony UP-CR10L (aka DNP DS-SL10)
  • Mitsubishi CP-D70DW, CP-D707DW, CP-K60DW-S, CP-D80DW, and CP-D90DW (plus their -S variants!)
  • Fujifilm ASK-300
  • Sinfonia CHC-S1245/E1 and CHC-S6245/CE1
  • Kodak 7000/7010/7015 and 8810

If anyone reading this has access to one or more of these printers, please drop me a line!

UPDATE 10/27: There were definitely some bugs to be had, but now the CP-9600DW and CP-K60DW-S are now confirmed working!

UPDATE 11/18: After fixing a couple of bugs, the CP-D70DW and CP-D80DW are now confirmed working.

Syndicated 2016-10-18 15:23:19 from I Dream of Rain (Posts about free_software)

Mitsubishi CP-D70 family, working!

Over the past few years, I've written a lot about the various members of the Mitsubishi CP-D70 family of printers, and how they were utterly worthless under Linux.

These printers are unusual in that they required the host computer to perform perform gamma correction and thermal compensation to the image data in order to generate sane output. (If this sounds familiar, it's because the Sinfonia CS2 was similarly afflicted). This relied on unknown, proprietary algorithms only implemented within Mitsubishi's drivers.

To make along story short, I've been attempting to reverse engineer those algorithms for nearly three years, and I'm pleased to announce that I've finally succeeded. While I can't promise the results are identical to Mitsubishi's own code, It is now possible to generate high-quality prints with these printers using entirely Free Software.

The library is called 'libMitsuD70ImageReProcess', released to the public under a GPLv3+ license.

Just to be absolutely clear, Mitsibushi is not responsible for this library in any way, and will not support you if you complain that the output is somehow deficient or your printer catches fire when you try to print pictures of Margaret Thatcher posing in her skivvies.

Here's the list of the now-functional printers:

  • Mitsubishi CP-D70DW, CP-D707DW, CP-K60DW-S, CP-D80DW
  • Kodak 305
  • Fujifilm ASK-300

While all of these models are expected to work, only the Kodak 305 has actually been tested. Please drop me an email or comment here if you have one of these printers and would like to help test things out.

In particular, if there's someone out there with a dual-decker CP-D707DW, there are opportunities for further enhancements that I'd like to try.

All code except for the library is now committed into Gutenprint, but is not yet part of any [pre-]release. So if you want to test this stuff out, you'll need to grab the latest Gutenprint code and libMitsu70ImageReProces out of git and compile/install them manually. Once this is a little more stable I'll package the library code in a tarball for simpler distribution.

In other news, while the Kodak 305's official Windows drivers only expose 4x6 and 8x6 prints, the printer firmware also supports the 6x6, 4x6-x2, and 2x6-x2 sizes that the Mitsubishi CP-K60DW-S supports. You'll need to ensure you're using the 1.04 firmware! I have also received reports that the '305 will accept the K60's print media, so in theory 5x7 and 6x9 support is possible.

Happy printing!

UPDATE 2016/11/17

Assuming that your distro already includes an up-to-date Gutenprint (5.2.12-pre4 or newer), here is what you will need to do in order to use these printers:

            git clone
            cd selphy_print
            sudo make install
            cd lib70x
            sudo make install
            sudo bash
            echo '/usr/local/lib' >> /etc/
            cd ..

Once you have that done, run this with the printer attached:

    sudo ./mitsu70x testjobs/mitsu_d70x_4x6-8bpp.raw # D70/D707/D80
    sudo ./mitsu70x testjobs/mitsu_k60_4x6-8bpp.raw  # K60
    sudo ./mitsu70x testjobs/kodak_305_4x6-8bpp.raw  # Kodak 305

As well as spitting out a page, you should see the following message in the output. Any WARNINGs or ERRORs are a sign that the library wasn't installed properly:

            INFO: Image processing library successfully loaded

At this point, you can set the printer up using CUPS or your distro's printer tool, and all will be well.

(Note that Gutenprint 5.2.12-pre5 or newer will include all necessary selphy_print changes, but not the processing library)

Syndicated 2016-10-06 19:08:53 from I Dream of Rain (Posts about free_software)

169 older entries...


Pizza certified others as follows:

  • Pizza certified Pizza as Journeyer
  • Pizza certified rpl as Journeyer
  • Pizza certified alan as Master
  • Pizza certified jameson as Journeyer
  • Pizza certified proski as Master
  • Pizza certified Stevey as Master
  • Pizza certified joey as Master
  • Pizza certified etbe as Master
  • Pizza certified davej as Master
  • Pizza certified marcelo as Master
  • Pizza certified BrucePerens as Master
  • Pizza certified miguel as Master
  • Pizza certified davem as Master

Others have certified Pizza as follows:

  • Pizza certified Pizza as Journeyer
  • rpl certified Pizza as Journeyer
  • jameson certified Pizza as Journeyer
  • mobius certified Pizza as Apprentice
  • lev certified Pizza as Apprentice
  • sprite certified Pizza as Apprentice
  • Denny certified Pizza as Apprentice
  • gp certified Pizza as Journeyer
  • mattr certified Pizza as Journeyer
  • ishamael certified Pizza as Journeyer
  • mascot certified Pizza as Journeyer
  • mrsbrisby certified Pizza as Journeyer
  • realblades certified Pizza as Journeyer
  • richdawe certified Pizza as Journeyer
  • proski certified Pizza as Master
  • mpr certified Pizza as Journeyer
  • ebf certified Pizza as Journeyer
  • Stevey certified Pizza as Journeyer
  • nixnut certified Pizza as Master
  • fzort certified Pizza as Journeyer
  • sye certified Pizza as Journeyer
  • ncm certified Pizza as Master
  • dangermaus certified Pizza as Master

[ Certification disabled because you're not logged in. ]

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!

Share this page