summaryrefslogtreecommitdiff
path: root/backend/genesys_low.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/genesys_low.h')
-rw-r--r--backend/genesys_low.h1245
1 files changed, 0 insertions, 1245 deletions
diff --git a/backend/genesys_low.h b/backend/genesys_low.h
deleted file mode 100644
index 56627b4..0000000
--- a/backend/genesys_low.h
+++ /dev/null
@@ -1,1245 +0,0 @@
-/* sane - Scanner Access Now Easy.
-
- Copyright (C) 2003 Oliver Rauch
- Copyright (C) 2003, 2004 Henning Meier-Geinitz <henning@meier-geinitz.de>
- Copyright (C) 2004, 2005 Gerhard Jaeger <gerhard@gjaeger.de>
- Copyright (C) 2004-2013 Stéphane Voltz <stef.dev@free.fr>
- Copyright (C) 2005-2009 Pierre Willenbrock <pierre@pirsoft.dnsalias.org>
- Copyright (C) 2006 Laurent Charpentier <laurent_pubs@yahoo.com>
- Parts of the structs have been taken from the gt68xx backend by
- Sergey Vlasov <vsu@altlinux.ru> et al.
-
- This file is part of the SANE package.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, the authors of SANE give permission for
- additional uses of the libraries contained in this release of SANE.
-
- The exception is that, if you link a SANE library with other files
- to produce an executable, this does not by itself cause the
- resulting executable to be covered by the GNU General Public
- License. Your use of that executable is in no way restricted on
- account of linking the SANE library code into it.
-
- This exception does not, however, invalidate any other reasons why
- the executable file might be covered by the GNU General Public
- License.
-
- If you submit changes to SANE to the maintainers to be included in
- a subsequent release, you agree by submitting the changes that
- those changes may be distributed with this exception intact.
-
- If you write modifications of your own for SANE, it is your choice
- whether to permit this exception to apply to your modifications.
- If you do not wish that, delete this exception notice.
-*/
-
-#ifndef GENESYS_LOW_H
-#define GENESYS_LOW_H
-
-
-#include "../include/sane/config.h"
-
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <math.h>
-#include <stddef.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_MKDIR
-#include <sys/stat.h>
-#include <sys/types.h>
-#endif
-
-#include "../include/sane/sane.h"
-#include "../include/sane/sanei.h"
-#include "../include/sane/saneopts.h"
-
-#include "../include/sane/sanei_backend.h"
-#include "../include/sane/sanei_usb.h"
-
-#include "../include/_stdint.h"
-
-#ifndef UNIT_TESTING
-#define GENESYS_STATIC static
-#else
-#define GENESYS_STATIC
-#endif
-
-#define DBG_error0 0 /* errors/warnings printed even with devuglevel 0 */
-#define DBG_error 1 /* fatal errors */
-#define DBG_init 2 /* initialization and scanning time messages */
-#define DBG_warn 3 /* warnings and non-fatal errors */
-#define DBG_info 4 /* informational messages */
-#define DBG_proc 5 /* starting/finishing functions */
-#define DBG_io 6 /* io functions */
-#define DBG_io2 7 /* io functions that are called very often */
-#define DBG_data 8 /* log image data */
-
-/**
- * call a function and return on error
- */
-#define RIE(function) \
- do { status = function; \
- if (status != SANE_STATUS_GOOD) \
- { \
- DBG(DBG_error, "%s: %s\n", __func__, sane_strstatus (status)); \
- return status; \
- } \
- } while (SANE_FALSE)
-
-#define RIEF(function, mem) \
- do { status = function; \
- if (status != SANE_STATUS_GOOD) \
- { \
- free(mem); \
- DBG(DBG_error, "%s: %s\n", __func__, sane_strstatus (status)); \
- return status; \
- } \
- } while (SANE_FALSE)
-
-#define RIEF2(function, mem1, mem2) \
- do { status = function; \
- if (status != SANE_STATUS_GOOD) \
- { \
- free(mem1); \
- free(mem2); \
- return status; \
- } \
- } while (SANE_FALSE)
-
-#define DBGSTART DBG (DBG_proc, "%s start\n", __func__);
-#define DBGCOMPLETED DBG (DBG_proc, "%s completed\n", __func__);
-
-#define FREE_IFNOT_NULL(x) if(x!=NULL) { free(x); x=NULL;}
-
-#define GENESYS_RED 0
-#define GENESYS_GREEN 1
-#define GENESYS_BLUE 2
-
-/* Flags */
-#define GENESYS_FLAG_UNTESTED (1 << 0) /**< Print a warning for these scanners */
-#define GENESYS_FLAG_14BIT_GAMMA (1 << 1) /**< use 14bit Gamma table instead of 12 */
-#define GENESYS_FLAG_LAZY_INIT (1 << 2) /**< skip extensive ASIC test at init */
-#define GENESYS_FLAG_XPA (1 << 3)
-#define GENESYS_FLAG_SKIP_WARMUP (1 << 4) /**< skip genesys_warmup() */
-/** @brief offset calibration flag
- * signals that the scanner does offset calibration. In this case off_calibration() and
- * coarse_gain_calibration() functions must be implemented
- */
-#define GENESYS_FLAG_OFFSET_CALIBRATION (1 << 5)
-#define GENESYS_FLAG_SEARCH_START (1 << 6) /**< do start search before scanning */
-#define GENESYS_FLAG_REPARK (1 << 7) /**< repark head (and check for lock) by
- moving without scanning */
-#define GENESYS_FLAG_DARK_CALIBRATION (1 << 8) /**< do dark calibration */
-#define GENESYS_FLAG_STAGGERED_LINE (1 << 9) /**< pixel columns are shifted vertically for hi-res modes */
-
-#define GENESYS_FLAG_MUST_WAIT (1 << 10) /**< tells wether the scanner must wait for the head when parking */
-
-
-#define GENESYS_FLAG_HAS_UTA (1 << 11) /**< scanner has a transparency adapter */
-
-#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 */
-#define GENESYS_FLAG_FULL_HWDPI_MODE (1 << 19) /**< scanner always use maximum hw dpi to setup the sensor */
-
-#define GENESYS_HAS_NO_BUTTONS 0 /**< scanner has no supported button */
-#define GENESYS_HAS_SCAN_SW (1 << 0) /**< scanner has SCAN button */
-#define GENESYS_HAS_FILE_SW (1 << 1) /**< scanner has FILE button */
-#define GENESYS_HAS_COPY_SW (1 << 2) /**< scanner has COPY button */
-#define GENESYS_HAS_EMAIL_SW (1 << 3) /**< scanner has EMAIL button */
-#define GENESYS_HAS_PAGE_LOADED_SW (1 << 4) /**< scanner has paper in detection */
-#define GENESYS_HAS_OCR_SW (1 << 5) /**< scanner has OCR button */
-#define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */
-#define GENESYS_HAS_CALIBRATE (1 << 7) /**< scanner has 'calibrate' software button to start calibration */
-#define GENESYS_HAS_EXTRA_SW (1 << 8) /**< scanner has extra function button */
-
-/* USB control message values */
-#define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN)
-#define REQUEST_TYPE_OUT (USB_TYPE_VENDOR | USB_DIR_OUT)
-#define REQUEST_REGISTER 0x0c
-#define REQUEST_BUFFER 0x04
-#define VALUE_BUFFER 0x82
-#define VALUE_SET_REGISTER 0x83
-#define VALUE_READ_REGISTER 0x84
-#define VALUE_WRITE_REGISTER 0x85
-#define VALUE_INIT 0x87
-#define GPIO_OUTPUT_ENABLE 0x89
-#define GPIO_READ 0x8a
-#define GPIO_WRITE 0x8b
-#define VALUE_BUF_ENDACCESS 0x8c
-#define VALUE_GET_REGISTER 0x8e
-#define INDEX 0x00
-
-/* todo: used?
-#define VALUE_READ_STATUS 0x86
-*/
-
-/* Read/write bulk data/registers */
-#define BULK_OUT 0x01
-#define BULK_IN 0x00
-#define BULK_RAM 0x00
-#define BULK_REGISTER 0x11
-
-#define BULKIN_MAXSIZE 0xFE00
-#define GL646_BULKIN_MAXSIZE 0xFFC0
-#define GL646_BULKIN_MINSIZE 0x0800
-#define BULKOUT_MAXSIZE 0xF000
-
-/* AFE values */
-#define AFE_INIT 1
-#define AFE_SET 2
-#define AFE_POWER_SAVE 4
-
-#define LOWORD(x) ((uint16_t)((x) & 0xffff))
-#define HIWORD(x) ((uint16_t)((x) >> 16))
-#define LOBYTE(x) ((uint8_t)((x) & 0xFF))
-#define HIBYTE(x) ((uint8_t)((x) >> 8))
-
-/* Global constants */
-/* TODO: emove this leftover of early backend days */
-#define MOTOR_SPEED_MAX 350
-#define DARK_VALUE 0
-
-#define PWRBIT 0x80
-#define BUFEMPTY 0x40
-#define FEEDFSH 0x20
-#define SCANFSH 0x10
-#define HOMESNR 0x08
-#define LAMPSTS 0x04
-#define FEBUSY 0x02
-#define MOTORENB 0x01
-
-typedef struct Genesys_Register_Set
-{
- uint16_t address;
- uint8_t value;
-} Genesys_Register_Set;
-
-/** @brief Data structure to set up analog frontend.
- * The analog frontend converts analog value from image sensor to
- * digital value. It has its own control registers which are set up
- * with this structure. The values are written using sanei_genesys_fe_write_data.
- * The actual register addresses they map to depends on the frontend used.
- * @see sanei_genesys_fe_write_data
- */
-typedef struct
-{
- uint8_t fe_id; /**< id of the frontend description */
- uint8_t reg[4]; /**< values to set up frontend control register, they
- usually map to analog register 0x00 to 0x03 */
- uint8_t sign[3]; /**< sets the sign of the digital value */
- uint8_t offset[3]; /**< offset correction to apply to signal, most often
- maps to frontend register 0x20-0x22 */
- uint8_t gain[3]; /**< amplification to apply to signal, most often
- maps to frontend register 0x28-0x2a */
- uint8_t reg2[3]; /**< extra control registers */
-} Genesys_Frontend;
-
-typedef struct
-{
- uint8_t sensor_id; /**< id of the sensor description */
- int optical_res;
- int black_pixels;
- int dummy_pixel; /* value of dummy register. */
- int CCD_start_xoffset; /* last pixel of CCD margin at optical resolution */
- int sensor_pixels; /* total pixels used by the sensor */
- int fau_gain_white_ref; /* TA CCD target code (reference gain) */
- int gain_white_ref; /* CCD target code (reference gain) */
- uint8_t regs_0x08_0x0b[4];
- uint8_t regs_0x10_0x1d[14];
- uint8_t regs_0x52_0x5e[13];
- float gamma[3]; /**< red, green and blue gamma coefficient for default gamma tables */
- uint16_t *gamma_table[3]; /**< sensor specific gamma tables */
-} Genesys_Sensor;
-
-typedef struct
-{
- uint8_t gpo_id; /**< id of the gpo description */
- uint8_t value[2]; /**< registers 0x6c and 0x6d on gl843 */
- uint8_t enable[2]; /**< registers 0x6e and 0x6F on gl843 */
-} Genesys_Gpo;
-
-typedef struct
-{
- SANE_Int maximum_start_speed; /* maximum speed allowed when accelerating from standstill. Unit: pixeltime/step */
- SANE_Int maximum_speed; /* maximum speed allowed. Unit: pixeltime/step */
- SANE_Int minimum_steps; /* number of steps used for default curve */
- float g; /* power for non-linear acceleration curves. */
-/* vs*(1-i^g)+ve*(i^g) where
- vs = start speed, ve = end speed,
- i = 0.0 for first entry and i = 1.0 for last entry in default table*/
-} Genesys_Motor_Slope;
-
-
-typedef struct
-{
- uint8_t motor_id; /**< id of the motor description */
- SANE_Int base_ydpi; /* motor base steps. Unit: 1/" */
- SANE_Int optical_ydpi; /* maximum resolution in y-direction. Unit: 1/" */
- SANE_Int max_step_type; /* maximum step type. 0-2 */
- SANE_Int power_mode_count; /* number of power modes*/
- Genesys_Motor_Slope slopes[2][3]; /* slopes to derive individual slopes from */
-} Genesys_Motor;
-
-typedef enum Genesys_Color_Order
-{
- COLOR_ORDER_RGB,
- COLOR_ORDER_BGR
-}
-Genesys_Color_Order;
-
-
-#define MAX_RESOLUTIONS 13
-#define MAX_DPI 4
-
-#define GENESYS_GL646 646
-#define GENESYS_GL841 841
-#define GENESYS_GL843 843
-#define GENESYS_GL845 845
-#define GENESYS_GL846 846
-#define GENESYS_GL847 847
-#define GENESYS_GL848 848
-#define GENESYS_GL123 123
-#define GENESYS_GL124 124
-
-#define GENESYS_MAX_REGS 256
-
-#define DAC_WOLFSON_UMAX 0
-#define DAC_WOLFSON_ST12 1
-#define DAC_WOLFSON_ST24 2
-#define DAC_WOLFSON_5345 3
-#define DAC_WOLFSON_HP2400 4
-#define DAC_WOLFSON_HP2300 5
-#define DAC_CANONLIDE35 6
-#define DAC_AD_XP200 7 /* Analog Device frontend */
-#define DAC_WOLFSON_XP300 8
-#define DAC_WOLFSON_HP3670 9
-#define DAC_WOLFSON_DSM600 10
-#define DAC_CANONLIDE200 11
-#define DAC_KVSS080 12
-#define DAC_G4050 13
-#define DAC_CANONLIDE110 14
-#define DAC_PLUSTEK_3600 15
-#define DAC_CANONLIDE700 16
-#define DAC_CS8400F 17
-#define DAC_IMG101 18
-#define DAC_PLUSTEK3800 19
-#define DAC_CANONLIDE80 20
-#define DAC_CANONLIDE120 21
-
-#define CCD_UMAX 0
-#define CCD_ST12 1 /* SONY ILX548: 5340 Pixel ??? */
-#define CCD_ST24 2 /* SONY ILX569: 10680 Pixel ??? */
-#define CCD_5345 3
-#define CCD_HP2400 4
-#define CCD_HP2300 5
-#define CCD_CANONLIDE35 6
-#define CIS_XP200 7 /* CIS sensor for Strobe XP200 */
- /* 8 is unused currently */
-#define CCD_HP3670 9
-#define CCD_DP665 10
-#define CCD_ROADWARRIOR 11
-#define CCD_DSMOBILE600 12
-#define CCD_XP300 13
-#define CCD_DP685 14
-#define CIS_CANONLIDE200 15
-#define CIS_CANONLIDE100 16
-#define CCD_KVSS080 17
-#define CCD_G4050 18
-#define CIS_CANONLIDE110 19
-#define CCD_PLUSTEK_3600 20
-#define CCD_HP_N6310 21
-#define CIS_CANONLIDE700 22
-#define CCD_CS4400F 23
-#define CCD_CS8400F 24
-#define CCD_IMG101 25
-#define CCD_PLUSTEK3800 26
-#define CIS_CANONLIDE210 27
-#define CIS_CANONLIDE80 28
-#define CIS_CANONLIDE220 29
-#define CIS_CANONLIDE120 30
-
-#define GPO_UMAX 0
-#define GPO_ST12 1
-#define GPO_ST24 2
-#define GPO_5345 3
-#define GPO_HP2400 4
-#define GPO_HP2300 5
-#define GPO_CANONLIDE35 6
-#define GPO_XP200 7
-#define GPO_XP300 8
-#define GPO_HP3670 9
-#define GPO_DP665 10
-#define GPO_DP685 11
-#define GPO_CANONLIDE200 12
-#define GPO_KVSS080 13
-#define GPO_G4050 14
-#define GPO_CANONLIDE110 15
-#define GPO_PLUSTEK_3600 16
-#define GPO_CANONLIDE210 17
-#define GPO_HP_N6310 18
-#define GPO_CANONLIDE700 19
-#define GPO_CS4400F 20
-#define GPO_CS8400F 21
-#define GPO_IMG101 22
-#define GPO_PLUSTEK3800 23
-#define GPO_CANONLIDE80 24
-#define GPO_CANONLIDE120 25
-
-#define MOTOR_UMAX 0
-#define MOTOR_5345 1
-#define MOTOR_ST24 2
-#define MOTOR_HP2400 3
-#define MOTOR_HP2300 4
-#define MOTOR_CANONLIDE35 5
-#define MOTOR_XP200 6
-#define MOTOR_XP300 7
-#define MOTOR_HP3670 9
-#define MOTOR_DP665 10
-#define MOTOR_ROADWARRIOR 11
-#define MOTOR_DSMOBILE_600 12
-#define MOTOR_CANONLIDE200 13
-#define MOTOR_CANONLIDE100 14
-#define MOTOR_KVSS080 15
-#define MOTOR_G4050 16
-#define MOTOR_CANONLIDE110 17
-#define MOTOR_PLUSTEK_3600 18
-#define MOTOR_CANONLIDE700 19
-#define MOTOR_CS8400F 20
-#define MOTOR_IMG101 21
-#define MOTOR_PLUSTEK3800 22
-#define MOTOR_CANONLIDE210 23
-#define MOTOR_CANONLIDE80 24
-#define MOTOR_CANONLIDE120 25
-
-
-/* Forward typedefs */
-typedef struct Genesys_Device Genesys_Device;
-struct Genesys_Scanner;
-typedef struct Genesys_Calibration_Cache Genesys_Calibration_Cache;
-
-/**
- * Scanner command set description.
- *
- * This description contains parts which are common to all scanners with the
- * same command set, but may have different optical resolution and other
- * parameters.
- */
-typedef struct Genesys_Command_Set
-{
- /** @name Identification */
- /*@{ */
-
- /** Name of this command set */
- SANE_String_Const name;
-
- /*@} */
-
- /** For ASIC initialization */
- SANE_Status (*init) (Genesys_Device * dev);
-
- SANE_Status (*init_regs_for_warmup) (Genesys_Device * dev,
- Genesys_Register_Set * regs,
- int *channels, int *total_size);
- SANE_Status (*init_regs_for_coarse_calibration) (Genesys_Device * dev);
- SANE_Status (*init_regs_for_shading) (Genesys_Device * dev);
- SANE_Status (*init_regs_for_scan) (Genesys_Device * dev);
-
- SANE_Bool (*get_filter_bit) (Genesys_Register_Set * reg);
- SANE_Bool (*get_lineart_bit) (Genesys_Register_Set * reg);
- SANE_Bool (*get_bitset_bit) (Genesys_Register_Set * reg);
- SANE_Bool (*get_gain4_bit) (Genesys_Register_Set * reg);
- SANE_Bool (*get_fast_feed_bit) (Genesys_Register_Set * reg);
-
- SANE_Bool (*test_buffer_empty_bit) (SANE_Byte val);
- SANE_Bool (*test_motor_flag_bit) (SANE_Byte val);
-
- int (*bulk_full_size) (void);
-
- SANE_Status (*set_fe) (Genesys_Device * dev, uint8_t set);
- SANE_Status (*set_powersaving) (Genesys_Device * dev, int delay);
- SANE_Status (*save_power) (Genesys_Device * dev, SANE_Bool enable);
-
- void (*set_motor_power) (Genesys_Register_Set * regs, SANE_Bool set);
- void (*set_lamp_power) (Genesys_Device * dev,
- Genesys_Register_Set * regs,
- SANE_Bool set);
-
- SANE_Status (*begin_scan) (Genesys_Device * dev,
- Genesys_Register_Set * regs,
- SANE_Bool start_motor);
- SANE_Status (*end_scan) (Genesys_Device * dev,
- Genesys_Register_Set * regs,
- SANE_Bool check_stop);
-
- /**
- * Send gamma tables to ASIC
- */
- SANE_Status (*send_gamma_table) (Genesys_Device * dev);
-
- SANE_Status (*search_start_position) (Genesys_Device * dev);
- SANE_Status (*offset_calibration) (Genesys_Device * dev);
- SANE_Status (*coarse_gain_calibration) (Genesys_Device * dev, int dpi);
- SANE_Status (*led_calibration) (Genesys_Device * dev);
-
- SANE_Status (*slow_back_home) (Genesys_Device * dev, SANE_Bool wait_until_home);
- SANE_Status (*rewind) (Genesys_Device * dev);
-
- SANE_Status (*bulk_write_register) (Genesys_Device * dev,
- Genesys_Register_Set * reg,
- size_t elems);
- SANE_Status (*bulk_write_data) (Genesys_Device * dev, uint8_t addr,
- uint8_t * data, size_t len);
-
- SANE_Status (*bulk_read_data) (Genesys_Device * dev, uint8_t addr,
- uint8_t * data, size_t len);
-
- /* Updates hardware sensor information in Genesys_Scanner.val[].
- If possible, just get information for given option.
- The sensor state in Genesys_Scanner.val[] should be merged with the
- new sensor state, using the information that was last read by the frontend
- in Genesys_Scanner.last_val[], in such a way that a button up/down
- relative to Genesys_Scanner.last_val[] is not lost.
- */
- SANE_Status (*update_hardware_sensors) (struct Genesys_Scanner * s);
-
- /* functions for sheetfed scanners */
- /**
- * load document into scanner
- */
- SANE_Status (*load_document) (Genesys_Device * dev);
- /**
- * detects is the scanned document has left scanner. In this
- * case it updates the amount of data to read and set up
- * flags in the dev struct
- */
- SANE_Status (*detect_document_end) (Genesys_Device * dev);
- /**
- * eject document from scanner
- */
- SANE_Status (*eject_document) (Genesys_Device * dev);
- /**
- * search for an black or white area in forward or reverse
- * direction */
- SANE_Status (*search_strip) (Genesys_Device * dev, SANE_Bool forward, SANE_Bool black);
-
- SANE_Status (*is_compatible_calibration) (
- Genesys_Device * dev,
- Genesys_Calibration_Cache *cache,
- SANE_Bool for_overwrite);
-
- /* functions for transparency adapter */
- /**
- * move scanning head to transparency adapter
- */
- SANE_Status (*move_to_ta) (Genesys_Device * dev);
-
- /**
- * write shading data calibration to ASIC
- */
- SANE_Status (*send_shading_data) (Genesys_Device * dev, uint8_t * data, int size);
-
- /**
- * calculate current scan setup
- */
- SANE_Status (*calculate_current_setup) (Genesys_Device * dev);
-
- /**
- * cold boot init function
- */
- SANE_Status (*asic_boot) (Genesys_Device * dev, SANE_Bool cold);
-
- /**
- * Scan register setting interface
- */
- SANE_Status (*init_scan_regs) (Genesys_Device * dev,
- Genesys_Register_Set * reg,
- float xres,
- float yres,
- float startx,
- float starty,
- float pixels,
- float lines,
- unsigned int depth,
- unsigned int channels,
- int scan_method,
- int scan_mode,
- int color_filter,
- unsigned int flags);
-
-} Genesys_Command_Set;
-
-/** @brief structure to describe a scanner model
- * This structure describes a model. It is composed of information on the
- * sensor, the motor, scanner geometry and flags to drive operation.
- */
-typedef struct Genesys_Model
-{
- SANE_String_Const name;
- SANE_String_Const vendor;
- SANE_String_Const model;
-
- SANE_Int asic_type; /* ASIC type gl646 or gl841 */
- Genesys_Command_Set *cmd_set; /* pointers to low level functions */
-
- SANE_Int xdpi_values[MAX_RESOLUTIONS]; /* possible x resolutions */
- SANE_Int ydpi_values[MAX_RESOLUTIONS]; /* possible y resolutions */
- SANE_Int bpp_gray_values[MAX_DPI]; /* possible depths in gray mode */
- SANE_Int bpp_color_values[MAX_DPI]; /* possible depths in color mode */
-
- SANE_Fixed x_offset; /* Start of scan area in mm */
- SANE_Fixed y_offset; /* Start of scan area in mm (Amount of
- feeding needed to get to the medium) */
- SANE_Fixed x_size; /* Size of scan area in mm */
- SANE_Fixed y_size; /* Size of scan area in mm */
-
- SANE_Fixed y_offset_calib; /* Start of white strip in mm */
- SANE_Fixed x_offset_mark; /* Start of black mark in mm */
-
- SANE_Fixed x_offset_ta; /* Start of scan area in TA mode in mm */
- SANE_Fixed y_offset_ta; /* Start of scan area in TA mode in mm */
- SANE_Fixed x_size_ta; /* Size of scan area in TA mode in mm */
- SANE_Fixed y_size_ta; /* Size of scan area in TA mode in mm */
-
- SANE_Fixed y_offset_calib_ta; /* Start of white strip in TA mode in mm */
-
- SANE_Fixed post_scan; /* Size of scan area after paper sensor stops
- sensing document in mm */
- SANE_Fixed eject_feed; /* Amount of feeding needed to eject document
- after finishing scanning in mm */
-
- /* Line-distance correction (in pixel at optical_ydpi) for CCD scanners */
- SANE_Int ld_shift_r; /* red */
- SANE_Int ld_shift_g; /* green */
- SANE_Int ld_shift_b; /* blue */
-
- Genesys_Color_Order line_mode_color_order; /* Order of the CCD/CIS colors */
-
- SANE_Bool is_cis; /* Is this a CIS or CCD scanner? */
- SANE_Bool is_sheetfed; /* Is this sheetfed scanner? */
-
- SANE_Int ccd_type; /* which SENSOR type do we have ? */
- SANE_Int dac_type; /* which DAC do we have ? */
- SANE_Int gpo_type; /* General purpose output type */
- SANE_Int motor_type; /* stepper motor type */
- SANE_Word flags; /* Which hacks are needed for this scanner? */
- SANE_Word buttons; /* Button flags, described existing buttons for the model */
- /*@} */
- SANE_Int shading_lines; /* how many lines are used for shading calibration */
- SANE_Int search_lines; /* how many lines are used to search start position */
-} Genesys_Model;
-
-#define SCAN_METHOD_FLATBED 0 /**< normal scan method */
-#define SCAN_METHOD_TRANSPARENCY 2 /**< scan using transparency adaptor */
-#define SCAN_METHOD_NEGATIVE 0x88 /**< scan using negative adaptor */
-
-#define SCAN_MODE_LINEART 0 /**< lineart scan mode */
-#define SCAN_MODE_HALFTONE 1 /**< halftone scan mode */
-#define SCAN_MODE_GRAY 2 /**< gray scan mode */
-#define SCAN_MODE_COLOR 4 /**< color scan mode */
-
-typedef struct
-{
- int scan_method; /* todo: change >=2: Transparency, 0x88: negative film */
- int scan_mode; /* todo: change 0,1 = lineart, halftone; 2 = gray, 3 = 3pass color, 4=single pass color */
- int xres; /**< horizontal dpi */
- int yres; /**< vertical dpi */
-
- double tl_x; /* x start on scan table in mm */
- double tl_y; /* y start on scan table in mm */
-
- unsigned int lines; /**< number of lines at scan resolution */
- unsigned int pixels; /**< number of pixels at scan resolution */
-
- unsigned int depth;/* bit depth of the scan */
-
- /* todo : remove these fields ? */
- int exposure_time;
-
- unsigned int color_filter;
-
- /**< true if scan is true gray, false if monochrome scan */
- int true_gray;
-
- /**< lineart threshold */
- int threshold;
-
- /**< lineart threshold curve for dynamic rasterization */
- int threshold_curve;
-
- /**< Disable interpolation for xres<yres*/
- int disable_interpolation;
-
- /**< Use double x resolution internally to provide better
- * quality */
- int double_xres;
-
- /**< true is lineart is generated from gray data by
- * the dynamic rasterization algo */
- int dynamic_lineart;
-
- /**< value for contrast enhancement in the [-100..100] range */
- int contrast;
-
- /**< value for brightness enhancement in the [-100..100] range */
- int brightness;
-
- /**< cahe entries expiration time */
- int expiration_time;
-} Genesys_Settings;
-
-typedef struct Genesys_Current_Setup
-{
- int pixels; /* pixel count expected from scanner */
- int lines; /* line count expected from scanner */
- int depth; /* depth expected from scanner */
- int channels; /* channel count expected from scanner */
- int scan_method; /* scanning method: flatbed or XPA */
- int exposure_time; /* used exposure time */
- float xres; /* used xres */
- float yres; /* used yres*/
- SANE_Bool half_ccd; /* half ccd mode */
- SANE_Int stagger;
- SANE_Int max_shift; /* max shift of any ccd component, including staggered pixels*/
-} Genesys_Current_Setup;
-
-typedef struct Genesys_Buffer
-{
- SANE_Byte *buffer;
- size_t size;
- size_t pos; /* current position in read buffer */
- size_t avail; /* data bytes currently in buffer */
-} Genesys_Buffer;
-
-struct Genesys_Calibration_Cache
-{
- Genesys_Current_Setup used_setup;/* used to check if entry is compatible */
- time_t last_calibration;
-
- Genesys_Frontend frontend;
- Genesys_Sensor sensor;
-
- size_t calib_pixels;
- size_t calib_channels;
- size_t average_size;
- uint8_t *white_average_data;
- uint8_t *dark_average_data;
-
- struct Genesys_Calibration_Cache *next;
-};
-
-/**
- * Describes the current device status for the backend
- * session. This should be more accurately called
- * Genesys_Session .
- */
-struct Genesys_Device
-{
- SANE_Int dn;
- SANE_Word vendorId; /**< USB vendor identifier */
- SANE_Word productId; /**< USB product identifier */
- SANE_Int usb_mode; /**< USB mode: 1 for USB 1.1, 2 for USB 2.0,
- 0 unset and -1 for fake USB device */
- SANE_String file_name;
- SANE_String calib_file;
- Genesys_Model *model;
-
- Genesys_Register_Set reg[256];
- Genesys_Register_Set calib_reg[256];
- Genesys_Settings settings;
- Genesys_Frontend frontend;
- Genesys_Sensor sensor;
- Genesys_Gpo gpo;
- Genesys_Motor motor;
- uint16_t slope_table0[256];
- uint16_t slope_table1[256];
- uint8_t control[6];
- time_t init_date;
-
- size_t average_size;
- size_t calib_pixels; /**< number of pixels used during shading calibration */
- size_t calib_lines; /**< number of lines used during shading calibration */
- size_t calib_channels;
- size_t calib_resolution;
- uint8_t *white_average_data;
- uint8_t *dark_average_data;
- uint16_t dark[3];
-
- SANE_Bool already_initialized;
- SANE_Int scanhead_position_in_steps;
- SANE_Int lamp_off_time;
-
- SANE_Bool read_active;
- SANE_Bool parking; /**< signal wether the park command has been issued */
- SANE_Bool document; /**< for sheetfed scanner's, is TRUE when there
- is a document in the scanner */
-
- Genesys_Buffer read_buffer;
- Genesys_Buffer lines_buffer;
- Genesys_Buffer shrink_buffer;
- Genesys_Buffer out_buffer;
- Genesys_Buffer binarize_buffer; /**< buffer for digital lineart from gray data */
- Genesys_Buffer local_buffer; /**< local buffer for gray data during dynamix lineart */
-
- size_t read_bytes_left; /**< bytes to read from scanner */
-
- size_t total_bytes_read; /**< total bytes read sent to frontend */
- size_t total_bytes_to_read; /**< total bytes read to be sent to frontend */
- size_t wpl; /**< asic's word per line */
-
- Genesys_Current_Setup current_setup; /* contains the real used values */
-
- /**< look up table used in dynamic rasterization */
- unsigned char lineart_lut[256];
-
- Genesys_Calibration_Cache *calibration_cache;
-
- struct Genesys_Device *next;
-
- SANE_Int ld_shift_r; /**< used red line-distance shift*/
- SANE_Int ld_shift_g; /**< used green line-distance shift*/
- SANE_Int ld_shift_b; /**< used blue line-distance shift*/
- int segnb; /**< number of segments composing the sensor */
- int line_interp; /**< number of lines used in line interpolation */
- int line_count; /**< number of scan lines used during scan */
- size_t bpl; /**< bytes per full scan widthline */
- size_t dist; /**< bytes distance between an odd and an even pixel */
- size_t len; /**< number of even pixels */
- size_t cur; /**< current pixel position within sub window */
- size_t skip; /**< number of bytes to skip at start of line */
- size_t *order; /**< array describing the order of the sub-segments of the sensor */
- Genesys_Buffer oe_buffer; /**< buffer to handle even/odd data */
-
- SANE_Bool buffer_image; /**< when true the scanned picture is first buffered
- * to allow software image enhancements */
- SANE_Byte *img_buffer; /**< image buffer where the scanned picture is stored */
-
- FILE *binary; /**< binary logger file */
-};
-
-typedef struct Genesys_USB_Device_Entry
-{
- SANE_Word vendor; /**< USB vendor identifier */
- SANE_Word product; /**< USB product identifier */
- Genesys_Model *model; /**< Scanner model information */
-} Genesys_USB_Device_Entry;
-
-/**
- * structure for motor database
- */
-typedef struct {
- int motor_type; /**< motor id */
- int exposure; /**< exposure for the slope table */
- int step_type; /**< default step type for given exposure */
- uint32_t *table; /**< 0 terminated slope table at full step */
-} Motor_Profile;
-
-#define FULL_STEP 0
-#define HALF_STEP 1
-#define QUARTER_STEP 2
-#define EIGHTH_STEP 3
-
-#define SLOPE_TABLE_SIZE 1024
-
-#define SCAN_TABLE 0 /* table 1 at 0x4000 for gl124 */
-#define BACKTRACK_TABLE 1 /* table 2 at 0x4800 for gl124 */
-#define STOP_TABLE 2 /* table 3 at 0x5000 for gl124 */
-#define FAST_TABLE 3 /* table 4 at 0x5800 for gl124 */
-#define HOME_TABLE 4 /* table 5 at 0x6000 for gl124 */
-
-#define SCAN_FLAG_SINGLE_LINE 0x001
-#define SCAN_FLAG_DISABLE_SHADING 0x002
-#define SCAN_FLAG_DISABLE_GAMMA 0x004
-#define SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE 0x008
-#define SCAN_FLAG_IGNORE_LINE_DISTANCE 0x010
-#define SCAN_FLAG_USE_OPTICAL_RES 0x020
-#define SCAN_FLAG_DISABLE_LAMP 0x040
-#define SCAN_FLAG_DYNAMIC_LINEART 0x080
-#define SCAN_FLAG_CALIBRATION 0x100
-#define SCAN_FLAG_FEEDING 0x200
-#define SCAN_FLAG_USE_XPA 0x400
-#define SCAN_FLAG_ENABLE_LEDADD 0x800
-#define MOTOR_FLAG_AUTO_GO_HOME 0x01
-#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 0x02
-#define MOTOR_FLAG_FEED 0x04
-#define MOTOR_FLAG_USE_XPA 0x08
-
-/** @name "Optical flags" */
-/*@{ optical flags available when setting up sensor for scan */
-
-#define OPTICAL_FLAG_DISABLE_GAMMA 0x01 /**< disable gamma correction */
-#define OPTICAL_FLAG_DISABLE_SHADING 0x02 /**< disable shading correction */
-#define OPTICAL_FLAG_DISABLE_LAMP 0x04 /**< turn off lamp */
-#define OPTICAL_FLAG_ENABLE_LEDADD 0x08 /**< enable true CIS gray by enabling LED addition */
-#define OPTICAL_FLAG_DISABLE_DOUBLE 0x10 /**< disable automatic x-direction double data expansion */
-#define OPTICAL_FLAG_STAGGER 0x20 /**< disable stagger correction */
-#define OPTICAL_FLAG_USE_XPA 0x40 /**< use XPA lamp rather than regular one */
-
-/*@} */
-
-/*--------------------------------------------------------------------------*/
-/* common functions needed by low level specific functions */
-/*--------------------------------------------------------------------------*/
-
-extern Genesys_Register_Set *sanei_genesys_get_address (Genesys_Register_Set * regs, uint16_t addr);
-
-extern SANE_Byte
-sanei_genesys_read_reg_from_set (Genesys_Register_Set * regs, uint16_t address);
-
-extern void
-sanei_genesys_set_reg_from_set (Genesys_Register_Set * regs, uint16_t address, SANE_Byte value);
-
-extern SANE_Status sanei_genesys_init_cmd_set (Genesys_Device * dev);
-
-extern SANE_Status
-sanei_genesys_read_register (Genesys_Device * dev, uint16_t reg, uint8_t * val);
-
-extern SANE_Status
-sanei_genesys_write_register (Genesys_Device * dev, uint16_t reg, uint8_t val);
-
-extern SANE_Status
-sanei_genesys_read_hregister (Genesys_Device * dev, uint16_t reg, uint8_t * val);
-
-extern SANE_Status
-sanei_genesys_write_hregister (Genesys_Device * dev, uint16_t reg, uint8_t val);
-
-extern SANE_Status
-sanei_genesys_bulk_write_register (Genesys_Device * dev,
- Genesys_Register_Set * reg,
- size_t elems);
-
-extern SANE_Status sanei_genesys_write_0x8c (Genesys_Device * dev, uint8_t index, uint8_t val);
-
-extern SANE_Status sanei_genesys_get_status (Genesys_Device * dev, uint8_t * status);
-
-extern void sanei_genesys_print_status (uint8_t val);
-
-extern SANE_Status
-sanei_genesys_write_ahb (SANE_Int dn, int usb_mode, uint32_t addr, uint32_t size, uint8_t * data);
-
-extern void sanei_genesys_init_fe (Genesys_Device * dev);
-
-extern void sanei_genesys_init_structs (Genesys_Device * dev);
-
-extern SANE_Status
-sanei_genesys_init_shading_data (Genesys_Device * dev, int pixels_per_line);
-
-extern SANE_Status sanei_genesys_read_valid_words (Genesys_Device * dev,
- unsigned int *steps);
-
-extern SANE_Status sanei_genesys_read_scancnt (Genesys_Device * dev,
- unsigned int *steps);
-
-extern SANE_Status sanei_genesys_read_feed_steps (Genesys_Device * dev,
- unsigned int *steps);
-
-extern void
-sanei_genesys_calculate_zmode2 (SANE_Bool two_table,
- uint32_t exposure_time,
- uint16_t * slope_table,
- int reg21,
- int move, int reg22, uint32_t * z1,
- uint32_t * z2);
-
-extern void
-sanei_genesys_calculate_zmode (uint32_t exposure_time,
- uint32_t steps_sum,
- uint16_t last_speed, uint32_t feedl,
- uint8_t fastfed, uint8_t scanfed,
- uint8_t fwdstep, uint8_t tgtime,
- uint32_t * z1, uint32_t * z2);
-
-extern SANE_Status
-sanei_genesys_set_buffer_address (Genesys_Device * dev, uint32_t addr);
-
-/** @brief Reads data from frontend register.
- * Reads data from the given frontend register. May be used to query
- * analog frontend status by reading the right register.
- */
-extern SANE_Status
-sanei_genesys_fe_read_data (Genesys_Device * dev, uint8_t addr,
- uint16_t *data);
-/** @brief Write data to frontend register.
- * Writes data to analog frontend register at the given address.
- * The use and address of registers change from model to model.
- */
-extern SANE_Status
-sanei_genesys_fe_write_data (Genesys_Device * dev, uint8_t addr,
- uint16_t data);
-
-extern SANE_Int
-sanei_genesys_exposure_time2 (Genesys_Device * dev,
- float ydpi, int step_type, int endpixel,
- int led_exposure, int power_mode);
-
-extern SANE_Int
-sanei_genesys_exposure_time (Genesys_Device * dev, Genesys_Register_Set * reg,
- int xdpi);
-extern SANE_Int
-sanei_genesys_generate_slope_table (uint16_t * slope_table, unsigned int max_steps,
- unsigned int use_steps, uint16_t stop_at,
- uint16_t vstart, uint16_t vend,
- unsigned int steps, double g,
- unsigned int *used_steps, unsigned int *vfinal);
-
-extern SANE_Int
-sanei_genesys_create_slope_table (Genesys_Device * dev,
- uint16_t * slope_table, int steps,
- int step_type, int exposure_time,
- SANE_Bool same_speed, double yres,
- int power_mode);
-
-SANE_Int
-sanei_genesys_create_slope_table3 (Genesys_Device * dev,
- uint16_t * slope_table, int max_step,
- unsigned int use_steps,
- int step_type, int exposure_time,
- double yres,
- unsigned int *used_steps,
- unsigned int *final_exposure,
- int power_mode);
-
-extern void
-sanei_genesys_create_gamma_table (uint16_t * gamma_table, int size,
- float maximum, float gamma_max,
- float gamma);
-
-extern SANE_Status sanei_genesys_send_gamma_table (Genesys_Device * dev);
-
-extern SANE_Status sanei_genesys_start_motor (Genesys_Device * dev);
-
-extern SANE_Status sanei_genesys_stop_motor (Genesys_Device * dev);
-
-extern SANE_Status
-sanei_genesys_search_reference_point (Genesys_Device * dev, uint8_t * data,
- int start_pixel, int dpi, int width,
- int height);
-
-extern SANE_Status
-sanei_genesys_write_pnm_file (char *filename, uint8_t * data, int depth,
- int channels, int pixels_per_line, int lines);
-
-extern SANE_Status
-sanei_genesys_test_buffer_empty (Genesys_Device * dev, SANE_Bool * empty);
-
-extern SANE_Status
-sanei_genesys_read_data_from_scanner (Genesys_Device * dev, uint8_t * data,
- size_t size);
-
-extern SANE_Status
-sanei_genesys_buffer_alloc(Genesys_Buffer * buf, size_t size);
-
-extern SANE_Status
-sanei_genesys_buffer_free(Genesys_Buffer * buf);
-
-extern SANE_Byte *
-sanei_genesys_buffer_get_write_pos(Genesys_Buffer * buf, size_t size);
-
-extern SANE_Byte *
-sanei_genesys_buffer_get_read_pos(Genesys_Buffer * buf);
-
-extern SANE_Status
-sanei_genesys_buffer_produce(Genesys_Buffer * buf, size_t size);
-
-extern SANE_Status
-sanei_genesys_buffer_consume(Genesys_Buffer * buf, size_t size);
-
-extern SANE_Status
-sanei_genesys_set_double(Genesys_Register_Set *regs, uint16_t addr, uint16_t value);
-
-extern SANE_Status
-sanei_genesys_set_triple(Genesys_Register_Set *regs, uint16_t addr, uint32_t value);
-
-extern SANE_Status
-sanei_genesys_get_double(Genesys_Register_Set *regs, uint16_t addr, uint16_t *value);
-
-extern SANE_Status
-sanei_genesys_get_triple(Genesys_Register_Set *regs, uint16_t addr, uint32_t *value);
-
-extern SANE_Status
-sanei_genesys_wait_for_home(Genesys_Device *dev);
-
-extern SANE_Status
-sanei_genesys_asic_init(Genesys_Device *dev, SANE_Bool cold);
-
-extern
-int sanei_genesys_compute_dpihw(Genesys_Device *dev, int xres);
-
-extern
-Motor_Profile *sanei_genesys_get_motor_profile(Motor_Profile *motors, int motor_type, int exposure);
-
-extern
-int sanei_genesys_compute_step_type(Motor_Profile *motors, int motor_type, int exposure);
-
-extern
-int sanei_genesys_slope_table(uint16_t *slope, int *steps, int dpi, int exposure, int base_dpi, int step_type, int factor, int motor_type, Motor_Profile *motors);
-
-/** @brief find lowest motor resolution for the device.
- * Parses the resolution list for motor and
- * returns the lowest value.
- * @param dev for which to find the lowest motor resolution
- * @return the lowest available motor resolution for the device
- */
-extern
-int sanei_genesys_get_lowest_ydpi(Genesys_Device *dev);
-
-/** @brief find lowest resolution for the device.
- * Parses the resolution list for motor and sensor and
- * returns the lowest value.
- * @param dev for which to find the lowest resolution
- * @return the lowest available resolution for the device
- */
-extern
-int sanei_genesys_get_lowest_dpi(Genesys_Device *dev);
-
-/**
- * reads previously cached calibration data
- * from file
- */
-extern SANE_Status
-sanei_genesys_read_calibration (Genesys_Device * dev);
-
-extern SANE_Status
-sanei_genesys_is_compatible_calibration (Genesys_Device * dev,
- Genesys_Calibration_Cache * cache,
- int for_overwrite);
-
-/** @brief compute maximum line distance shift
- * compute maximum line distance shift for the motor and sensor
- * combination. Line distance shift is the distance between different
- * color component of CCD sensors. Since these components aren't at
- * the same physical place, they scan diffrent lines. Software must
- * take this into account to accurately mix color data.
- * @param dev device session to compute max_shift for
- * @param channels number of color channels for the scan
- * @param yres motor resolution used for the scan
- * @param flags scan flags
- * @return 0 or line distance shift
- */
-extern
-int sanei_genesys_compute_max_shift(Genesys_Device *dev,
- int channels,
- int yres,
- int flags);
-
-extern SANE_Status
-sanei_genesys_load_lut (unsigned char * lut,
- int in_bits,
- int out_bits,
- int out_min,
- int out_max,
- int slope,
- int offset);
-
-extern SANE_Status
-sanei_genesys_generate_gamma_buffer(Genesys_Device * dev,
- int bits,
- int max,
- int size,
- uint8_t *gamma);
-
-#ifdef UNIT_TESTING
-SANE_Status
-genesys_send_offset_and_shading (Genesys_Device * dev,
- uint8_t * data,
- int size);
-
-void
-genesys_average_data (uint8_t * average_data,
- uint8_t * calibration_data,
- uint32_t lines,
- uint32_t pixel_components_per_line);
-
-void
-compute_averaged_planar (Genesys_Device * dev,
- uint8_t * shading_data,
- unsigned int pixels_per_line,
- unsigned int words_per_color,
- unsigned int channels,
- unsigned int o,
- unsigned int coeff,
- unsigned int target_bright,
- unsigned int target_dark);
-
-
-void
-compute_coefficients (Genesys_Device * dev,
- uint8_t * shading_data,
- unsigned int pixels_per_line,
- unsigned int channels,
- unsigned int cmat[3],
- int offset,
- unsigned int coeff,
- unsigned int target);
-
-void
-compute_planar_coefficients (Genesys_Device * dev,
- uint8_t * shading_data,
- unsigned int factor,
- unsigned int pixels_per_line,
- unsigned int words_per_color,
- unsigned int channels,
- unsigned int cmat[3],
- unsigned int offset,
- unsigned int coeff,
- unsigned int target);
-
-void
-compute_shifted_coefficients (Genesys_Device * dev,
- uint8_t * shading_data,
- unsigned int pixels_per_line,
- unsigned int channels,
- unsigned int cmat[3],
- int offset,
- unsigned int coeff,
- unsigned int target_dark,
- unsigned int target_bright,
- unsigned int patch_size); /* contigous extent */
-
-SANE_Status
-probe_genesys_devices (void);
-
-SANE_Status genesys_flatbed_calibration (Genesys_Device *dev);
-
-SANE_Status genesys_send_shading_coefficient (Genesys_Device *dev);
-#endif
-
-
-/*---------------------------------------------------------------------------*/
-/* ASIC specific functions declarations */
-/*---------------------------------------------------------------------------*/
-extern SANE_Status sanei_gl646_init_cmd_set (Genesys_Device * dev);
-extern SANE_Status sanei_gl841_init_cmd_set (Genesys_Device * dev);
-extern SANE_Status sanei_gl843_init_cmd_set (Genesys_Device * dev);
-extern SANE_Status sanei_gl846_init_cmd_set (Genesys_Device * dev);
-extern SANE_Status sanei_gl847_init_cmd_set (Genesys_Device * dev);
-extern SANE_Status sanei_gl124_init_cmd_set (Genesys_Device * dev);
-
-#endif /* not GENESYS_LOW_H */