[sane-devel] Microtek ScanMaker 3840 driver available

Henning Meier-Geinitz henning@meier-geinitz.de
Sun, 6 Feb 2005 18:14:59 +0100


Hi and sorry for the delay,

On Sun, Jan 16, 2005 at 05:21:42PM -0800, Earle F. Philhower, III wrote:
> I've reverse-engineered the Microtek ScanMaker 3840 Windows driver and written
> a SANE driver to control it from Linux.  I've done pretty extensive testing
> locally (XSane/tstbackend -l3) and remotely (saned on my Devil-Linux server and
> SANETwain under Windows) and not found any problems.

Cool! I've added your .desc file and set links to your page as
external backend for now.

> Calibrated 8- and 16-bit color and grayscale are supported, with all dpi
> settings from 150 to 1200.  I've only got an INTC Fedora Core 3 machine to run
> it on, but I believe that I've put in hooks to handle Motorola byte ordering
> and 64-bittedness.  It may work with other SCAN08 based Microteks (38xx?) but I
> don't have their USB IDs and have no way of testing.

I've also added links to the pages for these scanners pointing to yout
backend's page.

> I've put patches (against sane-backends-1.0.15) and the new source files online
> at 
> http://www.ziplabel.com/sm3840/
> 
> Any feedback appreciated, if it works well I'd like to see about adding it into
> the standard SANE distribution...

I've had a quick look at your code and haven't found anything I don't
like. I'd like to have a man page, however. Also I get the following
warnings when compiling:

In file included from sm3840.c:70:
sm3840_scan.c: In function `setup_scan':
sm3840_scan.c:254: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:259: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:319: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:331: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:343: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:390: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:394: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:418: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:422: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:483: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:487: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:598: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_scan.c:600: warning: dereferencing type-punned pointer will break strict-aliasing rules
sm3840_scan.c:754: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:769: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:781: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_scan.c:917: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
In file included from sm3840.c:71:
sm3840_lib.c: In function `idle_ab':
sm3840_lib.c:191: warning: pointer targets in passing arg 6 of `my_usb_control_msg' differ in signedness
sm3840_lib.c: In function `write_regs':
sm3840_lib.c:216: warning: pointer targets in passing arg 6 of `my_usb_control_msg' differ in signedness
sm3840_lib.c: In function `write_vctl':
sm3840_lib.c:224: warning: pointer targets in passing arg 6 of `my_usb_control_msg' differ in signedness
sm3840_lib.c: In function `read_vctl':
sm3840_lib.c:232: warning: pointer targets in passing arg 6 of `my_usb_control_msg' differ in signedness
sm3840_lib.c: In function `record_line':
sm3840_lib.c:367: warning: pointer targets in passing arg 3 of `my_usb_bulk_read' differ in signedness
sm3840_lib.c: In function `download_lut8':
sm3840_lib.c:896: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:904: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:908: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:912: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:928: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:936: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:940: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c:944: warning: pointer targets in passing arg 3 of `my_usb_bulk_write' differ in signedness
sm3840_lib.c: In function `fix_endian_short':
sm3840_lib.c:984: warning: initialization from incompatible pointer type
sm3840.c: In function `sane_sm3840_read':
sm3840.c:138: warning: void format, SM3840_Scan arg (arg 3)
sm3840.c:138: warning: void format, different type arg (arg 6)
sm3840.c: At top level:
sm3840.c:267: warning: no previous prototype for `sm3840_unit_convert'
sm3840.c: In function `sane_sm3840_open':
sm3840.c:702: warning: void format, SM3840_Device arg (arg 4)
sm3840.c: At top level:
sm3840_lib.c:268: warning: `record' defined but not used
sm3840_lib.c:495: warning: `record_image' defined but not used
sm3840_lib.c:625: warning: `check_buttons' defined but not used

Could you check if at least some of these can be fixed?

Also make libcheck says:
*** backend/.libs/libsane-sm3840.a:
00008ab0 T sm3840_unit_convert

Looks like this function should be static.

Otherwise I don't see a reason not to include your backend into SANE
CVS.

Bye,
  Henning