1141cc406Sopenharmony_ci/* sane - Scanner Access Now Easy.
2141cc406Sopenharmony_ci
3141cc406Sopenharmony_ci   Copyright (C) 2019 Povilas Kanapickas <povilas@radix.lt>
4141cc406Sopenharmony_ci
5141cc406Sopenharmony_ci   This file is part of the SANE package.
6141cc406Sopenharmony_ci
7141cc406Sopenharmony_ci   This program is free software; you can redistribute it and/or
8141cc406Sopenharmony_ci   modify it under the terms of the GNU General Public License as
9141cc406Sopenharmony_ci   published by the Free Software Foundation; either version 2 of the
10141cc406Sopenharmony_ci   License, or (at your option) any later version.
11141cc406Sopenharmony_ci
12141cc406Sopenharmony_ci   This program is distributed in the hope that it will be useful, but
13141cc406Sopenharmony_ci   WITHOUT ANY WARRANTY; without even the implied warranty of
14141cc406Sopenharmony_ci   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15141cc406Sopenharmony_ci   General Public License for more details.
16141cc406Sopenharmony_ci
17141cc406Sopenharmony_ci   You should have received a copy of the GNU General Public License
18141cc406Sopenharmony_ci   along with this program.  If not, see <https://www.gnu.org/licenses/>.
19141cc406Sopenharmony_ci*/
20141cc406Sopenharmony_ci
21141cc406Sopenharmony_ci#ifndef BACKEND_GENESYS_ENUMS_H
22141cc406Sopenharmony_ci#define BACKEND_GENESYS_ENUMS_H
23141cc406Sopenharmony_ci
24141cc406Sopenharmony_ci#include <iostream>
25141cc406Sopenharmony_ci#include "serialize.h"
26141cc406Sopenharmony_ci
27141cc406Sopenharmony_cinamespace genesys {
28141cc406Sopenharmony_ci
29141cc406Sopenharmony_cienum class ScanMethod : unsigned {
30141cc406Sopenharmony_ci    // normal scan method
31141cc406Sopenharmony_ci    FLATBED = 0,
32141cc406Sopenharmony_ci    // scan using transparency adaptor
33141cc406Sopenharmony_ci    TRANSPARENCY = 1,
34141cc406Sopenharmony_ci    // scan using transparency adaptor via infrared channel
35141cc406Sopenharmony_ci    TRANSPARENCY_INFRARED = 2
36141cc406Sopenharmony_ci};
37141cc406Sopenharmony_ci
38141cc406Sopenharmony_ciinline std::ostream& operator<<(std::ostream& out, ScanMethod mode)
39141cc406Sopenharmony_ci{
40141cc406Sopenharmony_ci    switch (mode) {
41141cc406Sopenharmony_ci        case ScanMethod::FLATBED: out << "FLATBED"; return out;
42141cc406Sopenharmony_ci        case ScanMethod::TRANSPARENCY: out << "TRANSPARENCY"; return out;
43141cc406Sopenharmony_ci        case ScanMethod::TRANSPARENCY_INFRARED: out << "TRANSPARENCY_INFRARED"; return out;
44141cc406Sopenharmony_ci    }
45141cc406Sopenharmony_ci    return out;
46141cc406Sopenharmony_ci}
47141cc406Sopenharmony_ci
48141cc406Sopenharmony_ciinline void serialize(std::istream& str, ScanMethod& x)
49141cc406Sopenharmony_ci{
50141cc406Sopenharmony_ci    unsigned value;
51141cc406Sopenharmony_ci    serialize(str, value);
52141cc406Sopenharmony_ci    x = static_cast<ScanMethod>(value);
53141cc406Sopenharmony_ci}
54141cc406Sopenharmony_ci
55141cc406Sopenharmony_ciinline void serialize(std::ostream& str, ScanMethod& x)
56141cc406Sopenharmony_ci{
57141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
58141cc406Sopenharmony_ci    serialize(str, value);
59141cc406Sopenharmony_ci}
60141cc406Sopenharmony_ci
61141cc406Sopenharmony_ciconst char* scan_method_to_option_string(ScanMethod method);
62141cc406Sopenharmony_ciScanMethod option_string_to_scan_method(const std::string& str);
63141cc406Sopenharmony_ci
64141cc406Sopenharmony_cienum class ScanColorMode : unsigned {
65141cc406Sopenharmony_ci    LINEART = 0,
66141cc406Sopenharmony_ci    HALFTONE,
67141cc406Sopenharmony_ci    GRAY,
68141cc406Sopenharmony_ci    COLOR_SINGLE_PASS
69141cc406Sopenharmony_ci};
70141cc406Sopenharmony_ci
71141cc406Sopenharmony_ciinline std::ostream& operator<<(std::ostream& out, ScanColorMode mode)
72141cc406Sopenharmony_ci{
73141cc406Sopenharmony_ci    switch (mode) {
74141cc406Sopenharmony_ci        case ScanColorMode::LINEART: out << "LINEART"; return out;
75141cc406Sopenharmony_ci        case ScanColorMode::HALFTONE: out << "HALFTONE"; return out;
76141cc406Sopenharmony_ci        case ScanColorMode::GRAY: out << "GRAY"; return out;
77141cc406Sopenharmony_ci        case ScanColorMode::COLOR_SINGLE_PASS: out << "COLOR_SINGLE_PASS"; return out;
78141cc406Sopenharmony_ci    }
79141cc406Sopenharmony_ci    return out;
80141cc406Sopenharmony_ci}
81141cc406Sopenharmony_ci
82141cc406Sopenharmony_ciinline void serialize(std::istream& str, ScanColorMode& x)
83141cc406Sopenharmony_ci{
84141cc406Sopenharmony_ci    unsigned value;
85141cc406Sopenharmony_ci    serialize(str, value);
86141cc406Sopenharmony_ci    x = static_cast<ScanColorMode>(value);
87141cc406Sopenharmony_ci}
88141cc406Sopenharmony_ci
89141cc406Sopenharmony_ciinline void serialize(std::ostream& str, ScanColorMode& x)
90141cc406Sopenharmony_ci{
91141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
92141cc406Sopenharmony_ci    serialize(str, value);
93141cc406Sopenharmony_ci}
94141cc406Sopenharmony_ci
95141cc406Sopenharmony_ciconst char* scan_color_mode_to_option_string(ScanColorMode mode);
96141cc406Sopenharmony_ciScanColorMode option_string_to_scan_color_mode(const std::string& str);
97141cc406Sopenharmony_ci
98141cc406Sopenharmony_ci
99141cc406Sopenharmony_cienum class ScanHeadId : unsigned {
100141cc406Sopenharmony_ci    NONE = 0,
101141cc406Sopenharmony_ci    PRIMARY = 1 << 0,
102141cc406Sopenharmony_ci    SECONDARY = 1 << 1,
103141cc406Sopenharmony_ci    ALL = PRIMARY | SECONDARY,
104141cc406Sopenharmony_ci};
105141cc406Sopenharmony_ci
106141cc406Sopenharmony_ciinline ScanHeadId operator|(ScanHeadId left, ScanHeadId right)
107141cc406Sopenharmony_ci{
108141cc406Sopenharmony_ci    return static_cast<ScanHeadId>(static_cast<unsigned>(left) | static_cast<unsigned>(right));
109141cc406Sopenharmony_ci}
110141cc406Sopenharmony_ci
111141cc406Sopenharmony_ciinline ScanHeadId operator&(ScanHeadId left, ScanHeadId right)
112141cc406Sopenharmony_ci{
113141cc406Sopenharmony_ci    return static_cast<ScanHeadId>(static_cast<unsigned>(left) & static_cast<unsigned>(right));
114141cc406Sopenharmony_ci}
115141cc406Sopenharmony_ci
116141cc406Sopenharmony_ci
117141cc406Sopenharmony_cienum class ColorFilter : unsigned {
118141cc406Sopenharmony_ci    RED = 0,
119141cc406Sopenharmony_ci    GREEN,
120141cc406Sopenharmony_ci    BLUE,
121141cc406Sopenharmony_ci    NONE
122141cc406Sopenharmony_ci};
123141cc406Sopenharmony_ci
124141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, ColorFilter mode);
125141cc406Sopenharmony_ci
126141cc406Sopenharmony_ciinline void serialize(std::istream& str, ColorFilter& x)
127141cc406Sopenharmony_ci{
128141cc406Sopenharmony_ci    unsigned value;
129141cc406Sopenharmony_ci    serialize(str, value);
130141cc406Sopenharmony_ci    x = static_cast<ColorFilter>(value);
131141cc406Sopenharmony_ci}
132141cc406Sopenharmony_ci
133141cc406Sopenharmony_ciinline void serialize(std::ostream& str, ColorFilter& x)
134141cc406Sopenharmony_ci{
135141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
136141cc406Sopenharmony_ci    serialize(str, value);
137141cc406Sopenharmony_ci}
138141cc406Sopenharmony_ci
139141cc406Sopenharmony_cienum class ColorOrder
140141cc406Sopenharmony_ci{
141141cc406Sopenharmony_ci    RGB,
142141cc406Sopenharmony_ci    GBR,
143141cc406Sopenharmony_ci    BGR,
144141cc406Sopenharmony_ci};
145141cc406Sopenharmony_ci
146141cc406Sopenharmony_ci/*  Enum value naming conventions:
147141cc406Sopenharmony_ci    Full name must be included with the following exceptions:
148141cc406Sopenharmony_ci
149141cc406Sopenharmony_ci    Canon scanners omit "Canoscan" if present
150141cc406Sopenharmony_ci*/
151141cc406Sopenharmony_cienum class ModelId : unsigned
152141cc406Sopenharmony_ci{
153141cc406Sopenharmony_ci    UNKNOWN = 0,
154141cc406Sopenharmony_ci    CANON_4400F,
155141cc406Sopenharmony_ci    CANON_5600F,
156141cc406Sopenharmony_ci    CANON_8400F,
157141cc406Sopenharmony_ci    CANON_8600F,
158141cc406Sopenharmony_ci    CANON_IMAGE_FORMULA_101,
159141cc406Sopenharmony_ci    CANON_LIDE_50,
160141cc406Sopenharmony_ci    CANON_LIDE_60,
161141cc406Sopenharmony_ci    CANON_LIDE_80,
162141cc406Sopenharmony_ci    CANON_LIDE_90,
163141cc406Sopenharmony_ci    CANON_LIDE_100,
164141cc406Sopenharmony_ci    CANON_LIDE_110,
165141cc406Sopenharmony_ci    CANON_LIDE_120,
166141cc406Sopenharmony_ci    CANON_LIDE_200,
167141cc406Sopenharmony_ci    CANON_LIDE_210,
168141cc406Sopenharmony_ci    CANON_LIDE_220,
169141cc406Sopenharmony_ci    CANON_LIDE_700F,
170141cc406Sopenharmony_ci    DCT_DOCKETPORT_487,
171141cc406Sopenharmony_ci    HP_SCANJET_2300C,
172141cc406Sopenharmony_ci    HP_SCANJET_2400C,
173141cc406Sopenharmony_ci    HP_SCANJET_3670,
174141cc406Sopenharmony_ci    HP_SCANJET_4850C,
175141cc406Sopenharmony_ci    HP_SCANJET_G4010,
176141cc406Sopenharmony_ci    HP_SCANJET_G4050,
177141cc406Sopenharmony_ci    HP_SCANJET_N6310,
178141cc406Sopenharmony_ci    MEDION_MD5345,
179141cc406Sopenharmony_ci    PANASONIC_KV_SS080,
180141cc406Sopenharmony_ci    PENTAX_DSMOBILE_600,
181141cc406Sopenharmony_ci    PLUSTEK_OPTICBOOK_3800,
182141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200,
183141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200I,
184141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7300,
185141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7400,
186141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7500I,
187141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_8200I,
188141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_3600,
189141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_ST12,
190141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_ST24,
191141cc406Sopenharmony_ci    SYSCAN_DOCKETPORT_465,
192141cc406Sopenharmony_ci    SYSCAN_DOCKETPORT_467,
193141cc406Sopenharmony_ci    SYSCAN_DOCKETPORT_485,
194141cc406Sopenharmony_ci    SYSCAN_DOCKETPORT_665,
195141cc406Sopenharmony_ci    SYSCAN_DOCKETPORT_685,
196141cc406Sopenharmony_ci    UMAX_ASTRA_4500,
197141cc406Sopenharmony_ci    VISIONEER_7100,
198141cc406Sopenharmony_ci    VISIONEER_ROADWARRIOR,
199141cc406Sopenharmony_ci    VISIONEER_STROBE_XP100_REVISION3,
200141cc406Sopenharmony_ci    VISIONEER_STROBE_XP200,
201141cc406Sopenharmony_ci    VISIONEER_STROBE_XP300,
202141cc406Sopenharmony_ci    XEROX_2400,
203141cc406Sopenharmony_ci    XEROX_TRAVELSCANNER_100,
204141cc406Sopenharmony_ci};
205141cc406Sopenharmony_ci
206141cc406Sopenharmony_ciinline void serialize(std::istream& str, ModelId& x)
207141cc406Sopenharmony_ci{
208141cc406Sopenharmony_ci    unsigned value;
209141cc406Sopenharmony_ci    serialize(str, value);
210141cc406Sopenharmony_ci    x = static_cast<ModelId>(value);
211141cc406Sopenharmony_ci}
212141cc406Sopenharmony_ci
213141cc406Sopenharmony_ciinline void serialize(std::ostream& str, ModelId& x)
214141cc406Sopenharmony_ci{
215141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
216141cc406Sopenharmony_ci    serialize(str, value);
217141cc406Sopenharmony_ci}
218141cc406Sopenharmony_ci
219141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, ModelId id);
220141cc406Sopenharmony_ci
221141cc406Sopenharmony_cienum class SensorId : unsigned
222141cc406Sopenharmony_ci{
223141cc406Sopenharmony_ci    UNKNOWN = 0,
224141cc406Sopenharmony_ci    CCD_5345,
225141cc406Sopenharmony_ci    CCD_CANON_4400F,
226141cc406Sopenharmony_ci    CCD_CANON_5600F,
227141cc406Sopenharmony_ci    CCD_CANON_8400F,
228141cc406Sopenharmony_ci    CCD_CANON_8600F,
229141cc406Sopenharmony_ci    CCD_DP665,
230141cc406Sopenharmony_ci    CCD_DP685,
231141cc406Sopenharmony_ci    CCD_DSMOBILE600,
232141cc406Sopenharmony_ci    CCD_DOCKETPORT_487,
233141cc406Sopenharmony_ci    CCD_G4050,
234141cc406Sopenharmony_ci    CCD_HP2300,
235141cc406Sopenharmony_ci    CCD_HP2400,
236141cc406Sopenharmony_ci    CCD_HP3670,
237141cc406Sopenharmony_ci    CCD_HP_N6310,
238141cc406Sopenharmony_ci    CCD_HP_4850C,
239141cc406Sopenharmony_ci    CCD_IMG101,
240141cc406Sopenharmony_ci    CCD_KVSS080,
241141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICBOOK_3800,
242141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_7200,
243141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_7200I,
244141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_7300,
245141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_7400,
246141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_7500I,
247141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICFILM_8200I,
248141cc406Sopenharmony_ci    CCD_PLUSTEK_OPTICPRO_3600,
249141cc406Sopenharmony_ci    CCD_ROADWARRIOR,
250141cc406Sopenharmony_ci    CCD_ST12,         // SONY ILX548: 5340 Pixel  ???
251141cc406Sopenharmony_ci    CCD_ST24,         // SONY ILX569: 10680 Pixel ???
252141cc406Sopenharmony_ci    CCD_UMAX,
253141cc406Sopenharmony_ci    CCD_XP300,
254141cc406Sopenharmony_ci    CIS_CANON_LIDE_35,
255141cc406Sopenharmony_ci    CIS_CANON_LIDE_60,
256141cc406Sopenharmony_ci    CIS_CANON_LIDE_80,
257141cc406Sopenharmony_ci    CIS_CANON_LIDE_90,
258141cc406Sopenharmony_ci    CIS_CANON_LIDE_100,
259141cc406Sopenharmony_ci    CIS_CANON_LIDE_110,
260141cc406Sopenharmony_ci    CIS_CANON_LIDE_120,
261141cc406Sopenharmony_ci    CIS_CANON_LIDE_200,
262141cc406Sopenharmony_ci    CIS_CANON_LIDE_210,
263141cc406Sopenharmony_ci    CIS_CANON_LIDE_220,
264141cc406Sopenharmony_ci    CIS_CANON_LIDE_700F,
265141cc406Sopenharmony_ci    CIS_XP200,
266141cc406Sopenharmony_ci};
267141cc406Sopenharmony_ci
268141cc406Sopenharmony_ciinline void serialize(std::istream& str, SensorId& x)
269141cc406Sopenharmony_ci{
270141cc406Sopenharmony_ci    unsigned value;
271141cc406Sopenharmony_ci    serialize(str, value);
272141cc406Sopenharmony_ci    x = static_cast<SensorId>(value);
273141cc406Sopenharmony_ci}
274141cc406Sopenharmony_ci
275141cc406Sopenharmony_ciinline void serialize(std::ostream& str, SensorId& x)
276141cc406Sopenharmony_ci{
277141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
278141cc406Sopenharmony_ci    serialize(str, value);
279141cc406Sopenharmony_ci}
280141cc406Sopenharmony_ci
281141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, SensorId id);
282141cc406Sopenharmony_ci
283141cc406Sopenharmony_ci
284141cc406Sopenharmony_cienum class AdcId : unsigned
285141cc406Sopenharmony_ci{
286141cc406Sopenharmony_ci    UNKNOWN = 0,
287141cc406Sopenharmony_ci    AD_XP200,
288141cc406Sopenharmony_ci    CANON_LIDE_35,
289141cc406Sopenharmony_ci    CANON_LIDE_80,
290141cc406Sopenharmony_ci    CANON_LIDE_90,
291141cc406Sopenharmony_ci    CANON_LIDE_110,
292141cc406Sopenharmony_ci    CANON_LIDE_120,
293141cc406Sopenharmony_ci    CANON_LIDE_200,
294141cc406Sopenharmony_ci    CANON_LIDE_700F,
295141cc406Sopenharmony_ci    CANON_4400F,
296141cc406Sopenharmony_ci    CANON_5600F,
297141cc406Sopenharmony_ci    CANON_8400F,
298141cc406Sopenharmony_ci    CANON_8600F,
299141cc406Sopenharmony_ci    G4050,
300141cc406Sopenharmony_ci    IMG101,
301141cc406Sopenharmony_ci    KVSS080,
302141cc406Sopenharmony_ci    PLUSTEK_OPTICBOOK_3800,
303141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200,
304141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200I,
305141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7300,
306141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7400,
307141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7500I,
308141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_8200I,
309141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_3600,
310141cc406Sopenharmony_ci    WOLFSON_5345,
311141cc406Sopenharmony_ci    WOLFSON_DSM600,
312141cc406Sopenharmony_ci    WOLFSON_HP2300,
313141cc406Sopenharmony_ci    WOLFSON_HP2400,
314141cc406Sopenharmony_ci    WOLFSON_HP3670,
315141cc406Sopenharmony_ci    WOLFSON_ST12,
316141cc406Sopenharmony_ci    WOLFSON_ST24,
317141cc406Sopenharmony_ci    WOLFSON_UMAX,
318141cc406Sopenharmony_ci    WOLFSON_XP300,
319141cc406Sopenharmony_ci};
320141cc406Sopenharmony_ci
321141cc406Sopenharmony_ciinline void serialize(std::istream& str, AdcId& x)
322141cc406Sopenharmony_ci{
323141cc406Sopenharmony_ci    unsigned value;
324141cc406Sopenharmony_ci    serialize(str, value);
325141cc406Sopenharmony_ci    x = static_cast<AdcId>(value);
326141cc406Sopenharmony_ci}
327141cc406Sopenharmony_ci
328141cc406Sopenharmony_ciinline void serialize(std::ostream& str, AdcId& x)
329141cc406Sopenharmony_ci{
330141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
331141cc406Sopenharmony_ci    serialize(str, value);
332141cc406Sopenharmony_ci}
333141cc406Sopenharmony_ci
334141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, AdcId id);
335141cc406Sopenharmony_ci
336141cc406Sopenharmony_cienum class GpioId : unsigned
337141cc406Sopenharmony_ci{
338141cc406Sopenharmony_ci    UNKNOWN = 0,
339141cc406Sopenharmony_ci    CANON_LIDE_35,
340141cc406Sopenharmony_ci    CANON_LIDE_80,
341141cc406Sopenharmony_ci    CANON_LIDE_90,
342141cc406Sopenharmony_ci    CANON_LIDE_110,
343141cc406Sopenharmony_ci    CANON_LIDE_120,
344141cc406Sopenharmony_ci    CANON_LIDE_200,
345141cc406Sopenharmony_ci    CANON_LIDE_210,
346141cc406Sopenharmony_ci    CANON_LIDE_700F,
347141cc406Sopenharmony_ci    CANON_4400F,
348141cc406Sopenharmony_ci    CANON_5600F,
349141cc406Sopenharmony_ci    CANON_8400F,
350141cc406Sopenharmony_ci    CANON_8600F,
351141cc406Sopenharmony_ci    DP665,
352141cc406Sopenharmony_ci    DP685,
353141cc406Sopenharmony_ci    G4050,
354141cc406Sopenharmony_ci    G4010,
355141cc406Sopenharmony_ci    HP2300,
356141cc406Sopenharmony_ci    HP2400,
357141cc406Sopenharmony_ci    HP3670,
358141cc406Sopenharmony_ci    HP_N6310,
359141cc406Sopenharmony_ci    IMG101,
360141cc406Sopenharmony_ci    KVSS080,
361141cc406Sopenharmony_ci    MD_5345,
362141cc406Sopenharmony_ci    PLUSTEK_OPTICBOOK_3800,
363141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200,
364141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200I,
365141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7300,
366141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7400,
367141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7500I,
368141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_8200I,
369141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_3600,
370141cc406Sopenharmony_ci    ST12,
371141cc406Sopenharmony_ci    ST24,
372141cc406Sopenharmony_ci    UMAX,
373141cc406Sopenharmony_ci    XP200,
374141cc406Sopenharmony_ci    XP300,
375141cc406Sopenharmony_ci};
376141cc406Sopenharmony_ci
377141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, GpioId id);
378141cc406Sopenharmony_ci
379141cc406Sopenharmony_cienum class MotorId : unsigned
380141cc406Sopenharmony_ci{
381141cc406Sopenharmony_ci    UNKNOWN = 0,
382141cc406Sopenharmony_ci    CANON_LIDE_100,
383141cc406Sopenharmony_ci    CANON_LIDE_110,
384141cc406Sopenharmony_ci    CANON_LIDE_120,
385141cc406Sopenharmony_ci    CANON_LIDE_200,
386141cc406Sopenharmony_ci    CANON_LIDE_210,
387141cc406Sopenharmony_ci    CANON_LIDE_35,
388141cc406Sopenharmony_ci    CANON_LIDE_60,
389141cc406Sopenharmony_ci    CANON_LIDE_700,
390141cc406Sopenharmony_ci    CANON_LIDE_80,
391141cc406Sopenharmony_ci    CANON_LIDE_90,
392141cc406Sopenharmony_ci    CANON_4400F,
393141cc406Sopenharmony_ci    CANON_5600F,
394141cc406Sopenharmony_ci    CANON_8400F,
395141cc406Sopenharmony_ci    CANON_8600F,
396141cc406Sopenharmony_ci    DP665,
397141cc406Sopenharmony_ci    DSMOBILE_600,
398141cc406Sopenharmony_ci    G4050,
399141cc406Sopenharmony_ci    HP2300,
400141cc406Sopenharmony_ci    HP2400,
401141cc406Sopenharmony_ci    HP3670,
402141cc406Sopenharmony_ci    IMG101,
403141cc406Sopenharmony_ci    KVSS080,
404141cc406Sopenharmony_ci    MD_5345,
405141cc406Sopenharmony_ci    PLUSTEK_OPTICBOOK_3800,
406141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200,
407141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7200I,
408141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7300,
409141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7400,
410141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_7500I,
411141cc406Sopenharmony_ci    PLUSTEK_OPTICFILM_8200I,
412141cc406Sopenharmony_ci    PLUSTEK_OPTICPRO_3600,
413141cc406Sopenharmony_ci    ROADWARRIOR,
414141cc406Sopenharmony_ci    ST24,
415141cc406Sopenharmony_ci    UMAX,
416141cc406Sopenharmony_ci    XP200,
417141cc406Sopenharmony_ci    XP300,
418141cc406Sopenharmony_ci};
419141cc406Sopenharmony_ci
420141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, MotorId id);
421141cc406Sopenharmony_ci
422141cc406Sopenharmony_cienum class StepType : unsigned
423141cc406Sopenharmony_ci{
424141cc406Sopenharmony_ci    FULL = 0,
425141cc406Sopenharmony_ci    HALF = 1,
426141cc406Sopenharmony_ci    QUARTER = 2,
427141cc406Sopenharmony_ci    EIGHTH = 3,
428141cc406Sopenharmony_ci};
429141cc406Sopenharmony_ci
430141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, StepType type);
431141cc406Sopenharmony_ci
432141cc406Sopenharmony_ciinline bool operator<(StepType lhs, StepType rhs)
433141cc406Sopenharmony_ci{
434141cc406Sopenharmony_ci    return static_cast<unsigned>(lhs) < static_cast<unsigned>(rhs);
435141cc406Sopenharmony_ci}
436141cc406Sopenharmony_ciinline bool operator<=(StepType lhs, StepType rhs)
437141cc406Sopenharmony_ci{
438141cc406Sopenharmony_ci    return static_cast<unsigned>(lhs) <= static_cast<unsigned>(rhs);
439141cc406Sopenharmony_ci}
440141cc406Sopenharmony_ciinline bool operator>(StepType lhs, StepType rhs)
441141cc406Sopenharmony_ci{
442141cc406Sopenharmony_ci    return static_cast<unsigned>(lhs) > static_cast<unsigned>(rhs);
443141cc406Sopenharmony_ci}
444141cc406Sopenharmony_ciinline bool operator>=(StepType lhs, StepType rhs)
445141cc406Sopenharmony_ci{
446141cc406Sopenharmony_ci    return static_cast<unsigned>(lhs) >= static_cast<unsigned>(rhs);
447141cc406Sopenharmony_ci}
448141cc406Sopenharmony_ci
449141cc406Sopenharmony_cienum class AsicType : unsigned
450141cc406Sopenharmony_ci{
451141cc406Sopenharmony_ci    UNKNOWN = 0,
452141cc406Sopenharmony_ci    GL646,
453141cc406Sopenharmony_ci    GL841,
454141cc406Sopenharmony_ci    GL842,
455141cc406Sopenharmony_ci    GL843,
456141cc406Sopenharmony_ci    GL845,
457141cc406Sopenharmony_ci    GL846,
458141cc406Sopenharmony_ci    GL847,
459141cc406Sopenharmony_ci    GL124,
460141cc406Sopenharmony_ci};
461141cc406Sopenharmony_ci
462141cc406Sopenharmony_ci
463141cc406Sopenharmony_cienum class ModelFlag : unsigned
464141cc406Sopenharmony_ci{
465141cc406Sopenharmony_ci    // no flags
466141cc406Sopenharmony_ci    NONE = 0,
467141cc406Sopenharmony_ci
468141cc406Sopenharmony_ci    // scanner is not tested, print a warning as it's likely it won't work
469141cc406Sopenharmony_ci    UNTESTED = 1 << 0,
470141cc406Sopenharmony_ci
471141cc406Sopenharmony_ci    // use 14-bit gamma table instead of 12-bit
472141cc406Sopenharmony_ci    GAMMA_14BIT = 1 << 1,
473141cc406Sopenharmony_ci
474141cc406Sopenharmony_ci    // perform lamp warmup
475141cc406Sopenharmony_ci    WARMUP = 1 << 4,
476141cc406Sopenharmony_ci
477141cc406Sopenharmony_ci    // whether to disable offset and gain calibration
478141cc406Sopenharmony_ci    DISABLE_ADC_CALIBRATION = 1 << 5,
479141cc406Sopenharmony_ci
480141cc406Sopenharmony_ci    // whether to disable exposure calibration (this currently is only done on CIS
481141cc406Sopenharmony_ci    // scanners)
482141cc406Sopenharmony_ci    DISABLE_EXPOSURE_CALIBRATION = 1 << 6,
483141cc406Sopenharmony_ci
484141cc406Sopenharmony_ci    // whether to disable shading calibration completely
485141cc406Sopenharmony_ci    DISABLE_SHADING_CALIBRATION = 1 << 7,
486141cc406Sopenharmony_ci
487141cc406Sopenharmony_ci    // do dark calibration
488141cc406Sopenharmony_ci    DARK_CALIBRATION = 1 << 8,
489141cc406Sopenharmony_ci
490141cc406Sopenharmony_ci    // host-side calibration uses a complete scan
491141cc406Sopenharmony_ci    HOST_SIDE_CALIBRATION_COMPLETE_SCAN = 1 << 9,
492141cc406Sopenharmony_ci
493141cc406Sopenharmony_ci    // whether scanner must wait for the head while parking
494141cc406Sopenharmony_ci    MUST_WAIT = 1 << 10,
495141cc406Sopenharmony_ci
496141cc406Sopenharmony_ci    // use zeroes for dark calibration
497141cc406Sopenharmony_ci    USE_CONSTANT_FOR_DARK_CALIBRATION = 1 << 11,
498141cc406Sopenharmony_ci
499141cc406Sopenharmony_ci    // do dark and white calibration in one run
500141cc406Sopenharmony_ci    DARK_WHITE_CALIBRATION = 1 << 12,
501141cc406Sopenharmony_ci
502141cc406Sopenharmony_ci    // allow custom gamma tables
503141cc406Sopenharmony_ci    CUSTOM_GAMMA = 1 << 13,
504141cc406Sopenharmony_ci
505141cc406Sopenharmony_ci    // disable fast feeding mode on this scanner
506141cc406Sopenharmony_ci    DISABLE_FAST_FEEDING = 1 << 14,
507141cc406Sopenharmony_ci
508141cc406Sopenharmony_ci    // scan gray scans as color and combine on host side
509141cc406Sopenharmony_ci    HOST_SIDE_GRAY = 1 << 15,
510141cc406Sopenharmony_ci
511141cc406Sopenharmony_ci    // the scanner uses multi-segment sensors that must be handled during calibration
512141cc406Sopenharmony_ci    SIS_SENSOR = 1 << 16,
513141cc406Sopenharmony_ci
514141cc406Sopenharmony_ci    // the head must be reparked between shading scans
515141cc406Sopenharmony_ci    SHADING_REPARK = 1 << 18,
516141cc406Sopenharmony_ci
517141cc406Sopenharmony_ci    // the scanner outputs inverted pixel data
518141cc406Sopenharmony_ci    INVERT_PIXEL_DATA = 1 << 19,
519141cc406Sopenharmony_ci
520141cc406Sopenharmony_ci    // the scanner outputs 16-bit data that is byte-inverted
521141cc406Sopenharmony_ci    SWAP_16BIT_DATA = 1 << 20,
522141cc406Sopenharmony_ci
523141cc406Sopenharmony_ci    // the scanner has transparency, but it's implemented using only one motor
524141cc406Sopenharmony_ci    UTA_NO_SECONDARY_MOTOR = 1 << 21,
525141cc406Sopenharmony_ci
526141cc406Sopenharmony_ci    // the scanner has transparency, but it's implemented using only one lamp
527141cc406Sopenharmony_ci    TA_NO_SECONDARY_LAMP = 1 << 22,
528141cc406Sopenharmony_ci};
529141cc406Sopenharmony_ci
530141cc406Sopenharmony_ciinline ModelFlag operator|(ModelFlag left, ModelFlag right)
531141cc406Sopenharmony_ci{
532141cc406Sopenharmony_ci    return static_cast<ModelFlag>(static_cast<unsigned>(left) | static_cast<unsigned>(right));
533141cc406Sopenharmony_ci}
534141cc406Sopenharmony_ci
535141cc406Sopenharmony_ciinline ModelFlag& operator|=(ModelFlag& left, ModelFlag right)
536141cc406Sopenharmony_ci{
537141cc406Sopenharmony_ci    left = left | right;
538141cc406Sopenharmony_ci    return left;
539141cc406Sopenharmony_ci}
540141cc406Sopenharmony_ci
541141cc406Sopenharmony_ciinline ModelFlag operator&(ModelFlag left, ModelFlag right)
542141cc406Sopenharmony_ci{
543141cc406Sopenharmony_ci    return static_cast<ModelFlag>(static_cast<unsigned>(left) & static_cast<unsigned>(right));
544141cc406Sopenharmony_ci}
545141cc406Sopenharmony_ci
546141cc406Sopenharmony_ciinline bool has_flag(ModelFlag flags, ModelFlag which)
547141cc406Sopenharmony_ci{
548141cc406Sopenharmony_ci    return (flags & which) == which;
549141cc406Sopenharmony_ci}
550141cc406Sopenharmony_ci
551141cc406Sopenharmony_ci
552141cc406Sopenharmony_cienum class ScanFlag : unsigned
553141cc406Sopenharmony_ci{
554141cc406Sopenharmony_ci    NONE = 0,
555141cc406Sopenharmony_ci    SINGLE_LINE = 1 << 0,
556141cc406Sopenharmony_ci    DISABLE_SHADING = 1 << 1,
557141cc406Sopenharmony_ci    DISABLE_GAMMA = 1 << 2,
558141cc406Sopenharmony_ci    DISABLE_BUFFER_FULL_MOVE = 1 << 3,
559141cc406Sopenharmony_ci
560141cc406Sopenharmony_ci    // if this flag is set the sensor will always be handled ignoring staggering of multiple
561141cc406Sopenharmony_ci    // sensors to achieve high resolution.
562141cc406Sopenharmony_ci    IGNORE_STAGGER_OFFSET = 1 << 4,
563141cc406Sopenharmony_ci
564141cc406Sopenharmony_ci    // if this flag is set the sensor will always be handled as if the components that scan
565141cc406Sopenharmony_ci    // different colors are at the same position.
566141cc406Sopenharmony_ci    IGNORE_COLOR_OFFSET = 1 << 5,
567141cc406Sopenharmony_ci
568141cc406Sopenharmony_ci    DISABLE_LAMP = 1 << 6,
569141cc406Sopenharmony_ci    CALIBRATION = 1 << 7,
570141cc406Sopenharmony_ci    FEEDING = 1 << 8,
571141cc406Sopenharmony_ci    USE_XPA = 1 << 9,
572141cc406Sopenharmony_ci    ENABLE_LEDADD = 1 << 10,
573141cc406Sopenharmony_ci    REVERSE = 1 << 12,
574141cc406Sopenharmony_ci
575141cc406Sopenharmony_ci    // the scanner should return head to home position automatically after scan.
576141cc406Sopenharmony_ci    AUTO_GO_HOME = 1 << 13,
577141cc406Sopenharmony_ci};
578141cc406Sopenharmony_ci
579141cc406Sopenharmony_ciinline ScanFlag operator|(ScanFlag left, ScanFlag right)
580141cc406Sopenharmony_ci{
581141cc406Sopenharmony_ci    return static_cast<ScanFlag>(static_cast<unsigned>(left) | static_cast<unsigned>(right));
582141cc406Sopenharmony_ci}
583141cc406Sopenharmony_ci
584141cc406Sopenharmony_ciinline ScanFlag& operator|=(ScanFlag& left, ScanFlag right)
585141cc406Sopenharmony_ci{
586141cc406Sopenharmony_ci    left = left | right;
587141cc406Sopenharmony_ci    return left;
588141cc406Sopenharmony_ci}
589141cc406Sopenharmony_ci
590141cc406Sopenharmony_ciinline ScanFlag operator&(ScanFlag left, ScanFlag right)
591141cc406Sopenharmony_ci{
592141cc406Sopenharmony_ci    return static_cast<ScanFlag>(static_cast<unsigned>(left) & static_cast<unsigned>(right));
593141cc406Sopenharmony_ci}
594141cc406Sopenharmony_ci
595141cc406Sopenharmony_ciinline bool has_flag(ScanFlag flags, ScanFlag which)
596141cc406Sopenharmony_ci{
597141cc406Sopenharmony_ci    return (flags & which) == which;
598141cc406Sopenharmony_ci}
599141cc406Sopenharmony_ci
600141cc406Sopenharmony_ciinline void serialize(std::istream& str, ScanFlag& x)
601141cc406Sopenharmony_ci{
602141cc406Sopenharmony_ci    unsigned value;
603141cc406Sopenharmony_ci    serialize(str, value);
604141cc406Sopenharmony_ci    x = static_cast<ScanFlag>(value);
605141cc406Sopenharmony_ci}
606141cc406Sopenharmony_ci
607141cc406Sopenharmony_ciinline void serialize(std::ostream& str, ScanFlag& x)
608141cc406Sopenharmony_ci{
609141cc406Sopenharmony_ci    unsigned value = static_cast<unsigned>(x);
610141cc406Sopenharmony_ci    serialize(str, value);
611141cc406Sopenharmony_ci}
612141cc406Sopenharmony_ci
613141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, ScanFlag flags);
614141cc406Sopenharmony_ci
615141cc406Sopenharmony_ci
616141cc406Sopenharmony_cienum class Direction : unsigned
617141cc406Sopenharmony_ci{
618141cc406Sopenharmony_ci    FORWARD = 0,
619141cc406Sopenharmony_ci    BACKWARD = 1
620141cc406Sopenharmony_ci};
621141cc406Sopenharmony_ci
622141cc406Sopenharmony_cienum class MotorMode : unsigned
623141cc406Sopenharmony_ci{
624141cc406Sopenharmony_ci    PRIMARY = 0,
625141cc406Sopenharmony_ci    PRIMARY_AND_SECONDARY,
626141cc406Sopenharmony_ci    SECONDARY,
627141cc406Sopenharmony_ci};
628141cc406Sopenharmony_ci
629141cc406Sopenharmony_ci} // namespace genesys
630141cc406Sopenharmony_ci
631141cc406Sopenharmony_ci#endif // BACKEND_GENESYS_ENUMS_H
632