| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #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<Data> 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<unsigned char>(command), format, 0x0, channel, 0x0, 0x0, 0x0 };
- for (int i = 0; i < params.size(); ++i) {
- res[5 + i] = params[i];
- }
- return res;
- }
- }
|