diff options
Diffstat (limited to 'backend/hp.h')
-rw-r--r-- | backend/hp.h | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/backend/hp.h b/backend/hp.h new file mode 100644 index 0000000..b86ee04 --- /dev/null +++ b/backend/hp.h @@ -0,0 +1,226 @@ +/* sane - Scanner Access Now Easy. + Copyright (C) 1997 Geoffrey T. Dairiki + This file is part of the SANE package. + + This program 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 should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + 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. + + This file is part of a SANE backend for HP Scanners supporting + HP Scanner Control Language (SCL). +*/ + +#ifndef HP_H_INCLUDED +#define HP_H_INCLUDED +#include <limits.h> +#include <sys/types.h> +#include "../include/sane/sane.h" + +#undef BACKEND_NAME +#define BACKEND_NAME hp +#define DEBUG_NOT_STATIC +#include "../include/sane/sanei_debug.h" + +#ifdef __GNUC__ +#define UNUSEDARG __attribute__ ((unused)) +#else +#define UNUSEDARG +#endif + +/* FIXME: these should be options? */ +#undef ENABLE_7x12_TONEMAPS +#define ENABLE_16x16_DITHERS +#define ENABLE_10BIT_MATRIXES + +#define FAKE_COLORSEP_MATRIXES + +#undef ENABLE_CUSTOM_MATRIX + +#define HP_CONFIG_FILE STRINGIFY(BACKEND_NAME) ".conf" + +#define DEVPIX_PER_INCH 300.0 +#define MM_PER_DEVPIX (MM_PER_INCH / DEVPIX_PER_INCH) + +/* + * Macros for testing return values of functions which + * return SANE_Status types. + */ +#define FAILED(status) (status != SANE_STATUS_GOOD) +#define UNSUPPORTED(status) (status == SANE_STATUS_UNSUPPORTED) +#define RETURN_IF_FAIL(try) do { \ + SANE_Status status = (try); \ + if (FAILED(status)) \ + return status; \ +} while (0) +#define CATCH_RET_FAIL(try, catch) do { \ + SANE_Status status = (try); \ + if (FAILED(status)) { (catch); return status; } \ +} while (0) + +#ifndef DBG_LEVEL +#define DBG_LEVEL PASTE(sanei_debug_, BACKEND_NAME) +#endif +#ifndef NDEBUG +# define DBGDUMP(level, buf, size) \ + do { if (DBG_LEVEL >= (level)) sanei_hp_dbgdump(buf, size); } while (0) +#else +# define DBGDUMP(level, buf, size) +#endif + + + /* + * + */ + +typedef unsigned int hp_bool_t; +typedef unsigned char hp_byte_t; + +typedef enum { HP_CONNECT_SCSI, HP_CONNECT_DEVICE, + HP_CONNECT_PIO, HP_CONNECT_USB, HP_CONNECT_RESERVE } HpConnect; + +typedef struct +{ + HpConnect connect; + hp_bool_t got_connect_type; + hp_bool_t use_scsi_request; + hp_bool_t use_image_buffering; + hp_bool_t dumb_read; +} HpDeviceConfig; + +#define HP_SCL_INQID_MIN 10306 +#define HP_SCL_INQID_MAX 10971 + +typedef struct +{ + hp_bool_t checked, is_supported; + int minval, maxval; +} HpSclSupport; + +typedef struct +{ /* Flags for simulated commands */ + hp_bool_t sclsimulate[HP_SCL_INQID_MAX - HP_SCL_INQID_MIN + 1]; + hp_bool_t gamma_simulate; + unsigned char brightness_map[256]; /* Map to simulate brightness level */ + unsigned char contrast_map[256]; /* Map to simulate contrast level */ + unsigned char gamma_map[256]; /* Map to simulate custom gamma table */ +} HpSimulate; + +/* Information about a connected device */ +typedef struct +{ + char devname[64]; /* unique device name */ + + hp_bool_t config_is_up; /* flag if config-struct is valid */ + HpDeviceConfig config; /* device configuration*/ + /* List of command support */ + HpSclSupport sclsupport[HP_SCL_INQID_MAX - HP_SCL_INQID_MIN + 1]; + + HpSimulate simulate; /* Info about simulations */ + + hp_bool_t unload_after_scan; + int active_xpa; + int max_model; +} HpDeviceInfo; + +HpDeviceInfo *sanei_hp_device_info_get (const char *dev_name); + +/* hp-scl.c */ +#if INT_MAX > 30000 +typedef int HpScl; +#else +typedef long int HpScl; +#endif + +void sanei_hp_init_openfd (void); + +typedef struct +{ + int lines; + int bytes_per_line; /* as received from scanner */ + int bits_per_channel; + hp_bool_t out8; /* This flag is set and only set, when data with */ + /* depths > 8 is to be mapped to 8 bit output. */ + hp_bool_t mirror_vertical; + hp_bool_t invert; + HpScl startscan; +} HpProcessData; + +/* hp-option.c */ +typedef SANE_Option_Descriptor * HpSaneOption; + +typedef const struct hp_choice_s * HpChoice; +typedef struct hp_option_s * HpOption; +typedef const struct hp_option_descriptor_s * HpOptionDescriptor; +typedef struct hp_optset_s * HpOptSet; + +/* hp-accessor.c */ +typedef struct hp_data_s * HpData; +typedef struct hp_accessor_s * HpAccessor; +typedef struct hp_accessor_vector_s * HpAccessorVector; +typedef struct hp_accessor_choice_s * HpAccessorChoice; + +/* hp-device.c */ +typedef struct hp_device_s * HpDevice; +hp_bool_t sanei_hp_device_simulate_get (const char *devname, HpScl scl); +HpDevice sanei_hp_device_get (const char *dev_name); + +/* hp-handle.c */ +typedef struct hp_handle_s * HpHandle; + +/* hp-scsi.c */ +typedef struct hp_scsi_s * HpScsi; + +/* hp-scl.c */ +hp_bool_t sanei_hp_is_active_xpa (HpScsi scsi); +int sanei_hp_get_max_model (HpScsi scsi); +int sanei_hp_is_flatbed_adf (HpScsi scsi); +HpConnect sanei_hp_get_connect (const char *devname); +HpConnect sanei_hp_scsi_get_connect (HpScsi this); + +/* hp.c */ +#ifndef NDEBUG +void sanei_hp_dbgdump (const void * bufp, size_t len); +#endif + +/* hp-hpmem.c */ +void * sanei_hp_alloc(size_t sz); +void * sanei_hp_allocz(size_t sz); +void * sanei_hp_memdup(const void * src, size_t sz); +char * sanei_hp_strdup(const char * str); +void * sanei_hp_realloc(void * ptr, size_t sz); +void sanei_hp_free(void * ptr); +void sanei_hp_free_all(void); + +#endif /* HP_H_INCLUDED */ |