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)
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 Reflect::opt_member(
"vendor_id", &HIDDeviceFilter::vendor_id),
107 Reflect::opt_member(
"product_id", &HIDDeviceFilter::product_id),
108 Reflect::opt_member(
"usage_page", &HIDDeviceFilter::usage_page),
109 Reflect::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 Reflect::member(
"enabled", &HIDBackendInfo::enabled),
129 Reflect::member(
"filters", &HIDBackendInfo::filters),
130 Reflect::member(
"auto_open", &HIDBackendInfo::auto_open),
131 Reflect::member(
"read_buffer_size", &HIDBackendInfo::read_buffer_size),
132 Reflect::member(
"poll_timeout_ms", &HIDBackendInfo::poll_timeout_ms),
133 Reflect::member(
"auto_reconnect", &HIDBackendInfo::auto_reconnect),
134 Reflect::member(
"reconnect_interval_ms", &HIDBackendInfo::reconnect_interval_ms));
142 bool enabled {
false };
143 size_t read_buffer_size { 256 };
144 int poll_timeout_ms { 2 };
145 bool split_eraser {
true };
149 return std::make_tuple(
150 Reflect::member(
"enabled", &TabletBackendInfo::enabled),
151 Reflect::member(
"read_buffer_size", &TabletBackendInfo::read_buffer_size),
152 Reflect::member(
"poll_timeout_ms", &TabletBackendInfo::poll_timeout_ms),
153 Reflect::member(
"split_eraser", &TabletBackendInfo::split_eraser));
165 bool enabled {
false };
166 bool auto_open_inputs {
true };
167 bool auto_open_outputs {
false };
170 bool enable_virtual_port {
false };
171 std::string virtual_port_name {
"MayaFlux" };
175 return std::make_tuple(
176 Reflect::member(
"enabled", &MIDIBackendInfo::enabled),
177 Reflect::member(
"auto_open_inputs", &MIDIBackendInfo::auto_open_inputs),
178 Reflect::member(
"auto_open_outputs", &MIDIBackendInfo::auto_open_outputs),
179 Reflect::member(
"input_port_filters", &MIDIBackendInfo::input_port_filters),
180 Reflect::member(
"output_port_filters", &MIDIBackendInfo::output_port_filters),
181 Reflect::member(
"enable_virtual_port", &MIDIBackendInfo::enable_virtual_port),
182 Reflect::member(
"virtual_port_name", &MIDIBackendInfo::virtual_port_name));
194 bool enabled {
false };
195 uint16_t receive_port { 8000 };
196 uint16_t send_port { 9000 };
197 std::string send_address {
"127.0.0.1" };
198 bool enable_multicast {
false };
200 size_t receive_buffer_size { 65536 };
204 return std::make_tuple(
205 Reflect::member(
"enabled", &OSCConfigInfo::enabled),
206 Reflect::member(
"receive_port", &OSCConfigInfo::receive_port),
207 Reflect::member(
"send_port", &OSCConfigInfo::send_port),
208 Reflect::member(
"send_address", &OSCConfigInfo::send_address),
209 Reflect::member(
"enable_multicast", &OSCConfigInfo::enable_multicast),
210 Reflect::member(
"multicast_group", &OSCConfigInfo::multicast_group),
211 Reflect::member(
"receive_buffer_size", &OSCConfigInfo::receive_buffer_size));
224 uint32_t baud_rate { 9600 };
225 uint8_t data_bits { 8 };
226 uint8_t stop_bits { 1 };
228 bool flow_control {
false };
232 return std::make_tuple(
233 Reflect::member(
"port_name", &SerialPortConfig::port_name),
234 Reflect::member(
"baud_rate", &SerialPortConfig::baud_rate),
235 Reflect::member(
"data_bits", &SerialPortConfig::data_bits),
236 Reflect::member(
"stop_bits", &SerialPortConfig::stop_bits),
237 Reflect::member(
"flow_control", &SerialPortConfig::flow_control));
245 bool enabled {
false };
246 std::vector<SerialPortConfig>
ports;
247 bool auto_detect_arduino {
false };
248 uint32_t default_baud_rate { 115200 };
252 return std::make_tuple(
253 Reflect::member(
"enabled", &SerialBackendInfo::enabled),
254 Reflect::member(
"ports", &SerialBackendInfo::ports),
255 Reflect::member(
"auto_detect_arduino", &SerialBackendInfo::auto_detect_arduino),
256 Reflect::member(
"default_baud_rate", &SerialBackendInfo::default_baud_rate));
304 config.
hid.
filters.push_back(HIDDeviceFilter::controller());
305 config.
hid.
filters.push_back(HIDDeviceFilter::specialized());
363 return std::make_tuple(
364 Reflect::member(
"hid", &GlobalInputConfig::hid),
365 Reflect::member(
"midi", &GlobalInputConfig::midi),
366 Reflect::member(
"osc", &GlobalInputConfig::osc),
367 Reflect::member(
"serial", &GlobalInputConfig::serial),
368 Reflect::member(
"tablet", &GlobalInputConfig::tablet));
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.
static constexpr auto describe()
bool enabled
Enable tablet backend.
Tablet backend configuration.