[sane-devel] OS X Firewire support

Guy Brooker guy_brooker@mac.com
Sun, 17 Aug 2003 14:47:33 +0200

On 12/8/03 5:06 pm, "Martijn van Oosterhout" <kleptog@svana.org> wrote:

> On Tue, Aug 12, 2003 at 03:46:45PM +0200, Guy Brooker wrote:
>> Hi,
>> I've almost completed testing of a patch to sane_scsi.c which supports the
>> IOKit SCSI Architecture Model API.
> Very cool stuff!
> 1. Use diff to work out the differences between the base version and your
> changes
> 2. Or just post the code and how to make it work.

OK, a zip archive for the patch to 1.0.12 is available at


It only modifies one file, sane-backends-1.0.12/sanei/sanei_scsi.c

It still supports the previous implementation which uses the deprecated SCSI
Family IOKit API, so all being well it should not break anything that has
previously worked.

I have added some #ifdefs which may allow it to be compiled when either the
old or new i/f are not available, but this has not been tested. To use just
the old API, compile with OSX_ONLY_10_1_API defined, and to use just the new
API, compile with OSX_ONLY_10_2_API defined. By default neither are defined,
and both APIs are used.

The modifications should allow Firewire scanners, and SCSI scanners plugged
into a firewire-SCSI bridge (such as Orange Micro's) to work with sane under
Jaguar and future OS's.

I have only been able to test it with my EPSON GT-7000 on my iMac. Please
could other interested parties give it a go and let me know if you have any
success ?

scanimage -L works fine :

% scanimage -L             device
`epson:iokitscsi@<04502000001222af34a59175>' is a Epson GT-7000 flatbed

As does xsane (which I installed using fink)

The only problem I have is that both these tools need dll.conf and
epson.conf in the current working directory, they don't find the version in
the standard location for some reason. I'll look into that later, but I
don't think it has anything to do with my changes.

As you can see from above, the device name is made up, and I use the text
'iokitscsi@<' followed by the SCSIUserClient GUID from the IO Registry. That
is the unique ID for the client, and allows me to refind the device very
quickly. The only problem is that the number will change after reboot, or if
the device is unplugged, and replugged into the firewire port.

sane-find-scanner does not work, as it hard codes device names for each
platform. Just use scanimage -L

I am now thinking about implementing a TWAIN Data Source, but it seems a
huge job.... The windows ones don't seem to be much of a starting point, but
Apple provides some basic sample code that might get me started. If anyone
else has started on that, could you drop me a line ?