kopia lustrzana https://gitlab.com/sane-project/backends
GL843 progress
- warming up working for gl843 scanners - per resolution motor/sensor profiles for gl843 scanners - use sanei_genesysy_slope_tale for gl843 scanners - glxxx_set_motor_power usage cleanupsmerge-requests/1/head
rodzic
6b1afd92ab
commit
dd6df8a7c7
|
@ -4051,8 +4051,7 @@ genesys_warmup_lamp (Genesys_Device * dev)
|
|||
|
||||
DBG (DBG_proc, "genesys_warmup_lamp: start\n");
|
||||
|
||||
dev->model->cmd_set->init_regs_for_warmup (dev, dev->reg, &channels,
|
||||
&total_size);
|
||||
dev->model->cmd_set->init_regs_for_warmup (dev, dev->reg, &channels, &total_size);
|
||||
first_line = malloc (total_size);
|
||||
if (!first_line)
|
||||
return SANE_STATUS_NO_MEM;
|
||||
|
@ -4063,7 +4062,6 @@ genesys_warmup_lamp (Genesys_Device * dev)
|
|||
|
||||
do
|
||||
{
|
||||
|
||||
DBG (DBG_info, "genesys_warmup_lamp: one more loop\n");
|
||||
RIE (dev->model->cmd_set->begin_scan (dev, dev->reg, SANE_FALSE));
|
||||
do
|
||||
|
@ -4072,8 +4070,7 @@ genesys_warmup_lamp (Genesys_Device * dev)
|
|||
}
|
||||
while (empty);
|
||||
|
||||
status =
|
||||
sanei_genesys_read_data_from_scanner (dev, first_line, total_size);
|
||||
status = sanei_genesys_read_data_from_scanner (dev, first_line, total_size);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
RIE (sanei_genesys_read_data_from_scanner
|
||||
|
@ -4099,12 +4096,11 @@ genesys_warmup_lamp (Genesys_Device * dev)
|
|||
/* compute difference between the two scans */
|
||||
for (pixel = 0; pixel < total_size; pixel++)
|
||||
{
|
||||
/* 16 bit data */
|
||||
if (dev->model->cmd_set->get_bitset_bit (dev->reg))
|
||||
{
|
||||
first_average +=
|
||||
(first_line[pixel] + first_line[pixel + 1] * 256);
|
||||
second_average +=
|
||||
(second_line[pixel] + second_line[pixel + 1] * 256);
|
||||
first_average += (first_line[pixel] + first_line[pixel + 1] * 256);
|
||||
second_average += (second_line[pixel] + second_line[pixel + 1] * 256);
|
||||
pixel++;
|
||||
}
|
||||
else
|
||||
|
@ -4142,9 +4138,8 @@ genesys_warmup_lamp (Genesys_Device * dev)
|
|||
total_size / (lines * channels),
|
||||
lines);
|
||||
}
|
||||
DBG (DBG_info,
|
||||
"genesys_warmup_lamp: average 1 = %.2f %%, average 2 = %.2f %%\n",
|
||||
first_average, second_average);
|
||||
DBG (DBG_info, "genesys_warmup_lamp: average 1 = %.2f, average 2 = %.2f\n", first_average, second_average);
|
||||
/* if delta below 15/255 ~= 5.8%, lamp is considred warm enough */
|
||||
if (abs (first_average - second_average) < 15
|
||||
&& second_average > 55)
|
||||
break;
|
||||
|
|
|
@ -517,7 +517,7 @@ static Genesys_Sensor Sensor[] = {
|
|||
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} ,
|
||||
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
||||
{0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x6f} ,
|
||||
{0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f} ,
|
||||
1.0, 1.0, 1.0,
|
||||
NULL, NULL, NULL}
|
||||
,
|
||||
|
@ -1194,7 +1194,6 @@ static Genesys_Model hpg4010_model = {
|
|||
GPO_G4050,
|
||||
MOTOR_G4050,
|
||||
GENESYS_FLAG_LAZY_INIT | /* Which flags are needed for this scanner? */
|
||||
GENESYS_FLAG_SKIP_WARMUP |
|
||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||
GENESYS_FLAG_DARK_CALIBRATION |
|
||||
GENESYS_FLAG_CUSTOM_GAMMA,
|
||||
|
@ -1246,7 +1245,6 @@ static Genesys_Model hpg4050_model = {
|
|||
GPO_G4050,
|
||||
MOTOR_G4050,
|
||||
GENESYS_FLAG_LAZY_INIT | /* Which flags are needed for this scanner? */
|
||||
GENESYS_FLAG_SKIP_WARMUP |
|
||||
GENESYS_FLAG_OFFSET_CALIBRATION |
|
||||
GENESYS_FLAG_DARK_CALIBRATION |
|
||||
GENESYS_FLAG_CUSTOM_GAMMA,
|
||||
|
|
|
@ -924,10 +924,6 @@ Motor_Profile *profile;
|
|||
return profile->step_type;
|
||||
}
|
||||
|
||||
#define MOTOR_FLAG_AUTO_GO_HOME 1
|
||||
#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2
|
||||
#define MOTOR_FLAG_FEED 4
|
||||
|
||||
|
||||
static SANE_Status
|
||||
gl124_init_motor_regs_scan (Genesys_Device * dev,
|
||||
|
@ -2508,15 +2504,13 @@ gl124_init_regs_for_coarse_calibration (Genesys_Device * dev)
|
|||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
DBG (DBG_info,
|
||||
"gl124_init_register_for_coarse_calibration: optical sensor res: %d dpi, actual res: %d\n",
|
||||
dev->sensor.optical_res / cksel, dev->settings.xres);
|
||||
|
||||
status =
|
||||
gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS);
|
||||
status = gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
|
@ -2576,8 +2570,7 @@ gl124_init_regs_for_shading (Genesys_Device * dev)
|
|||
SCAN_FLAG_DISABLE_GAMMA |
|
||||
SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE |
|
||||
SCAN_FLAG_IGNORE_LINE_DISTANCE);
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
|
@ -3043,8 +3036,7 @@ gl124_led_calibration (Genesys_Device * dev)
|
|||
turn = 0;
|
||||
|
||||
/* no move during led calibration */
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
do
|
||||
{
|
||||
sanei_genesys_set_triple(dev->calib_reg,REG_EXPR,expr);
|
||||
|
@ -3247,8 +3239,7 @@ gl124_offset_calibration (Genesys_Device * dev)
|
|||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
/* allocate memory for scans */
|
||||
total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */
|
||||
|
@ -3421,8 +3412,7 @@ gl124_coarse_gain_calibration (Genesys_Device * dev, int dpi)
|
|||
SCAN_FLAG_DISABLE_GAMMA |
|
||||
SCAN_FLAG_SINGLE_LINE |
|
||||
SCAN_FLAG_IGNORE_LINE_DISTANCE);
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
|
@ -3565,8 +3555,7 @@ gl124_init_regs_for_warmup (Genesys_Device * dev,
|
|||
|
||||
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl124_set_motor_power (reg, SANE_FALSE);
|
||||
RIE (gl124_bulk_write_register (dev, reg, GENESYS_GL124_MAX_REGS));
|
||||
|
||||
DBGCOMPLETED;
|
||||
|
|
|
@ -487,113 +487,6 @@ static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi)
|
|||
return &(sensors[idx]);
|
||||
}
|
||||
|
||||
/** @get motor profile
|
||||
* search for the database of motor profiles and get the best one. Each
|
||||
* profile is at full step and at a reference exposure. Use KV-SS080 table
|
||||
* by default.
|
||||
* @param motor_type motor id
|
||||
* @param exposure exposure time
|
||||
* @return a pointer to a Motor_Profile struct
|
||||
*/
|
||||
static Motor_Profile *get_motor_profile(int motor_type, int exposure)
|
||||
{
|
||||
unsigned int i;
|
||||
int idx;
|
||||
|
||||
i=0;
|
||||
idx=-1;
|
||||
while(i<sizeof(motors)/sizeof(Motor_Profile))
|
||||
{
|
||||
/* exact match */
|
||||
if(motors[i].motor_type==motor_type && motors[i].exposure==exposure)
|
||||
{
|
||||
return &(motors[i]);
|
||||
}
|
||||
|
||||
/* closest match */
|
||||
if(motors[i].motor_type==motor_type)
|
||||
{
|
||||
if(idx<0)
|
||||
{
|
||||
idx=i;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(motors[i].exposure>=exposure
|
||||
&& motors[i].exposure<motors[idx].exposure)
|
||||
{
|
||||
idx=i;
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* default fallback */
|
||||
if(idx<0)
|
||||
idx=0;
|
||||
|
||||
return &(motors[idx]);
|
||||
}
|
||||
|
||||
static int gl843_slope_table(uint16_t *slope,
|
||||
int *steps,
|
||||
int dpi,
|
||||
int exposure,
|
||||
int base_dpi,
|
||||
int step_type,
|
||||
int factor,
|
||||
int motor_type)
|
||||
{
|
||||
int sum, i;
|
||||
uint16_t target,current;
|
||||
Motor_Profile *profile;
|
||||
|
||||
/* required speed */
|
||||
target=((exposure * dpi) / base_dpi)>>step_type;
|
||||
|
||||
/* fill result with target speed */
|
||||
for(i=0;i<256*factor;i++)
|
||||
slope[i]=target;
|
||||
|
||||
profile=get_motor_profile(motor_type,exposure);
|
||||
|
||||
/* use profile to build table */
|
||||
sum=0;
|
||||
i=0;
|
||||
current=profile->table[0]>>step_type;
|
||||
while(i<(256*factor) && current>target)
|
||||
{
|
||||
slope[i]=current;
|
||||
sum+=slope[i];
|
||||
i++;
|
||||
current=profile->table[i]>>step_type;
|
||||
}
|
||||
|
||||
/* flat table case */
|
||||
if(i==0)
|
||||
{
|
||||
for(i=0;i<1024;i++)
|
||||
{
|
||||
slope[i]=profile->table[i]>>step_type;
|
||||
sum+=slope[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* align size on step time factor */
|
||||
while(i%factor!=0)
|
||||
{
|
||||
sum+=slope[i];
|
||||
i++;
|
||||
}
|
||||
|
||||
/* return used steps and acceleration sum */
|
||||
*steps=i;
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/** copy sensor specific settings */
|
||||
static void
|
||||
|
@ -605,46 +498,44 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
|||
|
||||
DBGSTART;
|
||||
|
||||
/* common settings */
|
||||
|
||||
dpihw=sanei_genesys_compute_dpihw(dev,dpi);
|
||||
sensor=get_sensor_profile(dev->model->ccd_type, dpihw);
|
||||
|
||||
for (i = 0x06; i < 0x0e; i++)
|
||||
{
|
||||
r = sanei_genesys_get_address (regs, 0x10 + i);
|
||||
if (r)
|
||||
r->value = dev->sensor.regs_0x10_0x1d[i];
|
||||
r->value = sensor->regs_0x10_0x1d[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
r = sanei_genesys_get_address (regs, 0x52 + i);
|
||||
if (r)
|
||||
r->value = dev->sensor.regs_0x52_0x5e[i];
|
||||
r->value = sensor->regs_0x52_0x5e[i];
|
||||
}
|
||||
|
||||
/* set EXPDUMMY and CKxMAP */
|
||||
dpihw=sanei_genesys_compute_dpihw(dev,dpi);
|
||||
sensor=get_sensor_profile(dev->model->ccd_type, dpihw);
|
||||
|
||||
/* specific registers */
|
||||
r = sanei_genesys_get_address (regs, 0x18);
|
||||
r = sanei_genesys_get_address (regs, 0x0c);
|
||||
if (r)
|
||||
{
|
||||
r->value = sensor->reg18;
|
||||
r->value = sensor->reg0c;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x5a);
|
||||
r = sanei_genesys_get_address (regs, 0x70);
|
||||
if (r)
|
||||
{
|
||||
r->value = sensor->reg5a;
|
||||
r->value = sensor->reg70;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x71);
|
||||
if (r)
|
||||
{
|
||||
r->value = sensor->reg71;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x7d);
|
||||
if (r)
|
||||
{
|
||||
r->value = sensor->reg7d;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x80);
|
||||
if (r)
|
||||
{
|
||||
r->value = sensor->reg80;
|
||||
}
|
||||
r = sanei_genesys_get_address (regs, 0x9e);
|
||||
if (r)
|
||||
{
|
||||
|
@ -656,6 +547,13 @@ gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
|
|||
sanei_genesys_set_triple(regs,REG_CK3MAP,sensor->ck3map);
|
||||
sanei_genesys_set_triple(regs,REG_CK4MAP,sensor->ck4map);
|
||||
|
||||
/* tune AFE */
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
sanei_genesys_fe_write_data (dev, 0x20 + i, sensor->afe[i]);
|
||||
sanei_genesys_fe_write_data (dev, 0x28 + i, sensor->afe[i+3]);
|
||||
}
|
||||
|
||||
DBG (DBG_proc, "gl843_setup_sensor: completed \n");
|
||||
}
|
||||
|
||||
|
@ -1000,13 +898,13 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
unsigned int flags)
|
||||
{
|
||||
SANE_Status status;
|
||||
int use_fast_fed;
|
||||
int use_fast_fed, coeff;
|
||||
unsigned int fast_time;
|
||||
unsigned int slow_time;
|
||||
unsigned int lincnt;
|
||||
uint16_t scan_table[1024];
|
||||
uint16_t fast_table[1024];
|
||||
int scan_steps,fast_steps;
|
||||
int scan_steps,fast_steps, fast_step_type;
|
||||
unsigned int feedl,factor,dist;
|
||||
Genesys_Register_Set *r;
|
||||
uint32_t z1, z2;
|
||||
|
@ -1027,14 +925,9 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
|
||||
if((scan_yres>=300 && feed_steps>900) || (flags & MOTOR_FLAG_FEED))
|
||||
use_fast_fed=1;
|
||||
lincnt=scan_lines;
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x25);
|
||||
r->value = (lincnt >> 16) & 0xf;
|
||||
r = sanei_genesys_get_address (reg, 0x26);
|
||||
r->value = (lincnt >> 8) & 0xff;
|
||||
r = sanei_genesys_get_address (reg, 0x27);
|
||||
r->value = lincnt & 0xff;
|
||||
lincnt=scan_lines;
|
||||
sanei_genesys_set_triple(reg,REG_LINCNT,lincnt);
|
||||
DBG (DBG_io, "%s: lincnt=%d\n", __FUNCTION__, lincnt);
|
||||
|
||||
/* compute register 02 value */
|
||||
|
@ -1047,49 +940,59 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
else
|
||||
r->value &= ~REG02_FASTFED;
|
||||
|
||||
/* in case of automatic go home, move until home sensor */
|
||||
if (flags & MOTOR_FLAG_AUTO_GO_HOME)
|
||||
r->value |= REG02_AGOHOME;
|
||||
r->value |= REG02_AGOHOME | REG02_NOTHOME;
|
||||
|
||||
if (flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE)
|
||||
if ((flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE)
|
||||
||(scan_yres>=dev->sensor.optical_res))
|
||||
r->value |= REG02_ACDCDIS;
|
||||
|
||||
/* scan and backtracking slope table */
|
||||
slow_time=gl843_slope_table(scan_table,
|
||||
&scan_steps,
|
||||
scan_yres,
|
||||
scan_exposure_time,
|
||||
dev->motor.base_ydpi,
|
||||
scan_step_type,
|
||||
factor,
|
||||
dev->model->motor_type);
|
||||
RIE(gl843_send_slope_table (dev, SCAN_TABLE, scan_table, scan_steps));
|
||||
RIE(gl843_send_slope_table (dev, BACKTRACK_TABLE, scan_table, scan_steps));
|
||||
slow_time=sanei_genesys_slope_table(scan_table,
|
||||
&scan_steps,
|
||||
scan_yres,
|
||||
scan_exposure_time,
|
||||
dev->motor.base_ydpi,
|
||||
scan_step_type,
|
||||
factor,
|
||||
dev->model->motor_type,
|
||||
gl843_motors);
|
||||
RIE(gl843_send_slope_table (dev, SCAN_TABLE, scan_table, scan_steps*factor));
|
||||
RIE(gl843_send_slope_table (dev, BACKTRACK_TABLE, scan_table, scan_steps*factor));
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x21);
|
||||
r->value = scan_steps/factor;
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x24);
|
||||
r->value = scan_steps/factor;
|
||||
/* STEPNO */
|
||||
r = sanei_genesys_get_address (reg, REG_STEPNO);
|
||||
r->value = scan_steps;
|
||||
|
||||
/* fast table */
|
||||
fast_time=gl843_slope_table(fast_table,
|
||||
&fast_steps,
|
||||
sanei_genesys_get_lowest_ydpi(dev),
|
||||
scan_exposure_time,
|
||||
dev->motor.base_ydpi,
|
||||
scan_step_type,
|
||||
factor,
|
||||
dev->model->motor_type);
|
||||
RIE(gl843_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps));
|
||||
RIE(gl843_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps));
|
||||
fast_step_type=scan_step_type;
|
||||
if(scan_step_type>=2)
|
||||
{
|
||||
fast_step_type=2;
|
||||
}
|
||||
fast_time=sanei_genesys_slope_table(fast_table,
|
||||
&fast_steps,
|
||||
sanei_genesys_get_lowest_ydpi(dev),
|
||||
scan_exposure_time,
|
||||
dev->motor.base_ydpi,
|
||||
fast_step_type,
|
||||
factor,
|
||||
dev->model->motor_type,
|
||||
gl843_motors);
|
||||
RIE(gl843_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps*factor));
|
||||
RIE(gl843_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps*factor));
|
||||
RIE(gl843_send_slope_table (dev, HOME_TABLE, fast_table, fast_steps*factor));
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x69);
|
||||
r->value = fast_steps / factor;
|
||||
/* better stop time */
|
||||
r->value = 1;
|
||||
/* FASTNO */
|
||||
r = sanei_genesys_get_address (reg, REG_FASTNO);
|
||||
r->value = fast_steps;
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG6A);
|
||||
r->value = fast_steps / factor;
|
||||
r = sanei_genesys_get_address (reg, REG_FSHDEC);
|
||||
r->value = fast_steps;
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG_FMOVNO);
|
||||
r->value = fast_steps;
|
||||
|
||||
/* substract acceleration distance from feedl */
|
||||
feedl=feed_steps;
|
||||
|
@ -1102,18 +1005,14 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
}
|
||||
DBG (DBG_io2, "%s: acceleration distance=%d\n", __FUNCTION__, dist);
|
||||
|
||||
/* get sure when don't insane value */
|
||||
/* get sure when don't insane value : XXX STEF XXX in this case we should
|
||||
* fall back to single table move */
|
||||
if(dist<feedl)
|
||||
feedl -= dist;
|
||||
else
|
||||
feedl = 1;
|
||||
|
||||
r = sanei_genesys_get_address (reg, 0x3d);
|
||||
r->value = (feedl >> 16) & 0xf;
|
||||
r = sanei_genesys_get_address (reg, 0x3e);
|
||||
r->value = (feedl >> 8) & 0xff;
|
||||
r = sanei_genesys_get_address (reg, 0x3f);
|
||||
r->value = feedl & 0xff;
|
||||
sanei_genesys_set_triple(reg,REG_FEEDL,feedl);
|
||||
DBG (DBG_io, "%s: feedl=%d\n", __FUNCTION__, feedl);
|
||||
|
||||
/* doesn't seem to matter that much */
|
||||
|
@ -1126,21 +1025,11 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
&z1,
|
||||
&z2);
|
||||
|
||||
sanei_genesys_set_triple(reg,REG_Z1MOD,z1);
|
||||
DBG (DBG_info, "gl843_init_motor_regs_scan: z1 = %d\n", z1);
|
||||
r = sanei_genesys_get_address (reg, REG60);
|
||||
r->value = ((z1 >> 16) & REG60_Z1MOD);
|
||||
r = sanei_genesys_get_address (reg, REG61);
|
||||
r->value = ((z1 >> 8) & REG61_Z1MOD);
|
||||
r = sanei_genesys_get_address (reg, REG62);
|
||||
r->value = (z1 & REG62_Z1MOD);
|
||||
|
||||
sanei_genesys_set_triple(reg,REG_Z2MOD,z2);
|
||||
DBG (DBG_info, "gl843_init_motor_regs_scan: z2 = %d\n", z2);
|
||||
r = sanei_genesys_get_address (reg, REG63);
|
||||
r->value = ((z2 >> 16) & REG63_Z2MOD);
|
||||
r = sanei_genesys_get_address (reg, REG64);
|
||||
r->value = ((z2 >> 8) & REG64_Z2MOD);
|
||||
r = sanei_genesys_get_address (reg, REG65);
|
||||
r->value = (z2 & REG65_Z2MOD);
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG1E);
|
||||
r->value &= 0xf0; /* 0 dummy lines */
|
||||
|
@ -1153,35 +1042,40 @@ gl843_init_motor_regs_scan (Genesys_Device * dev,
|
|||
r->value = 0x3f | (scan_step_type << REG68S_FSTPSEL);
|
||||
|
||||
/* steps for STOP table */
|
||||
r = sanei_genesys_get_address (reg, 0x5f);
|
||||
r->value = 1;
|
||||
r = sanei_genesys_get_address (reg, REG_FMOVDEC);
|
||||
r->value = fast_steps;
|
||||
|
||||
/* Vref */
|
||||
/* Vref XXX STEF XXX : optical divider or step type ? */
|
||||
r = sanei_genesys_get_address (reg, 0x80);
|
||||
r->value = 0x05; /* kv 75,150,300 dpi */
|
||||
r->value = 0x50;
|
||||
coeff=dev->sensor.optical_res/sanei_genesys_compute_dpihw(dev, scan_yres);
|
||||
if (dev->model->motor_type == MOTOR_KVSS080)
|
||||
{
|
||||
if(coeff>=1)
|
||||
{
|
||||
r->value |= 0x05;
|
||||
}
|
||||
}
|
||||
else {
|
||||
switch(coeff)
|
||||
{
|
||||
case 4:
|
||||
r->value |= 0x0a;
|
||||
break;
|
||||
case 2:
|
||||
r->value |= 0x0f;
|
||||
break;
|
||||
case 1:
|
||||
r->value |= 0x0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DBGCOMPLETED;
|
||||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int
|
||||
gl843_get_dpihw (Genesys_Device * dev)
|
||||
{
|
||||
Genesys_Register_Set *r;
|
||||
r = sanei_genesys_get_address (dev->reg, REG05);
|
||||
if ((r->value & REG05_DPIHW) == REG05_DPIHW_600)
|
||||
return 600;
|
||||
if ((r->value & REG05_DPIHW) == REG05_DPIHW_1200)
|
||||
return 1200;
|
||||
if ((r->value & REG05_DPIHW) == REG05_DPIHW_2400)
|
||||
return 2400;
|
||||
if ((r->value & REG05_DPIHW) == REG05_DPIHW_4800)
|
||||
return 4800;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**@brief compute exposure to use
|
||||
* compute the sensor exposure based on target resolution
|
||||
|
@ -1194,24 +1088,6 @@ static int gl843_compute_exposure(Genesys_Device *dev, int xres)
|
|||
return sensor->exposure;
|
||||
}
|
||||
|
||||
/**@brief compute motor step type to use
|
||||
* compute the step type (full, half, quarter, ...) to use based
|
||||
* on target resolution
|
||||
* @param dev device description
|
||||
* @param exposure sensor exposure
|
||||
* @return 0 for full step
|
||||
* 1 for half step
|
||||
* 2 for quarter step
|
||||
* 3 for eighth step
|
||||
*/
|
||||
static int gl843_compute_step_type(Genesys_Device *dev, int exposure)
|
||||
{
|
||||
Motor_Profile *profile;
|
||||
|
||||
profile=get_motor_profile(dev->model->motor_type,exposure);
|
||||
return profile->step_type;
|
||||
}
|
||||
|
||||
/** @brief setup optical related registers
|
||||
* start and pixels are expressed in optical sensor resolution coordinate
|
||||
* space.
|
||||
|
@ -1413,28 +1289,6 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
gl843_get_led_exposure (Genesys_Device * dev)
|
||||
{
|
||||
int d, r, g, b, m;
|
||||
if (!dev->model->is_cis)
|
||||
return 0;
|
||||
d = dev->reg[reg_0x19].value;
|
||||
r = dev->sensor.regs_0x10_0x1d[1] | (dev->sensor.regs_0x10_0x1d[0] << 8);
|
||||
g = dev->sensor.regs_0x10_0x1d[3] | (dev->sensor.regs_0x10_0x1d[2] << 8);
|
||||
b = dev->sensor.regs_0x10_0x1d[5] | (dev->sensor.regs_0x10_0x1d[4] << 8);
|
||||
|
||||
m = r;
|
||||
if (m < g)
|
||||
m = g;
|
||||
if (m < b)
|
||||
m = b;
|
||||
|
||||
return m + d;
|
||||
}
|
||||
|
||||
|
||||
/* set up registers for an actual scan
|
||||
*
|
||||
* this function sets up the scanner to scan in normal or single line mode
|
||||
|
@ -1560,12 +1414,12 @@ gl843_init_scan_regs (Genesys_Device * dev,
|
|||
/* scan_step_type */
|
||||
if(flags & SCAN_FLAG_FEEDING)
|
||||
{
|
||||
scan_step_type=gl843_compute_step_type (dev, sanei_genesys_get_lowest_ydpi(dev));
|
||||
scan_step_type=sanei_genesys_compute_step_type (gl843_motors, dev->model->motor_type, sanei_genesys_get_lowest_ydpi(dev));
|
||||
exposure_time=gl843_compute_exposure (dev, sanei_genesys_get_lowest_ydpi(dev));
|
||||
}
|
||||
else
|
||||
{
|
||||
scan_step_type = gl843_compute_step_type(dev, slope_dpi);
|
||||
scan_step_type = sanei_genesys_compute_step_type(gl843_motors, dev->model->motor_type, slope_dpi);
|
||||
exposure_time = gl843_compute_exposure (dev, used_res);
|
||||
}
|
||||
|
||||
|
@ -1748,7 +1602,6 @@ gl843_calculate_current_setup (Genesys_Device * dev)
|
|||
int slope_dpi = 0;
|
||||
int dummy = 0;
|
||||
int scan_step_type = 1;
|
||||
int scan_power_mode = 0;
|
||||
int max_shift;
|
||||
|
||||
SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */
|
||||
|
@ -1847,15 +1700,10 @@ gl843_calculate_current_setup (Genesys_Device * dev)
|
|||
slope_dpi = yres;
|
||||
|
||||
/* scan_step_type */
|
||||
scan_step_type = gl843_compute_step_type(dev, yres);
|
||||
|
||||
exposure_time = sanei_genesys_exposure_time2 (dev,
|
||||
slope_dpi,
|
||||
scan_step_type,
|
||||
start + used_pixels + 258,
|
||||
gl843_get_led_exposure (dev),
|
||||
scan_power_mode);
|
||||
scan_step_type = sanei_genesys_compute_step_type(gl843_motors, dev->model->motor_type, yres);
|
||||
|
||||
/* exposure */
|
||||
exposure_time = gl843_compute_exposure (dev, used_res);
|
||||
DBG (DBG_info, "%s : exposure_time=%d pixels\n", __FUNCTION__, exposure_time);
|
||||
|
||||
/* max_shift */
|
||||
|
@ -2275,10 +2123,15 @@ gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
|
|||
{
|
||||
SANE_Status status;
|
||||
uint8_t val;
|
||||
uint16_t dpiset,dpihw;
|
||||
|
||||
DBGSTART;
|
||||
if (reg == NULL)
|
||||
return SANE_STATUS_INVAL;
|
||||
|
||||
/* get back the target dpihw */
|
||||
sanei_genesys_get_double(reg,REG_DPISET,&dpiset);
|
||||
dpihw=sanei_genesys_compute_dpihw(dev,dpiset);
|
||||
|
||||
/* set up GPIO for scan */
|
||||
/* KV case */
|
||||
|
@ -2291,10 +2144,19 @@ gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
|
|||
}
|
||||
if (dev->model->gpo_type == GPO_G4050)
|
||||
{
|
||||
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
|
||||
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
|
||||
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
|
||||
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
|
||||
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
|
||||
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
|
||||
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
|
||||
switch(dpihw)
|
||||
{
|
||||
case 1200:
|
||||
RIE (sanei_genesys_write_register (dev, REG6C, 0x60));
|
||||
RIE (sanei_genesys_write_register (dev, REGA6, 0x46));
|
||||
break;
|
||||
default: /* 600 dpi case */
|
||||
RIE (sanei_genesys_write_register (dev, REG6C, 0x20));
|
||||
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
|
||||
}
|
||||
/* blinking led */
|
||||
RIE(sanei_genesys_write_register(dev,0x7e,0x01));
|
||||
}
|
||||
|
@ -2622,7 +2484,6 @@ gl843_init_regs_for_coarse_calibration (Genesys_Device * dev)
|
|||
SANE_Status status;
|
||||
uint8_t channels;
|
||||
uint8_t cksel;
|
||||
Genesys_Register_Set *r;
|
||||
|
||||
DBGSTART;
|
||||
cksel = (dev->calib_reg[reg_0x18].value & REG18_CKSEL) + 1; /* clock speed = 1..4 clocks */
|
||||
|
@ -2656,15 +2517,13 @@ gl843_init_regs_for_coarse_calibration (Genesys_Device * dev)
|
|||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl843_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
DBG (DBG_info,
|
||||
"gl843_init_register_for_coarse_calibration: optical sensor res: %d dpi, actual res: %d\n",
|
||||
dev->sensor.optical_res / cksel, dev->settings.xres);
|
||||
|
||||
status =
|
||||
gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS);
|
||||
status = gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
|
@ -3236,7 +3095,6 @@ dark_average (uint8_t * data, unsigned int pixels, unsigned int lines,
|
|||
static SANE_Status
|
||||
gl843_offset_calibration (Genesys_Device * dev)
|
||||
{
|
||||
Genesys_Register_Set *r;
|
||||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
uint8_t *first_line, *second_line;
|
||||
unsigned int channels, bpp;
|
||||
|
@ -3287,8 +3145,7 @@ gl843_offset_calibration (Genesys_Device * dev)
|
|||
sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl843_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
/* allocate memory for scans */
|
||||
total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */
|
||||
|
@ -3414,7 +3271,6 @@ gl843_coarse_gain_calibration (Genesys_Device * dev, int dpi)
|
|||
float gain[3],coeff;
|
||||
int val, code, lines;
|
||||
int resolution;
|
||||
Genesys_Register_Set *r;
|
||||
int bpp;
|
||||
|
||||
DBG (DBG_proc, "gl843_coarse_gain_calibration: dpi = %d\n", dpi);
|
||||
|
@ -3453,8 +3309,7 @@ gl843_coarse_gain_calibration (Genesys_Device * dev, int dpi)
|
|||
SCAN_FLAG_DISABLE_GAMMA |
|
||||
SCAN_FLAG_SINGLE_LINE |
|
||||
SCAN_FLAG_IGNORE_LINE_DISTANCE);
|
||||
r = sanei_genesys_get_address (dev->calib_reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl843_set_motor_power (dev->calib_reg, SANE_FALSE);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
|
@ -3560,22 +3415,29 @@ gl843_init_regs_for_warmup (Genesys_Device * dev,
|
|||
{
|
||||
int num_pixels;
|
||||
SANE_Status status = SANE_STATUS_GOOD;
|
||||
Genesys_Register_Set *r;
|
||||
int dpihw;
|
||||
int resolution;
|
||||
int factor;
|
||||
|
||||
DBGSTART;
|
||||
if (dev == NULL || reg == NULL || channels == NULL || total_size == NULL)
|
||||
return SANE_STATUS_INVAL;
|
||||
|
||||
*channels=3;
|
||||
resolution=600;
|
||||
dpihw=sanei_genesys_compute_dpihw(dev, resolution);
|
||||
factor=dev->sensor.optical_res/dpihw;
|
||||
num_pixels=dev->sensor.sensor_pixels/(factor*2);
|
||||
*total_size = num_pixels * 3 * 1;
|
||||
|
||||
memcpy (reg, dev->reg, (GENESYS_GL843_MAX_REGS + 1) * sizeof (Genesys_Register_Set));
|
||||
status = gl843_init_scan_regs (dev,
|
||||
reg,
|
||||
dev->sensor.optical_res,
|
||||
dev->motor.base_ydpi,
|
||||
dev->sensor.sensor_pixels/4,
|
||||
resolution,
|
||||
resolution,
|
||||
num_pixels/2,
|
||||
0,
|
||||
dev->sensor.sensor_pixels/2,
|
||||
num_pixels,
|
||||
1,
|
||||
8,
|
||||
*channels,
|
||||
|
@ -3588,18 +3450,11 @@ gl843_init_regs_for_warmup (Genesys_Device * dev,
|
|||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
DBG (DBG_error,
|
||||
"gl843_init_regs_for_warmup: failed to setup scan: %s\n",
|
||||
sane_strstatus (status));
|
||||
DBG (DBG_error, "%s: failed to setup scan: %s\n", __FUNCTION__, sane_strstatus (status));
|
||||
return status;
|
||||
}
|
||||
|
||||
num_pixels = dev->current_setup.pixels;
|
||||
|
||||
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
|
||||
|
||||
r = sanei_genesys_get_address (reg, REG02);
|
||||
r->value &= ~REG02_MTRPWR;
|
||||
gl843_set_motor_power (reg, SANE_FALSE);
|
||||
RIE (gl843_bulk_write_register (dev, reg, GENESYS_GL843_MAX_REGS));
|
||||
|
||||
DBGCOMPLETED;
|
||||
|
@ -3634,10 +3489,10 @@ gl843_init_gpio (Genesys_Device * dev)
|
|||
{
|
||||
i = 1;
|
||||
}
|
||||
RIE (sanei_genesys_write_register (dev, 0xa6, gpios[i].ra6));
|
||||
RIE (sanei_genesys_write_register (dev, 0xa7, gpios[i].ra7));
|
||||
RIE (sanei_genesys_write_register (dev, 0xa8, gpios[i].ra8));
|
||||
RIE (sanei_genesys_write_register (dev, 0xa9, gpios[i].ra9));
|
||||
RIE (sanei_genesys_write_register (dev, REGA6, gpios[i].ra6));
|
||||
RIE (sanei_genesys_write_register (dev, REGA7, gpios[i].ra7));
|
||||
RIE (sanei_genesys_write_register (dev, REGA8, gpios[i].ra8));
|
||||
RIE (sanei_genesys_write_register (dev, REGA9, gpios[i].ra9));
|
||||
|
||||
DBGCOMPLETED;
|
||||
return status;
|
||||
|
|
|
@ -218,6 +218,11 @@
|
|||
#define REG1ES_LINESEL 0
|
||||
|
||||
#define REG21 0x21
|
||||
#define REG_STEPNO 0x21
|
||||
#define REG_FWDSTEP 0x22
|
||||
#define REG_BWDSTEP 0x23
|
||||
#define REG_FASTNO 0x24
|
||||
#define REG_LINCNT 0x25
|
||||
|
||||
#define REG29 0x29
|
||||
#define REG2A 0x2a
|
||||
|
@ -231,6 +236,7 @@
|
|||
#define REG_DUMMY 0x34
|
||||
#define REG_MAXWD 0x35
|
||||
#define REG_LPERIOD 0x38
|
||||
#define REG_FEEDL 0x3d
|
||||
|
||||
#define REG40 0x40
|
||||
#define REG40_DOCSNR 0x80
|
||||
|
@ -274,7 +280,7 @@
|
|||
#define REG5E_STOPTIM 0x1f
|
||||
#define REG5ES_STOPTIM 0
|
||||
|
||||
#define REG5F 0x5f
|
||||
#define REG_FMOVDEC 0x5f
|
||||
|
||||
#define REG60 0x60
|
||||
#define REG60_Z1MOD 0x1f
|
||||
|
@ -308,8 +314,8 @@
|
|||
#define REG68_EIGHTHSTEP 0x60
|
||||
#define REG68_16THSTEP 0x80
|
||||
|
||||
#define REG69 0x69
|
||||
#define REG6A 0x6a
|
||||
#define REG_FSHDEC 0x69
|
||||
#define REG_FMOVNO 0x6a
|
||||
|
||||
#define REG6B 0x6b
|
||||
#define REG6B_MULTFILM 0x80
|
||||
|
@ -331,6 +337,9 @@
|
|||
#define REG6C_GPIOH 0xff
|
||||
#define REG6C_GPIOL 0xff
|
||||
|
||||
#define REG_Z1MOD 0x60
|
||||
#define REG_Z2MOD 0x63
|
||||
|
||||
#define REG6D 0x6d
|
||||
#define REG6E 0x6e
|
||||
#define REG6F 0x6f
|
||||
|
@ -548,35 +557,65 @@ typedef struct {
|
|||
int expr; /**> initial red exposure */
|
||||
int expg; /**> initial green exposure */
|
||||
int expb; /**> initial blue exposure */
|
||||
uint8_t reg18; /**> register 0x18 value */
|
||||
uint8_t reg5a; /**> register 0x5a value */
|
||||
uint8_t reg0c; /**> register 0x0c value */
|
||||
uint8_t reg70; /**> register 0x70 value */
|
||||
uint8_t reg71; /**> register 0x71 value */
|
||||
uint8_t reg7d; /**> register 0x7d value */
|
||||
uint8_t reg80; /**> register 0x80 value */
|
||||
uint8_t reg9e; /**> register 0x9e value */
|
||||
uint8_t regs_0x10_0x1d[14];
|
||||
uint8_t regs_0x52_0x5e[13];
|
||||
uint8_t afe[6];
|
||||
} Sensor_Profile;
|
||||
|
||||
/**
|
||||
* database of sensor profiles
|
||||
*/
|
||||
static Sensor_Profile sensors[]={
|
||||
{CCD_KVSS080, 600, 8000, 0x000000, 0x00ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0xc0, 0x00, 0x00, 0x00},
|
||||
{CCD_G4050 , 600, 8016, 0x0001ff, 0x03ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x40, 0x00, 0x5a, 0x00},
|
||||
{CCD_G4050 , 1200, 56064, 0x03ffff, 0x0001ff, 0x0001ff, 5168, 0, 0x2a, 0, 0, 0, 0x11, 0x40, 0x00, 0x5f, 0xc0},
|
||||
{CCD_G4050 , 2400, 56064, 0x03ffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x11, 0x40, 0x00, 0x5f, 0xc0},
|
||||
{CCD_G4050 , 4800, 21376, 0x03ffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x11, 0x40, 0x00, 0x5f, 0xc0},
|
||||
/* 0c 70 71 7d 9e */
|
||||
{CCD_KVSS080, 600, 8000, 0x000000, 0x00ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x01, 0x03, 0x00, 0x00,
|
||||
/* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x1c, 0x00, 0x2a, 0x2c, 0x00, 0x20, 0x04} ,
|
||||
/* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */
|
||||
{0x0c, 0x0f, 0x00, 0x03, 0x06, 0x09, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23},
|
||||
{0x80, 0x80, 0x80, 0x4b, 0x4b, 0x4b}
|
||||
},
|
||||
|
||||
{CCD_G4050 , 600, 8016, 0x0001ff, 0x03ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x00, 0x02, 0x00, 0x00,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} ,
|
||||
{0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f},
|
||||
{0x45, 0x45, 0x45, 0x4b, 0x4b, 0x4b}
|
||||
},
|
||||
|
||||
{CCD_G4050 , 1200, 56064, 0x0fffff, 0x0001ff, 0x0001ff, 5168, 0, 0x2a, 0, 0, 0, 0x20, 0x08, 0x0c, 0x00, 0xc0,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x0c, 0x11, 0x2a, 0x38, 0x10, 0x00, 0x08} ,
|
||||
{0x02, 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x1b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f},
|
||||
{0x41, 0x42, 0x4f, 0xa7, 0xb2, 0xc4}
|
||||
},
|
||||
|
||||
{CCD_G4050 , 2400, 56064, 0x03ffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x00, 0x02, 0x00, 0xc0,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} ,
|
||||
{0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f},
|
||||
{0x80, 0x80, 0x80, 0x4b, 0x4b, 0x4b}
|
||||
},
|
||||
|
||||
{CCD_G4050 , 4800, 21376, 0x03ffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x00, 0x02, 0x00, 0xc0,
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} ,
|
||||
{0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f},
|
||||
{0x80, 0x80, 0x80, 0x4b, 0x4b, 0x4b}
|
||||
},
|
||||
};
|
||||
|
||||
static uint32_t kvss080[]={44444, 34188, 32520, 29630, 26666, 24242, 22222, 19048, 16666, 15686, 14814, 14034, 12402, 11110, 8888, 7618, 6666, 5926, 5228, 4678, 4172, 3682, 3336, 3074, 2866, 2702, 2566, 2450, 2352, 2266, 2188, 2118, 2056, 2002, 1950, 1904, 1860, 1820, 1784, 1748, 1716, 1684, 1656, 1628, 1600, 1576, 1552, 1528, 1506, 1486, 1466, 1446, 1428, 1410, 1394, 1376, 1360, 1346, 1330, 1316, 1302, 1288, 1276, 1264, 1250, 1238, 1228, 1216, 1206, 1194, 1184, 1174, 1164, 1154, 1146, 1136, 1128, 1120, 1110, 1102, 1094, 1088, 1080, 1072, 1064, 1058, 1050, 1044, 1038, 1030, 1024, 1018, 1012, 1006, 1000, 994, 988, 984, 978, 972, 968, 962, 958, 952, 948, 942, 938, 934, 928, 924, 920, 916, 912, 908, 904, 900, 896, 892, 888, 884, 882, 878, 874, 870, 868, 864, 860, 858, 854, 850, 848, 844, 842, 838, 836, 832, 830, 826, 824, 822, 820, 816, 814, 812, 808, 806, 804, 802, 800, 796, 794, 792, 790, 788, 786, 784, 782, 778, 776, 774, 772, 770, 768, 766, 764, 762, 760, 758, 756, 754, 752, 750, 750, 748, 746, 744, 742, 740, 738, 736, 734, 734, 732, 730, 728, 726, 724, 724, 722, 720, 718, 716, 716, 714, 712, 710, 710, 708, 706, 704, 704, 702, 700, 698, 698, 696, 694, 694, 692, 690, 690, 688, 686, 686, 684, 682, 682, 680, 678, 678, 676, 674, 674, 672, 672, 670, 668, 668, 666, 666, 664, 662, 662, 660, 660, 658, 656, 656, 654, 654, 652, 652, 650, 650, 648, 646, 646, 644, 644, 642, 642, 640, 640, 638, 638, 636, 636, 636, 634, 634, 632, 632, 630, 630, 628, 628, 626, 626, 624, 624, 624, 622, 622, 620, 620, 618, 618, 618, 616, 616, 614, 614, 612, 612, 612, 610, 610, 608, 608, 608, 606, 606, 606, 604, 604, 602, 602, 602, 600, 600, 600, 598, 598, 596, 596, 596, 594, 594, 594, 592, 592, 592, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 580, 580, 580, 578, 578, 578, 576, 576, 576, 576, 574, 574, 574, 572, 572, 572, 570, 570, 570, 568, 568, 568, 568, 566, 566, 566, 564, 564, 564, 562, 562, 562, 562, 560, 560, 560, 558, 558, 558, 558, 556, 556, 556, 554, 554, 554, 552, 552, 552, 552, 550, 550, 550, 548, 548, 548, 548, 546, 546, 546, 546, 544, 544, 544, 542, 542, 542, 542, 540, 540, 540, 538, 538, 538, 538, 536, 536, 536, 536, 534, 534, 534, 534, 532, 532, 532, 530, 530, 530, 530, 528, 528, 528, 528, 526, 526, 526, 526, 524, 524, 524, 524, 522, 522, 522, 522, 520, 520, 520, 520, 518, 518, 518, 516, 516, 516, 516, 514, 514, 514, 514, 514, 512, 512, 512, 512, 510, 510, 510, 510, 508, 508, 508, 508, 506, 506, 506, 506, 504, 504, 504, 504, 502, 502, 502, 502, 500, 500, 500, 500, 0};
|
||||
static uint32_t g4050_fast[]={7842,5898,4384,4258,4152,4052,3956,3864,3786,3714,3632,3564,3498,3444,3384,3324,3276,3228,3174,3128,3086,3044,3002,2968,2930,2892,2860,2824,2794,2760,2732,2704,2676,2650,2618,2594,2568,2548,2524,2500,2478,2454,2436,2414,2392,2376,2354,2338,2318,2302,2282,2266,2252,2232,2218,2202,2188,2174,2160,2142,2128,2116,2102,2088,2076,2062,2054,2040,2028,2020,2014,2008,2004,2002,2002,2002,1946,1882,1826,1770,1716,1662,1612,1568,1526,1488,1454,1422,1390,1362,1336,1310,1288,1264,1242,1222,1204,1184,1166,1150,1134,1118,1104,1090,1076,1064,1050,1038,1026,1016,1004,994,984,972,964,954,944,936,928,920,910,902,896,888,880,874,866,860,854,848,840,834,828,822,816,812,806,800,796,790,784,780,776,770,766,760,756,752,748,744,740,736,732,728,724,720,716,712,708,704,702,698,694,690,688,684,682,678,674,672,668,666,662,660,656,654,650,648,646,644,640,638,636,632,630,628,624,622,620,618,616,614,610,608,606,604,602,600,598,596,594,592,590,588,586,584,582,580,578,576,574,572,570,568,566,564,564,562,560,558,556,554,552,552,550,548,546,546,544,542,540,538,538,536,534,532,532,530,528,528,526,524,522,522,520,518,518,516,514,514,512,512,510,508,508,506,504,504,502,502,500,498,498,496,496,494,494,492,490,490,488,488,486,486,484,484,482,480,480,478,478,476,476,474,474,472,472,470,470,468,468,468,466,466,464,464,462,462,460,460,458,458,456,456,456,454,454,452,452,450,450,450,448,448,446,446,444,444,444,442,442,440,440,440,438,438,438,436,436,434,434,434,432,432,432,430,430,428,428,428,426,426,426,424,424,424,422,422,422,420,420,420,418,418,418,416,416,416,414,414,414,412,412,412,410,410,410,408,408,408,406,406,406,404,404,404,404,402,402,402,400,400,400,400,398,398,398,396,396,396,396,394,394,394,392,392,392,392,390,390,390,388,388,388,388,386,386,386,386,384,384,384,384,382,382,382,382,380,380,380,380,378,378,378,378,376,376,376,376,376,374,374,374,374,374,372,372,372,372,372,370,370,370,370,370,368,368,368,368,368,366,366,366,366,366,364,364,364,364,364,364,362,362,362,362,362,360,360,360,360,360,360,358,358,358,358,358,358,356,356,356,356,356,356,354,354,354,354,354,352,352,352,352,352,352,350,350,350,350,350,350,350,348,348,348,348,348,348,346,346,346,346,346,346,344,344,344,344,344,344,344,342,342,342,342,342,342,340,340,340,340,340,340,340,338,338,338,338,338,338,338,336,336,336,336,336,336,336,334,334,334,334,334,334,334,332,332,332,332,332,332,332,332,330,330,330,330,330,330,330,328,328,328,328,328,328,328,328,326,326,326,326,326,326,326,324,324,324,324,324,324,324,324,322,322,322,322,322,322,322,322,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320, 0};
|
||||
static uint32_t g4050_high[]={28032};
|
||||
static uint32_t g4050_max[]={42072};
|
||||
static uint32_t g4050_high[]={28032,0};
|
||||
static uint32_t g4050_max[]={42072,0};
|
||||
|
||||
/**
|
||||
* database of motor profiles
|
||||
*/
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static Motor_Profile motors[]={
|
||||
static Motor_Profile gl843_motors[]={
|
||||
{MOTOR_KVSS080, 8000, 1, kvss080},
|
||||
{MOTOR_G4050, 8016, 1, g4050_fast},
|
||||
{MOTOR_G4050, 21376, 2, g4050_max},
|
||||
|
@ -585,8 +624,4 @@ static Motor_Profile motors[]={
|
|||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
#define MOTOR_FLAG_AUTO_GO_HOME 1
|
||||
#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2
|
||||
#define MOTOR_FLAG_FEED 4
|
||||
|
||||
/* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */
|
||||
|
|
|
@ -1229,7 +1229,9 @@ Motor_Profile *sanei_genesys_get_motor_profile(Motor_Profile *motors, int motor_
|
|||
* 2 for quarter step
|
||||
* 3 for eighth step
|
||||
*/
|
||||
int sanei_genesys_compute_step_type(Motor_Profile *motors, int motor_type, int exposure)
|
||||
int sanei_genesys_compute_step_type(Motor_Profile *motors,
|
||||
int motor_type,
|
||||
int exposure)
|
||||
{
|
||||
Motor_Profile *profile;
|
||||
|
||||
|
|
|
@ -723,6 +723,10 @@ typedef struct {
|
|||
#define SCAN_FLAG_CALIBRATION 0x100
|
||||
#define SCAN_FLAG_FEEDING 0x200
|
||||
|
||||
#define MOTOR_FLAG_AUTO_GO_HOME 1
|
||||
#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2
|
||||
#define MOTOR_FLAG_FEED 4
|
||||
|
||||
#define OPTICAL_FLAG_DISABLE_GAMMA 1
|
||||
#define OPTICAL_FLAG_DISABLE_SHADING 2
|
||||
#define OPTICAL_FLAG_DISABLE_LAMP 4
|
||||
|
|
Ładowanie…
Reference in New Issue