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 "test_scanner_interface.h" 24141cc406Sopenharmony_ci#include "device.h" 25141cc406Sopenharmony_ci#include <cstring> 26141cc406Sopenharmony_ci 27141cc406Sopenharmony_cinamespace genesys { 28141cc406Sopenharmony_ci 29141cc406Sopenharmony_ciTestScannerInterface::TestScannerInterface(Genesys_Device* dev, std::uint16_t vendor_id, 30141cc406Sopenharmony_ci std::uint16_t product_id, std::uint16_t bcd_device) : 31141cc406Sopenharmony_ci dev_{dev}, 32141cc406Sopenharmony_ci usb_dev_{vendor_id, product_id, bcd_device} 33141cc406Sopenharmony_ci{ 34141cc406Sopenharmony_ci // initialize status registers 35141cc406Sopenharmony_ci if (dev_->model->asic_type == AsicType::GL124) { 36141cc406Sopenharmony_ci write_register(0x101, 0x00); 37141cc406Sopenharmony_ci } else { 38141cc406Sopenharmony_ci write_register(0x41, 0x00); 39141cc406Sopenharmony_ci } 40141cc406Sopenharmony_ci if (dev_->model->asic_type == AsicType::GL841 || 41141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL842 || 42141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL843 || 43141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL845 || 44141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL846 || 45141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL847) 46141cc406Sopenharmony_ci { 47141cc406Sopenharmony_ci write_register(0x40, 0x00); 48141cc406Sopenharmony_ci } 49141cc406Sopenharmony_ci 50141cc406Sopenharmony_ci // initialize other registers that we read on init 51141cc406Sopenharmony_ci if (dev_->model->asic_type == AsicType::GL124) { 52141cc406Sopenharmony_ci write_register(0x33, 0x00); 53141cc406Sopenharmony_ci write_register(0xbd, 0x00); 54141cc406Sopenharmony_ci write_register(0xbe, 0x00); 55141cc406Sopenharmony_ci write_register(0x100, 0x00); 56141cc406Sopenharmony_ci } 57141cc406Sopenharmony_ci 58141cc406Sopenharmony_ci if (dev_->model->asic_type == AsicType::GL845 || 59141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL846 || 60141cc406Sopenharmony_ci dev_->model->asic_type == AsicType::GL847) 61141cc406Sopenharmony_ci { 62141cc406Sopenharmony_ci write_register(0xbd, 0x00); 63141cc406Sopenharmony_ci write_register(0xbe, 0x00); 64141cc406Sopenharmony_ci 65141cc406Sopenharmony_ci write_register(0xd0, 0x00); 66141cc406Sopenharmony_ci write_register(0xd1, 0x01); 67141cc406Sopenharmony_ci write_register(0xd2, 0x02); 68141cc406Sopenharmony_ci write_register(0xd3, 0x03); 69141cc406Sopenharmony_ci write_register(0xd4, 0x04); 70141cc406Sopenharmony_ci write_register(0xd5, 0x05); 71141cc406Sopenharmony_ci write_register(0xd6, 0x06); 72141cc406Sopenharmony_ci write_register(0xd7, 0x07); 73141cc406Sopenharmony_ci write_register(0xd8, 0x08); 74141cc406Sopenharmony_ci write_register(0xd9, 0x09); 75141cc406Sopenharmony_ci } 76141cc406Sopenharmony_ci} 77141cc406Sopenharmony_ci 78141cc406Sopenharmony_ciTestScannerInterface::~TestScannerInterface() = default; 79141cc406Sopenharmony_ci 80141cc406Sopenharmony_cibool TestScannerInterface::is_mock() const 81141cc406Sopenharmony_ci{ 82141cc406Sopenharmony_ci return true; 83141cc406Sopenharmony_ci} 84141cc406Sopenharmony_ci 85141cc406Sopenharmony_cistd::uint8_t TestScannerInterface::read_register(std::uint16_t address) 86141cc406Sopenharmony_ci{ 87141cc406Sopenharmony_ci return cached_regs_.get(address); 88141cc406Sopenharmony_ci} 89141cc406Sopenharmony_ci 90141cc406Sopenharmony_civoid TestScannerInterface::write_register(std::uint16_t address, std::uint8_t value) 91141cc406Sopenharmony_ci{ 92141cc406Sopenharmony_ci cached_regs_.update(address, value); 93141cc406Sopenharmony_ci} 94141cc406Sopenharmony_ci 95141cc406Sopenharmony_civoid TestScannerInterface::write_registers(const Genesys_Register_Set& regs) 96141cc406Sopenharmony_ci{ 97141cc406Sopenharmony_ci cached_regs_.update(regs); 98141cc406Sopenharmony_ci} 99141cc406Sopenharmony_ci 100141cc406Sopenharmony_ci 101141cc406Sopenharmony_civoid TestScannerInterface::write_0x8c(std::uint8_t index, std::uint8_t value) 102141cc406Sopenharmony_ci{ 103141cc406Sopenharmony_ci (void) index; 104141cc406Sopenharmony_ci (void) value; 105141cc406Sopenharmony_ci} 106141cc406Sopenharmony_ci 107141cc406Sopenharmony_civoid TestScannerInterface::bulk_read_data(std::uint8_t addr, std::uint8_t* data, std::size_t size) 108141cc406Sopenharmony_ci{ 109141cc406Sopenharmony_ci (void) addr; 110141cc406Sopenharmony_ci std::memset(data, 0, size); 111141cc406Sopenharmony_ci} 112141cc406Sopenharmony_ci 113141cc406Sopenharmony_civoid TestScannerInterface::bulk_write_data(std::uint8_t addr, std::uint8_t* data, std::size_t size) 114141cc406Sopenharmony_ci{ 115141cc406Sopenharmony_ci (void) addr; 116141cc406Sopenharmony_ci (void) data; 117141cc406Sopenharmony_ci (void) size; 118141cc406Sopenharmony_ci} 119141cc406Sopenharmony_ci 120141cc406Sopenharmony_civoid TestScannerInterface::write_buffer(std::uint8_t type, std::uint32_t addr, std::uint8_t* data, 121141cc406Sopenharmony_ci std::size_t size) 122141cc406Sopenharmony_ci{ 123141cc406Sopenharmony_ci (void) type; 124141cc406Sopenharmony_ci (void) addr; 125141cc406Sopenharmony_ci (void) data; 126141cc406Sopenharmony_ci (void) size; 127141cc406Sopenharmony_ci} 128141cc406Sopenharmony_ci 129141cc406Sopenharmony_civoid TestScannerInterface::write_gamma(std::uint8_t type, std::uint32_t addr, std::uint8_t* data, 130141cc406Sopenharmony_ci std::size_t size) 131141cc406Sopenharmony_ci{ 132141cc406Sopenharmony_ci (void) type; 133141cc406Sopenharmony_ci (void) addr; 134141cc406Sopenharmony_ci (void) data; 135141cc406Sopenharmony_ci (void) size; 136141cc406Sopenharmony_ci} 137141cc406Sopenharmony_ci 138141cc406Sopenharmony_civoid TestScannerInterface::write_ahb(std::uint32_t addr, std::uint32_t size, std::uint8_t* data) 139141cc406Sopenharmony_ci{ 140141cc406Sopenharmony_ci (void) addr; 141141cc406Sopenharmony_ci (void) size; 142141cc406Sopenharmony_ci (void) data; 143141cc406Sopenharmony_ci} 144141cc406Sopenharmony_ci 145141cc406Sopenharmony_cistd::uint16_t TestScannerInterface::read_fe_register(std::uint8_t address) 146141cc406Sopenharmony_ci{ 147141cc406Sopenharmony_ci return cached_fe_regs_.get(address); 148141cc406Sopenharmony_ci} 149141cc406Sopenharmony_ci 150141cc406Sopenharmony_civoid TestScannerInterface::write_fe_register(std::uint8_t address, std::uint16_t value) 151141cc406Sopenharmony_ci{ 152141cc406Sopenharmony_ci cached_fe_regs_.update(address, value); 153141cc406Sopenharmony_ci} 154141cc406Sopenharmony_ci 155141cc406Sopenharmony_ciIUsbDevice& TestScannerInterface::get_usb_device() 156141cc406Sopenharmony_ci{ 157141cc406Sopenharmony_ci return usb_dev_; 158141cc406Sopenharmony_ci} 159141cc406Sopenharmony_ci 160141cc406Sopenharmony_civoid TestScannerInterface::sleep_us(unsigned microseconds) 161141cc406Sopenharmony_ci{ 162141cc406Sopenharmony_ci (void) microseconds; 163141cc406Sopenharmony_ci} 164141cc406Sopenharmony_ci 165141cc406Sopenharmony_civoid TestScannerInterface::record_slope_table(unsigned table_nr, 166141cc406Sopenharmony_ci const std::vector<std::uint16_t>& steps) 167141cc406Sopenharmony_ci{ 168141cc406Sopenharmony_ci slope_tables_[table_nr] = steps; 169141cc406Sopenharmony_ci} 170141cc406Sopenharmony_ci 171141cc406Sopenharmony_cistd::map<unsigned, std::vector<std::uint16_t>>& TestScannerInterface::recorded_slope_tables() 172141cc406Sopenharmony_ci{ 173141cc406Sopenharmony_ci return slope_tables_; 174141cc406Sopenharmony_ci} 175141cc406Sopenharmony_ci 176141cc406Sopenharmony_civoid TestScannerInterface::record_progress_message(const char* msg) 177141cc406Sopenharmony_ci{ 178141cc406Sopenharmony_ci last_progress_message_ = msg; 179141cc406Sopenharmony_ci} 180141cc406Sopenharmony_ci 181141cc406Sopenharmony_ciconst std::string& TestScannerInterface::last_progress_message() const 182141cc406Sopenharmony_ci{ 183141cc406Sopenharmony_ci return last_progress_message_; 184141cc406Sopenharmony_ci} 185141cc406Sopenharmony_ci 186141cc406Sopenharmony_civoid TestScannerInterface::record_key_value(const std::string& key, const std::string& value) 187141cc406Sopenharmony_ci{ 188141cc406Sopenharmony_ci key_values_[key] = value; 189141cc406Sopenharmony_ci} 190141cc406Sopenharmony_ci 191141cc406Sopenharmony_cistd::map<std::string, std::string>& TestScannerInterface::recorded_key_values() 192141cc406Sopenharmony_ci{ 193141cc406Sopenharmony_ci return key_values_; 194141cc406Sopenharmony_ci} 195141cc406Sopenharmony_ci 196141cc406Sopenharmony_civoid TestScannerInterface::test_checkpoint(const std::string& name) 197141cc406Sopenharmony_ci{ 198141cc406Sopenharmony_ci if (checkpoint_callback_) { 199141cc406Sopenharmony_ci checkpoint_callback_(*dev_, *this, name); 200141cc406Sopenharmony_ci } 201141cc406Sopenharmony_ci} 202141cc406Sopenharmony_ci 203141cc406Sopenharmony_civoid TestScannerInterface::set_checkpoint_callback(TestCheckpointCallback callback) 204141cc406Sopenharmony_ci{ 205141cc406Sopenharmony_ci checkpoint_callback_ = callback; 206141cc406Sopenharmony_ci} 207141cc406Sopenharmony_ci 208141cc406Sopenharmony_ci} // namespace genesys 209