working 4800 dpi scans

merge-requests/1/head
Stphane Voltz 2011-03-29 22:13:25 +02:00
rodzic 9f9a157801
commit a7652acdcc
3 zmienionych plików z 95 dodań i 10 usunięć

Wyświetl plik

@ -5079,13 +5079,7 @@ genesys_fill_read_buffer (Genesys_Device * dev)
else if (dev->segnb>1)
{
/* multi-segment sensors processing */
/*
if (!(dev->model->flags & GENESYS_FLAG_SIS_SENSOR)) */
status = genesys_fill_segmented_buffer (dev, work_buffer_dst, size);
/*
else
status = genesys_fill_oe_buffer (dev, work_buffer_dst, size);
*/
status = genesys_fill_segmented_buffer (dev, work_buffer_dst, size);
}
else /* regular case with no extra copy */
{
@ -5743,11 +5737,14 @@ calc_parameters (Genesys_Scanner * s)
|| s->dev->model->asic_type == GENESYS_GL124
|| s->dev->model->asic_type == GENESYS_GL843)
{
s->params.pixels_per_line = (s->params.pixels_per_line/4)*4;
if (s->dev->settings.xres <= 1200)
s->params.pixels_per_line = (s->params.pixels_per_line/4)*4;
else
s->params.pixels_per_line = (s->params.pixels_per_line/16)*16;
}
/* corner case for true lineart for sensor with several segments
* or when xres is doubled to mathc yres */
* or when xres is doubled to match yres */
if (s->dev->settings.xres >= 1200
&& ( s->dev->model->asic_type == GENESYS_GL124
|| s->dev->current_setup.xres < s->dev->current_setup.yres

Wyświetl plik

@ -2356,7 +2356,6 @@ gl124_feed (Genesys_Device * dev, unsigned int steps)
memset (local_reg, 0, sizeof (local_reg));
memcpy (local_reg, dev->reg, GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set));
resolution=MOVE_DPI;
gl124_init_scan_regs (dev,
local_reg,

Wyświetl plik

@ -2409,6 +2409,83 @@ gl847_init_regs_for_shading (Genesys_Device * dev)
return SANE_STATUS_GOOD;
}
/** @brief moves the slider to steps at motor base dpi
* @param dev device to work on
* @param steps number of steps to move
* */
#ifndef UNIT_TESTING
static
#endif
SANE_Status
gl847_feed (Genesys_Device * dev, unsigned int steps)
{
Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS];
SANE_Status status;
Genesys_Register_Set *r;
float resolution;
uint8_t val;
DBGSTART;
/* prepare local registers */
memset (local_reg, 0, sizeof (local_reg));
memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set));
resolution=300;
gl847_init_scan_regs (dev,
local_reg,
resolution,
resolution,
0,
steps,
100,
3,
8,
3,
dev->settings.color_filter,
SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_FEEDING |
SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE |
SCAN_FLAG_IGNORE_LINE_DISTANCE);
sanei_genesys_set_triple(local_reg,REG_EXPR,0);
sanei_genesys_set_triple(local_reg,REG_EXPG,0);
sanei_genesys_set_triple(local_reg,REG_EXPB,0);
/* clear scan and feed count */
RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT));
RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRMCNT));
/* set up for no scan */
r = sanei_genesys_get_address (local_reg, REG01);
r->value &= ~REG01_SCAN;
/* send registers */
RIE (gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS));
status = gl847_start_action (dev);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "%s: failed to start motor: %s\n", __FUNCTION__, sane_strstatus (status));
gl847_stop_action (dev);
/* restore original registers */
gl847_bulk_write_register (dev, dev->reg, GENESYS_GL847_MAX_REGS);
return status;
}
/* wait until feed count reaches the required value, but do not
* exceed 30s */
do
{
status = sanei_genesys_get_status (dev, &val);
}
while (status == SANE_STATUS_GOOD && !(val & FEEDFSH));
DBGCOMPLETED;
return SANE_STATUS_GOOD;
}
/** @brief set up registers for the actual scan
*/
static SANE_Status
@ -2470,6 +2547,18 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
move = (move * move_dpi) / MM_PER_INCH;
DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move);
/* at high res we do fast move to scan area */
if(dev->settings.xres>1200)
{
status = gl847_feed (dev, move);
if (status != SANE_STATUS_GOOD)
{
DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__);
return status;
}
move=0;
}
/* clear scancnt and fedcnt */
val = REG0D_CLRLNCNT;
RIE (sanei_genesys_write_register (dev, REG0D, val));