[sane-devel] genesys backend status update

stef svoltz@wanadoo.fr
Fri, 6 May 2005 10:39:23 +0200


	Hello,

	here's the status of the genesy backend after last commit:

	- MD6471 is fully supported in color, gray and linart modes, at
	  50, 100, 150, 200, 250, 300, 400, 500, 600, 800 and 1200 dpi

	- code have been split up so that the genesys_low.c file is now
	  unused, and replaced by genesys_gl646.c and genesys_gl841.c files.
	  These hold functions specific to their related ASIC.

	- common code to both AISCs have been moved to genesys.c. "higher"
	  level functions calls code from genesys_gl646.c or genesys_gl841.c
	  based on the asic_type field which is initialized in 
	  genesys_devices.c


	Bugs left:

	- scanner init fails if the previous scan got certain amount of
	  data. ie it doesn't fail allways. I'm trying to track it down,
	  but that's not easy. Unplugging/replugging the scanner solves it.
	  Once xsane has done a scan, the whole following session is OK.

	Todo:

	- for the MD6471, at dpi higher than 600, pixels are staggered.
	  It is how the scanner sends them. So after doing 'line distance'
	  calibration, this effect has then to be corrected (by shifting
	  columns).

	Features to add:

	- true hardware lineart will be added when we find a scanner doing it.
	- add 16 bit scanning, which involves cancelling gamma calibration 
	  in this case. Some tests I did show that images aren't of good
	  quality without hardware gamma correction.


	I'd like the current backend been reviewed so that we know what would
be done to make it leave the experimental staging, and include it in the
regular CVS. I think it is almost ready, and is only lacking a man page.

	Currently the gl841 file is a copy of the gl646, and needs quite some
work before having GL841 based scanners work. In the process, we may have
to add or move functions between genesys.c and low level files. My plan is
that genesys.c will keep all common functions, functions that differs only by
a few lines and so test the asic_field. Registers will have to be read or set
by using the genesys_read_reg_from_set() and genesys_set_reg_from_set().
	The speficic files will contain all functions that heavily use
registers, or register of different meaning. Registers can be accessed directly
by using the anonymous enum defined at the top of these files (841 one needs
updating...).
	Some of the existing functions that are in the low level files could be
split into a part that deals with registers, and another part of higher level
which could be moved to genesys.c . However, I think it's a bit early to do
it and that we'll handle such cases when enough gl841 code will have been
written.

Regards,
	Stef