#pragma once #include "libusbwrap/interface/IUsbDeviceFactory.hpp" namespace libusbwrap { class UsbDeviceFactory : public IUsbDeviceFactory { public: UsbDeviceFactory(); ~UsbDeviceFactory(); // delete copy ctor and assignment UsbDeviceFactory(const 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; }; } // namespace libusbwrap