kopia lustrzana https://gitlab.com/sane-project/backends
rodzic
b2a0344885
commit
81ae37a603
|
@ -55,7 +55,7 @@
|
|||
|
||||
#include "../include/sane/config.h"
|
||||
|
||||
#define BUILD 14
|
||||
#define BUILD 15
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
@ -4729,32 +4729,26 @@ genesys_start_scan (Genesys_Device * dev)
|
|||
return SANE_STATUS_IO_ERROR;
|
||||
}
|
||||
|
||||
/*do we really need this? the valid data check should be sufficent -- pierre*/
|
||||
/*do we really need this? the valid data check should be sufficent -- pierre*/
|
||||
/* waits for head to reach scanning position */
|
||||
if (!(dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS))
|
||||
expected = sanei_genesys_read_reg_from_set (dev->reg, 0x3d) * 65536
|
||||
+ sanei_genesys_read_reg_from_set (dev->reg, 0x3e) * 256
|
||||
+ sanei_genesys_read_reg_from_set (dev->reg, 0x3f);
|
||||
do
|
||||
{
|
||||
expected =
|
||||
sanei_genesys_read_reg_from_set (dev->reg,
|
||||
0x3d) * 65536 +
|
||||
sanei_genesys_read_reg_from_set (dev->reg,
|
||||
0x3e) * 256 +
|
||||
sanei_genesys_read_reg_from_set (dev->reg, 0x3f);
|
||||
do
|
||||
/* wait 1/10th of second between each test to avoid
|
||||
overloading USB and CPU */
|
||||
usleep (100 * 1000);
|
||||
status = sanei_genesys_read_feed_steps (dev, &steps);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
/* wait 1/10th of second between each test to avoid
|
||||
overloading USB and CPU */
|
||||
usleep (100 * 1000);
|
||||
status = sanei_genesys_read_feed_steps (dev, &steps);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"genesys_start_scan: Failed to read feed steps: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
DBG (DBG_error,
|
||||
"genesys_start_scan: Failed to read feed steps: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
while (steps < expected);
|
||||
}
|
||||
while (steps < expected);
|
||||
|
||||
/* wait for buffers to be filled */
|
||||
do
|
||||
|
|
|
@ -786,13 +786,9 @@ static Genesys_Motor Motor[] = {
|
|||
1, /* maximum power modes count */
|
||||
{ /* motor slopes */
|
||||
{ /* power mode 0 */
|
||||
{ 2034, 1017, 64, 0.10}, /* full step */
|
||||
{ 4678, 2034, 64, 0.80}, /* half step */
|
||||
{ 3*2712, 3*2712, 64, 0.80}, /* quarter step 0.75*2712 */
|
||||
/*{ 4*2034, 4*2034, 32, 0.80}, quarter step */
|
||||
/* extra values kept for documentation
|
||||
{ 2343, 864, 32, 0.80}, full step
|
||||
{ 2*1171, 2*648, 32, 0.80}, half step */
|
||||
{ 2034, 800, 80, 0.50}, /* full step */
|
||||
{ 8136, 3200, 80, 0.50}, /* half step */
|
||||
{ 3*2712, 3*2712, 16, 0.80}, /* quarter step 0.75*2712 */
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -973,7 +969,7 @@ static Genesys_Model canon_lide_100_model = {
|
|||
| GENESYS_FLAG_DARK_CALIBRATION
|
||||
| GENESYS_FLAG_CUSTOM_GAMMA,
|
||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW,
|
||||
100,
|
||||
150,
|
||||
400
|
||||
};
|
||||
|
||||
|
|
|
@ -846,9 +846,9 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne
|
|||
"gl847_init_motor_regs : feed_steps=%d, action=%d, flags=%x\n",
|
||||
feed_steps, action, flags);
|
||||
|
||||
if (action == MOTOR_ACTION_FEED || action == MOTOR_ACTION_GO_HOME)
|
||||
if (action == MOTOR_ACTION_FEED || action == MOTOR_ACTION_GO_HOME || action == MOTOR_ACTION_HOME_FREE)
|
||||
{
|
||||
/* FEED and GO_HOME can use fastest slopes available */
|
||||
/* FEED and GO_HOME can use fastest slopes available */
|
||||
fast_slope_steps = 256;
|
||||
fast_exposure = sanei_genesys_exposure_time2 (dev,
|
||||
dev->motor.base_ydpi / 4,
|
||||
|
@ -861,12 +861,14 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne
|
|||
fast_exposure);
|
||||
}
|
||||
|
||||
/* HOME_FREE must be able to stop in one step, so do not try to get faster */
|
||||
/* XXX STEF XXX
|
||||
if (action == MOTOR_ACTION_HOME_FREE)
|
||||
{
|
||||
/* HOME_FREE must be able to stop in one step, so do not try to get faster */
|
||||
fast_slope_steps = 256;
|
||||
fast_exposure = dev->motor.slopes[0][0].maximum_start_speed;
|
||||
}
|
||||
*/
|
||||
|
||||
fast_slope_time = sanei_genesys_create_slope_table3 (dev,
|
||||
fast_slope_table,
|
||||
|
@ -931,7 +933,6 @@ HOME_FREE: 3
|
|||
r = sanei_genesys_get_address (reg, REG02);
|
||||
r->value &= ~REG02_LONGCURV;
|
||||
r->value &= ~REG02_HOMENEG;
|
||||
r->value &= ~REG02_FASTFED;
|
||||
r->value &= ~REG02_AGOHOME;
|
||||
r->value &= ~REG02_ACDCDIS;
|
||||
|
||||
|
@ -947,11 +948,12 @@ HOME_FREE: 3
|
|||
|
||||
if (use_fast_fed)
|
||||
r->value |= REG02_FASTFED;
|
||||
else
|
||||
r->value &= ~REG02_FASTFED;
|
||||
|
||||
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
||||
r->value |= REG02_AGOHOME;
|
||||
|
||||
|
||||
/* reset gpio pin */
|
||||
RIE (sanei_genesys_read_register (dev, REG6C, &val));
|
||||
val |= REG6C_GPIO13;
|
||||
|
@ -1120,6 +1122,8 @@ gl847_init_motor_regs_scan (Genesys_Device * dev,
|
|||
/* we need to shorten fast_slope_steps here. */
|
||||
fast_slope_steps = (feed_steps - (slow_slope_steps >> scan_step_type)) / 2;
|
||||
}
|
||||
if(fast_slope_steps>256)
|
||||
fast_slope_steps=256;
|
||||
|
||||
DBG (DBG_info,
|
||||
"gl847_init_motor_regs_scan: Maximum allowed slope steps for fast slope: %d\n",
|
||||
|
@ -1206,6 +1210,8 @@ gl847_init_motor_regs_scan (Genesys_Device * dev,
|
|||
|
||||
if (use_fast_fed)
|
||||
r->value |= REG02_FASTFED;
|
||||
else
|
||||
r->value &= ~REG02_FASTFED;
|
||||
|
||||
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
||||
r->value |= REG02_AGOHOME;
|
||||
|
@ -1681,6 +1687,7 @@ gl847_init_scan_regs (Genesys_Device * dev,
|
|||
int stagger;
|
||||
|
||||
int slope_dpi = 0;
|
||||
int pixels_exposure;
|
||||
int dummy = 0;
|
||||
int scan_step_type = 1;
|
||||
int scan_power_mode = 0;
|
||||
|
@ -1834,10 +1841,14 @@ independent of our calculated values:
|
|||
/* exposure_time , CCD case not handled */
|
||||
led_exposure = gl847_get_led_exposure (dev);
|
||||
|
||||
pixels_exposure=224+dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset+dev->sensor.sensor_pixels;
|
||||
pixels_exposure=(pixels*xres)/dev->sensor.optical_res;
|
||||
pixels_exposure=0;
|
||||
|
||||
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||
slope_dpi,
|
||||
scan_step_type,
|
||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
||||
pixels_exposure,
|
||||
led_exposure,
|
||||
scan_power_mode);
|
||||
|
||||
|
@ -1846,7 +1857,7 @@ independent of our calculated values:
|
|||
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
||||
slope_dpi,
|
||||
scan_step_type,
|
||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
||||
pixels_exposure,
|
||||
led_exposure,
|
||||
scan_power_mode + 1);
|
||||
if (exposure_time < exposure_time2)
|
||||
|
@ -2065,6 +2076,7 @@ gl847_calculate_current_setup (Genesys_Device * dev)
|
|||
int scan_step_type = 1;
|
||||
int scan_power_mode = 0;
|
||||
int max_shift;
|
||||
int pixels_exposure;
|
||||
|
||||
SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */
|
||||
int optical_res;
|
||||
|
@ -2227,11 +2239,15 @@ dummy \ scanned lines
|
|||
|
||||
led_exposure = gl847_get_led_exposure (dev);
|
||||
|
||||
pixels_exposure=224+dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset+dev->sensor.sensor_pixels;
|
||||
pixels_exposure=(pixels*xres)/dev->sensor.optical_res;
|
||||
pixels_exposure=0;
|
||||
|
||||
/* exposure_time */
|
||||
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||
slope_dpi,
|
||||
scan_step_type,
|
||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
||||
pixels_exposure,
|
||||
led_exposure,
|
||||
scan_power_mode);
|
||||
|
||||
|
@ -2240,7 +2256,7 @@ dummy \ scanned lines
|
|||
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
||||
slope_dpi,
|
||||
scan_step_type,
|
||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
||||
pixels_exposure,
|
||||
led_exposure,
|
||||
scan_power_mode + 1);
|
||||
if (exposure_time < exposure_time2)
|
||||
|
@ -3425,11 +3441,16 @@ 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);
|
||||
|
||||
status = gl847_feed (dev, move);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
/* at high res we do fast move to scan area */
|
||||
if(dev->settings.xres>=300)
|
||||
{
|
||||
DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__);
|
||||
return status;
|
||||
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 */
|
||||
|
@ -3462,7 +3483,7 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
|
|||
dev->settings.xres,
|
||||
dev->settings.yres,
|
||||
start,
|
||||
0,
|
||||
move,
|
||||
dev->settings.pixels,
|
||||
dev->settings.lines,
|
||||
depth,
|
||||
|
@ -3880,35 +3901,6 @@ gl847_init_regs_for_warmup (Genesys_Device * dev,
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* this function moves head without scanning, forward, then backward
|
||||
* so that the head goes to park position.
|
||||
* as a by-product, also check for lock
|
||||
*/
|
||||
static SANE_Status
|
||||
sanei_gl847_repark_head (Genesys_Device * dev)
|
||||
{
|
||||
SANE_Status status;
|
||||
|
||||
DBGSTART;
|
||||
|
||||
status = gl847_feed (dev, 232);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error, "gl847_repark_head: failed to feed: %s\n",
|
||||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
/* toggle motor flag, put an huge step number and redo move backward */
|
||||
status = gl847_slow_back_home (dev, 1);
|
||||
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
}
|
||||
|
||||
static SANE_Status
|
||||
gl847_is_compatible_calibration (Genesys_Device * dev,
|
||||
Genesys_Calibration_Cache * cache,
|
||||
|
@ -4434,7 +4426,7 @@ gl847_init (Genesys_Device * dev)
|
|||
dev->oe_buffer.buffer=NULL;
|
||||
dev->already_initialized = SANE_TRUE;
|
||||
|
||||
/* Move home */
|
||||
/* Move home fi needed */
|
||||
RIE (gl847_slow_back_home (dev, SANE_TRUE));
|
||||
dev->scanhead_position_in_steps = 0;
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue