aboutsummaryrefslogtreecommitdiff
path: root/backend/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/device.h')
-rw-r--r--backend/device.h265
1 files changed, 265 insertions, 0 deletions
diff --git a/backend/device.h b/backend/device.h
new file mode 100644
index 0000000..739429e
--- /dev/null
+++ b/backend/device.h
@@ -0,0 +1,265 @@
+/* device.h -- physical device representation
+ * Copyright (C) 2008, 2009, 2014 SEIKO EPSON CORPORATION
+ *
+ * License: GPLv2+|iscan
+ * Authors: AVASYS CORPORATION
+ *
+ * This file is part of the SANE backend distributed with Image Scan!
+ *
+ * Image Scan!'s SANE backend 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 ought to have received a copy of the GNU General Public License
+ * along with this package. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * Linking Image Scan!'s SANE backend statically or dynamically with
+ * other modules is making a combined work based on this SANE backend.
+ * Thus, the terms and conditions of the GNU General Public License
+ * cover the whole combination.
+ *
+ * As a special exception, the copyright holders of Image Scan!'s SANE
+ * backend give you permission to link Image Scan!'s SANE backend with
+ * SANE frontends that communicate with Image Scan!'s SANE backend
+ * solely through the SANE Application Programming Interface,
+ * regardless of the license terms of these SANE frontends, and to
+ * copy and distribute the resulting combined work under terms of your
+ * choice, provided that every copy of the combined work is
+ * accompanied by a complete copy of the source code of Image Scan!'s
+ * SANE backend (the version of Image Scan!'s SANE backend used to
+ * produce the combined work), being distributed under the terms of
+ * the GNU General Public License plus this exception. An independent
+ * module is a module which is not derived from or based on Image
+ * Scan!'s SANE backend.
+ *
+ * As a special exception, the copyright holders of Image Scan!'s SANE
+ * backend give you permission to link Image Scan!'s SANE backend with
+ * independent modules that communicate with Image Scan!'s SANE
+ * backend solely through the "Interpreter" interface, regardless of
+ * the license terms of these independent modules, and to copy and
+ * distribute the resulting combined work under terms of your choice,
+ * provided that every copy of the combined work is accompanied by a
+ * complete copy of the source code of Image Scan!'s SANE backend (the
+ * version of Image Scan!'s SANE backend used to produce the combined
+ * work), being distributed under the terms of the GNU General Public
+ * License plus this exception. An independent module is a module
+ * which is not derived from or based on Image Scan!'s SANE backend.
+ *
+ * Note that people who make modified versions of Image Scan!'s SANE
+ * backend are not obligated to grant special exceptions for their
+ * modified versions; it is their choice whether to do so. The GNU
+ * General Public License gives permission to release a modified
+ * version without this exception; this exception also makes it
+ * possible to release a modified version which carries forward this
+ * exception.
+ */
+
+
+#ifndef device_h_included
+#define device_h_included
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "channel.h"
+#include "extension.h"
+
+#define DEVNAME_LENGTH 16
+
+
+typedef struct
+{
+ char *level;
+
+ unsigned char request_identity;
+ unsigned char request_identity2; /* new request identity command for Dx command level */
+ unsigned char request_status;
+ unsigned char request_condition;
+ unsigned char set_color_mode;
+ unsigned char start_scanning;
+ unsigned char set_data_format;
+ unsigned char set_resolution;
+ unsigned char set_zoom;
+ unsigned char set_scan_area;
+ unsigned char set_bright;
+ SANE_Range bright_range;
+ unsigned char set_gamma;
+ unsigned char set_halftoning;
+ unsigned char set_color_correction;
+ unsigned char initialize_scanner;
+ unsigned char set_speed; /* B4 and later */
+ unsigned char set_lcount;
+ unsigned char mirror_image; /* B5 and later */
+ unsigned char set_gamma_table; /* B4 and later */
+ unsigned char set_outline_emphasis; /* B4 and later */
+ unsigned char set_dither; /* B4 and later */
+ unsigned char set_color_correction_coefficients; /* B3 and later */
+ unsigned char request_extended_status; /* get extended status from scanner */
+ unsigned char control_an_extension; /* for extension control */
+ unsigned char eject; /* for extension control */
+ unsigned char feed;
+ unsigned char request_push_button_status;
+ unsigned char control_auto_area_segmentation;
+ unsigned char set_film_type; /* for extension control */
+ unsigned char set_exposure_time; /* F5 only */
+ unsigned char set_bay; /* F5 only */
+ unsigned char set_threshold;
+ unsigned char set_focus_position; /* B8 only */
+ unsigned char request_focus_position; /* B8 only */
+} EpsonCmdRec, *EpsonCmd;
+
+typedef struct
+{
+ SANE_Int last;
+ SANE_Int size;
+ SANE_Word *list;
+ SANE_Bool deep;
+} resolution_info;
+
+typedef struct
+{
+ int modelID;
+
+ double color_profile[4][9];
+} EpsonScanHardRec, *EpsonScanHard;
+
+
+/*! Software abstraction of the \e physical device.
+ */
+struct device
+{
+ struct channel *channel; /*<! for all device I/O */
+
+ char cmd_lvl[2+1]; /* +1 for string termination */
+ char version[4+1]; /* +1 for string termination */
+ char *fw_name; /*!< model name reported by firmware */
+
+ SANE_Byte status; /*!< info block status byte */
+ SANE_Byte ext_status;
+ SANE_Byte fsf_status;
+ SANE_Byte fsi_cap_1;
+ SANE_Byte fsi_cap_2;
+ SANE_Byte fsi_cap_3;
+
+ const extension *src; /*!< current document source */
+ fbf_extension *fbf; /*!< \c NULL if not available */
+ adf_extension *adf; /*!< \c NULL if not available */
+ tpu_extension *tpu; /*!< \c NULL if not available */
+
+ /*! \brief Selectable scan sources.
+ * A \c NULL terminated list of up to three scan sources. Which
+ * ones are listed depends on device capabilities.
+ */
+ SANE_String_Const sources[4];
+
+ resolution_info resolution; /* full-blown list */
+ resolution_info res; /* advertised list */
+ SANE_Int max_x; /* in pixels */
+ SANE_Int max_y;
+
+ SANE_Int optical_res; /* resolution in pixels per inch */
+ SANE_Byte sensor_info;
+ SANE_Byte scan_order;
+ SANE_Byte line_dist_x;
+ SANE_Byte line_dist_y;
+ resolution_info res_x;
+ resolution_info res_y;
+
+
+ SANE_Int level;
+ SANE_Range dpi_range;
+
+ SANE_Range matrix_range;
+
+ const int *gamma_type;
+ const SANE_Bool *gamma_user_defined;
+
+ const int *color_type;
+ const SANE_Bool *color_user_defined;
+
+ SANE_Bool color_shuffle; /* does this scanner need color shuffling */
+ SANE_Int maxDepth; /* max. color depth */
+
+ SANE_Int max_line_distance;
+
+ SANE_Bool need_color_reorder;
+ SANE_Bool need_reset_on_source_change;
+
+ SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */
+
+ SANE_Int doctype;
+
+ unsigned int productID;
+
+ EpsonCmd cmd;
+ const EpsonScanHardRec *scan_hard;
+
+ SANE_Bool using_fs; /*! determines whether to use fs commands */
+
+ SANE_Bool block_mode;
+ uint32_t image_block_size;
+ uint32_t final_block_size;
+ uint32_t block_total; /* does NOT include final block! */
+ uint32_t block_count;
+
+ unsigned char param_buf[64]; /*! holds the FS W parameter buffer */
+
+ SANE_Int scan_width_limit;
+
+ SANE_Int base_res; /*! resolution at which the max scan area is defined */
+
+ SANE_Int old_max; /*! used to restore after limiting resolutions */
+
+ SANE_Int polling_time;
+
+ bool uses_locking;
+ bool is_locked;
+};
+
+typedef struct device device;
+
+device *dev_dtor (device *hw);
+
+SANE_Status dev_request_extended_status (device *hw);
+SANE_Status dev_load_paper (device *hw);
+SANE_Status dev_eject_paper (device *hw);
+SANE_Status dev_open (device *hw);
+
+/* FS W/S related functions */
+SANE_Status dev_log_scanning_parameter (device *hw);
+SANE_Status dev_set_scanning_parameter (device *hw,
+ byte cmd,
+ const byte* param);
+SANE_Status dev_set_scanning_resolution (device *hw, SANE_Int x_dpi,
+ SANE_Int y_dpi);
+SANE_Status dev_set_scanning_area (device *hw,
+ SANE_Int left, SANE_Int top,
+ SANE_Int width, SANE_Int height);
+SANE_Status dev_set_option_unit (device *hw, byte adf_mode);
+
+/* other */
+
+/*! supports workarounds to temporarily limit resolution lists */
+void dev_limit_res (device *self, SANE_Constraint_Type type, int limit);
+
+/*! restore original resolution list after it has been limited */
+void dev_restore_res (device *self, SANE_Constraint_Type type);
+
+bool dev_force_cancel (device *self);
+
+SANE_Status dev_lock (device *hw);
+SANE_Status dev_unlock (device *hw);
+
+SANE_Status dev_clean (device *hw);
+SANE_Status dev_calibrate (device *hw);
+
+#endif /* !defined (device_h_included) */