From 96b29ca2019bb7d158bb280def356cc44e5445ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Voltz?= Date: Mon, 10 May 2010 06:16:51 +0200 Subject: [PATCH] working full width 1200 dpi scan --- backend/genesys.c | 1 + backend/genesys_devices.c | 22 ++++++------- backend/genesys_gl847.c | 69 +++++++++++++++++++++++---------------- 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/backend/genesys.c b/backend/genesys.c index 4840d4e99..1c31f4290 100644 --- a/backend/genesys.c +++ b/backend/genesys.c @@ -3308,6 +3308,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev) target_code); break; case CCD_CANONLIDE35: + case CIS_CANONLIDE100: target_bright = 0xfa00; target_dark = 0xa00; o = 4; /*first four pixels are ignored */ diff --git a/backend/genesys_devices.c b/backend/genesys_devices.c index f27008bf1..cb85c1923 100644 --- a/backend/genesys_devices.c +++ b/backend/genesys_devices.c @@ -432,12 +432,12 @@ static Genesys_Sensor Sensor[] = { 87, /* black pixels */ 16, /* dummy pixels */ 0, - 10592, /* 10272 (shading) , 16 (dummy) */ + 10592, /* 10272 + 320 start */ 210, 200, {0x00, 0x00, 0x00, 0x00}, /* reg 0x10 - 0x1d */ - {0x03, 0x48, 0x01, 0xff, 0x01, 0x8e, /* EXPR/EXPG/EXPB */ + {0x03, 0x48, 0x01, 0xff, 0x01, 0x7d, /* EXPR/EXPG/EXPB */ 0x10, 0x08, 0x00, 0xff, 0x34, 0x00, 0x02, 0x04 }, /* reg 0x52 - 0x5e */ {0x03, 0x07, @@ -785,9 +785,9 @@ static Genesys_Motor Motor[] = { 1, /* maximum power modes count */ { /* motor slopes */ { /* power mode 0 */ - { 2343, 864, 32, 0.81}, /* full step */ - { 2*1171, 2*648, 32, 0.82}, /* half step */ - { 4*2034, 4*2034, 32, 0.84}, /* quarter step */ + { 2343, 864, 32, 0.80}, /* full step */ + { 2*1171, 2*648, 32, 0.80}, /* half step */ + { 4*2034, 4*2034, 32, 0.80}, /* quarter step */ }, }, }, @@ -926,13 +926,13 @@ static Genesys_Model canon_lide_100_model = { GENESYS_GL847, NULL, - {1200, 600, 300, 150, 0}, /* possible x-resolutions */ - {1200, 600, 300, 150, 0}, /* possible y-resolutions */ + {1200, 600, 300, 150, 75, 0}, /* possible x-resolutions */ + {1200, 600, 300, 150, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (6.42), /* Start of scan area in mm (x) cible=320 */ - SANE_FIX (7.9), /* Start of scan area in mm (y) */ + SANE_FIX (6.42), /* Start of scan area in mm (x) */ + SANE_FIX (10.0), /* Start of scan area in mm (y) 7.9 */ SANE_FIX (217.44), /* Size of scan area in mm (x) */ SANE_FIX (299.0), /* Size of scan area in mm (y) */ @@ -970,7 +970,7 @@ static Genesys_Model canon_lide_100_model = { GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, 150, 400 -}; /* this is completely untested -- hmg */ +}; static Genesys_Model canon_lide_200_model = { "canon-lide-200", /* Name */ @@ -1025,7 +1025,7 @@ static Genesys_Model canon_lide_200_model = { GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, 150, 400 -}; /* this is completely untested -- hmg */ +}; static Genesys_Model canon_lide_60_model = { diff --git a/backend/genesys_gl847.c b/backend/genesys_gl847.c index 8ac4bc6d2..b0a28ffe4 100644 --- a/backend/genesys_gl847.c +++ b/backend/genesys_gl847.c @@ -180,15 +180,26 @@ gl847_bulk_read_data (Genesys_Device * dev, uint8_t addr, words = words * 256 + value; RIE (sanei_genesys_read_register (dev, 0x45, &value)); words = words * 256 + value; + DBG (DBG_io2, "gl847_bulk_read_data: %lu bytes available\n", (u_long) words); - if (len > 4 * words) + words=words/2; + words=words*2; + + /* 100*1000=100ms is too much, 50ms also, 1ms is too small */ + /*usleep(50000); */ + + /* don't read more than available data */ + /* + if (len > words) { - target = 4 * words; + target = words; } else { target = len; } + */ + target = len; /* loop until computed data size is read */ while (target) @@ -637,6 +648,10 @@ gl847_set_ad_fe (Genesys_Device * dev, uint8_t set) DBG (DBG_proc, "gl847_set_ad_fe(): setting DAC %u\n", dev->model->dac_type); + /* sets to default values */ + sanei_genesys_init_fe (dev); + } + /* reset DAC */ status = sanei_genesys_fe_write_data (dev, 0x00, 0x80); if (status != SANE_STATUS_GOOD) @@ -646,9 +661,6 @@ gl847_set_ad_fe (Genesys_Device * dev, uint8_t set) return status; } - /* sets to default values */ - sanei_genesys_init_fe (dev); - /* write them to analog frontend */ val = dev->frontend.reg[0]; status = sanei_genesys_fe_write_data (dev, 0x00, val); @@ -666,9 +678,7 @@ gl847_set_ad_fe (Genesys_Device * dev, uint8_t set) sane_strstatus (status)); return status; } - } - if (set == AFE_SET) - { + for (i = 0; i < 3; i++) { val = dev->frontend.gain[i]; @@ -693,7 +703,7 @@ gl847_set_ad_fe (Genesys_Device * dev, uint8_t set) return status; } } - } + DBG (DBG_proc, "gl847_set_ad_fe(): end\n"); return status; @@ -783,10 +793,6 @@ HOME_FREE: 3 r->value = (feedl >> 8) & 0xff; r = sanei_genesys_get_address (reg, 0x3f); r->value = feedl & 0xff; - /* XXX STEF XXX - r = sanei_genesys_get_address (reg, 0x5e); - r->value &= ~0xe0; - */ r = sanei_genesys_get_address (reg, 0x25); r->value = (scan_lines >> 16) & 0xf; @@ -860,9 +866,11 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne { /* 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, 0, /*step_type */ + fast_exposure = sanei_genesys_exposure_time2 (dev, dev->motor.base_ydpi / 4, + 0, /*step_type */ 0, /*last used pixel */ - 0, 0); + 0, + 0); DBG (DBG_info, "gl847_init_motor_regs : fast_exposure=%d pixels\n", fast_exposure); @@ -924,10 +932,6 @@ HOME_FREE: 3 r->value = (feedl >> 8) & 0xff; r = sanei_genesys_get_address (reg, 0x3f); r->value = feedl & 0xff; - /* XXX STEF XXX - r = sanei_genesys_get_address (reg, 0x5e); - r->value &= ~0xe0; - */ r = sanei_genesys_get_address (reg, 0x25); r->value = 0; @@ -1079,7 +1083,10 @@ gl847_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, un scan_lines, scan_dummy, feed_steps, scan_power_mode, flags); fast_exposure = - sanei_genesys_exposure_time2 (dev, dev->motor.base_ydpi / 4, 0, 0, 0, + sanei_genesys_exposure_time2 (dev, dev->motor.base_ydpi / 4, + 0, + 0, + 0, scan_power_mode); DBG (DBG_info, "gl847_init_motor_regs_scan : fast_exposure=%d pixels\n", @@ -1134,8 +1141,8 @@ gl847_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, un fast_slope_steps, 0, fast_exposure, - dev->motor.base_ydpi / - 4, &fast_slope_steps, + dev->motor.base_ydpi / 4, + &fast_slope_steps, &fast_exposure, scan_power_mode); @@ -1195,9 +1202,6 @@ gl847_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, un r->value = (feedl >> 8) & 0xff; r = sanei_genesys_get_address (reg, 0x3f); r->value = feedl & 0xff; - /* XXX STEF XXX - r = sanei_genesys_get_address (reg, 0x5e); - r->value &= ~0xe0; */ r = sanei_genesys_get_address (reg, 0x25); r->value = (scan_lines >> 16) & 0xf; @@ -1279,9 +1283,11 @@ gl847_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, un /* steps of table 0*/ r = sanei_genesys_get_address (reg, 0x22); r->value = min_restep - slow_slope_steps * 2; + /* steps of table 1*/ r = sanei_genesys_get_address (reg, 0x23); r->value = min_restep - back_slope_steps * 2; + /* for z1/z2: @@ -1425,6 +1431,10 @@ gl847_init_optical_regs_scan (Genesys_Device * dev, used_res, start, pixels, channels, depth, half_ccd, flags); end = start + pixels; + if(end>dev->sensor.sensor_pixels) + { + DBG (DBG_error, "XXX STEF XXX overflow\n"); + } status = gl847_set_fe (dev, AFE_SET); if (status != SANE_STATUS_GOOD) @@ -1579,11 +1589,13 @@ gl847_init_optical_regs_scan (Genesys_Device * dev, r->value = HIBYTE (LOWORD (words_per_line >> 2)); r = sanei_genesys_get_address (reg, 0x37); r->value = LOBYTE (LOWORD (words_per_line >> 2)); + DBG (DBG_io2, "%s: words_per_line used=%d\n", __FUNCTION__, words_per_line); r = sanei_genesys_get_address (reg, 0x38); r->value = HIBYTE (exposure_time); r = sanei_genesys_get_address (reg, 0x39); r->value = LOBYTE (exposure_time); + DBG (DBG_io2, "%s: exposure_time used=%d\n", __FUNCTION__, exposure_time); r = sanei_genesys_get_address (reg, 0x34); r->value = dev->sensor.dummy_pixel; @@ -4159,10 +4171,11 @@ gl847_init (Genesys_Device * dev) dev->settings.color_filter = 0; /* ASIC reset */ - /* XXX STEF XXX just writes 0 for GL841 */ + /* XXX STEF XXX just writes 0 for GL841 RIE (sanei_genesys_write_register (dev, 0x0e, 0x01)); - sleep (1); + sleep (1); */ RIE (sanei_genesys_write_register (dev, 0x0e, 0x00)); + sleep (1); /* setup GPIO */ sanei_genesys_read_register (dev, REGA6, &val); @@ -4367,7 +4380,7 @@ gl847_search_strip (Genesys_Device * dev, SANE_Bool forward, SANE_Bool black) if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl847_search_strip: Failed to stop: %s\n", + "gl847_search_strip: failed to stop: %s\n", sane_strstatus (status)); return status; }