radio_tool 0.2.1
Loading...
Searching...
No Matches
hid.cpp
1#include <radio_tool/hid/hid.hpp>
2
3#include <stdexcept>
4
5using namespace radio_tool::hid;
6
7auto HID::InterruptRead(const uint8_t &ep, const uint16_t &len) const -> std::vector<uint8_t>
8{
9 std::vector<uint8_t> data(len);
10
11 int rlen = 0;
12 auto err = libusb_interrupt_transfer(device, ep, data.data(), len, &rlen, timeout);
13 if (err != LIBUSB_SUCCESS)
14 {
15 throw std::runtime_error(libusb_error_name(err));
16 }
17
18 if (rlen != len)
19 {
20 data.reserve(rlen);
21 }
22 return data;
23}
24
25auto HID::InterruptWrite(const uint8_t &ep, const std::vector<uint8_t> &data) const -> void
26{
27 int rlen = 0;
28 auto err = libusb_interrupt_transfer(device, ep, (unsigned char *)data.data(), data.size(), &rlen, timeout);
29 if (err != LIBUSB_SUCCESS)
30 {
31 throw std::runtime_error(libusb_error_name(err));
32 }
33
34 if (rlen != data.size())
35 {
36 throw std::runtime_error("Invalid write len!");
37 }
38}
39
40auto HID::BulkRead(const uint8_t &ep, const uint16_t &len) const -> std::vector<uint8_t>
41{
42 std::vector<uint8_t> data(len);
43
44 int rlen = 0;
45 auto err = libusb_interrupt_transfer(device, ep, data.data(), len, &rlen, timeout);
46 if (err != LIBUSB_SUCCESS)
47 {
48 throw std::runtime_error(libusb_error_name(err));
49 }
50
51 if (rlen != len)
52 {
53 data.reserve(rlen);
54 }
55 return data;
56}
57
58auto HID::BulkWrite(const uint8_t &ep, const std::vector<uint8_t> &data) const -> void
59{
60 int rlen = 0;
61 auto err = libusb_bulk_transfer(device, ep, (unsigned char *)data.data(), data.size(), &rlen, timeout);
62 if (err != LIBUSB_SUCCESS)
63 {
64 throw std::runtime_error(libusb_error_name(err));
65 }
66
67 if (rlen != data.size())
68 {
69 throw std::runtime_error("Invalid write len!");
70 }
71}