#include "noolite.h" #include "src/libusbdevice.h" namespace noolitelib { namespace Device { constexpr auto VID = 0x16c0; constexpr auto PID = 0x05df; } namespace { constexpr auto WorkMode = 0; constexpr auto Bitrate = 2; constexpr auto Repeats = 2; constexpr auto Mode = (Repeats << 5 | Bitrate << 3 | WorkMode); } Noolite::Noolite(IUsbDevice *device) : m_device(device ? device : new LibUsbDevice()) { m_device->openDevice(Device::VID, Device::PID); } Noolite::~Noolite() { m_device->close(); delete m_device; } bool Noolite::sendCommand(unsigned char channel, Command command, const Params ¶ms) { auto data = composeCommand(channel, command, params); if (data) { return m_device->sendDataToDevice(data.value()); } return false; } std::optional Noolite::composeCommand(unsigned char channel, Command command, const Params ¶ms) const { if (noolitelib::Set == command && !(params.size() == 1 || params.size() == 3)) { return {}; } unsigned char format = (noolitelib::Set == command) ? params.size() : (command > noolitelib::Bind ? 0x04: 0x00); Data res { Mode, static_cast(command), format, 0x0, channel, 0x0, 0x0, 0x0 }; for (int i = 0; i < params.size(); ++i) { res[5 + i] = params[i]; } return res; } }