28 [[nodiscard]]
bool matches(uint16_t vid, uint16_t pid,
29 uint16_t upage = 0, uint16_t usg = 0)
const
31 if (vendor_id && *vendor_id != vid)
33 if (product_id && *product_id != pid)
35 if (usage_page && *usage_page != upage)
38 return !usage || *usage == usg;
53 .product_id = std::nullopt,
64 .product_id = std::nullopt,
75 .product_id = std::nullopt,
86 .product_id = std::nullopt,
98 .usage_page = std::nullopt,
105 return std::make_tuple(
106 IO::opt_member(
"vendor_id", &HIDDeviceFilter::vendor_id),
107 IO::opt_member(
"product_id", &HIDDeviceFilter::product_id),
108 IO::opt_member(
"usage_page", &HIDDeviceFilter::usage_page),
109 IO::opt_member(
"usage", &HIDDeviceFilter::usage));
120 size_t read_buffer_size { 64 };
121 int poll_timeout_ms { 10 };
122 bool auto_reconnect {
true };
123 uint32_t reconnect_interval_ms { 1000 };
127 return std::make_tuple(
128 IO::member(
"enabled", &HIDBackendInfo::enabled),
129 IO::member(
"filters", &HIDBackendInfo::filters),
130 IO::member(
"auto_open", &HIDBackendInfo::auto_open),
131 IO::member(
"read_buffer_size", &HIDBackendInfo::read_buffer_size),
132 IO::member(
"poll_timeout_ms", &HIDBackendInfo::poll_timeout_ms),
133 IO::member(
"auto_reconnect", &HIDBackendInfo::auto_reconnect),
134 IO::member(
"reconnect_interval_ms", &HIDBackendInfo::reconnect_interval_ms));
146 bool enabled {
false };
147 bool auto_open_inputs {
true };
148 bool auto_open_outputs {
false };
151 bool enable_virtual_port {
false };
152 std::string virtual_port_name {
"MayaFlux" };
156 return std::make_tuple(
157 IO::member(
"enabled", &MIDIBackendInfo::enabled),
158 IO::member(
"auto_open_inputs", &MIDIBackendInfo::auto_open_inputs),
159 IO::member(
"auto_open_outputs", &MIDIBackendInfo::auto_open_outputs),
160 IO::member(
"input_port_filters", &MIDIBackendInfo::input_port_filters),
161 IO::member(
"output_port_filters", &MIDIBackendInfo::output_port_filters),
162 IO::member(
"enable_virtual_port", &MIDIBackendInfo::enable_virtual_port),
163 IO::member(
"virtual_port_name", &MIDIBackendInfo::virtual_port_name),
164 IO::member(
"enabled", &MIDIBackendInfo::enabled));
176 bool enabled {
false };
177 uint16_t receive_port { 8000 };
178 uint16_t send_port { 9000 };
179 std::string send_address {
"127.0.0.1" };
180 bool enable_multicast {
false };
182 size_t receive_buffer_size { 65536 };
186 return std::make_tuple(
187 IO::member(
"enabled", &OSCConfigInfo::enabled),
188 IO::member(
"receive_port", &OSCConfigInfo::receive_port),
189 IO::member(
"send_port", &OSCConfigInfo::send_port),
190 IO::member(
"send_address", &OSCConfigInfo::send_address),
191 IO::member(
"enable_multicast", &OSCConfigInfo::enable_multicast),
192 IO::member(
"multicast_group", &OSCConfigInfo::multicast_group),
193 IO::member(
"receive_buffer_size", &OSCConfigInfo::receive_buffer_size));
206 uint32_t baud_rate { 9600 };
207 uint8_t data_bits { 8 };
208 uint8_t stop_bits { 1 };
210 bool flow_control {
false };
214 return std::make_tuple(
215 IO::member(
"port_name", &SerialPortConfig::port_name),
216 IO::member(
"baud_rate", &SerialPortConfig::baud_rate),
217 IO::member(
"data_bits", &SerialPortConfig::data_bits),
218 IO::member(
"stop_bits", &SerialPortConfig::stop_bits),
219 IO::member(
"flow_control", &SerialPortConfig::flow_control));
227 bool enabled {
false };
228 std::vector<SerialPortConfig>
ports;
229 bool auto_detect_arduino {
false };
230 uint32_t default_baud_rate { 115200 };
234 return std::make_tuple(
235 IO::member(
"enabled", &SerialBackendInfo::enabled),
236 IO::member(
"ports", &SerialBackendInfo::ports),
237 IO::member(
"auto_detect_arduino", &SerialBackendInfo::auto_detect_arduino),
238 IO::member(
"default_baud_rate", &SerialBackendInfo::default_baud_rate));
285 config.
hid.
filters.push_back(HIDDeviceFilter::controller());
286 config.
hid.
filters.push_back(HIDDeviceFilter::specialized());
333 return std::make_tuple(
334 IO::member(
"hid", &GlobalInputConfig::hid),
335 IO::member(
"midi", &GlobalInputConfig::midi),
336 IO::member(
"osc", &GlobalInputConfig::osc),
337 IO::member(
"serial", &GlobalInputConfig::serial));
bool enabled
Enable HID backend.
std::vector< HIDDeviceFilter > filters
Device filters (empty = all devices)
static constexpr auto describe()
HID backend configuration.
std::optional< uint16_t > usage
HID usage (nullopt = any)
static HIDDeviceFilter controller()
Match gamepads (Usage Page 0x01, Usage 0x05)
static HIDDeviceFilter device(uint16_t vid, uint16_t pid)
Match specific device by VID/PID.
static HIDDeviceFilter mouse()
Match mice (Usage Page 0x01, Usage 0x02)
std::optional< uint16_t > vendor_id
USB Vendor ID (nullopt = any)
std::optional< uint16_t > product_id
USB Product ID (nullopt = any)
static constexpr auto describe()
std::optional< uint16_t > usage_page
HID usage page (nullopt = any)
static HIDDeviceFilter any()
Match any HID device.
static HIDDeviceFilter specialized()
Match joysticks (Usage Page 0x01, Usage 0x04)
bool matches(uint16_t vid, uint16_t pid, uint16_t upage=0, uint16_t usg=0) const
Check if a device matches this filter.
static HIDDeviceFilter keyboard()
Match keyboards (Usage Page 0x01, Usage 0x06)
Filter for HID device enumeration.
static constexpr auto describe()
bool enabled
Enable MIDI backend.
std::vector< std::string > input_port_filters
Filter input ports by name substring.
std::vector< std::string > output_port_filters
Filter output ports by name substring.
MIDI backend configuration.
std::string multicast_group
Multicast group address.
uint16_t receive_port
UDP port to listen on.
bool enabled
Enable OSC backend.
static constexpr auto describe()
OSC backend configuration.
static constexpr auto describe()
bool enabled
Enable Serial backend.
std::vector< SerialPortConfig > ports
Ports to open.
Serial backend configuration.
static constexpr auto describe()
std::string port_name
e.g., "/dev/ttyUSB0" or "COM3"
Serial port configuration.