1999-08-09 18:06:01 +00:00
|
|
|
/* 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
|
|
|
|
|
2009-05-08 03:06:20 +00:00
|
|
|
#include "../include/sane/sane.h"
|
1999-08-09 18:06:01 +00:00
|
|
|
|
|
|
|
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 */
|