Canon Pro-100

Ken Smolek <[email protected]>
Newsgroups gmane.linux.printing.gimp-print.devel
Message-ID <[email protected]>
Hi Gutenprint developers,

I want to say how impressed I am with your commitment over all these 
years, and with
the work you've done for all of us.

I want to apologize in advance for the length of this. And I also want 
to apologize for any comments I make which might be construed as 
disparaging - they're not intended in that way. As a long-time software 
developer, I understand the tradeoffs that come with any software, and 
that software has to be written for what is, not what might be in the 
future. I also realize that I still have a limited understanding of much 
of the code, so my opinions may be entirely incorrect.

I started printing again after a long hiatus, using my old but still 
very functional Epson
2200. I'm running Centos 7.8 (another story of obsolescence) But I 
wanted to run the latest Gimp (2.10.22), and Centos 7 supports 2.8.22. I 
discovered that flatpak offers
a runtime for Gimp 2.10.22, but there was no Gutenprint available. It 
took quite a bit of time, but I built a flatpak version of 
Gutenprint-5.3.3. It's not as clean as I would like, because the Gimp 
runtime environment does not include CUPS, so I have to build and 
install that as well (it's all done as part of a single JSON file). In 
addition, the Gimp environment has to be modified with overrides: PATH 
has to be modified to find the CUPS and Gutenprint files, and 
STP_DATA_PATH has to be added to give access to the XML files. It's 
functional, and I can print via USB or LPD (using an RPi as the print 
server); I haven't gotten IPP to work, but it's low on my priority list. 
In any case, the flatpak version works.

Then I came across a pristine Canon Pro-100 for almost nothing and 
bought it, which has turned out to be a monumental rabbit hole. But I'm 
retired and have nothing better to do, especially in a pandemic, so I 
tackled it.

With no Gutenprint/CUPS driver, and little or no documentation (that 
mostly from Gutenprint and Ghostscript, nothing from Canon), it's been a 
very tedious process of reverse engineering of the command strings. And 
the Canon printer driver [print-canon.c:canon_setup_channels()] takes an 
approach to subchannels which doesn't work for the Pro-100, which, as 
near as I can tell, demands that channels be output in the order 
CMYcmkHL. In addition, the raster output string [formerly ESC(nn nn F 
data] has been expanded to take a 4-byte length, and is now ESC(N nn nn 
nn nn F data.

To make a very long, 2-month story short, I have a working Canon Pro-100 
under Gutenprint which uses all 8 inks and prints photos which are not 
perfect, but are of pretty high quality. Images converted to grayscale 
in Gimp print very well, but I have been unable to get straight 
monochrome printing (using an inkset consisting of black, gray, and 
light gray - kHL) to work.

I've tried very hard not to break existing code, but obviously there are 
no guarantees of that. Where I added significant code to handle the 
Pro-100, I generally did it by creating new functions, which are called 
only if the printer is PIXMA Pro100. In some cases, I simply added the 
Pro-100 to an already-existing set of printers in a long if statement. 
Code was added as necessary for inks, modes, media, etc. The mask 
protocol in print-canon.h is still a little mysterious to me, but I'm 
reluctant to mess with it more than necessary.

[BTW, I started from a downloaded 5.3.3 tar file. I set up a local git 
repository with my changes in a Pro100 branch, so all modifications from 
the canonical version are visible.]

Print quality improved dramatically when I included the standard Canon 
hue, sat and luminosity curves to the Pro-100 printer definition - that 
was when I realized I might have a really usable driver. But it's still 
not perfect - I've done some tweaking in the Adjust Output screen, but 
I'd love to be able to improve the curves and LUTs. Is there a 
description anywhere of how the hue/sat/lum arrays are generated?

So, where do I go from here? This is very close to a driver I can use 
for my own prints, but it's not production software. And I have no way 
of regression testing to see what I may have broken. If you prefer, it 
can just stay here as a local modification for my personal use. Or we 
could attempt to integrate it in some way, possibly by creating a 
print-canon-pro.c which is completely separate from the existing 
print-canon.c. This would have been a reasonable way to go initially, 
but hindsight is 20-20, and I didn't
really understand what I was getting myself into.

Another possibility is to implement an IPP driver for the printer and 
try to eliminate the Pro100 ppd entirely. That's an attractive 
possibility to me, but I'm still vague on the actual process, and I'll 
have to take another look at the IPP sample code to see just how 
complicated it will be. Your opinions are welcome.

Apologies again for the length of this, and if somebody's already 
implemented a working Pro-100 I don't know about, at least I learned a lot.

Keep up the very good work, and have a good holiday season.

Ken Smolek
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.