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#define DEBUG_DECLARE_ONLY
22141cc406Sopenharmony_ci
23141cc406Sopenharmony_ci#include "sensor.h"
24141cc406Sopenharmony_ci#include "utilities.h"
25141cc406Sopenharmony_ci#include <iomanip>
26141cc406Sopenharmony_ci
27141cc406Sopenharmony_cinamespace genesys {
28141cc406Sopenharmony_ci
29141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const StaggerConfig& config)
30141cc406Sopenharmony_ci{
31141cc406Sopenharmony_ci    if (config.shifts().empty()) {
32141cc406Sopenharmony_ci        out << "StaggerConfig{}";
33141cc406Sopenharmony_ci        return out;
34141cc406Sopenharmony_ci    }
35141cc406Sopenharmony_ci
36141cc406Sopenharmony_ci    out << "StaggerConfig{ " << config.shifts().front();
37141cc406Sopenharmony_ci    for (auto it = std::next(config.shifts().begin()); it != config.shifts().end(); ++it) {
38141cc406Sopenharmony_ci        out << ", " << *it;
39141cc406Sopenharmony_ci    }
40141cc406Sopenharmony_ci    out << " }";
41141cc406Sopenharmony_ci    return out;
42141cc406Sopenharmony_ci}
43141cc406Sopenharmony_ci
44141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const FrontendType& type)
45141cc406Sopenharmony_ci{
46141cc406Sopenharmony_ci    switch (type) {
47141cc406Sopenharmony_ci        case FrontendType::UNKNOWN: out << "UNKNOWN"; break;
48141cc406Sopenharmony_ci        case FrontendType::WOLFSON: out << "WOLFSON"; break;
49141cc406Sopenharmony_ci        case FrontendType::ANALOG_DEVICES: out << "ANALOG_DEVICES"; break;
50141cc406Sopenharmony_ci        case FrontendType::CANON_LIDE_80: out << "CANON_LIDE_80"; break;
51141cc406Sopenharmony_ci        case FrontendType::WOLFSON_GL841: out << "WOLFSON_GL841"; break;
52141cc406Sopenharmony_ci        case FrontendType::WOLFSON_GL846: out << "WOLFSON_GL846"; break;
53141cc406Sopenharmony_ci        case FrontendType::ANALOG_DEVICES_GL847: out << "ANALOG_DEVICES_GL847"; break;
54141cc406Sopenharmony_ci        case FrontendType::WOLFSON_GL124: out << "WOLFSON_GL124"; break;
55141cc406Sopenharmony_ci        default: out << "(unknown value)";
56141cc406Sopenharmony_ci    }
57141cc406Sopenharmony_ci    return out;
58141cc406Sopenharmony_ci}
59141cc406Sopenharmony_ci
60141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const GenesysFrontendLayout& layout)
61141cc406Sopenharmony_ci{
62141cc406Sopenharmony_ci    StreamStateSaver state_saver{out};
63141cc406Sopenharmony_ci
64141cc406Sopenharmony_ci    out << "GenesysFrontendLayout{\n"
65141cc406Sopenharmony_ci        << "    type: " << layout.type << '\n'
66141cc406Sopenharmony_ci        << std::hex
67141cc406Sopenharmony_ci        << "    offset_addr[0]: " << layout.offset_addr[0] << '\n'
68141cc406Sopenharmony_ci        << "    offset_addr[1]: " << layout.offset_addr[1] << '\n'
69141cc406Sopenharmony_ci        << "    offset_addr[2]: " << layout.offset_addr[2] << '\n'
70141cc406Sopenharmony_ci        << "    gain_addr[0]: " << layout.gain_addr[0] << '\n'
71141cc406Sopenharmony_ci        << "    gain_addr[1]: " << layout.gain_addr[1] << '\n'
72141cc406Sopenharmony_ci        << "    gain_addr[2]: " << layout.gain_addr[2] << '\n'
73141cc406Sopenharmony_ci        << '}';
74141cc406Sopenharmony_ci    return out;
75141cc406Sopenharmony_ci}
76141cc406Sopenharmony_ci
77141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const Genesys_Frontend& frontend)
78141cc406Sopenharmony_ci{
79141cc406Sopenharmony_ci    StreamStateSaver state_saver{out};
80141cc406Sopenharmony_ci
81141cc406Sopenharmony_ci    out << "Genesys_Frontend{\n"
82141cc406Sopenharmony_ci        << "    id: " << frontend.id << '\n'
83141cc406Sopenharmony_ci        << "    regs: " << format_indent_braced_list(4, frontend.regs) << '\n'
84141cc406Sopenharmony_ci        << std::hex
85141cc406Sopenharmony_ci        << "    reg2[0]: " << frontend.reg2[0] << '\n'
86141cc406Sopenharmony_ci        << "    reg2[1]: " << frontend.reg2[1] << '\n'
87141cc406Sopenharmony_ci        << "    reg2[2]: " << frontend.reg2[2] << '\n'
88141cc406Sopenharmony_ci        << "    layout: " << format_indent_braced_list(4, frontend.layout) << '\n'
89141cc406Sopenharmony_ci        << '}';
90141cc406Sopenharmony_ci    return out;
91141cc406Sopenharmony_ci}
92141cc406Sopenharmony_ci
93141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const SensorExposure& exposure)
94141cc406Sopenharmony_ci{
95141cc406Sopenharmony_ci    out << "SensorExposure{\n"
96141cc406Sopenharmony_ci        << "    red: " << exposure.red << '\n'
97141cc406Sopenharmony_ci        << "    green: " << exposure.green << '\n'
98141cc406Sopenharmony_ci        << "    blue: " << exposure.blue << '\n'
99141cc406Sopenharmony_ci        << '}';
100141cc406Sopenharmony_ci    return out;
101141cc406Sopenharmony_ci}
102141cc406Sopenharmony_ci
103141cc406Sopenharmony_cistd::ostream& operator<<(std::ostream& out, const Genesys_Sensor& sensor)
104141cc406Sopenharmony_ci{
105141cc406Sopenharmony_ci    out << "Genesys_Sensor{\n"
106141cc406Sopenharmony_ci        << "    sensor_id: " << static_cast<unsigned>(sensor.sensor_id) << '\n'
107141cc406Sopenharmony_ci        << "    full_resolution: " << sensor.full_resolution << '\n'
108141cc406Sopenharmony_ci        << "    optical_resolution: " << sensor.get_optical_resolution() << '\n'
109141cc406Sopenharmony_ci        << "    resolutions: " << format_indent_braced_list(4, sensor.resolutions) << '\n'
110141cc406Sopenharmony_ci        << "    channels: " << format_vector_unsigned(4, sensor.channels) << '\n'
111141cc406Sopenharmony_ci        << "    method: " << sensor.method << '\n'
112141cc406Sopenharmony_ci        << "    register_dpihw: " << sensor.register_dpihw << '\n'
113141cc406Sopenharmony_ci        << "    register_dpiset: " << sensor.register_dpiset << '\n'
114141cc406Sopenharmony_ci        << "    shading_factor: " << sensor.shading_factor << '\n'
115141cc406Sopenharmony_ci        << "    shading_pixel_offset: " << sensor.shading_pixel_offset << '\n'
116141cc406Sopenharmony_ci        << "    pixel_count_ratio: " << sensor.pixel_count_ratio << '\n'
117141cc406Sopenharmony_ci        << "    output_pixel_offset: " << sensor.output_pixel_offset << '\n'
118141cc406Sopenharmony_ci        << "    black_pixels: " << sensor.black_pixels << '\n'
119141cc406Sopenharmony_ci        << "    dummy_pixel: " << sensor.dummy_pixel << '\n'
120141cc406Sopenharmony_ci        << "    fau_gain_white_ref: " << sensor.fau_gain_white_ref << '\n'
121141cc406Sopenharmony_ci        << "    gain_white_ref: " << sensor.gain_white_ref << '\n'
122141cc406Sopenharmony_ci        << "    exposure: " << format_indent_braced_list(4, sensor.exposure) << '\n'
123141cc406Sopenharmony_ci        << "    exposure_lperiod: " << sensor.exposure_lperiod << '\n'
124141cc406Sopenharmony_ci        << "    segment_size: " << sensor.segment_size << '\n'
125141cc406Sopenharmony_ci        << "    segment_order: "
126141cc406Sopenharmony_ci        << format_indent_braced_list(4, format_vector_unsigned(4, sensor.segment_order)) << '\n'
127141cc406Sopenharmony_ci        << "    stagger_x: " << sensor.stagger_x << '\n'
128141cc406Sopenharmony_ci        << "    stagger_y: " << sensor.stagger_y << '\n'
129141cc406Sopenharmony_ci        << "    use_host_side_calib: " << sensor.use_host_side_calib << '\n'
130141cc406Sopenharmony_ci        << "    custom_regs: " << format_indent_braced_list(4, sensor.custom_regs) << '\n'
131141cc406Sopenharmony_ci        << "    custom_fe_regs: " << format_indent_braced_list(4, sensor.custom_fe_regs) << '\n'
132141cc406Sopenharmony_ci        << "    gamma.red: " << sensor.gamma[0] << '\n'
133141cc406Sopenharmony_ci        << "    gamma.green: " << sensor.gamma[1] << '\n'
134141cc406Sopenharmony_ci        << "    gamma.blue: " << sensor.gamma[2] << '\n'
135141cc406Sopenharmony_ci        << "}";
136141cc406Sopenharmony_ci    return out;
137141cc406Sopenharmony_ci}
138141cc406Sopenharmony_ci
139141cc406Sopenharmony_ci} // namespace genesys
140