diff --git a/backend/Makefile.am b/backend/Makefile.am index 0e1410406..a4f1566d9 100644 --- a/backend/Makefile.am +++ b/backend/Makefile.am @@ -508,7 +508,6 @@ libgenesys_la_SOURCES = genesys/genesys.cpp genesys/genesys.h \ genesys/motor.h \ genesys/register.h \ genesys/register_cache.h \ - genesys/sanei.h genesys/sanei.cpp \ genesys/scanner_interface.h genesys/scanner_interface.cpp \ genesys/scanner_interface_usb.h genesys/scanner_interface_usb.cpp \ genesys/sensor.h \ @@ -521,6 +520,8 @@ libgenesys_la_SOURCES = genesys/genesys.cpp genesys/genesys.h \ genesys/tables_motor_profile.cpp \ genesys/tables_sensor.cpp \ genesys/test_scanner_interface.h genesys/test_scanner_interface.cpp \ + genesys/test_usb_device.h genesys/test_usb_device.cpp \ + genesys/usb_device.h genesys/usb_device.cpp \ genesys/low.cpp genesys/low.h \ genesys/utilities.h diff --git a/backend/genesys/device.h b/backend/genesys/device.h index 4c6d99641..9ab30ed10 100644 --- a/backend/genesys/device.h +++ b/backend/genesys/device.h @@ -53,7 +53,7 @@ #include "settings.h" #include "sensor.h" #include "register.h" -#include "sanei.h" +#include "usb_device.h" #include "scanner_interface.h" #include diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index c6bfb7a00..5b4e240b9 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -62,7 +62,7 @@ #include "genesys.h" #include "conv.h" -#include "sanei.h" +#include "usb_device.h" #include "utilities.h" #include "scanner_interface_usb.h" #include "../include/sane/sanei_config.h" diff --git a/backend/genesys/low.h b/backend/genesys/low.h index 24a3650b1..26d1d2031 100644 --- a/backend/genesys/low.h +++ b/backend/genesys/low.h @@ -85,7 +85,7 @@ #include "enums.h" #include "error.h" #include "fwd.h" -#include "sanei.h" +#include "usb_device.h" #include "sensor.h" #include "serialize.h" #include "settings.h" diff --git a/backend/genesys/test_usb_device.cpp b/backend/genesys/test_usb_device.cpp new file mode 100644 index 000000000..de2399ed3 --- /dev/null +++ b/backend/genesys/test_usb_device.cpp @@ -0,0 +1,141 @@ +/* sane - Scanner Access Now Easy. + + Copyright (C) 2019 Povilas Kanapickas + + This file is part of the SANE package. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. +*/ + +#define DEBUG_DECLARE_ONLY + +#include "test_usb_device.h" +#include "low.h" + +namespace genesys { + +TestUsbDevice::TestUsbDevice(std::uint16_t vendor, std::uint16_t product) : + vendor_{vendor}, + product_{product} +{ +} + +TestUsbDevice::~TestUsbDevice() +{ + if (is_open()) { + DBG(DBG_error, "TestUsbDevice not closed; closing automatically"); + close(); + } +} + +void TestUsbDevice::open(const char* dev_name) +{ + DBG_HELPER(dbg); + + if (is_open()) { + throw SaneException("device already open"); + } + name_ = dev_name; + is_open_ = true; +} + +void TestUsbDevice::clear_halt() +{ + DBG_HELPER(dbg); + assert_is_open(); +} + +void TestUsbDevice::reset() +{ + DBG_HELPER(dbg); + assert_is_open(); +} + +void TestUsbDevice::close() +{ + DBG_HELPER(dbg); + assert_is_open(); + + is_open_ = false; + name_ = ""; +} + +void TestUsbDevice::get_vendor_product(int& vendor, int& product) +{ + DBG_HELPER(dbg); + assert_is_open(); + vendor = vendor_; + product = product_; +} + +void TestUsbDevice::control_msg(int rtype, int reg, int value, int index, int length, + std::uint8_t* data) +{ + (void) reg; + (void) value; + (void) index; + DBG_HELPER(dbg); + assert_is_open(); + if (rtype == REQUEST_TYPE_IN) { + std::memset(data, 0, length); + } +} + +void TestUsbDevice::bulk_read(std::uint8_t* buffer, std::size_t* size) +{ + + DBG_HELPER(dbg); + assert_is_open(); + std::memset(buffer, 0, *size); +} + +void TestUsbDevice::bulk_write(const std::uint8_t* buffer, std::size_t* size) +{ + (void) buffer; + (void) size; + DBG_HELPER(dbg); + assert_is_open(); +} + +void TestUsbDevice::assert_is_open() const +{ + if (!is_open()) { + throw SaneException("device not open"); + } +} + +} // namespace genesys diff --git a/backend/genesys/sanei.h b/backend/genesys/test_usb_device.h similarity index 68% rename from backend/genesys/sanei.h rename to backend/genesys/test_usb_device.h index 86161c842..abbd78a52 100644 --- a/backend/genesys/sanei.h +++ b/backend/genesys/test_usb_device.h @@ -41,61 +41,45 @@ If you do not wish that, delete this exception notice. */ -#ifndef BACKEND_GENESYS_SANEI_H -#define BACKEND_GENESYS_SANEI_H +#ifndef BACKEND_GENESYS_TEST_USB_DEVICE_H +#define BACKEND_GENESYS_TEST_USB_DEVICE_H -#include "error.h" -#include "../include/sane/sanei_usb.h" - -#include -#include +#include "usb_device.h" namespace genesys { -class UsbDevice { +class TestUsbDevice : public IUsbDevice { public: - UsbDevice() = default; - UsbDevice(const UsbDevice& other) = delete; - UsbDevice& operator=(const UsbDevice&) = delete; + TestUsbDevice(std::uint16_t vendor, std::uint16_t product); + TestUsbDevice() = default; - UsbDevice(UsbDevice&& other) : - name_(other.name_), - is_open_(other.is_open_), - device_num_(other.device_num_) - { - other.set_not_open(); - } + ~TestUsbDevice() override; - ~UsbDevice(); + bool is_open() const override { return is_open_; } - bool is_open() const { return is_open_; } + const std::string& name() const override { return name_; } - int device_number() const { return device_num_; } + void open(const char* dev_name) override; - const std::string& name() const { return name_; } + void clear_halt() override; + void reset() override; + void close() override; - void open(const char* dev_name); - - void clear_halt(); - void reset(); - void close(); - - void get_vendor_product(int& vendor, int& product); - - void control_msg(int rtype, int reg, int value, int index, int length, std::uint8_t* data); - void bulk_read(std::uint8_t* buffer, std::size_t* size); - void bulk_write(const std::uint8_t* buffer, std::size_t* size); + void get_vendor_product(int& vendor, int& product) override; + void control_msg(int rtype, int reg, int value, int index, int length, + std::uint8_t* data) override; + void bulk_read(std::uint8_t* buffer, std::size_t* size) override; + void bulk_write(const std::uint8_t* buffer, std::size_t* size) override; private: - void assert_is_open() const; - void set_not_open(); std::string name_; bool is_open_ = false; - int device_num_ = 0; + std::uint16_t vendor_ = 0; + std::uint16_t product_ = 0; }; } // namespace genesys -#endif // BACKEND_GENESYS_SANEI_H +#endif // BACKEND_GENESYS_TEST_USB_DEVICE_H diff --git a/backend/genesys/sanei.cpp b/backend/genesys/usb_device.cpp similarity index 98% rename from backend/genesys/sanei.cpp rename to backend/genesys/usb_device.cpp index 0ab0f17cf..2d02219ec 100644 --- a/backend/genesys/sanei.cpp +++ b/backend/genesys/usb_device.cpp @@ -43,10 +43,12 @@ #define DEBUG_DECLARE_ONLY -#include "sanei.h" +#include "usb_device.h" namespace genesys { +IUsbDevice::~IUsbDevice() = default; + UsbDevice::~UsbDevice() { if (is_open()) { diff --git a/backend/genesys/usb_device.h b/backend/genesys/usb_device.h new file mode 100644 index 000000000..265c57c13 --- /dev/null +++ b/backend/genesys/usb_device.h @@ -0,0 +1,118 @@ +/* sane - Scanner Access Now Easy. + + Copyright (C) 2019 Povilas Kanapickas + + This file is part of the SANE package. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. +*/ + +#ifndef BACKEND_GENESYS_USB_DEVICE_H +#define BACKEND_GENESYS_USB_DEVICE_H + +#include "error.h" +#include "../include/sane/sanei_usb.h" + +#include +#include + +namespace genesys { + +class IUsbDevice { +public: + IUsbDevice() = default; + + IUsbDevice(const IUsbDevice& other) = delete; + IUsbDevice& operator=(const IUsbDevice&) = delete; + + virtual ~IUsbDevice(); + + virtual bool is_open() const = 0; + + virtual const std::string& name() const = 0; + + virtual void open(const char* dev_name) = 0; + + virtual void clear_halt() = 0; + virtual void reset() = 0; + virtual void close() = 0; + + virtual void get_vendor_product(int& vendor, int& product) = 0; + + virtual void control_msg(int rtype, int reg, int value, int index, int length, + std::uint8_t* data) = 0; + virtual void bulk_read(std::uint8_t* buffer, std::size_t* size) = 0; + virtual void bulk_write(const std::uint8_t* buffer, std::size_t* size) = 0; + +}; + +class UsbDevice : public IUsbDevice { +public: + UsbDevice() = default; + + ~UsbDevice() override; + + bool is_open() const override { return is_open_; } + + const std::string& name() const override { return name_; } + + void open(const char* dev_name) override; + + void clear_halt() override; + void reset() override; + void close() override; + + void get_vendor_product(int& vendor, int& product) override; + + void control_msg(int rtype, int reg, int value, int index, int length, + std::uint8_t* data) override; + void bulk_read(std::uint8_t* buffer, std::size_t* size) override; + void bulk_write(const std::uint8_t* buffer, std::size_t* size) override; + +private: + + void assert_is_open() const; + void set_not_open(); + + std::string name_; + bool is_open_ = false; + int device_num_ = 0; +}; + +} // namespace genesys + +#endif // BACKEND_GENESYS_USB_DEVICE_H