summaryrefslogtreecommitdiff
path: root/backend/qcam.h
diff options
context:
space:
mode:
Diffstat (limited to 'backend/qcam.h')
-rw-r--r--backend/qcam.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/backend/qcam.h b/backend/qcam.h
new file mode 100644
index 0000000..417ca5a
--- /dev/null
+++ b/backend/qcam.h
@@ -0,0 +1,190 @@
+/* sane - Scanner Access Now Easy.
+ Copyright (C) 1997 David Mosberger-Tang
+ This file is part of the SANE package.
+
+ 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.
+
+ Portions of this code are derived from Scott Laird's qcam driver.
+ It's copyright notice is reproduced here:
+
+ Copyright (C) 1996 by Scott Laird
+
+ 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 SCOTT LAIRD 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. */
+
+#ifndef qcam_h
+#define qcam_h
+
+#include "../include/sane/sane.h"
+
+typedef enum
+ {
+ QC_MONO = 0x01,
+ QC_COLOR = 0x10
+ }
+QC_Model;
+
+typedef enum
+ {
+ QC_RES_LOW = 0,
+ QC_RES_HIGH
+ }
+QC_Resolution;
+
+/* commands common to all quick-cameras: */
+typedef enum
+ {
+ QC_SEND_VIDEO_FRAME = 7,
+ QC_SET_BRIGHTNESS = 11,
+ QC_SET_TOP = 13,
+ QC_SET_LEFT = 15,
+ QC_SET_NUM_V = 17,
+ QC_SET_NUM_H = 19,
+ QC_SEND_VERSION = 23,
+ QC_SET_BLACK = 29,
+ QC_SET_WHITE = 31,
+ QC_SET_SATURATION = 35,
+ QC_SEND_STATUS = 41,
+ QC_SET_SPEED = 45
+ }
+QC_Command;
+
+/* commands for grayscale camera: */
+typedef enum
+ {
+ QC_MONO_SET_CONTRAST = 25,
+ QC_MONO_AUTO_ADJUST_OFFSET = 27,
+ QC_MONO_GET_OFFSET = 33
+ }
+QC_Mono_Command;
+
+/* commands for color camera: */
+typedef enum
+ {
+ QC_COL_LOAD_RAM = 27,
+ QC_COL_SET_HUE = 33,
+ QC_COL_SET_CONTRAST = 37
+ }
+QC_Col_Command;
+
+typedef enum
+ {
+ OPT_NUM_OPTS = 0,
+
+ OPT_MODE_GROUP,
+ OPT_DEPTH, /* 4 or 6 (b&w) or 24 (color) */
+ OPT_RESOLUTION, /* resolution in pixels */
+ OPT_XFER_SCALE, /* transfer-scale */
+ OPT_DESPECKLE, /* turn on despeckling? */
+ OPT_TEST, /* test image */
+
+ OPT_GEOMETRY_GROUP,
+ 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_ENHANCEMENT_GROUP,
+ OPT_BRIGHTNESS,
+ OPT_CONTRAST,
+ OPT_BLACK_LEVEL,
+ OPT_WHITE_LEVEL,
+ OPT_HUE,
+ OPT_SATURATION,
+
+ /* must come last: */
+ NUM_OPTIONS
+ }
+QC_Option;
+
+typedef enum
+ {
+ QC_UNIDIR,
+ QC_BIDIR
+ } QC_Port_Mode;
+
+typedef struct
+ {
+ size_t num_bytes; /* # of bytes to read */
+ QC_Resolution resolution; /* high-resolution? */
+ SANE_Parameters params; /* other parameters */
+ u_int mode; /* qcam scan code (get video data command) */
+ int despeckle; /* apply despeckling filter? */
+ }
+QC_Scan_Request;
+
+typedef struct QC_Device
+ {
+ struct QC_Device * next;
+ SANE_Device sane;
+ QC_Port_Mode port_mode;
+ int port; /* i/o port address */
+ int version; /* camera version */
+ int lock_fd; /* used for locking protocol */
+ }
+QC_Device;
+
+typedef struct QC_Scanner
+ {
+ struct QC_Scanner *next;
+
+ SANE_Option_Descriptor opt[NUM_OPTIONS];
+ Option_Value val[NUM_OPTIONS];
+ QC_Resolution resolution;
+ SANE_Parameters params;
+ QC_Device *hw;
+ SANE_Int user_corner; /* bitmask of user-selected coordinates */
+ SANE_Int value_changed; /* bitmask of options that were set */
+ SANE_Bool scanning;
+ SANE_Bool deliver_eof;
+ SANE_Bool holding_lock; /* are we holding the lock? */
+ /* state for reading a frame: */
+ size_t num_bytes; /* # of bytes read so far */
+ size_t bytes_per_frame; /* total number of bytes in frame */
+ /* state relating to the reader-process */
+ int reader_pid; /* -1 if there is no reader process (yet) */
+ int from_child; /* fd to read from child process*/
+ int to_child; /* fd to write to child */
+ int read_fd; /* used to read data */
+ /* internal state for qc_readbytes(): */
+ int readbytes_state;
+ unsigned int saved_bits;
+ }
+QC_Scanner;
+
+#endif /* qcam_h */