From 6e9c41a892ed0e0da326e0278b3221ce3f5713b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Mon, 6 Oct 2014 14:00:40 +0200 Subject: Initial import of sane-backends version 1.0.24-1.2 --- backend/p5_device.h | 304 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 304 insertions(+) create mode 100644 backend/p5_device.h (limited to 'backend/p5_device.h') diff --git a/backend/p5_device.h b/backend/p5_device.h new file mode 100644 index 0000000..4582256 --- /dev/null +++ b/backend/p5_device.h @@ -0,0 +1,304 @@ +/* sane - Scanner Access Now Easy. + + Copyright (C) 2009-2012 stef.dev@free.fr + + 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. +*/ + +/** @file p5_device.h + * @brief Declaration of low level structures used by the p5 backend. + * + * The structures and function declared here are used to do the low level + * communication with the physical device. + */ + +#ifndef P5_DEVICE_H +#define P5_DEVICE_H + +#include +#include +#include +#include "../include/_stdint.h" + +#ifdef HAVE_LINUX_PPDEV_H +#include +#include +#include +#include +#include +#include +#endif + +/** @name debugging levels + */ +/* @{ */ +#define DBG_error0 0 /* errors/warnings printed even with devuglevel 0 */ +#define DBG_error 1 /* fatal errors */ +#define DBG_warn 2 /* warnings and non-fatal errors */ +#define DBG_info 4 /* informational messages */ +#define DBG_proc 8 /* starting/finishing functions */ +#define DBG_trace 16 /* tracing messages */ +#define DBG_io 32 /* io functions */ +#define DBG_io2 64 /* io functions that are called very often */ +#define DBG_data 128 /* log image data */ +/* @} */ + +/** + * maximal number of resolutions + */ +#define MAX_RESOLUTIONS 8 + +/**> sensor's number of pixels 8.5' @ 300 dpi */ +#define MAX_SENSOR_PIXELS 2550 + +/**> number of lines to skip when doing calibration */ +#define CALIBRATION_SKIP_LINES 80 + +/**> last value considered as black for calibration */ +#define BLACK_LEVEL 40 + +/**> white target value for calibration */ +#define WHITE_TARGET 220.0 + +/** per dpi calibration rgb data + * Calibration data structure + */ +typedef struct P5_Calibration_Data +{ + unsigned int dpi; + uint8_t black_data[MAX_SENSOR_PIXELS * 3]; + uint8_t white_data[MAX_SENSOR_PIXELS * 3]; +} P5_Calibration_Data; + +/** + * This structure describes a particular model which is handled by the backend. + * Contained data is immutable and is used to initalize the P5_Device + * structure. + */ +typedef struct P5_Model +{ + /** @name device identifier + * These values are set up once the physical device has been detected. They + * are used to build the return value of sane_get_devices(). + */ + /* @{ */ + SANE_String_Const name; + SANE_String_Const vendor; + SANE_String_Const product; + SANE_String_Const type; + /* @} */ + + /** @name resolution + * list of avalailable physical resolution. + * The resolutions must sorted from lower to higher value. The list is terminated + * by a value of 0. + */ + /* @{ */ + int xdpi_values[MAX_RESOLUTIONS]; /** possible x resolutions */ + int ydpi_values[MAX_RESOLUTIONS]; /** possible y resolutions */ + /* @} */ + + /** @name scan area description + * Minimal and maximal values. It's easier to have dedicated members instead + * of searching these values in the dpi lists. They are initialized from dpi + * lists. + */ + /* @{ */ + int max_xdpi; /** physical maximum x dpi */ + int max_ydpi; /** physical maximum y dpi */ + int min_xdpi; /** physical minimum x dpi */ + int min_ydpi; /** physical minimum y dpi */ + /* @} */ + + /** @name line distance shift + * Distance between CCD arrays for each color. Expressed in line + * number at maximum motor resolution. + */ + int lds; + + /** @name scan area description + * The geometry values are expressed from the head parking position, + * or the start. For a given model, the scan area selected by a frontend + * will have to fit within these values. + */ + /* @{ */ + SANE_Fixed x_offset; /** Start of scan area in mm */ + SANE_Fixed y_offset; /** Start of scan area in mm */ + SANE_Fixed x_size; /** Size of scan area in mm */ + SANE_Fixed y_size; /** Size of scan area in mm */ + /* @} */ + +} P5_Model; + + +/** + * Enumeration of configuration options for a device. It must starts at 0. + */ +enum P5_Configure_Option +{ + CFG_MODEL_NAME = 0, /**