On Saturday 09 February 2008, Stefan Lucke wrote: > On Friday 08 February 2008, Reinhard Biegel wrote: > > Am Wednesday, 6. February 2008 schrieb Reinhard Biegel: > > > Oh....i just remember there was something that had to be called at any > > > price but didn't find any documentation about that. I'm going to look for > > > that in my logs. > > > > Hi again, > > > > I wanted to capture some logs today. But I had to find out that Canon > > doen't > > even provide drivers for 64bit Vista, which i set up some days ago. > > *goingcrazy* > > > > As far as I remember there was a bulk write to gamma address space during > > initialisation which wrote data beyond the end of gamma table in the logs. > > When saying 'beyond' I'm refering the GL841 datasheet. > > You are talking about writes like:
I guess YES. > set_write_register(0x5b, 0x0c) > set_write_register(0x5c, 0x00) > set_register(0x28) > buf_prepaccess(0x00000080,BULK_OUT) > Data: 01 00 82 00 80 00 00 00 > Index: 0 > BULK>(128) > 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, > 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, Thats not the right one, see attached diff. > > 5b/5c build address 0x0c 00, whereas gamma address is defined as 10bit. > I tried a few of them, but without luck. Now I found the right one AND the right time: Before doing the reset ;-). So now I've the initial motor movement with LED blinking and a scan movement with green LED. But no (strange) data arrives. -- Stefan Lucke -------------- next part -------------- ? backend/genesys_low.c Index: backend/genesys_devices.c =================================================================== RCS file: /cvsroot/sane/sane-backends/backend/genesys_devices.c,v retrieving revision 1.11 diff -p -U 3 -r1.11 genesys_devices.c --- backend/genesys_devices.c 22 Nov 2007 14:05:12 -0000 1.11 +++ backend/genesys_devices.c 10 Feb 2008 21:00:49 -0000 @@ -218,6 +218,29 @@ static Genesys_Sensor Sensor[] = { , 1.0, 1.0, 1.0, NULL, NULL, NULL} + , + /* CANOLIDE80 */ + {600, +/*TODO: find a good reason for keeping all three following variables*/ + 87, /*(black) */ + 87, /* (dummy) */ + 0, /* (startxoffset) */ + 10400, /*sensor_pixels */ + 210, + 200, + {0x00, 0x00, 0x00, 0x00}, + {0x06, 0x13, 0x55, 0x02, 0x32, 0x04, 0x32, 0x14, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04 + }, + {0x05, 0x07, + 0x00, 0x00, 0x00, 0x00, /*[GB](HI|LOW) not needed for cis */ + 0x3a, 0x03, + 0x40, /*TODO: bit7 */ + 0x00, 0x00, 0x00, 0x00 /*TODO (these do no harm, but may be neccessery for CCD) */ + } + , + 1.0, 1.0, 1.0, + NULL, NULL, NULL} }; /** for General Purpose Output specific settings: @@ -280,6 +303,13 @@ static Genesys_Gpo Gpo[] = { {0xef, 0x80} , } + , + /* CANONLIDE80 */ + { + {0x00, 0x8f} + , + {0x6d, 0x80} + } }; #define MOTOR_ST24 2 @@ -393,6 +423,17 @@ static Genesys_Motor Motor[] = { 0.8, },},}, }, + { /* Canon LiDE 80 */ + 2400, 2400, 1, 2, + { + {{4687, 937, 128, 0.8, }, + {4687, 937, 128, 0.8, }, /* {4200, 3800, 30, 0.8, },*/ + }, + {{9375, 1875, 128, 0.8, }, /* {3500, 1300, 60, 0.8, }, */ + {9375, 1875, 128, 0.8, }, /* {3500, 1400, 60, 0.8, }, */ + }, + }, + }, }; /* here we have the various device settings... @@ -521,6 +562,53 @@ static Genesys_Model canon_lide_60_model 400 }; /* this is completely untested -- hmg */ +static Genesys_Model canon_lide_80_model = { + "canon-lide-80", /* Name */ + "Canon", /* Device vendor string */ + "LiDE 80", /* Device model name */ + GENESYS_GL841, + NULL, + + {2400, 1200, 600, 300, 150, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 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 (0.42), /* Start of scan area in mm (x) */ + SANE_FIX (7.9), /* Start of scan area in mm (y) */ + SANE_FIX (218.0), /* Size of scan area in mm (x) */ + SANE_FIX (299.0), /* Size of scan area in mm (y) */ + + SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + + SANE_TRUE, /* Is this a CIS scanner? */ + CCD_CANONLIDE80, + DAC_CANONLIDE35, + GPO_CANONLIDE80, + MOTOR_CANONLIDE80, + GENESYS_FLAG_UNTESTED | + GENESYS_FLAG_LiDE80 | + GENESYS_FLAG_LAZY_INIT | + GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_OFFSET_CALIBRATION | + GENESYS_FLAG_DARK_WHITE_CALIBRATION, + /* Which flags are needed for this scanner? */ + 300, + 400 +}; + static Genesys_Model hp2300c_model = { "hewlett-packard-scanjet-2300c", /* Name */ "Hewlett Packard", /* Device vendor string */ @@ -791,6 +879,7 @@ static Genesys_Model medion_md5345_model static Genesys_USB_Device_Entry genesys_usb_device_list[] = { {0x0638, 0x0a10, &umax_astra_4500_model}, {0x04a9, 0x2213, &canon_lide_50_model}, + {0x04a9, 0x2214, &canon_lide_80_model}, {0x04a9, 0x221c, &canon_lide_60_model}, {0x03f0, 0x0901, &hp2300c_model}, {0x03f0, 0x0a01, &hp2400c_model}, Index: backend/genesys_gl841.c =================================================================== RCS file: /cvsroot/sane/sane-backends/backend/genesys_gl841.c,v retrieving revision 1.19 diff -p -U 3 -r1.19 genesys_gl841.c --- backend/genesys_gl841.c 3 Feb 2008 10:34:20 -0000 1.19 +++ backend/genesys_gl841.c 10 Feb 2008 21:00:56 -0000 @@ -404,6 +404,14 @@ gl841_bulk_write_register (Genesys_Devic msg[0] = reg[i].address; msg[1] = reg[i].value; + /* LiDE80 hack to turn on LEDs ! */ + if (dev->model->flags & GENESYS_FLAG_LiDE80 && + (reg[i]. address == 0x6c || reg[i]. address == 0x6d)) + continue; + + DBG (DBG_io2, "reg[0x%02x] = 0x%02x\n", msg[0], + msg[1]); + status = sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_BUFFER, VALUE_SET_REGISTER, INDEX, 2, msg); @@ -415,8 +423,6 @@ gl841_bulk_write_register (Genesys_Devic return status; } - DBG (DBG_io2, "reg[0x%02x] = 0x%02x\n", msg[0], - msg[1]); } @@ -513,7 +519,7 @@ printtime(char *p) { gettimeofday(&t,NULL); dif = t.tv_sec - start_time.tv_sec; dif = dif*1000000 + t.tv_usec - start_time.tv_usec; - fprintf(stderr,"%s %llu?s\n",p,dif); + fprintf(stderr,"%s %llu???s\n",p,dif); } */ @@ -705,6 +711,41 @@ gl841_bulk_write_data_gamma (Genesys_Dev return status; } +/**/ +static void +gl841_LiDE80_hack (Genesys_Device *dev) +{ + SANE_Status status; + static u_int8_t junk_tab [] = + { + 0x8a, 0x32, 0x8a, 0x32, 0x8a, 0x32, 0x8a, 0x32, + 0x45, 0x33, 0x45, 0x33, 0x45, 0x33, 0x45, 0x33, + 0xc0, 0x13, 0xc0, 0x13, 0xc0, 0x13, 0xc0, 0x13, + 0x45, 0xb3, 0x45, 0xb3, 0x45, 0xb3, 0x45, 0xb3, + 0x8a, 0xb2, 0x8a, 0xb2, 0x8a, 0xb2, 0x8a, 0xb2, + 0x4d, 0xb1, 0x4d, 0xb1, 0x4d, 0xb1, 0x4d, 0xb1, + 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xe0, + 0x4d, 0xf1, 0x4d, 0xf1, 0x4d, 0xf1, 0x4d, 0xf1, + 0x8a, 0xf2, 0x8a, 0xf2, 0x8a, 0xf2, 0x8a, 0xf2, + 0x45, 0xf3, 0x45, 0xf3, 0x45, 0xf3, 0x45, 0xf3, + 0xc0, 0x53, 0xc0, 0x53, 0xc0, 0x53, 0xc0, 0x53, + 0x45, 0x73, 0x45, 0x73, 0x45, 0x73, 0x45, 0x73, + 0x8a, 0x72, 0x8a, 0x72, 0x8a, 0x72, 0x8a, 0x72, + 0x4d, 0x71, 0x4d, 0x71, 0x4d, 0x71, 0x4d, 0x71, + 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, + 0x4d, 0x31, 0x4d, 0x31, 0x4d, 0x31, 0x4d, 0x31 + }; + + sanei_genesys_write_register (dev, 0x60, 0x06); + sanei_genesys_write_register (dev, 0x61, 0x13); + sanei_genesys_write_register (dev, 0x62, 0x55); + sanei_genesys_write_register (dev, 0x63, 0x02); + sanei_genesys_write_register (dev, 0x64, 0x34); + sanei_genesys_write_register (dev, 0x65, 0x04); + + status = gl841_set_buffer_address_gamma (dev, 0x0c000); + status = gl841_bulk_write_data_gamma (dev, 0x28, junk_tab, 128); +} /**************************************************************************** Mid level functions @@ -2023,6 +2064,12 @@ HOME_FREE: 3 r = sanei_genesys_get_address (reg, 0x69); r->value = 0; + if (dev->model->flags & GENESYS_FLAG_LiDE80) + { + r = sanei_genesys_get_address (reg, 0x6b); + r->value |= 1; /* LiDE 80: turn on motor home sensor */ + } + r = sanei_genesys_get_address (reg, 0x6a); r->value = (fast_slope_steps >> 1) + (fast_slope_steps & 1); @@ -3434,7 +3481,7 @@ gl841_feed (Genesys_Device * dev, int st return status; } - while (loop < 3) /* 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) @@ -3452,6 +3499,7 @@ gl841_feed (Genesys_Device * dev, int st return SANE_STATUS_GOOD; } usleep (100000); /* sleep 100 ms */ + ++loop; } /* when we come here then the scanner needed too much time for this, so we better stop the motor */ @@ -3475,6 +3523,15 @@ gl841_slow_back_home (Genesys_Device * d wait_until_home); memset (local_reg, 0, sizeof (local_reg)); + + if (dev->model->flags & GENESYS_FLAG_LiDE80) + { + /* LiDE 80: ensure that home sensor is powered on for reading ;-) */ + sanei_genesys_read_register (dev, 0x6b, &val); + val |= 1; + sanei_genesys_write_register (dev, 0x6b, val); + } + val = 0; status = sanei_genesys_get_status (dev, &val); if (status != SANE_STATUS_GOOD) @@ -3563,6 +3620,14 @@ gl841_slow_back_home (Genesys_Device * d return status; } + if (dev->model->flags & GENESYS_FLAG_LiDE80) + { + /* LiDE80: required too, to enabled LEDs */ + sanei_genesys_read_register (dev, 0x6c, &val); + val |= 0x08; + sanei_genesys_write_register (dev, 0x6c, val); + } + status = sanei_genesys_start_motor (dev); if (status != SANE_STATUS_GOOD) { @@ -3579,7 +3644,7 @@ gl841_slow_back_home (Genesys_Device * d { int loop = 0; - while (loop < 3) /* 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) @@ -3598,6 +3663,7 @@ gl841_slow_back_home (Genesys_Device * d return SANE_STATUS_GOOD; } usleep (100000); /* sleep 100 ms */ + ++loop; } /* when we come here then the scanner needed too much time for this, so we better stop the motor */ @@ -3729,6 +3795,7 @@ gl841_park_head (Genesys_Device * dev, G } } usleep (100000); + ++loop; } } else { DBG (DBG_info, @@ -4219,7 +4286,7 @@ gl841_led_calibration (Genesys_Device * if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_coarse_gain_calibration: Failed to feed: %s\n", + "gl841_led_calibration: Failed to feed: %s\n", sane_strstatus (status)); return status; } @@ -5088,9 +5155,19 @@ gl841_init (Genesys_Device * dev) RIE (sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_REGISTER, VALUE_INIT, INDEX, 1, &val)); + if (dev->model->flags & GENESYS_FLAG_LiDE80) + gl841_LiDE80_hack (dev); + /* ASIC reset */ RIE (sanei_genesys_write_register (dev, 0x0e, 0x00)); + if (dev->model->flags & GENESYS_FLAG_LiDE80) + { + RIE (sanei_genesys_write_register (dev, 0x6b, 0x0c)); + RIE (sanei_genesys_write_register (dev, 0x6e, 0x6d)); + RIE (sanei_genesys_write_register (dev, 0x6c, 0x00)); + } + /* Write initial registers */ RIE (gl841_bulk_write_register (dev, dev->reg, GENESYS_GL841_MAX_REGS)); Index: backend/genesys_low.h =================================================================== RCS file: /cvsroot/sane/sane-backends/backend/genesys_low.h,v retrieving revision 1.8 diff -p -U 3 -r1.8 genesys_low.h --- backend/genesys_low.h 22 Nov 2007 14:05:13 -0000 1.8 +++ backend/genesys_low.h 10 Feb 2008 21:00:56 -0000 @@ -95,6 +95,7 @@ creation function */ #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_LiDE80 (1 << 13) /* do something special for LiDE80 */ /* USB control message values */ #define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN) @@ -239,6 +240,7 @@ Genesys_Color_Order; #define CCD_HP2400 4 #define CCD_HP2300 5 #define CCD_CANONLIDE35 6 +#define CCD_CANONLIDE80 7 #define GPO_UMAX 0 #define GPO_ST12 1 @@ -247,6 +249,7 @@ Genesys_Color_Order; #define GPO_HP2400 4 #define GPO_HP2300 5 #define GPO_CANONLIDE35 6 +#define GPO_CANONLIDE80 7 #define MOTOR_UMAX 0 #define MOTOR_5345 1 @@ -254,6 +257,7 @@ Genesys_Color_Order; #define MOTOR_HP2400 3 #define MOTOR_HP2300 4 #define MOTOR_CANONLIDE35 5 +#define MOTOR_CANONLIDE80 6 /* Forward typedefs */