/* ptrnt - print labels on linux Copyright (C) 2023 Moritz Martinius 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 3 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, see . */ #pragma once #include "libusbwrap/interface/IUsbDeviceFactory.hpp" namespace libusbwrap { class UsbDeviceFactory : public IUsbDeviceFactory { public: UsbDeviceFactory() = default; virtual ~UsbDeviceFactory(); // delete copy ctor and assignment UsbDeviceFactory(const UsbDeviceFactory&) = delete; UsbDeviceFactory& operator=(UsbDeviceFactory&) = delete; UsbDeviceFactory(UsbDeviceFactory&&) = delete; UsbDeviceFactory& operator=(UsbDeviceFactory&&) = delete; bool init(); /** * @brief Gets all devices that are detected by libusb. Will allocate a shared_ptr for each Device * * @return std::vector> Vector of all detected USB devices */ std::vector> findAllDevices() override; /** * @brief Gets all devices with certain vid/pid combination. * If only one device of certain type is connected, vector is usually only one element * * @param vid VendorId of the devices to find * @param pid ProductId of the devices to find * @return std::vector> Vector of detected USB devices based on vid/pid */ std::vector> findDevices(uint16_t vid, uint16_t pid) override; private: // methods int refreshDeviceList(); std::vector> buildMaskedDeviceVector(uint16_t vidMask, uint16_t pidMask, uint16_t vid, uint16_t pid); // members libusb_context* mLibusbCtx{nullptr}; libusb_device** mLibusbDeviceList{}; bool mDeviceListInitialized = false; }; } // namespace libusbwrap