kopia lustrzana https://gitlab.com/sane-project/backends
rodzic
b2a0344885
commit
81ae37a603
|
@ -55,7 +55,7 @@
|
||||||
|
|
||||||
#include "../include/sane/config.h"
|
#include "../include/sane/config.h"
|
||||||
|
|
||||||
#define BUILD 14
|
#define BUILD 15
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -4729,32 +4729,26 @@ genesys_start_scan (Genesys_Device * dev)
|
||||||
return SANE_STATUS_IO_ERROR;
|
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 */
|
/* 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 =
|
/* wait 1/10th of second between each test to avoid
|
||||||
sanei_genesys_read_reg_from_set (dev->reg,
|
overloading USB and CPU */
|
||||||
0x3d) * 65536 +
|
usleep (100 * 1000);
|
||||||
sanei_genesys_read_reg_from_set (dev->reg,
|
status = sanei_genesys_read_feed_steps (dev, &steps);
|
||||||
0x3e) * 256 +
|
if (status != SANE_STATUS_GOOD)
|
||||||
sanei_genesys_read_reg_from_set (dev->reg, 0x3f);
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
/* wait 1/10th of second between each test to avoid
|
DBG (DBG_error,
|
||||||
overloading USB and CPU */
|
"genesys_start_scan: Failed to read feed steps: %s\n",
|
||||||
usleep (100 * 1000);
|
sane_strstatus (status));
|
||||||
status = sanei_genesys_read_feed_steps (dev, &steps);
|
return status;
|
||||||
if (status != SANE_STATUS_GOOD)
|
|
||||||
{
|
|
||||||
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 */
|
/* wait for buffers to be filled */
|
||||||
do
|
do
|
||||||
|
|
|
@ -786,13 +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 */
|
||||||
{ 2034, 1017, 64, 0.10}, /* full step */
|
{ 2034, 800, 80, 0.50}, /* full step */
|
||||||
{ 4678, 2034, 64, 0.80}, /* half step */
|
{ 8136, 3200, 80, 0.50}, /* half step */
|
||||||
{ 3*2712, 3*2712, 64, 0.80}, /* quarter step 0.75*2712 */
|
{ 3*2712, 3*2712, 16, 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 */
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -973,7 +969,7 @@ static Genesys_Model canon_lide_100_model = {
|
||||||
| GENESYS_FLAG_DARK_CALIBRATION
|
| GENESYS_FLAG_DARK_CALIBRATION
|
||||||
| GENESYS_FLAG_CUSTOM_GAMMA,
|
| GENESYS_FLAG_CUSTOM_GAMMA,
|
||||||
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW,
|
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW,
|
||||||
100,
|
150,
|
||||||
400
|
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",
|
"gl847_init_motor_regs : feed_steps=%d, action=%d, flags=%x\n",
|
||||||
feed_steps, action, flags);
|
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_slope_steps = 256;
|
||||||
fast_exposure = sanei_genesys_exposure_time2 (dev,
|
fast_exposure = sanei_genesys_exposure_time2 (dev,
|
||||||
dev->motor.base_ydpi / 4,
|
dev->motor.base_ydpi / 4,
|
||||||
|
@ -861,12 +861,14 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne
|
||||||
fast_exposure);
|
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)
|
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_slope_steps = 256;
|
||||||
fast_exposure = dev->motor.slopes[0][0].maximum_start_speed;
|
fast_exposure = dev->motor.slopes[0][0].maximum_start_speed;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
fast_slope_time = sanei_genesys_create_slope_table3 (dev,
|
fast_slope_time = sanei_genesys_create_slope_table3 (dev,
|
||||||
fast_slope_table,
|
fast_slope_table,
|
||||||
|
@ -931,7 +933,6 @@ HOME_FREE: 3
|
||||||
r = sanei_genesys_get_address (reg, REG02);
|
r = sanei_genesys_get_address (reg, REG02);
|
||||||
r->value &= ~REG02_LONGCURV;
|
r->value &= ~REG02_LONGCURV;
|
||||||
r->value &= ~REG02_HOMENEG;
|
r->value &= ~REG02_HOMENEG;
|
||||||
r->value &= ~REG02_FASTFED;
|
|
||||||
r->value &= ~REG02_AGOHOME;
|
r->value &= ~REG02_AGOHOME;
|
||||||
r->value &= ~REG02_ACDCDIS;
|
r->value &= ~REG02_ACDCDIS;
|
||||||
|
|
||||||
|
@ -947,11 +948,12 @@ HOME_FREE: 3
|
||||||
|
|
||||||
if (use_fast_fed)
|
if (use_fast_fed)
|
||||||
r->value |= REG02_FASTFED;
|
r->value |= REG02_FASTFED;
|
||||||
|
else
|
||||||
|
r->value &= ~REG02_FASTFED;
|
||||||
|
|
||||||
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
||||||
r->value |= REG02_AGOHOME;
|
r->value |= REG02_AGOHOME;
|
||||||
|
|
||||||
|
|
||||||
/* reset gpio pin */
|
/* reset gpio pin */
|
||||||
RIE (sanei_genesys_read_register (dev, REG6C, &val));
|
RIE (sanei_genesys_read_register (dev, REG6C, &val));
|
||||||
val |= REG6C_GPIO13;
|
val |= REG6C_GPIO13;
|
||||||
|
@ -1120,6 +1122,8 @@ gl847_init_motor_regs_scan (Genesys_Device * dev,
|
||||||
/* we need to shorten fast_slope_steps here. */
|
/* we need to shorten fast_slope_steps here. */
|
||||||
fast_slope_steps = (feed_steps - (slow_slope_steps >> scan_step_type)) / 2;
|
fast_slope_steps = (feed_steps - (slow_slope_steps >> scan_step_type)) / 2;
|
||||||
}
|
}
|
||||||
|
if(fast_slope_steps>256)
|
||||||
|
fast_slope_steps=256;
|
||||||
|
|
||||||
DBG (DBG_info,
|
DBG (DBG_info,
|
||||||
"gl847_init_motor_regs_scan: Maximum allowed slope steps for fast slope: %d\n",
|
"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)
|
if (use_fast_fed)
|
||||||
r->value |= REG02_FASTFED;
|
r->value |= REG02_FASTFED;
|
||||||
|
else
|
||||||
|
r->value &= ~REG02_FASTFED;
|
||||||
|
|
||||||
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
||||||
r->value |= REG02_AGOHOME;
|
r->value |= REG02_AGOHOME;
|
||||||
|
@ -1681,6 +1687,7 @@ gl847_init_scan_regs (Genesys_Device * dev,
|
||||||
int stagger;
|
int stagger;
|
||||||
|
|
||||||
int slope_dpi = 0;
|
int slope_dpi = 0;
|
||||||
|
int pixels_exposure;
|
||||||
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;
|
||||||
|
@ -1834,10 +1841,14 @@ independent of our calculated values:
|
||||||
/* exposure_time , CCD case not handled */
|
/* exposure_time , CCD case not handled */
|
||||||
led_exposure = gl847_get_led_exposure (dev);
|
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,
|
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||||
slope_dpi,
|
slope_dpi,
|
||||||
scan_step_type,
|
scan_step_type,
|
||||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
pixels_exposure,
|
||||||
led_exposure,
|
led_exposure,
|
||||||
scan_power_mode);
|
scan_power_mode);
|
||||||
|
|
||||||
|
@ -1846,7 +1857,7 @@ independent of our calculated values:
|
||||||
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
||||||
slope_dpi,
|
slope_dpi,
|
||||||
scan_step_type,
|
scan_step_type,
|
||||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
pixels_exposure,
|
||||||
led_exposure,
|
led_exposure,
|
||||||
scan_power_mode + 1);
|
scan_power_mode + 1);
|
||||||
if (exposure_time < exposure_time2)
|
if (exposure_time < exposure_time2)
|
||||||
|
@ -2065,6 +2076,7 @@ gl847_calculate_current_setup (Genesys_Device * dev)
|
||||||
int scan_step_type = 1;
|
int scan_step_type = 1;
|
||||||
int scan_power_mode = 0;
|
int scan_power_mode = 0;
|
||||||
int max_shift;
|
int max_shift;
|
||||||
|
int pixels_exposure;
|
||||||
|
|
||||||
SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */
|
SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */
|
||||||
int optical_res;
|
int optical_res;
|
||||||
|
@ -2227,11 +2239,15 @@ dummy \ scanned lines
|
||||||
|
|
||||||
led_exposure = gl847_get_led_exposure (dev);
|
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 */
|
||||||
exposure_time = sanei_genesys_exposure_time2 (dev,
|
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||||
slope_dpi,
|
slope_dpi,
|
||||||
scan_step_type,
|
scan_step_type,
|
||||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
pixels_exposure,
|
||||||
led_exposure,
|
led_exposure,
|
||||||
scan_power_mode);
|
scan_power_mode);
|
||||||
|
|
||||||
|
@ -2240,7 +2256,7 @@ dummy \ scanned lines
|
||||||
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
exposure_time2 = sanei_genesys_exposure_time2 (dev,
|
||||||
slope_dpi,
|
slope_dpi,
|
||||||
scan_step_type,
|
scan_step_type,
|
||||||
dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset,
|
pixels_exposure,
|
||||||
led_exposure,
|
led_exposure,
|
||||||
scan_power_mode + 1);
|
scan_power_mode + 1);
|
||||||
if (exposure_time < exposure_time2)
|
if (exposure_time < exposure_time2)
|
||||||
|
@ -3425,11 +3441,16 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
|
||||||
move = (move * move_dpi) / MM_PER_INCH;
|
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);
|
||||||
|
|
||||||
status = gl847_feed (dev, move);
|
/* at high res we do fast move to scan area */
|
||||||
if (status != SANE_STATUS_GOOD)
|
if(dev->settings.xres>=300)
|
||||||
{
|
{
|
||||||
DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__);
|
status = gl847_feed (dev, move);
|
||||||
return status;
|
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 */
|
/* clear scancnt and fedcnt */
|
||||||
|
@ -3462,7 +3483,7 @@ gl847_init_regs_for_scan (Genesys_Device * dev)
|
||||||
dev->settings.xres,
|
dev->settings.xres,
|
||||||
dev->settings.yres,
|
dev->settings.yres,
|
||||||
start,
|
start,
|
||||||
0,
|
move,
|
||||||
dev->settings.pixels,
|
dev->settings.pixels,
|
||||||
dev->settings.lines,
|
dev->settings.lines,
|
||||||
depth,
|
depth,
|
||||||
|
@ -3880,35 +3901,6 @@ gl847_init_regs_for_warmup (Genesys_Device * dev,
|
||||||
return SANE_STATUS_GOOD;
|
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
|
static SANE_Status
|
||||||
gl847_is_compatible_calibration (Genesys_Device * dev,
|
gl847_is_compatible_calibration (Genesys_Device * dev,
|
||||||
Genesys_Calibration_Cache * cache,
|
Genesys_Calibration_Cache * cache,
|
||||||
|
@ -4434,7 +4426,7 @@ gl847_init (Genesys_Device * dev)
|
||||||
dev->oe_buffer.buffer=NULL;
|
dev->oe_buffer.buffer=NULL;
|
||||||
dev->already_initialized = SANE_TRUE;
|
dev->already_initialized = SANE_TRUE;
|
||||||
|
|
||||||
/* Move home */
|
/* Move home fi needed */
|
||||||
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;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue