Hello, I have worked on the genesys experimental backend to make my MD6471 work. First here are some patches: - I had to put back a MD6471 sensor since there is a little difference with the ST24: http://perso.wanadoo.fr/septieme/MD6471/03_md6471_sensor.patch
- since the motors from the different scanners are different, I added a motor_type field in the device structure. I haven't created a Genesys_Motor struct since I haven't a clear idea of what it should really contain. http://perso.wanadoo.fr/septieme/MD6471/04_motor_type.patch - I have removed the parameter override in genesys_create_slope_table, and changed a little the pow() computing, since my compiler produces buggy code when 'j' is 0. http://perso.wanadoo.fr/septieme/MD6471/05_create_slope_params.patch Then comes some problems: - I believe that there's a bug in genesys_create_slope_table. We cuurently have: time_period = /* time required for full steps */ (u_int32_t) (yres * exposure_time / dev->model->base_ydpi) / (start_speed + (1 - start_speed) * t); and I think it should be (multiply instead of a divide): time_period = /* time required for full steps */ (u_int32_t) (yres * exposure_time / dev->model->base_ydpi) * * (start_speed + (1 - start_speed) * t); With the first formula (divided by (start_speed + ....), I cannot reach satsifying parameters to have a good slope_table, while with the second formula (multyply by ...), I can find near perfect match with the slope tables in the USB logs. However, changing it would mean changing the start_speed and 'acceleration'. I can do it for the MD6471, but not fot the other scanners. - the MD6471 doesn't need the extensive asic test done at init, and I feel like adding a flag to optionally skip it. - another problem is the warmup function, I think this isn't warmup, but offset calibration. In th MD6471 logs, a one line scan is done with AFE offset at zero, then at a higher value, but both with a coarse gain at zero. And since this takes place where it should (right before coarse gain calibration), I really believe it is offset calibration. Lamp warmup detection is only a byproduct. - I have created for my needs a genesys_par_head() which is used instead of slow_back_home() which doesn't work for my scanner. In fact, it is really close to genesys_check_scanner_lock(). It sends the head back home by setting motor to reverse direction, 2 table scanning and steps before scan area to 65535. If parking head after moving it doesn't work, this will indeed detect if the head is locked, but doesn't seem the real goal of the function. - and last, I resurrected genesys_search_start_position(), but taylored for the MD6471, would it be OK to add it, with a device flag to control if the backend calls it ? I need this to locate the black and with stripes below the scanner's top in order to make offset and coarse gain calibration work reliably. To sum up is it OK to: - change genesy_create_slope_table() - add a flag for optional lazy init - add a genesys_park_head() and a flag to control it's use - add a flag to control the use of genesys_search_start_position(), and resurrect this function. - either modify warmup(), or create a genesys_offset_calibration with it's assorted flag Regards, Stef