diff options
Diffstat (limited to 'backend/mustek_pp_cis.h')
-rw-r--r-- | backend/mustek_pp_cis.h | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/backend/mustek_pp_cis.h b/backend/mustek_pp_cis.h new file mode 100644 index 0000000..2a38d89 --- /dev/null +++ b/backend/mustek_pp_cis.h @@ -0,0 +1,273 @@ +/* sane - Scanner Access Now Easy. + + Copyright (C) 2001-2003 Eddy De Greef <eddy_de_greef at scarlet dot be> + 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. + + This file implements a SANE backend for Mustek PP flatbed _CIS_ scanners. +*/ + +#ifndef mustek_pp_cis_h +#define mustek_pp_cis_h + +#include "../include/sane/sane.h" + +/****************************************************************************** + * Read register symbols. + *****************************************************************************/ +typedef enum { + MA1015R_ASIC = 0x00, + MA1015R_SCAN_VAL = 0x01, + MA1015R_MOTOR = 0x02, + MA1015R_BANK_COUNT = 0x03 + } +Mustek_PP_1015R_reg; + +/****************************************************************************** + * Read register bitmask symbols. + *****************************************************************************/ +typedef enum { + MA1015B_MOTOR_HOME = 0x01, + MA1015B_MOTOR_STABLE = 0x03 + } +Mustek_PP_1015R_bit; + +/****************************************************************************** + * Write register symbols: (bank number << 4) + register number. + *****************************************************************************/ + +typedef enum { + MA1015W_RED_REF = 0x00, + MA1015W_GREEN_REF = 0x01, + MA1015W_BLUE_REF = 0x02, + MA1015W_DPI_CONTROL = 0x03, + + MA1015W_BYTE_COUNT_HB = 0x10, + MA1015W_BYTE_COUNT_LB = 0x11, + MA1015W_SKIP_COUNT = 0x12, + MA1015W_EXPOSE_TIME = 0x13, + + MA1015W_SRAM_SOURCE_PC = 0x20, + MA1015W_MOTOR_CONTROL = 0x21, + MA1015W_UNKNOWN_42 = 0x22, + MA1015W_UNKNOWN_82 = 0x23, + + MA1015W_POWER_ON_DELAY = 0x30, + MA1015W_CCD_TIMING = 0x31, + MA1015W_CCD_TIMING_ADJ = 0x32, + MA1015W_RIGHT_BOUND = 0x33 + } +Mustek_PP_1015W_reg; + + +/****************************************************************************** + * Mustek MA1015 register tracing structure. + * Can be used to trace the status of the registers of the MA1015 chipset + * during debugging. Most fields are not used in production code. + *****************************************************************************/ +typedef struct Mustek_PP_1015_Registers +{ + SANE_Byte in_regs[4]; + SANE_Byte out_regs[4][4]; + SANE_Byte channel; + + Mustek_PP_1015R_reg current_read_reg; + SANE_Int read_count; + + Mustek_PP_1015W_reg current_write_reg; /* always used */ + SANE_Int write_count; +} +Mustek_PP_1015_Registers; + + +/****************************************************************************** + * CIS information + *****************************************************************************/ +typedef struct Mustek_PP_CIS_Info +{ + /* Expose time (= time the lamp is on ?) */ + SANE_Byte exposeTime; + + /* Power-on delay (= time between lamp on and start of capturing ?) */ + SANE_Byte powerOnDelay[3]; + + /* Motor step control */ + SANE_Byte phaseType; + + /* Use 8K bank or 4K bank */ + SANE_Bool use8KBank; + + /* High resolution (600 DPI) or not (300 DPI) */ + SANE_Bool highRes; + + /* delay between pixels; reading too fast causes stability problems */ + SANE_Int delay; + + /* Register representation */ + Mustek_PP_1015_Registers regs; + + /* Current color channel */ + SANE_Int channel; + + /* Blocks motor movements during calibration */ + SANE_Bool dontMove; + + /* Prevents read increment the before the first read */ + SANE_Bool dontIncRead; + + /* Controls whether or not calibration parameters are transmitted + during CIS configuration */ + SANE_Bool setParameters; + + /* Number of lines to skip to reach the origin (used during calibration) */ + SANE_Int skipsToOrigin; + + /* Physical resolution of the CIS: either 300 or 600 DPI */ + SANE_Int cisRes; + + /* CCD mode (color/grayscale/lineart) */ + SANE_Int mode; + + /* how many positions to skip until scan area starts @ max res */ + SANE_Int skipimagebytes; + + /* how many image bytes to scan @ max res */ + SANE_Int imagebytes; + + /* total skip, adjusted to resolution */ + SANE_Int adjustskip; + + /* current resolution */ + SANE_Int res; + + /* current horizontal hardware resolution */ + SANE_Int hw_hres; + + /* current vertical hardware resolution */ + SANE_Int hw_vres; + + /* how many positions to scan for one pixel */ + SANE_Int hres_step; + + /* how many lines to scan for one scanline */ + SANE_Int line_step; + + /* inversion */ + SANE_Bool invert; + +} Mustek_PP_CIS_Info; + +struct Mustek_pp_Handle; +typedef struct Mustek_PP_CIS_dev +{ + /* device descriptor */ + struct Mustek_pp_Handle *desc; + + /* model identification (600CP/1200CP/1200CP+) */ + SANE_Int model; + + /* CIS status */ + Mustek_PP_CIS_Info CIS; + + /* used during calibration & return_home */ + Mustek_PP_CIS_Info Saved_CIS; + + /* bank count */ + int bank_count; + + /* those are used to count the hardware line the scanner is at, the + line the current bank is at and the lines we've scanned */ + int line; + int line_diff; + int ccd_line; + int lines_left; + + /* Configuration parameters that the user can calibrate */ + /* Starting position at the top */ + SANE_Int top_skip; + /* Use fast skipping method for head movements ? (default: yes) */ + SANE_Bool fast_skip; + /* Discrimination value to choose between black and white */ + SANE_Byte bw_limit; + /* Run in calibration mode ? (default: no) */ + SANE_Bool calib_mode; + /* Extra delay between engine commands (ms). Default: zero. */ + SANE_Int engine_delay; + + /* temporary buffer for 1 line (of one color) */ + SANE_Byte *tmpbuf; + + /* calibration buffers (low cut, high cut) */ + SANE_Byte *calib_low[3]; + SANE_Byte *calib_hi[3]; + + /* Number of pixels in calibration buffers (<= number of pixels to scan) */ + int calib_pixels; + +} Mustek_PP_CIS_dev; + +#define CIS_AVERAGE_NONE(dev) Mustek_PP_1015_send_command(dev, 0x05) +#define CIS_AVERAGE_TWOPIXEL(dev) Mustek_PP_1015_send_command(dev, 0x15) +#define CIS_AVERAGE_THREEPIXEL(dev) Mustek_PP_1015_send_command(dev, 0x35) +#define CIS_WIDTH_4K(dev) Mustek_PP_1015_send_command(dev, 0x05) +#define CIS_WIDTH_8K(dev) Mustek_PP_1015_send_command(dev, 0x45) +#define CIS_STOP_TOGGLE(dev) Mustek_PP_1015_send_command(dev, 0x85) + +#define CIS_PIP_AS_INPUT(dev) Mustek_PP_1015_send_command(dev, 0x46) +#define CIS_PIP_AS_OUTPUT_0(dev) Mustek_PP_1015_send_command(dev, 0x06) +#define CIS_PIP_AS_OUTPUT_1(dev) Mustek_PP_1015_send_command(dev, 0x16) +#define CIS_POP_AS_INPUT(dev) Mustek_PP_1015_send_command(dev, 0x86) +#define CIS_POP_AS_OUTPUT_0(dev) Mustek_PP_1015_send_command(dev, 0x06) +#define CIS_POP_AS_OUTPUT_1(dev) Mustek_PP_1015_send_command(dev, 0x26) + +#define CIS_INC_READ(dev) Mustek_PP_1015_send_command(dev, 0x07) +#define CIS_CLEAR_WRITE_BANK(dev) Mustek_PP_1015_send_command(dev, 0x17) +#define CIS_CLEAR_READ_BANK(dev) Mustek_PP_1015_send_command(dev, 0x27) +#define CIS_CLEAR_FULLFLAG(dev) Mustek_PP_1015_send_command(dev, 0x37) +#define CIS_POWER_ON(dev) Mustek_PP_1015_send_command(dev, 0x47) +#define CIS_POWER_OFF(dev) Mustek_PP_1015_send_command(dev, 0x57) +#define CIS_CLEAR_WRITE_ADDR(dev) Mustek_PP_1015_send_command(dev, 0x67) +#define CIS_CLEAR_TOGGLE(dev) Mustek_PP_1015_send_command(dev, 0x77) + +#define CIS_NO(dev) Mustek_PP_1015_send_command(dev, 0x08) +#define CIS_OST_POS(dev) Mustek_PP_1015_send_command(dev, 0x18) +#define CIS_OST_TYP(dev) Mustek_PP_1015_send_command(dev, 0x28) +#define CIS_OP_MOD_0(dev) Mustek_PP_1015_send_command(dev, 0x48) +#define CIS_OP_MOD_1(dev) Mustek_PP_1015_send_command(dev, 0x88) + +#endif /* __mustek_pp_cis_h */ |