xref: /third_party/backends/backend/kodakaio.h (revision 141cc406)
1/*
2 * kodakaio.c - SANE library for Kodak ESP Aio scanners.
3 *
4 * Copyright (C)  2011-2013 Paul Newall
5 *
6 * Based on the Magicolor sane backend:
7 * Based on the epson2 sane backend:
8 * Based on Kazuhiro Sasayama previous
9 * work on epson.[ch] file from the SANE package.
10 * Please see those files for additional copyrights.
11 * Author: Paul Newall
12 *
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License as
16 * published by the Free Software Foundation, version 2.
17
18	29/12/12 added KodakAio_Scanner.ack
19	2/1/13 added KodakAio_Scanner.background[]
20 */
21
22#ifndef kodakaio_h
23#define kodakaio_h
24
25#undef BACKEND_NAME
26#define BACKEND_NAME kodakaio
27#define DEBUG_NOT_STATIC
28
29#include <sys/ioctl.h>
30
31#ifdef HAVE_STDDEF_H
32#include <stddef.h>
33#endif
34
35#ifdef HAVE_STDLIB_H
36#include <stdlib.h>
37#endif
38
39#ifdef NEED_SYS_TYPES_H
40#include <sys/types.h>
41#endif
42
43#include <stdio.h>
44
45#include "../include/sane/sane.h"
46#include "../include/sane/sanei_debug.h"
47#include "../include/sane/sanei_backend.h"
48
49/* Silence the compiler for unused arguments */
50#define NOT_USED(x) ( (void)(x) )
51
52#define KODAKAIO_CONFIG_FILE "kodakaio.conf"
53
54#define NUM_OF_HEX_ELEMENTS (16)        /* number of hex numbers per line for data dump */
55#define DEVICE_NAME_LEN (16)    /* length of device name in extended status */
56
57#define CAP_DEFAULT 0
58
59/* Structure holding the device capabilities */
60struct KodakaioCap
61{
62	SANE_Word id;			/* USB pid */
63	const char *cmds;		/* may be used for different command sets in future */
64	const char *model;
65	SANE_Int out_ep, in_ep;		/* USB bulk out/in endpoints */
66
67	SANE_Int optical_res;		/* optical resolution */
68	SANE_Range dpi_range;		/* max/min resolutions */
69
70	SANE_Int *res_list;		/* list of resolutions */
71	SANE_Int res_list_size;		/* number of entries in this list */
72
73	SANE_Int maxDepth;		/* max. color depth */
74	SANE_Word *depth_list;		/* list of color depths */
75
76	 /* SANE_Range brightness;		brightness range */
77
78	SANE_Range fbf_x_range;		/* flattbed x range */
79	SANE_Range fbf_y_range;		/* flattbed y range */
80
81	SANE_Bool ADF;			/* ADF is installed */
82	SANE_Bool adf_duplex;		/* does the ADF handle duplex scanning */
83	SANE_Range adf_x_range;		/* autom. document feeder x range */
84	SANE_Range adf_y_range;		/* autom. document feeder y range */
85};
86
87/*
88Options:OPT_BRIGHTNESS, used to be after BIT_DEPTH
89*/
90enum {
91	OPT_NUM_OPTS = 0,
92	OPT_MODE_GROUP,
93	OPT_MODE,
94	OPT_THRESHOLD,
95	OPT_BIT_DEPTH,
96	OPT_RESOLUTION,
97	OPT_TRIALOPT, /* for debuggging */
98	OPT_PREVIEW,
99	OPT_SOURCE,
100	OPT_ADF_MODE,
101	OPT_PADDING,		/* Selects padding of adf pages to the specified length */
102	OPT_GEOMETRY_GROUP,
103	OPT_TL_X,
104	OPT_TL_Y,
105	OPT_BR_X,
106	OPT_BR_Y,
107	NUM_OPTIONS
108};
109
110typedef enum
111{	/* hardware connection to the scanner */
112	SANE_KODAKAIO_NODEV,	/* default, no HW specified yet */
113	SANE_KODAKAIO_USB,	/* USB interface */
114	SANE_KODAKAIO_NET	/* network interface */
115} Kodakaio_Connection_Type;
116
117
118/* Structure holding the hardware description */
119
120struct Kodak_Device
121{
122	struct Kodak_Device *next;
123	int missing;
124
125	char *name;
126	char *model;
127
128	SANE_Device sane;
129
130	SANE_Range *x_range;	/* x range w/out extension */
131	SANE_Range *y_range;	/* y range w/out extension */
132
133	Kodakaio_Connection_Type connection;
134
135	struct KodakaioCap *cap;
136};
137
138typedef struct Kodak_Device Kodak_Device;
139
140/* Structure holding an instance of a scanner (i.e. scanner has been opened) */
141struct KodakAio_Scanner
142{
143	struct KodakAio_Scanner *next;
144	struct Kodak_Device *hw;
145
146	int fd;
147
148	SANE_Option_Descriptor opt[NUM_OPTIONS];
149	Option_Value val[NUM_OPTIONS];
150	SANE_Parameters params;
151
152	SANE_Bool ack; /* scanner has finished a page (happens early with adf and padding) */
153	SANE_Bool eof; /* backend has finished a page (after padding with adf) */
154	SANE_Byte *buf, *end, *ptr;
155	SANE_Bool canceling;
156	SANE_Bool scanning; /* scan in progress */
157	SANE_Bool adf_loaded; /* paper in adf */
158	SANE_Int background[3]; /* stores background RGB components for padding */
159
160	SANE_Int left, top; /* in optres units? */
161	SANE_Int width, height; /* in optres units? */
162	/* SANE_Int threshold;  0..255 for lineart*/
163
164	/* image block data */
165	SANE_Int data_len;
166	SANE_Int block_len;
167	SANE_Int last_len; /* to be phased out */
168	SANE_Int blocks;  /* to be phased out */
169	SANE_Int counter;
170	SANE_Int bytes_unread; /* to track when to stop */
171
172	/* Used to store how many bytes of the current pixel line we have already
173	 * read in previous read attempts. Since each line will be padded
174	 * to multiples of 512 bytes, this is needed to know which bytes
175	 * to ignore. NOT NEEDED FOR KODAKAIO */
176	SANE_Int bytes_read_in_line;
177	SANE_Byte *line_buffer;
178	/* How many bytes are scanned per line */
179	SANE_Int scan_bytes_per_line;
180};
181
182typedef struct KodakAio_Scanner KodakAio_Scanner;
183
184struct mode_param
185{
186	int flags;
187	int colors;
188	int depth;
189};
190
191enum {
192	MODE_COLOR, MODE_GRAY, MODE_LINEART
193};
194
195#endif
196