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_usb_device.h" 24141cc406Sopenharmony_ci#include "low.h" 25141cc406Sopenharmony_ci 26141cc406Sopenharmony_cinamespace genesys { 27141cc406Sopenharmony_ci 28141cc406Sopenharmony_ciTestUsbDevice::TestUsbDevice(std::uint16_t vendor, std::uint16_t product, 29141cc406Sopenharmony_ci std::uint16_t bcd_device) : 30141cc406Sopenharmony_ci vendor_{vendor}, 31141cc406Sopenharmony_ci product_{product}, 32141cc406Sopenharmony_ci bcd_device_{bcd_device} 33141cc406Sopenharmony_ci{ 34141cc406Sopenharmony_ci} 35141cc406Sopenharmony_ci 36141cc406Sopenharmony_ciTestUsbDevice::~TestUsbDevice() 37141cc406Sopenharmony_ci{ 38141cc406Sopenharmony_ci if (is_open()) { 39141cc406Sopenharmony_ci DBG(DBG_error, "TestUsbDevice not closed; closing automatically"); 40141cc406Sopenharmony_ci close(); 41141cc406Sopenharmony_ci } 42141cc406Sopenharmony_ci} 43141cc406Sopenharmony_ci 44141cc406Sopenharmony_civoid TestUsbDevice::open(const char* dev_name) 45141cc406Sopenharmony_ci{ 46141cc406Sopenharmony_ci DBG_HELPER(dbg); 47141cc406Sopenharmony_ci 48141cc406Sopenharmony_ci if (is_open()) { 49141cc406Sopenharmony_ci throw SaneException("device already open"); 50141cc406Sopenharmony_ci } 51141cc406Sopenharmony_ci name_ = dev_name; 52141cc406Sopenharmony_ci is_open_ = true; 53141cc406Sopenharmony_ci} 54141cc406Sopenharmony_ci 55141cc406Sopenharmony_civoid TestUsbDevice::clear_halt() 56141cc406Sopenharmony_ci{ 57141cc406Sopenharmony_ci DBG_HELPER(dbg); 58141cc406Sopenharmony_ci assert_is_open(); 59141cc406Sopenharmony_ci} 60141cc406Sopenharmony_ci 61141cc406Sopenharmony_civoid TestUsbDevice::reset() 62141cc406Sopenharmony_ci{ 63141cc406Sopenharmony_ci DBG_HELPER(dbg); 64141cc406Sopenharmony_ci assert_is_open(); 65141cc406Sopenharmony_ci} 66141cc406Sopenharmony_ci 67141cc406Sopenharmony_civoid TestUsbDevice::close() 68141cc406Sopenharmony_ci{ 69141cc406Sopenharmony_ci DBG_HELPER(dbg); 70141cc406Sopenharmony_ci assert_is_open(); 71141cc406Sopenharmony_ci 72141cc406Sopenharmony_ci is_open_ = false; 73141cc406Sopenharmony_ci name_ = ""; 74141cc406Sopenharmony_ci} 75141cc406Sopenharmony_ci 76141cc406Sopenharmony_cistd::uint16_t TestUsbDevice::get_vendor_id() 77141cc406Sopenharmony_ci{ 78141cc406Sopenharmony_ci DBG_HELPER(dbg); 79141cc406Sopenharmony_ci assert_is_open(); 80141cc406Sopenharmony_ci return vendor_; 81141cc406Sopenharmony_ci} 82141cc406Sopenharmony_ci 83141cc406Sopenharmony_cistd::uint16_t TestUsbDevice::get_product_id() 84141cc406Sopenharmony_ci{ 85141cc406Sopenharmony_ci DBG_HELPER(dbg); 86141cc406Sopenharmony_ci assert_is_open(); 87141cc406Sopenharmony_ci return product_; 88141cc406Sopenharmony_ci} 89141cc406Sopenharmony_ci 90141cc406Sopenharmony_cistd::uint16_t TestUsbDevice::get_bcd_device() 91141cc406Sopenharmony_ci{ 92141cc406Sopenharmony_ci DBG_HELPER(dbg); 93141cc406Sopenharmony_ci assert_is_open(); 94141cc406Sopenharmony_ci return bcd_device_; 95141cc406Sopenharmony_ci} 96141cc406Sopenharmony_ci 97141cc406Sopenharmony_civoid TestUsbDevice::control_msg(int rtype, int reg, int value, int index, int length, 98141cc406Sopenharmony_ci std::uint8_t* data) 99141cc406Sopenharmony_ci{ 100141cc406Sopenharmony_ci (void) reg; 101141cc406Sopenharmony_ci (void) value; 102141cc406Sopenharmony_ci (void) index; 103141cc406Sopenharmony_ci DBG_HELPER(dbg); 104141cc406Sopenharmony_ci assert_is_open(); 105141cc406Sopenharmony_ci if (rtype == REQUEST_TYPE_IN) { 106141cc406Sopenharmony_ci std::memset(data, 0, length); 107141cc406Sopenharmony_ci } 108141cc406Sopenharmony_ci} 109141cc406Sopenharmony_ci 110141cc406Sopenharmony_civoid TestUsbDevice::bulk_read(std::uint8_t* buffer, std::size_t* size) 111141cc406Sopenharmony_ci{ 112141cc406Sopenharmony_ci 113141cc406Sopenharmony_ci DBG_HELPER(dbg); 114141cc406Sopenharmony_ci assert_is_open(); 115141cc406Sopenharmony_ci std::memset(buffer, 0, *size); 116141cc406Sopenharmony_ci} 117141cc406Sopenharmony_ci 118141cc406Sopenharmony_civoid TestUsbDevice::bulk_write(const std::uint8_t* buffer, std::size_t* size) 119141cc406Sopenharmony_ci{ 120141cc406Sopenharmony_ci (void) buffer; 121141cc406Sopenharmony_ci (void) size; 122141cc406Sopenharmony_ci DBG_HELPER(dbg); 123141cc406Sopenharmony_ci assert_is_open(); 124141cc406Sopenharmony_ci} 125141cc406Sopenharmony_ci 126141cc406Sopenharmony_civoid TestUsbDevice::assert_is_open() const 127141cc406Sopenharmony_ci{ 128141cc406Sopenharmony_ci if (!is_open()) { 129141cc406Sopenharmony_ci throw SaneException("device not open"); 130141cc406Sopenharmony_ci } 131141cc406Sopenharmony_ci} 132141cc406Sopenharmony_ci 133141cc406Sopenharmony_ci} // namespace genesys 134