aboutsummaryrefslogtreecommitdiff
path: root/backend/command.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/command.h')
-rw-r--r--backend/command.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/backend/command.h b/backend/command.h
new file mode 100644
index 0000000..774984c
--- /dev/null
+++ b/backend/command.h
@@ -0,0 +1,223 @@
+/* command.h -- assorted ESC/I protocol commands
+ * Copyright (C) 2008--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 command_h_included
+#define command_h_included
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+/* ESC/I protocol constants.
+ */
+
+/* Readability definitions for selected ASCII codes used by the ESC/I
+ protocol.
+ */
+#define NUL 0x00 /* '\0' */
+#define STX 0x02
+#define ACK 0x06
+#define BUSY 0x07 /* BEL in ascii(7) */
+#define FF 0x0c /* '\f' */
+#define NAK 0x15
+#define CAN 0x18
+#define PF 0x19 /* EM in ascii(7) */
+#define ESC 0x1b
+#define FS 0x1c
+
+
+/* Bit flags for the status byte in the information block.
+ */
+#define STATUS_FATAL_ERROR 0x80
+#define STATUS_NOT_READY 0x40 /* in use via other interface */
+#define STATUS_AREA_END 0x20 /* scan finished */
+#define STATUS_OPTION 0x10 /* option detected */
+#define STATUS_COLOR_ATTR_MASK 0x0c
+#define STATUS_EXT_COMMANDS 0x02 /* FS commands supported */
+
+/* Bit flags for the extended image acquisition (FS G) error byte
+ */
+#define FSG_FATAL_ERROR 0x80
+#define FSG_NOT_READY 0x40 /* in use via other interface */
+#define FSG_PAGE_END 0x20 /* notify of the paper end */
+#define FSG_CANCEL_REQUEST 0x10 /* cancel request from scanner */
+
+/* Bit flags for selected bytes in the extended status and scanner
+ status replies. Synchronised status flags are defined in terms
+ of the corresponding flag. All other values are supposed to be
+ unlinked. The various *_ERR flags indicate that at least one of
+ the other error bit flags in the _same_ block is set.
+
+ The EXT_STATUS_* flags are specific to the ESC f command's reply,
+ The FSF_STATUS_*, ADF_EXT_STATUS_* and AFL_STATUS_* flags to that
+ of the FS F command.
+ */
+#define EXT_STATUS_FER 0x80 /* fatal error */
+#define EXT_STATUS_NO_FBF 0x40 /* no flat bed */
+#define EXT_STATUS_ADFT 0x20 /* ADF unit type */
+#define EXT_STATUS_ADFS 0x10 /* simplex/duplex */
+#define EXT_STATUS_ADFO 0x08 /* feed from first/last sheet */
+#define EXT_STATUS_LID 0x04 /* lid type option */
+#define EXT_STATUS_WU 0x02 /* warming up */
+#define EXT_STATUS_PB 0x01 /* scanner has a push button */
+
+#define FSF_STATUS_FER 0x80 /* fatal error */
+#define FSF_STATUS_NR 0x40 /* in use via other interface */
+#define FSF_STATUS_WU 0x02 /* warming up */
+#define FSF_STATUS_CWU 0x01 /* can cancel warming up */
+
+#define ADF_STATUS_IST 0x80 /* option detected */
+#define ADF_STATUS_EN 0x40 /* option enabled */
+#define ADF_STATUS_ERR 0x20 /* option error detected */
+#define ADF_STATUS_ATYP 0x10 /* photo ADF type detected */
+#define ADF_STATUS_PE 0x08 /* no paper */
+#define ADF_STATUS_PJ 0x04 /* paper jam */
+#define ADF_STATUS_OPN 0x02 /* cover open */
+#define ADF_STATUS_PAG 0x01 /* duplex selected */
+
+#define ADF_EXT_STATUS_IST ADF_STATUS_IST
+#define ADF_EXT_STATUS_EN ADF_STATUS_EN
+#define ADF_EXT_STATUS_ERR 0x20 /* option error detected */
+#define ADF_EXT_STATUS_DFE 0x10 /* double feed */
+#define ADF_EXT_STATUS_TR_OPN 0x02 /* tray open */
+
+#define TPU_STATUS_IST 0x80 /* option detected */
+#define TPU_STATUS_EN 0x40 /* option enabled */
+#define TPU_STATUS_ERR 0x20 /* option error detected */
+#define TPU_STATUS_OPN 0x02 /* cover open */
+#define TPU_STATUS_LTF 0x01 /* lamp luminescence too low */
+
+#define AFL_STATUS_IST 0x80 /* option detected */
+#define AFL_STATUS_EN 0x40 /* option enabled */
+#define AFL_STATUS_ERR 0x20 /* option error detected */
+#define AFL_STATUS_OPN 0x02 /* cover open */
+#define AFL_STATUS_LTF 0x01 /* lamp luminescence too low */
+
+#define DV3_STATUS_ERR 0x20
+#define DV3_STATUS_PE 0x08 /* no paper */
+#define DV3_STATUS_PJ 0x04 /* paper jam */
+#define DV3_STATUS_OPN 0x02 /* cover open */
+
+/* Bit flags
+ */
+#define FSI_CAP_DLF 0x80 /* ??? */
+#define FSI_CAP_NO_FBF 0x40 /* no flat bed */
+#define FSI_CAP_ADFT 0x20 /* ADF unit type */
+#define FSI_CAP_ADFS 0x10 /* simplex/duplex */
+#define FSI_CAP_ADFO 0x08 /* feed from first/last sheet */
+#define FSI_CAP_LID 0x04 /* lid type option */
+#define FSI_CAP_TPIR 0x02 /* TPU with IR support */
+#define FSI_CAP_PB 0x01 /* scanner has a push button */
+
+#define FSI_CAP_ADFAS 0x10 /* ADF with auto scan support */
+#define FSI_CAP_DFD 0x08 /* double feed detection */
+#define FSI_CAP_AFF 0x04 /* auto form feed */
+#define FSI_CAP_ESST 0x02 /* ??? */
+#define FSI_CAP_PED 0x01 /* paper end detection support */
+
+#define FSI_CAP_DPOS_MASK 0x03 /* the document position of the ADF */
+
+/* DPOS status */
+#define FSI_CAP_DPOS_UNKN 0x00 /* no information */
+#define FSI_CAP_DPOS_LEFT 0x01 /* left side position */
+#define FSI_CAP_DPOS_CNTR 0x02 /* center position */
+#define FSI_CAP_DPOS_RIGT 0x03 /* right position */
+
+/* Maintenance requests.
+ */
+#define ESC1_REQ_CLEANING 0x0001
+#define ESC1_REQ_CALIBRATION 0x0002
+#define ESC1_REQ_STATUS 0xffff
+
+#include "device.h"
+
+
+/* Getter commands.
+ */
+SANE_Status cmd_request_identity (device *hw);
+SANE_Status cmd_request_hardware_property (device *hw);
+SANE_Status cmd_request_scanner_status (device *hw);
+SANE_Status cmd_request_extended_identity (device *hw);
+SANE_Status cmd_request_extended_status (device *hw);
+SANE_Status cmd_request_scanning_parameter (device* hw);
+
+
+/* Setter commands.
+ */
+SANE_Status cmd_control_option_unit (device *hw, byte value);
+SANE_Status cmd_set_scanning_parameter (device* hw);
+
+
+/* Action commands.
+ */
+SANE_Status cmd_initialize (device *hw);
+SANE_Status cmd_load_paper (device *hw);
+SANE_Status cmd_eject_paper (device *hw);
+SANE_Status cmd_lock (device *hw);
+SANE_Status cmd_unlock (device *hw);
+SANE_Status cmd_request_scanner_maintenance (device *hw, uint16_t mode);
+
+
+#endif /* !defined (command_h_included) */