summaryrefslogtreecommitdiff
path: root/scan/sane/soaphti.h
diff options
context:
space:
mode:
Diffstat (limited to 'scan/sane/soaphti.h')
-rw-r--r--scan/sane/soaphti.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/scan/sane/soaphti.h b/scan/sane/soaphti.h
new file mode 100644
index 000000000..fe895fa5d
--- /dev/null
+++ b/scan/sane/soaphti.h
@@ -0,0 +1,160 @@
+/************************************************************************************\
+
+ soaphti.h - HP SANE backend support for soap based multi-function peripherals
+
+ (c) 2006,2008 Copyright Hewlett-Packard Development Company, LP
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is furnished to do
+ so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Note when the LJM1522 input source is ADF, all pages loaded in the ADF must be scanned
+ as one complete scan job, otherwise the ADF will jam. This mean if you try to scan
+ one page only when multiple pages are loaded, the second page will jam. This is how the
+ hardware works. The Windows driver has the same limitation.
+
+ Author: David Suffield
+
+\************************************************************************************/
+
+#ifndef _SOAPHTI_H
+#define _SOAPHTI_H
+
+#define SOAP_CONTRAST_MIN -127
+#define SOAP_CONTRAST_MAX 127
+#define SOAP_CONTRAST_DEFAULT 0
+
+#define MM_PER_INCH 25.4
+
+enum SOAP_OPTION_NUMBER
+{
+ SOAP_OPTION_COUNT = 0,
+ SOAP_OPTION_GROUP_SCAN_MODE,
+ SOAP_OPTION_SCAN_MODE,
+ SOAP_OPTION_SCAN_RESOLUTION,
+ SOAP_OPTION_INPUT_SOURCE, /* platen, ADF, ADFDuplex */
+ SOAP_OPTION_GROUP_ADVANCED,
+ SOAP_OPTION_CONTRAST,
+ SOAP_OPTION_COMPRESSION,
+ SOAP_OPTION_JPEG_QUALITY,
+ SOAP_OPTION_GROUP_GEOMETRY,
+ SOAP_OPTION_TL_X,
+ SOAP_OPTION_TL_Y,
+ SOAP_OPTION_BR_X,
+ SOAP_OPTION_BR_Y,
+ SOAP_OPTION_MAX
+};
+
+#define MAX_LIST_SIZE 32
+#define MAX_STRING_SIZE 32
+
+enum SCAN_FORMAT
+{
+ SF_HPRAW = 1,
+ SF_JFIF,
+ SF_MAX
+};
+
+enum INPUT_SOURCE
+{
+ IS_PLATEN = 1,
+ IS_ADF,
+ IS_ADF_DUPLEX,
+ IS_MAX
+};
+
+enum COLOR_ENTRY
+{
+ CE_BLACK_AND_WHITE1 = 1, /* Lineart is not supported on Horse Thief (ie: LJM1522). Windows converts GRAY8 to MONO. Ditto for us. */
+ CE_GRAY8,
+ CE_RGB24,
+ CE_RGB48, /* for test only */
+ CE_MAX
+};
+
+enum SCAN_PARAM_OPTION
+{
+ SPO_BEST_GUESS = 0, /* scan not started, return "best guess" scan parameters */
+ SPO_STARTED = 1, /* scan started, return "job resonse" or "image processor" scan parameters */
+ SPO_STARTED_JR = 2, /* scan started, but return "job response" scan parameters only */
+};
+
+struct soap_session
+{
+ char *tag; /* handle identifier */
+ HPMUD_DEVICE dd; /* hpiod device descriptor */
+ HPMUD_CHANNEL cd; /* hpiod soap channel descriptor */
+ char uri[HPMUD_LINE_SIZE];
+ char model[HPMUD_LINE_SIZE];
+ int scan_type;
+
+ IP_IMAGE_TRAITS image_traits; /* specified by image header */
+
+ SANE_Option_Descriptor option[SOAP_OPTION_MAX];
+
+ SANE_String_Const scanModeList[CE_MAX];
+ enum COLOR_ENTRY scanModeMap[CE_MAX];
+ enum COLOR_ENTRY currentScanMode;
+
+ SANE_String_Const inputSourceList[IS_MAX];
+ enum INPUT_SOURCE inputSourceMap[IS_MAX];
+ enum INPUT_SOURCE currentInputSource;
+
+ SANE_Int resolutionList[MAX_LIST_SIZE];
+ SANE_Int currentResolution;
+
+ SANE_Range contrastRange;
+ SANE_Int currentContrast;
+
+ SANE_String_Const compressionList[SF_MAX];
+ enum SCAN_FORMAT compressionMap[SF_MAX];
+ enum SCAN_FORMAT currentCompression;
+
+ SANE_Range jpegQualityRange;
+ SANE_Int currentJpegQuality;
+
+ SANE_Range tlxRange, tlyRange, brxRange, bryRange;
+ SANE_Fixed currentTlx, currentTly, currentBrx, currentBry;
+ SANE_Fixed effectiveTlx, effectiveTly, effectiveBrx, effectiveBry;
+ SANE_Fixed min_width, min_height;
+
+ SANE_Fixed platen_min_width, platen_min_height;
+ SANE_Range platen_tlxRange, platen_tlyRange, platen_brxRange, platen_bryRange;
+ SANE_Fixed adf_min_width, adf_min_height;
+ SANE_Range adf_tlxRange, adf_tlyRange, adf_brxRange, adf_bryRange;
+
+ IP_HANDLE ip_handle;
+
+ int index; /* dime buffer index */
+ int cnt; /* dime buffer count */
+ unsigned char buf[16384]; /* dime buffer */
+
+ void *hpmud_handle; /* returned by dlopen */
+ void *math_handle; /* returned by dlopen */
+ void *bb_handle; /* returned by dlopen */
+ void *bb_session;
+ int (*bb_open)(struct soap_session *ps);
+ int (*bb_close)(struct soap_session *ps);
+ int (*bb_get_parameters)(struct soap_session *ps, SANE_Parameters *pp, int scan_started);
+ int (*bb_is_paper_in_adf)(struct soap_session *ps); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */
+ int (*bb_start_scan)(struct soap_session *ps);
+ int (*bb_get_image_data)(struct soap_session *ps, int max_length); /* see cnt and buf above */
+ int (*bb_end_page)(struct soap_session *ps, int io_error);
+ int (*bb_end_scan)(struct soap_session *ps, int io_error);
+/* Add new elements here. */
+};
+
+#endif // _SOAPHTI_H