LiDE 120 support wip

merge-requests/1/head
Stéphane Voltz 2016-02-09 09:55:26 +01:00
rodzic 056f590f2d
commit 7bd773ade5
3 zmienionych plików z 1318 dodań i 1318 usunięć

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1223,13 +1223,13 @@ gl124_init_optical_regs_scan (Genesys_Device * dev,
switch (color_filter)
{
case 0:
r->value |= 0x10; /* red filter */
r->value |= 0x10; /* red filter */
break;
case 2:
r->value |= 0x30; /* blue filter */
r->value |= 0x30; /* blue filter */
break;
default:
r->value |= 0x20; /* green filter */
r->value |= 0x20; /* green filter */
break;
}
}
@ -1377,7 +1377,7 @@ gl124_init_optical_regs_scan (Genesys_Device * dev,
return SANE_STATUS_GOOD;
}
/* set up registers for an actual scan
/** set up registers for an actual scan
*
* this function sets up the scanner to scan in normal or single line mode
*/
@ -1385,10 +1385,10 @@ GENESYS_STATIC
SANE_Status
gl124_init_scan_regs (Genesys_Device * dev,
Genesys_Register_Set * reg,
float xres, /*dpi */
float yres, /*dpi */
float startx, /*optical_res, from dummy_pixel+1 */
float starty, /*base_ydpi, from home! */
float xres, /*dpi */
float yres, /*dpi */
float startx, /*optical_res, from dummy_pixel+1 */
float starty, /*base_ydpi, from home! */
float pixels,
float lines,
unsigned int depth,
@ -1413,7 +1413,7 @@ gl124_init_scan_regs (Genesys_Device * dev,
int max_shift;
size_t requested_buffer_size, read_buffer_size;
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;
SANE_Status status;
@ -1648,9 +1648,9 @@ gl124_calculate_current_setup (Genesys_Device * dev)
int depth;
int start;
float xres; /*dpi */
float yres; /*dpi */
float startx; /*optical_res, from dummy_pixel+1 */
float xres; /*dpi */
float yres; /*dpi */
float startx; /*optical_res, from dummy_pixel+1 */
float pixels;
float lines;
@ -1678,7 +1678,7 @@ gl124_calculate_current_setup (Genesys_Device * dev)
dev->settings.tl_x, dev->settings.tl_y, dev->settings.scan_mode);
/* channels */
if (dev->settings.scan_mode == 4) /* single pass color */
if (dev->settings.scan_mode == 4) /* single pass color */
channels = 3;
else
channels = 1;
@ -2032,7 +2032,7 @@ gl124_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg,
{
status = SANE_STATUS_GOOD;
}
else /* flat bed scanners */
else /* flat bed scanners */
{
status = gl124_stop_action (dev);
if (status != SANE_STATUS_GOOD)
@ -2089,7 +2089,7 @@ gl124_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
{
sanei_genesys_print_status (val);
}
usleep (100000); /* sleep 100 ms */
usleep (100000); /* sleep 100 ms */
/* second is reliable */
status = sanei_genesys_get_status (dev, &val);
@ -2182,7 +2182,7 @@ gl124_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
if (wait_until_home)
{
while (loop < 300) /* do not wait longer then 30 seconds */
while (loop < 300) /* do not wait longer then 30 seconds */
{
status = sanei_genesys_get_status (dev, &val);
if (status != SANE_STATUS_GOOD)
@ -2193,14 +2193,14 @@ gl124_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
return status;
}
if (val & HOMESNR) /* home sensor */
if (val & HOMESNR) /* home sensor */
{
DBG (DBG_info, "gl124_slow_back_home: reached home position\n");
DBGCOMPLETED;
dev->scanhead_position_in_steps = 0;
return SANE_STATUS_GOOD;
}
usleep (100000); /* sleep 100 ms */
usleep (100000); /* sleep 100 ms */
++loop;
}
@ -2279,7 +2279,7 @@ gl124_feed (Genesys_Device * dev, unsigned int steps, int reverse)
r->value &= ~REG01_SCAN;
/* set up for reverse if needed */
if(reverse)
if(reverse)
{
r = sanei_genesys_get_address (local_reg, REG02);
r->value |= REG02_MTRREV;
@ -2342,14 +2342,14 @@ gl124_search_start_position (Genesys_Device * dev)
dpi,
dpi,
0,
0, /*we should give a small offset here~60 steps */
0, /*we should give a small offset here~60 steps */
600,
dev->model->search_lines,
8,
1,
dev->settings.scan_method,
SCAN_MODE_GRAY,
1, /*green */
1, /*green */
SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE |
@ -2454,10 +2454,10 @@ gl124_init_regs_for_coarse_calibration (Genesys_Device * dev)
uint8_t cksel;
DBGSTART;
cksel = (dev->calib_reg[reg_0x18].value & REG18_CKSEL) + 1; /* clock speed = 1..4 clocks */
cksel = (dev->calib_reg[reg_0x18].value & REG18_CKSEL) + 1; /* clock speed = 1..4 clocks */
/* set line size */
if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */
if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */
channels = 3;
else
channels = 1;
@ -3002,7 +3002,7 @@ gl124_led_calibration (Genesys_Device * dev)
return status;
}
total_size = num_pixels * channels * (depth/8) * 1; /* colors * bytes_per_color * scan lines */
total_size = num_pixels * channels * (depth/8) * 1; /* colors * bytes_per_color * scan lines */
line = malloc (total_size);
if (!line)
return SANE_STATUS_NO_MEM;
@ -3196,7 +3196,7 @@ gl124_offset_calibration (Genesys_Device * dev)
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 */
total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */
first_line = malloc (total_size);
if (!first_line)
@ -3509,7 +3509,7 @@ gl124_init_regs_for_warmup (Genesys_Device * dev,
num_pixels = dev->current_setup.pixels;
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
*total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */
gl124_set_motor_power (reg, SANE_FALSE);
RIE (dev->model->cmd_set->bulk_write_register (dev, reg, GENESYS_GL124_MAX_REGS));
@ -3540,7 +3540,7 @@ gl124_init_gpio (Genesys_Device * dev)
idx = 0;
}
else
{ /* canon LiDE 210 and 220 case */
{ /* canon LiDE 210 and 220 case */
idx = 1;
}
@ -3574,7 +3574,7 @@ gl124_init_memory_layout (Genesys_Device * dev)
idx = 0;
}
else
{ /* canon LiDE 210 and 220 case */
{ /* canon LiDE 210 and 220 case */
idx = 1;
}
@ -3593,18 +3593,18 @@ gl124_init_memory_layout (Genesys_Device * dev)
/* size for each buffer is 0x16d*1k word */
sanei_genesys_write_register (dev, 0xe0, layouts[idx].re0);
sanei_genesys_write_register (dev, 0xe1, layouts[idx].re1);
/* R-Channel ODD image buffer end-address 0x0291->0x148800 => size=0xB6800*/
/* R-Channel ODD image buffer end-address 0x0291->0x148800 => size=0xB6800*/
sanei_genesys_write_register (dev, 0xe2, layouts[idx].re2);
sanei_genesys_write_register (dev, 0xe3, layouts[idx].re3);
/* R-Channel EVEN image buffer 0x0292 */
sanei_genesys_write_register (dev, 0xe4, layouts[idx].re4);
sanei_genesys_write_register (dev, 0xe5, layouts[idx].re5);
/* R-Channel EVEN image buffer end-address 0x03ff*/
/* R-Channel EVEN image buffer end-address 0x03ff*/
sanei_genesys_write_register (dev, 0xe6, layouts[idx].re6);
sanei_genesys_write_register (dev, 0xe7, layouts[idx].re7);
/* same for green, since CIS, same addresses */
/* same for green, since CIS, same addresses */
sanei_genesys_write_register (dev, 0xe8, layouts[idx].re0);
sanei_genesys_write_register (dev, 0xe9, layouts[idx].re1);
sanei_genesys_write_register (dev, 0xea, layouts[idx].re2);
@ -3761,7 +3761,7 @@ gl124_update_hardware_sensors (Genesys_Scanner * s)
/** the gl124 command set */
static Genesys_Command_Set gl124_cmd_set = {
"gl124-generic", /* the name of this set */
"gl124-generic", /* the name of this set */
gl124_init,
gl124_init_regs_for_warmup,

Wyświetl plik

@ -44,71 +44,71 @@
#include "genesys.h"
#define REG01 0x01
#define REG01_CISSET 0x80
#define REG01_DOGENB 0x40
#define REG01_DVDSET 0x20
#define REG01_CISSET 0x80
#define REG01_DOGENB 0x40
#define REG01_DVDSET 0x20
#define REG01_STAGGER 0x10
#define REG01_COMPENB 0x08
#define REG01_COMPENB 0x08
#define REG01_TRUEGRAY 0x04
#define REG01_SHDAREA 0x02
#define REG01_SCAN 0x01
#define REG01_SHDAREA 0x02
#define REG01_SCAN 0x01
#define REG02 0x02
#define REG02_NOTHOME 0x80
#define REG02_ACDCDIS 0x40
#define REG02_AGOHOME 0x20
#define REG02_MTRPWR 0x10
#define REG02_FASTFED 0x08
#define REG02_MTRREV 0x04
#define REG02_HOMENEG 0x02
#define REG02_LONGCURV 0x01
#define REG02 0x02
#define REG02_NOTHOME 0x80
#define REG02_ACDCDIS 0x40
#define REG02_AGOHOME 0x20
#define REG02_MTRPWR 0x10
#define REG02_FASTFED 0x08
#define REG02_MTRREV 0x04
#define REG02_HOMENEG 0x02
#define REG02_LONGCURV 0x01
#define REG03 0x03
#define REG03_LAMPDOG 0x80
#define REG03_AVEENB 0x40
#define REG03_XPASEL 0x20
#define REG03_LAMPPWR 0x10
#define REG03_LAMPTIM 0x0f
#define REG03_LAMPDOG 0x80
#define REG03_AVEENB 0x40
#define REG03_XPASEL 0x20
#define REG03_LAMPPWR 0x10
#define REG03_LAMPTIM 0x0f
#define REG04 0x04
#define REG04_LINEART 0x80
#define REG04_BITSET 0x40
#define REG04_FILTER 0x30
#define REG04 0x04
#define REG04_LINEART 0x80
#define REG04_BITSET 0x40
#define REG04_FILTER 0x30
#define REG04_AFEMOD 0x07
#define REG05 0x05
#define REG05_DPIHW 0xc0
#define REG05_DPIHW_600 0x00
#define REG05_DPIHW_1200 0x40
#define REG05_DPIHW_2400 0x80
#define REG05_DPIHW_4800 0xc0
#define REG05_MTLLAMP 0x30
#define REG05_GMMENB 0x08
#define REG05_ENB20M 0x04
#define REG05_MTLBASE 0x03
#define REG05 0x05
#define REG05_DPIHW 0xc0
#define REG05_DPIHW_600 0x00
#define REG05_DPIHW_1200 0x40
#define REG05_DPIHW_2400 0x80
#define REG05_DPIHW_4800 0xc0
#define REG05_MTLLAMP 0x30
#define REG05_GMMENB 0x08
#define REG05_ENB20M 0x04
#define REG05_MTLBASE 0x03
#define REG06 0x06
#define REG06_SCANMOD 0xe0
#define REG06S_SCANMOD 5
#define REG06_PWRBIT 0x10
#define REG06_GAIN4 0x08
#define REG06_OPTEST 0x07
#define REG06 0x06
#define REG06_SCANMOD 0xe0
#define REG06S_SCANMOD 5
#define REG06_PWRBIT 0x10
#define REG06_GAIN4 0x08
#define REG06_OPTEST 0x07
#define REG07_LAMPSIM 0x80
#define REG07_LAMPSIM 0x80
#define REG08_DRAM2X 0x80
#define REG08_DRAM2X 0x80
#define REG08_MPENB 0x20
#define REG08_CIS_LINE 0x10
#define REG08_IR2_ENB 0x08
#define REG08_IR1_ENB 0x04
#define REG08_ENB24M 0x01
#define REG09_MCNTSET 0xc0
#define REG09_MCNTSET 0xc0
#define REG09_EVEN1ST 0x20
#define REG09_BLINE1ST 0x10
#define REG09_BACKSCAN 0x08
#define REG09_OUTINV 0x04
#define REG09_SHORTTG 0x02
#define REG09_BACKSCAN 0x08
#define REG09_OUTINV 0x04
#define REG09_SHORTTG 0x02
#define REG09S_MCNTSET 6
#define REG09S_CLKSET 4
@ -136,55 +136,55 @@
#define REG0B_48MHZ 0x60
#define REG0B_60MHZ 0x80
#define REG0D 0x0d
#define REG0D 0x0d
#define REG0D_MTRP_RDY 0x80
#define REG0D_FULLSTP 0x10
#define REG0D_CLRMCNT 0x04
#define REG0D_CLRDOCJM 0x02
#define REG0D_CLRLNCNT 0x01
#define REG0D_CLRLNCNT 0x01
#define REG0F 0x0f
#define REG0F 0x0f
#define REG16_CTRLHI 0x80
#define REG16_TOSHIBA 0x40
#define REG16_TGINV 0x20
#define REG16_CK1INV 0x10
#define REG16_CK2INV 0x08
#define REG16_CTRLINV 0x04
#define REG16_CKDIS 0x02
#define REG16_CTRLDIS 0x01
#define REG16_CTRLHI 0x80
#define REG16_TOSHIBA 0x40
#define REG16_TGINV 0x20
#define REG16_CK1INV 0x10
#define REG16_CK2INV 0x08
#define REG16_CTRLINV 0x04
#define REG16_CKDIS 0x02
#define REG16_CTRLDIS 0x01
#define REG17_TGMODE 0xc0
#define REG17_SNRSYN 0x0f
#define REG17_TGMODE 0xc0
#define REG17_SNRSYN 0x0f
#define REG18 0x18
#define REG18_CNSET 0x80
#define REG18_DCKSEL 0x60
#define REG18_CKTOGGLE 0x10
#define REG18_CKDELAY 0x0c
#define REG18_CKSEL 0x03
#define REG18 0x18
#define REG18_CNSET 0x80
#define REG18_DCKSEL 0x60
#define REG18_CKTOGGLE 0x10
#define REG18_CKDELAY 0x0c
#define REG18_CKSEL 0x03
#define REG1A_SW2SET 0x80
#define REG1A_SW1SET 0x40
#define REG1A_MANUAL3 0x02
#define REG1A_MANUAL1 0x01
#define REG1A_CK4INV 0x08
#define REG1A_CK3INV 0x04
#define REG1A_LINECLP 0x02
#define REG1A_SW2SET 0x80
#define REG1A_SW1SET 0x40
#define REG1A_MANUAL3 0x02
#define REG1A_MANUAL1 0x01
#define REG1A_CK4INV 0x08
#define REG1A_CK3INV 0x04
#define REG1A_LINECLP 0x02
#define REG1C_TBTIME 0x07
#define REG1D 0x1d
#define REG1D_CK4LOW 0x80
#define REG1D_CK3LOW 0x40
#define REG1D_CK1LOW 0x20
#define REG1D_LINESEL 0x1f
#define REG1D 0x1d
#define REG1D_CK4LOW 0x80
#define REG1D_CK3LOW 0x40
#define REG1D_CK1LOW 0x20
#define REG1D_LINESEL 0x1f
#define REG1DS_LINESEL 0
#define REG1E 0x1e
#define REG1E_WDTIME 0xf0
#define REG1E_WDTIME 0xf0
#define REG1ES_WDTIME 4
#define REG1E_WDTIME 0xf0
#define REG1E_WDTIME 0xf0
#define REG30 0x30
#define REG31 0x31
@ -243,18 +243,18 @@
#define REGB1 0xb1
#define REGB2 0xb2
#define REGB2_Z1MOD 0x1f
#define REGB2_Z1MOD 0x1f
#define REGB3 0xb3
#define REGB3_Z1MOD 0xff
#define REGB3_Z1MOD 0xff
#define REGB4 0xb4
#define REGB4_Z1MOD 0xff
#define REGB4_Z1MOD 0xff
#define REGB5 0xb5
#define REGB5_Z2MOD 0x1f
#define REGB5_Z2MOD 0x1f
#define REGB6 0xb6
#define REGB6_Z2MOD 0xff
#define REGB6_Z2MOD 0xff
#define REGB7 0xb7
#define REGB7_Z2MOD 0xff
#define REGB7_Z2MOD 0xff
#define REG100 0x100
#define REG100_DOCSNR 0x80
@ -565,12 +565,12 @@ typedef struct
} Memory_layout;
static Memory_layout layouts[]={
/* LIDE 110 */
/* LIDE 110, 120 */
{
0x0a, 0x15, 0x20,
0x00, 0xac, 0x08, 0x55, 0x08, 0x56, 0x0f, 0xff
},
/* LIDE 210 */
/* LIDE 210, 220 */
{
0x0a, 0x1f, 0x34,
0x01, 0x24, 0x08, 0x91, 0x08, 0x92, 0x0f, 0xff
@ -590,8 +590,8 @@ typedef struct {
int half_ccd; /**> half ccd mode */
int exposure; /**> exposure */
int ck1map; /**> CK1MAP */
int ck3map; /**> CK2MAP */
int ck4map; /**> CK3MAP */
int ck3map; /**> CK3MAP */
int ck4map; /**> CK4MAP */
int segcnt; /**> SEGCNT */
int tg0cnt; /**> TG0CNT */
int expdummy; /**> exposure dummy */
@ -621,10 +621,10 @@ static Sensor_Profile sensors[]={
{CIS_CANONLIDE110, 2400, 0, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24},
/* LiDE 120 */
{CIS_CANONLIDE120, 600, 1, 2768, 0x0f, 0x9f, 0x55, 2552, 112, 94, 388, 574, 393, NULL , 0x00, 0x02, 0x20, 0x21},
{CIS_CANONLIDE120, 600, 0, 5360, 0x0f, 0x9f, 0x55, 5168, 163, 94, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21},
{CIS_CANONLIDE120, 1200, 0, 10528, 0x0f, 0x9f, 0x55, 5168, 163, 94, 388, 574, 393, order_01 , 0x00, 0x08, 0x20, 0x22},
{CIS_CANONLIDE120, 2400, 0, 20864, 0x0f, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24},
{CIS_CANONLIDE120, 600, 1, 2768, 0x0f, 0x9f, 0x55, 2552, 112, 94, 1644, 1994, 1844, NULL , 0x00, 0x02, 0x20, 0x21},
{CIS_CANONLIDE120, 600, 0, 5360, 0x0f, 0x00, 0x55, 5104, 139, 94, 1644, 1994, 1844, NULL , 0x00, 0x02, 0x20, 0x21},
{CIS_CANONLIDE120, 1200, 0, 10528, 0x0f, 0x9f, 0x55, 5104, 163, 94, 1644, 1994, 1844, order_01 , 0x00, 0x08, 0x20, 0x22},
{CIS_CANONLIDE120, 2400, 0, 20864, 0x0f, 0x9f, 0x55, 5104, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24},
/* LiDE 210 */
{CIS_CANONLIDE210, 600, 1, 2768, 0x1e, 0x9f, 0x55, 2584, 154, 101, 388, 574, 393, NULL , 0x00, 0x0c, 0x20, 0x21},
@ -670,10 +670,10 @@ static Motor_Profile motors[]={
GENESYS_STATIC
SANE_Status gl124_init_scan_regs (Genesys_Device * dev,
Genesys_Register_Set * reg,
float xres, /*dpi */
float yres, /*dpi */
float startx, /*optical_res, from dummy_pixel+1 */
float starty, /*base_ydpi, from home! */
float xres, /*dpi */
float yres, /*dpi */
float startx, /*optical_res, from dummy_pixel+1 */
float starty, /*base_ydpi, from home! */
float pixels,
float lines,
unsigned int depth,