summaryrefslogtreecommitdiff
path: root/backend/hp4200.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/hp4200.h')
-rw-r--r--backend/hp4200.h266
1 files changed, 266 insertions, 0 deletions
diff --git a/backend/hp4200.h b/backend/hp4200.h
new file mode 100644
index 0000000..13c0d7f
--- /dev/null
+++ b/backend/hp4200.h
@@ -0,0 +1,266 @@
+/*
+ Copyright (C) 2000 by Adrian Perez Jorge
+
+ 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.
+ */
+
+#ifndef _HP4200_H
+#define _HP4200_H
+
+#include <sys/types.h>
+
+#define MCLKDIV_SCALING 2
+#define NUM_REGISTERS 0x80
+
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+#define max(a, b) (((a) > (b)) ? (a) : (b))
+
+
+/*--------------------------------------------------------------------------*/
+
+#define DBG_error0 0
+#define DBG_error 1
+#define DBG_sense 2
+#define DBG_warning 3
+#define DBG_inquiry 4
+#define DBG_info 5
+#define DBG_info2 6
+#define DBG_proc 7
+#define DBG_read 8
+#define DBG_sane_init 10
+#define DBG_sane_proc 11
+#define DBG_sane_info 12
+#define DBG_sane_option 13
+
+/*--------------------------------------------------------------------------*/
+
+enum HP4200_Option
+{
+ OPT_NUM_OPTS = 0,
+
+ OPT_RES,
+
+ OPT_TL_X, /* top-left x */
+ OPT_TL_Y, /* top-left y */
+ OPT_BR_X, /* bottom-right x */
+ OPT_BR_Y, /* bottom-right y */
+
+ OPT_BACKTRACK,
+
+ OPT_GAMMA_VECTOR_R,
+ OPT_GAMMA_VECTOR_G,
+ OPT_GAMMA_VECTOR_B,
+
+ OPT_PREVIEW,
+
+ NUM_OPTIONS /* must come last */
+};
+
+/* already declared in the sane includes...
+typedef union
+{
+ SANE_Word w;
+ SANE_Bool b;
+ SANE_Fixed f;
+ SANE_Word *wa;
+}
+Option_Value;
+*/
+
+enum ScannerModels
+{
+ HP4200
+};
+
+typedef struct HP4200_Device
+{
+ struct HP4200_Device *next;
+ SANE_Device dev;
+ SANE_Handle handle;
+}
+HP4200_Device;
+
+struct _scanner_buffer_t
+{
+ unsigned char *buffer; /* buffer memory space */
+ int size; /* size of the buffer */
+ int num_bytes; /* number of bytes left (to read) */
+ unsigned char *data_ptr; /* cursor in buffer */
+};
+
+typedef struct _scanner_buffer_t scanner_buffer_t;
+
+struct _ciclic_buffer_t
+{
+ int good_bytes; /* number of valid bytes of the image */
+ int num_lines; /* number of lines of the ciclic buffer */
+ int size; /* size in bytes of the buffer space */
+ unsigned char *buffer; /* pointer to the buffer space */
+ unsigned char **buffer_ptrs; /* pointers to the beginning of each
+ line in the buffer space */
+ int can_consume; /* num of bytes the ciclic buf can consume */
+ int current_line; /* current scanned line */
+ int first_good_line; /* number of lines to fill the ``pipeline'' */
+ unsigned char *buffer_position; /* pointer to the first byte that
+ can be copied */
+ int pixel_position; /* pixel position in current line */
+
+ /* color indexes for the proper line in the ciclic buffer */
+ int red_idx;
+ int green_idx;
+ int blue_idx;
+};
+
+typedef struct _ciclic_buffer_t ciclic_buffer_t;
+
+struct _hardware_parameters_t
+{
+ unsigned int SRAM_size;
+ unsigned char SRAM_bandwidth;
+ unsigned long crystal_frequency;
+ unsigned int min_pixel_data_buffer_limit;
+ unsigned int motor_full_steps_per_inch;
+ float motor_max_speed;
+ unsigned int scan_bar_max_speed;
+ unsigned int start_of_scanning_area;
+ unsigned int calibration_strip_height;
+ unsigned int scan_area_width;
+ double scan_area_length; /* in inches */
+ unsigned int sensor_num_pixels;
+ unsigned int sensor_pixel_start;
+ unsigned int sensor_pixel_end;
+ int sensor_cds_state; /* 0 == off, 1 == on */
+ int sensor_signal_polarity; /* 0 == ??, 1 == ?? */
+ int sensor_max_integration_time;
+ int sensor_line_separation;
+ int sensor_type;
+ unsigned int sensor_resolution;
+ int sensor_control_signals_polarity;
+ int sensor_control_signals_state;
+ int sensor_control_pixel_rate_timing;
+ int sensor_control_line_rate_timing;
+ unsigned int sensor_black_clamp_timing; /* ??? */
+ unsigned int sensor_CIS_timing;
+ int sensor_toshiba_timing;
+ int sensor_color_modes; /* bitmask telling color modes supported */
+ int illumination_mode;
+ int motor_control_mode;
+ int motor_paper_sense_mode;
+ int motor_pause_reverse_mode;
+ int misc_io_mode;
+ int num_tr_pulses;
+ int guard_band_duration;
+ int pulse_duration;
+ int fsteps_25_speed;
+ int fsteps_50_speed;
+ int steps_to_reverse;
+ struct
+ {
+ int red;
+ int green;
+ int blue;
+ }
+ target_value;
+ unsigned short home_sensor;
+};
+
+typedef struct _hardware_parameters_t hardware_parameters_t;
+
+struct _user_parameters_t
+{
+ unsigned int image_width;
+ unsigned int lines_to_scan;
+ unsigned int horizontal_resolution;
+ unsigned int vertical_resolution;
+ int hres_reduction_method; /* interpolation/??? */
+ int vres_reduction_method;
+ SANE_Bool color; /* color/grayscale */
+ int bpp;
+ int scan_mode; /* preview/full scan */
+ SANE_Bool no_reverse;
+ SANE_Word gamma[3][1024]; /* gamma table for rgb */
+};
+
+typedef struct _user_parameters_t user_parameters_t;
+
+struct _measured_parameters_t
+{
+ unsigned int datalink_bandwidth;
+ struct
+ {
+ int red;
+ int green;
+ int blue;
+ }
+ coarse_calibration_data;
+ struct
+ {
+ int *pRedOffset;
+ int *pGreenOffset;
+ int *pBlueOffset;
+ int *pRedGain;
+ int *pGreenGain;
+ int *pBlueGain;
+ }
+ fine_calibration_data;
+ int max_integration_time;
+ int color_mode;
+};
+
+typedef struct _measured_parameters_t measured_parameters_t;
+
+struct _runtime_parameters_t
+{
+ long num_bytes_left_to_scan;
+ int status_bytes; /* number of status bytes per line */
+ int image_line_size; /* line size in bytes without status bytes */
+ int scanner_line_size; /* line size in bytes including the
+ status bytes */
+ int first_pixel; /* first pixel in the line to be scanned */
+ int steps_to_skip;
+};
+
+typedef struct _runtime_parameters_t runtime_parameters_t;
+
+struct _HP4200_Scanner
+{
+ struct _HP4200_Scanner *next;
+
+ SANE_Option_Descriptor opt[NUM_OPTIONS];
+ Option_Value val[NUM_OPTIONS];
+
+ SANE_Bool scanning;
+ SANE_Bool aborted_by_user;
+
+ SANE_Parameters params;
+
+ HP4200_Device *dev;
+ hardware_parameters_t hw_parms;
+ user_parameters_t user_parms;
+ measured_parameters_t msrd_parms;
+ unsigned int regs[NUM_REGISTERS];
+ int mclk;
+ float mclk_div;
+
+ int fd;
+
+ ciclic_buffer_t ciclic_buffer;
+ scanner_buffer_t scanner_buffer;
+ runtime_parameters_t runtime_parms;
+};
+
+typedef struct _HP4200_Scanner HP4200_Scanner;
+
+#endif /* !_HP4200_H */