[sane-devel] platform independent sanei_usb control messages

Bertrik Sikken bertrik@zonnet.nl
Tue, 02 Jul 2002 00:31:29 +0200


Henning Meier-Geinitz wrote:

>Hi,
>
>On Sun, Jun 30, 2002 at 03:36:35PM +0200, Bertrik Sikken wrote:
>  
>
>>I'm working on a backend for scanners based on the 'niash' chipset, 
>>found in scanners like
>>the HP3300, HP3400, HP4300, (HP5400?) and the Agfa Snapscan Touch.
>>
>>Until now I've used libusb to provide platform independent USB access 
>>which works
>>mostly fine. I know there's also the sanei_usb functions, but I have 
>>some issues using them.
>>    
>>
>
>I'm currently working on making sanei_usb more generic. That means,
>sanei_usb should also be able to use libusb, not only the
>"Linux-kernel-method" (which works with the BSDs, also).
>It's not yet finished and there may be problems but I think I will add
>a first version to CVS during the next few days.
>The idea is that no changes in the backends are necessary.
>  
>
Ok, sounds interesting.

>>When I do a control transfer I need to pass some parameters involving 
>>(for example)
>>USB_TYPE_VENDOR, USB_RECIP_DEVICE and USB_DIR_IN which
>>are defined in linux/usb.h, obviously not platform independent.
>>    
>>
>
>Yes, usually it's better to copy the needed constants.
>
>  
>
>>I see that the canon630u backend solved this by defining those symbols 
>>locally.
>>
>>I suspect that the symbols mentioned above are really part of the USB 
>>specification,
>>    
>>
>
>I thinks o, but I will have a closer look when implementing
>sanei_usb_control_msg for libusb.
>
>  
>
>>so they are not platform specific. Maybe it's a good idea to add them to 
>>sanei_usb.h?
>>    
>>
>
>Yes. Proposals for what to include are welcome :-)
>
>  
>
>>What is actually the preferred USB access method for SANE?
>>    
>>
>
>Depends on who you ask. My personal opinion is: kernel access via
>scanner module. Most sane backends currently use sanei_usb or direct
>access to /dev/usb/scanner*.
>
>  
>
>>And for what reasons?
>>    
>>
>
>libusb:
>  + is portable for different platforms (OS X?)
>  + automatic detection of scanners is easier
>  - need to be root to access devices
>  - no way to scan for scanners in sane-find-scanner
>  
>kernel module:
>  the other way round :-)
>  
>That's why I try to include libusb access in sanei_usb to get best of
>both worlds. Maybe other (proprietary) access methods (e.g. for
>Solaris?) can be added too, once the file is more generic.
>  
>
Ok, thanks for clarifying.
I'm not quite sure yet that you really need to be root for libusb access,
although I found it a lot easier to make it work as root :).

Some people who are helping me with the backend sent me some patches
to make it work with one of the BSDs (patch for uscanner).
Probably others have made similar patches too.
If we agree on a standard, it shouldn't be too hard to write the BSD part
of sanei_usb I think.

Kind regards,
Bertrik