[sane-devel] CanoScan 3000F

Braken braken@void-star.net
Sun, 12 Dec 2004 05:02:33 +1100

Hi everyone,

I'm considering writing a driver for the CanoScan 3000F.

That's really where the problems start. I know basic C/C++ (am 3rd year 
uni), but I've never worked with devices before, I don't know assembly 
language (so no disassembling for me, ATM anyway), and all in all really 
don't know where to start.

AFAIK, there really isn't much info about the 3000F around. I've googled 
and gone through the sane-devel archives, and other than a 'is anyone 
writing one' there doesn't seem to be any mention of it. Because it's a 
Canon scanner, and from what I've read they're not very helpful as far 
as releasing information about their scanner goes, I'm assuming I'm 
going to have to go the USB snooping route. I've read the Contributing 
page, as well as the 'Developing drivers without documentation' page, 
but it really hasn't helped much.

So I suppose what I'm really asking is some information on where to 
start. What should I be looking for in the snooping logs, how to I 
decipher them? How does scanner communication usually work, what kind of 
commands are common in communication with scanners and what do the 
commands actually do? Are these even the questions I should be asking? I 
don't expect people to answer these questions here, but links to pages 
with this kind of information would be helpful, as I can't seem to find 
anything in my searching (I'm probably just not searching for the right 

I've saved a log of a single small scan, and it was 7800 lines long. Is 
this normal? I found out the endpoints from the logs --

0x00 control
0x81 bulk/interrupt transfer in
0x02 buld/interrupt transfer out

-- but that really is all I've been able to work out, other than that 
there seems to be a constant stream of control commands when there's no 
scanning taking place, which I'm assuming is the driver checking for 
button presses.

Any help would be greatly appreciated.

-- Ben
-@ braken@void-star.net