diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-10-06 14:00:40 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-10-06 14:00:40 +0200 |
commit | 6e9c41a892ed0e0da326e0278b3221ce3f5713b8 (patch) | |
tree | 2e301d871bbeeb44aa57ff9cc070fcf3be484487 /backend/plustek.h |
Initial import of sane-backends version 1.0.24-1.2
Diffstat (limited to 'backend/plustek.h')
-rw-r--r-- | backend/plustek.h | 431 |
1 files changed, 431 insertions, 0 deletions
diff --git a/backend/plustek.h b/backend/plustek.h new file mode 100644 index 0000000..be657c1 --- /dev/null +++ b/backend/plustek.h @@ -0,0 +1,431 @@ +/*............................................................................. + * Project : SANE library for Plustek flatbed scanners. + *............................................................................. + */ + +/** @file plustek.h + * @brief Definitions for the backend. + * + * Based on Kazuhiro Sasayama previous + * work on plustek.[ch] file from the SANE package.<br> + * + * original code taken from sane-0.71<br> + * Copyright (C) 1997 Hypercore Software Design, Ltd.<br> + * Copyright (C) 2001-2007 Gerhard Jaeger <gerhard@gjaeger.de> + * + * History: + * - 0.30 - initial version + * - 0.31 - no changes + * - 0.32 - no changes + * - 0.33 - no changes + * - 0.34 - moved some definitions and typedefs from plustek.c + * - 0.35 - removed OPT_MODEL from options list + * - added max_y to struct Plustek_Scan + * - 0.36 - added reader_pid, pipe and bytes_read to struct Plustek_Scanner + * - removed unused variables from struct Plustek_Scanner + * - moved fd from struct Plustek_Scanner to Plustek_Device + * - added next members to struct Plustek_Scanner and Plustek_Device + * - 0.37 - added max_x to struct Plustek_Device + * - 0.38 - added caps to struct Plustek_Device + * - added exit code to struct Plustek_Scanner + * - removed dropout stuff + * - 0.39 - PORTTYPE enum + * - added function pointers to control a scanner device + * (Parport and USB) + * - 0.40 - added USB stuff + * - 0.41 - added configuration stuff + * - 0.42 - added custom gamma tables + * - changed usbId to static array + * - added _MAX_ID_LEN + * - 0.43 - no changes + * - 0.44 - added flag initialized + * - 0.45 - added readLine function + * - 0.46 - flag initialized is now used as device index + * - added calFile to Plustek_Device + * - removed _OPT_HALFTONE + * - 0.47 - added mov to adjustment + * - changed stopScan function definition + * - removed open function + * - added OPT_LAMPSWITCH and OPT_WARMUPTIME + * - 0.48 - added OPT_CACHECAL, OPT_OVR_*, OPT_LAMPOFF_TIMER and + * OPT_LAMPOFF_ONEND, also did some cleanup + * - moved SCANDEF definitions to plustek-usb.h + * - removed function pointer + * - added OPT_BIT_DEPTH + * - 0.49 - added typedef struct DevList + * - added button stuff + * - added transferRate to struct Plustek_Device + * - 0.50 - cleanup + * - added OPT_SPEEDUP + * - 0.51 - added OPT_CALIBRATE + * - 0.52 - added skipDarkStrip and incDarkTgt to struct AdjDef + * - added OPT_LOFF4DARK + * . + * <hr> + * 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. + * <hr> + */ +#ifndef __PLUSTEK_H__ +#define __PLUSTEK_H__ + +/************************ some definitions ***********************************/ + + +#define PLUSTEK_CONFIG_FILE "plustek.conf" + +#ifndef PATH_MAX +# define PATH_MAX 1024 +#endif + +#define _MEASURE_BASE 300UL +#define _DEF_DPI 50 +#define DEFAULT_RATE 1000000 + +/** the default image size + */ +#define _DEFAULT_TLX 0 /* 0..216 mm */ +#define _DEFAULT_TLY 0 /* 0..297 mm */ +#define _DEFAULT_BRX 103 /* 0..216 mm */ +#define _DEFAULT_BRY 76.21 /* 0..297 mm */ + +#define _DEFAULT_TP_TLX 3.5 /* 0..42.3 mm */ +#define _DEFAULT_TP_TLY 10.5 /* 0..43.1 mm */ +#define _DEFAULT_TP_BRX 38.5 /* 0..42.3 mm */ +#define _DEFAULT_TP_BRY 33.5 /* 0..43.1 mm */ + +#define _DEFAULT_NEG_TLX 1.5 /* 0..38.9 mm */ +#define _DEFAULT_NEG_TLY 1.5 /* 0..29.6 mm */ +#define _DEFAULT_NEG_BRX 37.5 /* 0..38.9 mm */ +#define _DEFAULT_NEG_BRY 25.5 /* 0..29.6 mm */ + +/** image sizes for normal, transparent and negative modes + */ +#define _TPAPageWidth 500UL +#define _TPAPageHeight 510UL +#define _TPALargePageWidth 1270UL +#define _TPALargePageHeight 1570UL +#define _TPAMinDpi 150 + +#define _NegPageWidth 460UL +#define _NegPageHeight 350UL +#define _NegLargePageWidth 1270UL +#define _NegLargePageHeight 1570UL + +#define _SCALE(X) ((double)(X)/300.0 * MM_PER_INCH) + +/** scan modes + */ +#define COLOR_BW 0 +#define COLOR_256GRAY 1 +#define COLOR_GRAY16 2 +#define COLOR_TRUE24 3 +#define COLOR_TRUE48 4 + +/** usb id buffer + */ +#define _MAX_ID_LEN 20 + +/** + */ +#define SFLAG_ADF 0x00000010 /* Automatic document feeder */ +#define SFLAG_TPA 0x00000080 /* has transparency adapter */ + +/** + */ +#define SOURCE_Reflection 0 +#define SOURCE_Transparency 1 +#define SOURCE_Negative 2 +#define SOURCE_ADF 3 + +/** for Gamma tables + */ +#define _MAP_RED 0 +#define _MAP_GREEN 1 +#define _MAP_BLUE 2 +#define _MAP_MASTER 3 + +/** generic error codes... + */ +#define _FIRST_ERR -9000 + +#define _E_ALLOC (_FIRST_ERR-1) /**< error allocating memory */ +#define _E_INVALID (_FIRST_ERR-2) /**< invalid parameter detected */ +#define _E_INTERNAL (_FIRST_ERR-3) /**< internal error */ +#define _E_ABORT (_FIRST_ERR-4) /**< operation aborted */ + +#define _E_LAMP_NOT_IN_POS (_FIRST_ERR-10) +#define _E_LAMP_NOT_STABLE (_FIRST_ERR-11) +#define _E_NODATA (_FIRST_ERR-12) +#define _E_BUFFER_TOO_SMALL (_FIRST_ERR-13) +#define _E_DATAREAD (_FIRST_ERR-14) + +/************************ some structures ************************************/ + +#define _ENABLE(option) s->opt[option].cap &= ~SANE_CAP_INACTIVE +#define _DISABLE(option) s->opt[option].cap |= SANE_CAP_INACTIVE + +enum { + OPT_NUM_OPTS = 0, + OPT_MODE_GROUP, + OPT_MODE, + OPT_BIT_DEPTH, + OPT_EXT_MODE, + OPT_RESOLUTION, + OPT_PREVIEW, + OPT_GEOMETRY_GROUP, + OPT_TL_X, + OPT_TL_Y, + OPT_BR_X, + OPT_BR_Y, + OPT_ENHANCEMENT_GROUP, + OPT_BRIGHTNESS, + OPT_CONTRAST, + OPT_CUSTOM_GAMMA, + OPT_GAMMA_VECTOR, + OPT_GAMMA_VECTOR_R, + OPT_GAMMA_VECTOR_G, + OPT_GAMMA_VECTOR_B, + OPT_DEVICE_GROUP, + OPT_LAMPSWITCH, + OPT_LAMPOFF_TIMER, + OPT_LAMPOFF_ONEND, + OPT_WARMUPTIME, + OPT_LOFF4DARK, + OPT_CACHECAL, + OPT_SPEEDUP, + OPT_CALIBRATE, + OPT_AFE_GROUP, + OPT_OVR_REDGAIN, + OPT_OVR_GREENGAIN, + OPT_OVR_BLUEGAIN, + OPT_OVR_REDOFS, + OPT_OVR_GREENOFS, + OPT_OVR_BLUEOFS, + OPT_OVR_RED_LOFF, + OPT_OVR_GREEN_LOFF, + OPT_OVR_BLUE_LOFF, + OPT_BUTTON_GROUP, + OPT_BUTTON_0, + OPT_BUTTON_1, + OPT_BUTTON_2, + OPT_BUTTON_3, + OPT_BUTTON_4, + OPT_BUTTON_LAST = OPT_BUTTON_4, + NUM_OPTIONS +}; + +/** + */ +typedef struct { + int x; + int y; +} OffsDef, *pOffsDef; + +/** for adjusting the scanner settings + */ +typedef struct { + int mov; /**< model override */ + int lampOff; + int lampOffOnEnd; + int warmup; + int enableTpa; + int skipCalibration; /**< skip entire calibration */ + int skipFine; + int skipFineWhite; + int skipDarkStrip; + int incDarkTgt; + int disableSpeedup; + int invertNegatives; + int cacheCalData; + int altCalibrate; /* force use of the alternate canoscan autocal; + perhaps other Canon scanners require the + alternate autocalibration as well */ + /* AFE adjustemnts, gain and offset */ + int rgain; + int ggain; + int bgain; + int rofs; + int gofs; + int bofs; + + int rlampoff; /* for red lamp off setting (CIS-scanner) */ + int glampoff; /* for green lamp off setting (CIS-scanner) */ + int blampoff; /* for blue lamp off setting (CIS-scanner) */ + + OffsDef pos; /* for adjusting normal scan area */ + OffsDef tpa; /* for adjusting transparency scan area */ + OffsDef neg; /* for adjusting negative scan area */ + + int posShadingY; + int tpaShadingY; + int negShadingY; + + /* for adjusting the default gamma settings */ + double rgamma; + double ggamma; + double bgamma; + + double graygamma; + +} AdjDef; + +typedef struct { + unsigned short x; + unsigned short y; + unsigned short cx; + unsigned short cy; +} CropRect; + +typedef struct image { + unsigned long dwFlag; + CropRect crArea; + XY xyDpi; + unsigned short wDataType; +} ImgDef; + +typedef struct { + unsigned long dwPixelsPerLine; + unsigned long dwBytesPerLine; + unsigned long dwLinesPerArea; + ImgDef ImgDef; +} CropInfo; + +typedef struct { + ImgDef ImgDef; + short siBrightness; + short siContrast; +} ScanInfo; + +typedef struct { + unsigned long dwFlag; + unsigned short wMaxExtentX; /**< scanarea width */ + unsigned short wMaxExtentY; /**< scanarea height */ +} ScannerCaps; + +typedef struct Plustek_Device +{ + SANE_Int initialized; /* device already initialized? */ + struct Plustek_Device *next; /* pointer to next dev in list */ + int fd; /* device handle */ + char *name; /* (to avoid compiler warnings!)*/ + char *calFile; /* for saving calibration data */ + unsigned long transferRate; /* detected USB-Speed in Bytes/s*/ + SANE_Device sane; /* info struct */ + SANE_Int max_x; /* max XY-extension of the scan-*/ + SANE_Int max_y; /* area */ + SANE_Range dpi_range; /* resolution range */ + SANE_Range x_range; /* x-range of the scan-area */ + SANE_Range y_range; /* y-range of the scan-area */ + SANE_Int *res_list; /* to hold the available phys. */ + SANE_Int res_list_size; /* resolution values */ + ScannerCaps caps; /* caps reported by the driver */ + AdjDef adj; /* for driver adjustment */ + + /**************************** USB-stuff **********************************/ + char usbId[_MAX_ID_LEN];/* to keep Vendor and product */ + /* ID string (from conf) file */ + struct ScanDef scanning; /* here we hold all stuff for */ + /* the USB-scanner */ + struct DeviceDef usbDev; +#ifdef HAVE_SETITIMER + struct itimerval saveSettings; /* for lamp timer */ +#endif + +} Plustek_Device; + +#ifndef SANE_OPTION +/* for compatibility with older versions */ +typedef union +{ + SANE_Word w; + SANE_Word *wa; + SANE_String s; +} Option_Value; +#endif + +typedef struct Plustek_Scanner +{ + struct Plustek_Scanner *next; + SANE_Pid reader_pid; /* process id of reader */ + SANE_Status exit_code; /* status of the reader process */ + int r_pipe; /* pipe to reader process */ + int w_pipe; /* pipe from reader process */ + unsigned long bytes_read; /* number of bytes currently read*/ + Plustek_Device *hw; /* pointer to current device */ + Option_Value val[NUM_OPTIONS]; + SANE_Byte *buf; /* the image buffer */ + SANE_Bool scanning; /* TRUE during scan-process */ + SANE_Bool calibrating; /* TRUE during calibration */ + SANE_Bool ipc_read_done; /* TRUE after ipc has been red */ + SANE_Parameters params; /* for keeping the parameter */ + + /************************** gamma tables *********************************/ + + SANE_Word gamma_table[4][4096]; + SANE_Range gamma_range; + int gamma_length; + + SANE_Option_Descriptor opt[NUM_OPTIONS]; + +} Plustek_Scanner; + +/** for collecting configuration info... + */ +typedef struct { + + char devName[PATH_MAX]; + char usbId[_MAX_ID_LEN]; + + /* contains the stuff to adjust... */ + AdjDef adj; + +} CnfDef; + +/** for supported device list + */ +typedef struct DevList { + SANE_Word vendor_id; + SANE_Word device_id; + SANE_Bool attached; + SANE_Char *dev_name; + struct DevList *next; +} DevList; +#endif /* guard __PLUSTEK_H__ */ + +/* END PLUSTEK.H.............................................................*/ |