genesys: Move half CCD property to sensor definition

merge-requests/81/head
Povilas Kanapickas 2019-06-02 11:47:28 +03:00
rodzic 7359412548
commit 90814ac7d3
9 zmienionych plików z 42 dodań i 44 usunięć

Wyświetl plik

@ -2281,10 +2281,9 @@ compute_averaged_planar (Genesys_Device * dev,
*/
res = dev->settings.xres;
/* duplicate half-ccd logic */
if ((dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE) &&
dev->settings.xres <= dev->sensor.optical_res / 2)
if (dev->sensor.half_ccd_mode && dev->settings.xres <= dev->sensor.optical_res / 2) {
res *= 2;
}
/* this should be evenly dividable */
basepixels = dev->sensor.optical_res / res;
@ -2575,7 +2574,7 @@ compute_shifted_coefficients (Genesys_Device * dev,
unsigned int patch_cnt = offset * 3; /* at start, offset of first patch */
x = dev->settings.xres;
if ((dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE) &&
if ((dev->sensor.half_ccd_mode) &&
(dev->settings.xres <= dev->sensor.optical_res / 2))
x *= 2; /* scanner is using half-ccd mode */
basepixels = dev->sensor.optical_res / x; /*this should be evenly dividable */

Wyświetl plik

@ -331,6 +331,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_5345;
sensor.optical_res = 1200;
sensor.half_ccd_mode = true;
sensor.black_pixels = 48;
sensor.dummy_pixel = 16;
sensor.CCD_start_xoffset = 0;
@ -375,6 +376,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_HP2300;
sensor.optical_res = 600;
sensor.half_ccd_mode = true;
sensor.black_pixels = 48;
sensor.dummy_pixel = 20;
sensor.CCD_start_xoffset = 0;
@ -397,6 +399,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_CANONLIDE35;
sensor.optical_res = 1200;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 87;
sensor.CCD_start_xoffset = 0;
@ -686,6 +689,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_CS4400F;
sensor.optical_res = 4800;
sensor.half_ccd_mode = true; // FIXME: actually quarter CCD mode
sensor.black_pixels = 50*8;
// 31 at 600 dpi, 58 at 1200 dpi
sensor.dummy_pixel = 20;
@ -734,6 +738,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_CS8600F;
sensor.optical_res = 4800;
sensor.half_ccd_mode = true; // FIXME: actually quarter CCD mode
sensor.black_pixels = 31;
sensor.dummy_pixel = 20;
sensor.CCD_start_xoffset = 0; // not used at the moment
@ -757,6 +762,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_HP_N6310;
sensor.optical_res = 2400;
// sensor.half_ccd_mode = true; Possibly half CCD, needs checking
sensor.black_pixels = 96;
sensor.dummy_pixel = 26;
sensor.CCD_start_xoffset = 128;
@ -779,6 +785,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CIS_CANONLIDE110;
sensor.optical_res = 2400;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 16;
sensor.CCD_start_xoffset = 303;
@ -801,6 +808,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CIS_CANONLIDE120;
sensor.optical_res = 2400;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 16;
sensor.CCD_start_xoffset = 303;
@ -824,12 +832,13 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CIS_CANONLIDE210;
sensor.optical_res = 2400;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 16;
sensor.CCD_start_xoffset = 303;
sensor.sensor_pixels = 5168*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200,
sensor.gain_white_ref = 200;
sensor.regs_0x08_0x0b = {0x00, 0x00, 0x00, 0x00},
// 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d
sensor.regs_0x10_0x1d = {
@ -846,6 +855,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CIS_CANONLIDE220;
sensor.optical_res = 2400;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 16;
sensor.CCD_start_xoffset = 303;
@ -868,6 +878,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CCD_PLUSTEK_3600;
sensor.optical_res = 1200;
sensor.half_ccd_mode = true;
sensor.black_pixels = 87;
sensor.dummy_pixel = 87;
sensor.CCD_start_xoffset = 0;
@ -934,6 +945,7 @@ void genesys_init_sensor_tables()
sensor = Genesys_Sensor();
sensor.sensor_id = CIS_CANONLIDE80,
sensor.optical_res = 1200; // real hardware limit is 2400
sensor.half_ccd_mode = true;
sensor.black_pixels = 20;
sensor.dummy_pixel = 6;
// tuned to give 3*8 multiple startx coordinate during shading calibration
@ -1622,8 +1634,7 @@ static Genesys_Model canon_lide_50_model = {
GENESYS_FLAG_SKIP_WARMUP |
GENESYS_FLAG_OFFSET_CALIBRATION |
GENESYS_FLAG_DARK_WHITE_CALIBRATION |
GENESYS_FLAG_CUSTOM_GAMMA |
GENESYS_FLAG_HALF_CCD_MODE,
GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
GENESYS_HAS_EMAIL_SW |
@ -1910,7 +1921,6 @@ static Genesys_Model canon_4400f_model = {
GENESYS_FLAG_SKIP_WARMUP |
GENESYS_FLAG_DARK_CALIBRATION |
GENESYS_FLAG_FULL_HWDPI_MODE |
GENESYS_FLAG_HALF_CCD_MODE | /* actually quarter CCD mode ... */
GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW,
100,
@ -2030,8 +2040,7 @@ static Genesys_Model canon_8600f_model = {
GENESYS_FLAG_DARK_CALIBRATION |
GENESYS_FLAG_FULL_HWDPI_MODE |
GENESYS_FLAG_CUSTOM_GAMMA |
GENESYS_FLAG_SHADING_REPARK |
GENESYS_FLAG_HALF_CCD_MODE,
GENESYS_FLAG_SHADING_REPARK,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW,
50, // shading_lines
50, // shading_ta_lines
@ -2141,7 +2150,6 @@ static Genesys_Model canon_lide_110_model = {
GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_SHADING_REPARK
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW,
@ -2196,7 +2204,6 @@ static Genesys_Model canon_lide_120_model = {
GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_SHADING_REPARK
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW,
@ -2252,7 +2259,6 @@ static Genesys_Model canon_lide_210_model = {
GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_SHADING_REPARK
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_EXTRA_SW,
@ -2307,7 +2313,6 @@ static Genesys_Model canon_lide_220_model = {
GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_SHADING_REPARK
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_EXTRA_SW,
@ -2531,8 +2536,7 @@ static Genesys_Model canon_lide_60_model = {
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_DARK_WHITE_CALIBRATION
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_HALF_CCD_MODE,
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_COPY_SW /* Has four buttons: COPY, SCAN, PDF, EMAIL */
| GENESYS_HAS_SCAN_SW
@ -2589,8 +2593,7 @@ static Genesys_Model canon_lide_80_model = {
GENESYS_FLAG_SKIP_WARMUP |
GENESYS_FLAG_OFFSET_CALIBRATION |
GENESYS_FLAG_DARK_WHITE_CALIBRATION |
GENESYS_FLAG_CUSTOM_GAMMA |
GENESYS_FLAG_HALF_CCD_MODE,
GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
GENESYS_HAS_EMAIL_SW |
@ -2650,7 +2653,6 @@ static Genesys_Model hp2300c_model = {
| GENESYS_FLAG_SEARCH_START
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW,
40,
@ -2980,7 +2982,6 @@ static Genesys_Model medion_md5345_model = {
| GENESYS_FLAG_STAGGERED_LINE
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_SHADING_NO_MOVE
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_POWER_SW | GENESYS_HAS_OCR_SW | GENESYS_HAS_SCAN_SW,
@ -3583,7 +3584,6 @@ static Genesys_Model visioneer_7100_model = {
| GENESYS_FLAG_STAGGERED_LINE
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_POWER_SW | GENESYS_HAS_OCR_SW | GENESYS_HAS_SCAN_SW,
40,
@ -3640,7 +3640,6 @@ static Genesys_Model xerox_2400_model = {
| GENESYS_FLAG_STAGGERED_LINE
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_HALF_CCD_MODE
| GENESYS_FLAG_CUSTOM_GAMMA,
GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_POWER_SW | GENESYS_HAS_OCR_SW | GENESYS_HAS_SCAN_SW,
40,
@ -3750,8 +3749,7 @@ static Genesys_Model plustek_3600_model = {
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_DARK_CALIBRATION
| GENESYS_FLAG_OFFSET_CALIBRATION
| GENESYS_FLAG_LAZY_INIT
| GENESYS_FLAG_HALF_CCD_MODE,/*
| GENESYS_FLAG_LAZY_INIT,/*
| GENESYS_FLAG_NO_CALIBRATION,*/
GENESYS_HAS_NO_BUTTONS,
7,
@ -3811,7 +3809,6 @@ static Genesys_Model hpn6310_model = {
| GENESYS_FLAG_CUSTOM_GAMMA
| GENESYS_FLAG_SKIP_WARMUP
| GENESYS_FLAG_NO_CALIBRATION,
/* | GENESYS_FLAG_HALF_CCD_MODE,*/
GENESYS_HAS_NO_BUTTONS,
100,

Wyświetl plik

@ -168,10 +168,10 @@ SANE_Status status=SANE_STATUS_GOOD;
* @param xres required horizontal resolution
* @return SANE_TRUE if half CCD mode enabled
*/
static SANE_Bool compute_half_ccd(Genesys_Model *model, int xres)
static SANE_Bool compute_half_ccd(Genesys_Sensor* sensor, int xres)
{
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if (xres<=300 && (model->flags & GENESYS_FLAG_HALF_CCD_MODE))
if (xres<=300 && sensor->half_ccd_mode)
{
return SANE_TRUE;
}
@ -1300,7 +1300,7 @@ gl124_init_scan_regs (Genesys_Device * dev,
"Flags : %x\n\n",
__func__, xres, yres, lines, pixels, startx, starty, depth, channels, flags);
half_ccd=compute_half_ccd(dev->model, xres);
half_ccd=compute_half_ccd(&dev->sensor, xres);
/* optical_res */
optical_res = dev->sensor.optical_res;
@ -1567,7 +1567,7 @@ gl124_calculate_current_setup (Genesys_Device * dev)
pixels = dev->settings.pixels;
lines = dev->settings.lines;
half_ccd=compute_half_ccd(dev->model, xres);
half_ccd=compute_half_ccd(&dev->sensor, xres);
DBG(DBG_info,
"%s:\n"
@ -2401,7 +2401,7 @@ gl124_init_regs_for_shading (Genesys_Device * dev)
resolution=dpihw;
/* if half CCD mode, use half resolution */
if(compute_half_ccd(dev->model, dev->settings.xres)==SANE_TRUE)
if(compute_half_ccd(&dev->sensor, dev->settings.xres)==SANE_TRUE)
{
resolution /= 2;
dev->calib_lines /= 2;
@ -2560,7 +2560,7 @@ gl124_init_regs_for_scan (Genesys_Device * dev)
/* start */
start = SANE_UNFIX (dev->model->x_offset);
start += dev->settings.tl_x;
if(compute_half_ccd(dev->model, dev->settings.xres)==SANE_TRUE)
if(compute_half_ccd(&dev->sensor, dev->settings.xres)==SANE_TRUE)
{
start /=2;
}
@ -2820,7 +2820,7 @@ gl124_led_calibration (Genesys_Device * dev)
channels = 3;
depth=16;
dpihw=sanei_genesys_compute_dpihw(dev, dev->settings.xres);
half_ccd=compute_half_ccd(dev->model, dev->settings.xres);
half_ccd=compute_half_ccd(&dev->sensor, dev->settings.xres);
if(half_ccd==SANE_TRUE)
{
resolution = dpihw/2;

Wyświetl plik

@ -2740,7 +2740,7 @@ gl646_init_regs_for_shading (Genesys_Device * dev)
DBG(DBG_proc, "%s: start\n", __func__);
/* when shading all (full width) line, we must adapt to half_ccd case */
if (dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)
if (dev->sensor.half_ccd_mode)
{
/* walk the master mode list to find if half_ccd */
if (is_half_ccd (dev->model->ccd_type, dev->settings.xres, SANE_TRUE) ==
@ -4891,7 +4891,7 @@ gl646_search_strip (Genesys_Device * dev, SANE_Bool forward, SANE_Bool black)
DBG(DBG_proc, "%s: start\n", __func__);
/* adapt to half_ccd case */
if (dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)
if (dev->sensor.half_ccd_mode)
{
/* walk the master mode list to find if half_ccd */
if (is_half_ccd (dev->model->ccd_type, res, SANE_TRUE) == SANE_TRUE)

Wyświetl plik

@ -2238,7 +2238,7 @@ independent of our calculated values:
/* half_ccd */
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if (dev->sensor.optical_res < 2 * xres ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)) {
!(dev->sensor.half_ccd_mode)) {
half_ccd = SANE_FALSE;
} else {
half_ccd = SANE_TRUE;
@ -2605,7 +2605,7 @@ gl841_calculate_current_setup (Genesys_Device * dev)
/* half_ccd */
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if ((dev->sensor.optical_res < 2 * xres) ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)) {
!(dev->sensor.half_ccd_mode)) {
half_ccd = SANE_FALSE;
} else {
half_ccd = SANE_TRUE;

Wyświetl plik

@ -1460,7 +1460,7 @@ static struct GenesysPhysicalParams
params.xres = xres;
if (dev->sensor.optical_res < 4 * xres ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
params.half_ccd = SANE_FALSE;
} else {
@ -1781,7 +1781,7 @@ gl843_calculate_current_setup (Genesys_Device * dev)
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if ((dev->sensor.optical_res < 4 * xres) ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
half_ccd = SANE_FALSE;
}

Wyświetl plik

@ -1154,7 +1154,7 @@ gl846_init_scan_regs (Genesys_Device * dev,
/* we may have 2 domains for ccd: xres below or above half ccd max dpi */
if (dev->sensor.optical_res < 2 * xres ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
half_ccd = SANE_FALSE;
}
@ -1435,7 +1435,7 @@ gl846_calculate_current_setup (Genesys_Device * dev)
/* half_ccd */
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if ((dev->sensor.optical_res < 2 * xres) ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
half_ccd = SANE_FALSE;
}

Wyświetl plik

@ -1169,7 +1169,7 @@ gl847_init_scan_regs (Genesys_Device * dev,
/* we may have 2 domains for ccd: xres below or above half ccd max dpi */
if (dev->sensor.optical_res < 2 * xres ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
half_ccd = SANE_FALSE;
}
@ -1450,7 +1450,7 @@ gl847_calculate_current_setup (Genesys_Device * dev)
/* half_ccd */
/* we have 2 domains for ccd: xres below or above half ccd max dpi */
if ((dev->sensor.optical_res < 2 * xres) ||
!(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE))
!(dev->sensor.half_ccd_mode))
{
half_ccd = SANE_FALSE;
}

Wyświetl plik

@ -147,7 +147,6 @@
#define GENESYS_FLAG_DARK_WHITE_CALIBRATION (1 << 12) /**< yet another calibration method. does white and dark shading in one run, depending on a black and a white strip*/
#define GENESYS_FLAG_CUSTOM_GAMMA (1 << 13) /**< allow custom gamma tables */
#define GENESYS_FLAG_NO_CALIBRATION (1 << 14) /**< allow scanners to use skip the calibration, needed for sheetfed scanners */
#define GENESYS_FLAG_HALF_CCD_MODE (1 << 15) /**< scanner has setting for half ccd mode */
#define GENESYS_FLAG_SIS_SENSOR (1 << 16) /**< handling of multi-segments sensors in software */
#define GENESYS_FLAG_SHADING_NO_MOVE (1 << 17) /**< scanner doesn't move sensor during shading calibration */
#define GENESYS_FLAG_SHADING_REPARK (1 << 18) /**< repark head between shading scans */
@ -424,6 +423,9 @@ struct Genesys_Sensor {
// id of the sensor description
uint8_t sensor_id = 0;
int optical_res = 0;
// half or quarter CCD mode
bool half_ccd_mode = false;
int black_pixels = 0;
// value of the dummy register
int dummy_pixel = 0;