Hi All Working from libsane Ubuntu (Karmic(1.0.20)) I have fixed several problems related to the Visioneer 9450 scanner.
Please see my notes below about "avision.c" Other Notes: Best Modes: 150, 300 dpi Grey, Color Document Feeder works. Some resolutions are buggy.? Like in the 180 - 299 range.? Hangs the scanner, only sometimes. High resolutions time - out and hang sometimes.? I went up to 600 dpi color and it work sometimes. BEGIN "avision.c" ln 914 The Visioneer 9450 is in here but either somebody didn't test it or there are different version of the chipset or firmware in different hardware production runs. { NULL, NULL, 0x04a7, 0x0421, "Visioneer", "9450", AV_ADF_BGR_ORDER_INVERT /* AJS */ }, ln 2019 FUNCTION: Avision_Cmd Not sure this is helping anything, but it is working anyway. /* may I vote for the possibility to use C99 ... */ #define min_usb_size 10 #define max_usb_size 512 * 1024 /* or 0x10000, used by AV Windows driver during background raster read, ... ? */ //ajs up max_usb_size to 512 line 3173 FUNCTION Get_Button_Status Uh yeah.....bad bug for this scanner/firmware/chipset something static SANE_Status get_button_status (Avision_Scanner* s) { //ajs !!!!!!!!!!!!!!!!!!!!!!!! return SANE_STATUS_GOOD; ln 4220 FUNCTION: Send_Tune_Scan_Length uh..bad bug for scanner firmware/chipset you get the idea static SANE_Status send_tune_scan_length (Avision_Scanner* s) { return SANE_STATUS_GOOD; //ajs !!!!!!!!!!!!!!!!!!!!!! ln 4549 FUNCTION:Set_Calib_Data Yeah, somebody didn't test this or there are a lot of different chipset/firmwares running around labeled as Visioneer 9450. I keep looking at the vertically striped output from color scans and it looked MOSTLY like a massive calibration error, not any other gamma/shading whatever whatever. TO FIX: Visioneer 9450 cannot handle the 3 channel color calibration data in one burst. Only if we are doing 1 channel calibration for gray or lineart or whatever do we send all the data in one burst. Otherwise we stream the calibration data separately for each color channel. memset (&scmd, 0x00, sizeof (scmd)); scmd.opc = AVISION_SCSI_SEND; scmd.datatypecode = send_type; ....................................................... out_size = format->pixel_per_line * 2; /* send data in one command? */ /* FR: HP5370 reports one-pass, but needs multi (or other format in single) */ if (format->channels == 1) //ajs || //ajs ( ( (dev->hw->feature_type & AV_ONE_CALIB_CMD) || //ajs ! BIT(format->ability1, 0) ) && //ajs ! (dev->hw->feature_type & AV_MULTI_CALIB_CMD) ) ) /* one command (most scanners) */ ........................................................... return SANE_STATUS_GOOD; } END "avision.c"