close to final version for gl847

- feed to scan area
- revert data reading for shading calibration
- tuned geometry
merge-requests/1/head
Stphane Voltz 2010-05-28 06:48:16 +02:00
rodzic aec8271689
commit bc944cbc3a
3 zmienionych plików z 52 dodań i 100 usunięć

Wyświetl plik

@ -2459,8 +2459,8 @@ genesys_dark_shading_calibration (Genesys_Device * dev)
status = status =
dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg,
dev->model->cmd_set-> dev->model->
bulk_full_size ()); cmd_set->bulk_full_size ());
if (status != SANE_STATUS_GOOD) if (status != SANE_STATUS_GOOD)
{ {
free (calibration_data); free (calibration_data);
@ -2482,38 +2482,14 @@ genesys_dark_shading_calibration (Genesys_Device * dev)
return status; return status;
} }
if (!(dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS)) status = sanei_genesys_read_data_from_scanner (dev, calibration_data, size);
if (status != SANE_STATUS_GOOD)
{ {
status = free (calibration_data);
sanei_genesys_read_data_from_scanner (dev, calibration_data, size); DBG (DBG_error,
if (status != SANE_STATUS_GOOD) "genesys_dark_shading_calibration: failed to read data: %s\n",
{ sane_strstatus (status));
free (calibration_data); return status;
DBG (DBG_error,
"genesys_dark_shading_calibration: Failed to read data: %s\n",
sane_strstatus (status));
return status;
}
}
else
{
/* we need to read full line by full line */
size = channels * 2 * pixels_per_line;
for (i = 0; i < dev->model->shading_lines; i++)
{
status =
sanei_genesys_read_data_from_scanner (dev,
calibration_data + i * size,
size);
if (status != SANE_STATUS_GOOD)
{
free (calibration_data);
DBG (DBG_error,
"genesys_white_shading_calibration: failed to read data: %s\n",
sane_strstatus (status));
return status;
}
}
} }
status = dev->model->cmd_set->end_scan (dev, dev->calib_reg, SANE_TRUE); status = dev->model->cmd_set->end_scan (dev, dev->calib_reg, SANE_TRUE);
@ -2521,7 +2497,7 @@ genesys_dark_shading_calibration (Genesys_Device * dev)
{ {
free (calibration_data); free (calibration_data);
DBG (DBG_error, DBG (DBG_error,
"genesys_dark_shading_calibration: Failed to end scan: %s\n", "genesys_dark_shading_calibration: failed to end scan: %s\n",
sane_strstatus (status)); sane_strstatus (status));
return status; return status;
} }
@ -2691,8 +2667,8 @@ genesys_white_shading_calibration (Genesys_Device * dev)
status = status =
dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg,
dev->model->cmd_set-> dev->model->
bulk_full_size ()); cmd_set->bulk_full_size ());
if (status != SANE_STATUS_GOOD) if (status != SANE_STATUS_GOOD)
{ {
free (calibration_data); free (calibration_data);
@ -2715,38 +2691,14 @@ genesys_white_shading_calibration (Genesys_Device * dev)
return status; return status;
} }
if (!(dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS)) status = sanei_genesys_read_data_from_scanner (dev, calibration_data, size);
if (status != SANE_STATUS_GOOD)
{ {
status = free (calibration_data);
sanei_genesys_read_data_from_scanner (dev, calibration_data, size); DBG (DBG_error,
if (status != SANE_STATUS_GOOD) "genesys_white_shading_calibration: failed to read data: %s\n",
{ sane_strstatus (status));
free (calibration_data); return status;
DBG (DBG_error,
"genesys_white_shading_calibration: failed to read data: %s\n",
sane_strstatus (status));
return status;
}
}
else
{
/* we need to read full line by full line */
size = channels * 2 * pixels_per_line;
for (i = 0; i < dev->model->shading_lines; i++)
{
status =
sanei_genesys_read_data_from_scanner (dev,
calibration_data + i * size,
size);
if (status != SANE_STATUS_GOOD)
{
free (calibration_data);
DBG (DBG_error,
"genesys_white_shading_calibration: failed to read data: %s\n",
sane_strstatus (status));
return status;
}
}
} }
status = dev->model->cmd_set->end_scan (dev, dev->calib_reg, SANE_TRUE); status = dev->model->cmd_set->end_scan (dev, dev->calib_reg, SANE_TRUE);
@ -6210,7 +6162,7 @@ init_options (Genesys_Scanner * s)
s->opt[OPT_DISABLE_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE; s->opt[OPT_DISABLE_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE;
s->val[OPT_DISABLE_DYNAMIC_LINEART].w = SANE_FALSE; s->val[OPT_DISABLE_DYNAMIC_LINEART].w = SANE_FALSE;
/* not working for GL646 scanners yet */ /* not working for GL646 scanners yet */
if (s->dev->model->asic_type == GENESYS_GL646) if (s->dev->model->asic_type == GENESYS_GL646 || s->dev->model->asic_type == GENESYS_GL847)
{ {
s->opt[OPT_DISABLE_DYNAMIC_LINEART].cap |= SANE_CAP_INACTIVE; s->opt[OPT_DISABLE_DYNAMIC_LINEART].cap |= SANE_CAP_INACTIVE;
} }

Wyświetl plik

@ -786,9 +786,9 @@ static Genesys_Motor Motor[] = {
1, /* maximum power modes count */ 1, /* maximum power modes count */
{ /* motor slopes */ { /* motor slopes */
{ /* power mode 0 */ { /* power mode 0 */
{ 2343, 1017, 128, 0.80}, /* full step */ { 2343, 1017, 64, 0.80}, /* full step */
{ 4678, 2034, 64, 0.80}, /* half step */ { 4678, 2034, 64, 0.80}, /* half step */
{ 3*2712, 3*2712, 16, 0.80}, /* quarter step 0.75*2712 */ { 3*2712, 3*2712, 64, 0.80}, /* quarter step 0.75*2712 */
/*{ 4*2034, 4*2034, 32, 0.80}, quarter step */ /*{ 4*2034, 4*2034, 32, 0.80}, quarter step */
/* extra values kept for documentation /* extra values kept for documentation
{ 2343, 864, 32, 0.80}, full step { 2343, 864, 32, 0.80}, full step
@ -936,8 +936,8 @@ static Genesys_Model canon_lide_100_model = {
{16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in gray mode */
{16, 8, 0}, /* possible depths in color mode */ {16, 8, 0}, /* possible depths in color mode */
SANE_FIX (0.0), /* Start of scan area in mm (x) 6.95 */ SANE_FIX (0.0), /* Start of scan area in mm (x) */
SANE_FIX (30.0), /* Start of scan area in mm (y) */ SANE_FIX (7.3), /* Start of scan area in mm (y) */
SANE_FIX (216.07), /* Size of scan area in mm (x) */ SANE_FIX (216.07), /* Size of scan area in mm (x) */
SANE_FIX (299.0), /* Size of scan area in mm (y) */ SANE_FIX (299.0), /* Size of scan area in mm (y) */

Wyświetl plik

@ -871,11 +871,12 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne
fast_slope_table, fast_slope_table,
256, 256,
fast_slope_steps, fast_slope_steps,
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset+dev->sensor.sensor_pixels, 0,
fast_exposure, fast_exposure,
dev->motor.base_ydpi / dev->motor.base_ydpi / 4,
4, &fast_slope_steps, &fast_slope_steps,
&fast_exposure, 0); &fast_exposure,
0);
feedl = feed_steps - fast_slope_steps * 2; feedl = feed_steps - fast_slope_steps * 2;
use_fast_fed = 1; use_fast_fed = 1;
@ -1567,7 +1568,7 @@ gl847_init_optical_regs_scan (Genesys_Device * dev,
r = sanei_genesys_get_address (reg, 0x33); r = sanei_genesys_get_address (reg, 0x33);
r->value = LOBYTE (endx); r->value = LOBYTE (endx);
/* words(16bit) before gamma, conversion to 8 bit or lineart*/ /* words(16bit) before gamma, conversion to 8 bit or lineart*/
words_per_line = (used_pixels * dpiset) / gl847_get_dpihw (dev); words_per_line = (used_pixels * dpiset) / gl847_get_dpihw (dev);
dev->bpl = words_per_line*(depth/8); dev->bpl = words_per_line*(depth/8);
@ -1584,7 +1585,7 @@ gl847_init_optical_regs_scan (Genesys_Device * dev,
DBG (DBG_io2, "%s: dev->skip=%d\n", __FUNCTION__, dev->skip); DBG (DBG_io2, "%s: dev->skip=%d\n", __FUNCTION__, dev->skip);
RIE (sanei_genesys_buffer_free (&(dev->oe_buffer))); RIE (sanei_genesys_buffer_free (&(dev->oe_buffer)));
RIE (sanei_genesys_buffer_alloc (&(dev->oe_buffer), dev->bpl*channels)); RIE (sanei_genesys_buffer_alloc (&(dev->oe_buffer), dev->bpl));
words_per_line *= channels; words_per_line *= channels;
@ -1646,7 +1647,9 @@ gl847_get_led_exposure (Genesys_Device * dev)
static static
#endif #endif
SANE_Status SANE_Status
gl847_init_scan_regs (Genesys_Device * dev, Genesys_Register_Set * reg, float xres, /*dpi */ gl847_init_scan_regs (Genesys_Device * dev,
Genesys_Register_Set * reg,
float xres, /*dpi */
float yres, /*dpi */ float yres, /*dpi */
float startx, /*optical_res, from dummy_pixel+1 */ float startx, /*optical_res, from dummy_pixel+1 */
float starty, /*base_ydpi, from home! */ float starty, /*base_ydpi, from home! */
@ -1666,7 +1669,6 @@ gl847_init_scan_regs (Genesys_Device * dev, Genesys_Register_Set * reg, float xr
int stagger; int stagger;
int slope_dpi = 0; int slope_dpi = 0;
int move_dpi = 0;
int dummy = 0; int dummy = 0;
int scan_step_type = 1; int scan_step_type = 1;
int scan_power_mode = 0; int scan_power_mode = 0;
@ -1890,19 +1892,17 @@ independent of our calculated values:
/* lincnt */ /* lincnt */
lincnt = lines + max_shift + stagger; lincnt = lines + max_shift + stagger;
/* move */
move_dpi = dev->motor.base_ydpi;
/* add tl_y to base movement */ /* add tl_y to base movement */
move = starty; move = starty;
DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move); DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move);
/* subtract current head position */ /* subtract current head position */
/* XXX STEF XXX
move -= dev->scanhead_position_in_steps; move -= dev->scanhead_position_in_steps;
DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move); DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move);
if (move < 0) if (move < 0)
move = 0; move = 0; */
/* round it */ /* round it */
/* the move is not affected by dummy -- pierre */ /* the move is not affected by dummy -- pierre */
@ -3371,13 +3371,13 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
gl847_slow_back_home (dev, 1); gl847_slow_back_home (dev, 1);
/* channels */ /* channels */
if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */ if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */
channels = 3; channels = 3;
else else
channels = 1; channels = 1;
/* depth */ /* depth */
depth = dev->settings.depth; depth = dev->settings.depth;
if (dev->settings.scan_mode == SCAN_MODE_LINEART) if (dev->settings.scan_mode == SCAN_MODE_LINEART)
depth = 1; depth = 1;
@ -3404,19 +3404,17 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
move_dpi = dev->motor.base_ydpi; move_dpi = dev->motor.base_ydpi;
move = 0; move = SANE_UNFIX (dev->model->y_offset);
if (dev->model->flags & GENESYS_FLAG_SEARCH_START)
move += SANE_UNFIX (dev->model->y_offset_calib);
DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move);
move += SANE_UNFIX (dev->model->y_offset);
DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move);
move += dev->settings.tl_y; move += dev->settings.tl_y;
move = (move * move_dpi) / MM_PER_INCH;
DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move); DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move);
move = (move * move_dpi) / MM_PER_INCH; status = gl847_feed (dev, move);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__);
return status;
}
/* start */ /* start */
start = SANE_UNFIX (dev->model->x_offset); start = SANE_UNFIX (dev->model->x_offset);
@ -3447,11 +3445,13 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
dev->settings.xres, dev->settings.xres,
dev->settings.yres, dev->settings.yres,
start, start,
move, 0,
dev->settings.pixels, dev->settings.pixels,
dev->settings.lines, dev->settings.lines,
depth, depth,
channels, dev->settings.color_filter, flags); channels,
dev->settings.color_filter,
flags);
if (status != SANE_STATUS_GOOD) if (status != SANE_STATUS_GOOD)
return status; return status;
@ -4085,6 +4085,7 @@ gl847_init_memory_layout (Genesys_Device * dev)
return status; return status;
} }
#if 0
/** @brief dummy scan to reset scanner /** @brief dummy scan to reset scanner
* *
* */ * */
@ -4149,6 +4150,7 @@ gl847_dummy_scan (Genesys_Device * dev)
DBGCOMPLETED; DBGCOMPLETED;
return SANE_STATUS_GOOD; return SANE_STATUS_GOOD;
} }
#endif
#if 0 #if 0
/** /**
@ -4484,8 +4486,6 @@ gl847_init (Genesys_Device * dev)
} }
dev->already_initialized = SANE_TRUE; dev->already_initialized = SANE_TRUE;
gl847_dummy_scan(dev);
/* Move home */ /* Move home */
RIE (gl847_slow_back_home (dev, SANE_TRUE)); RIE (gl847_slow_back_home (dev, SANE_TRUE));
dev->scanhead_position_in_steps = 0; dev->scanhead_position_in_steps = 0;