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