30 uint32_t device_id { 0 };
62 static InputBinding osc(
const std::string& pattern =
"");
82 static InputBinding hid_by_vid_pid(uint16_t vid, uint16_t pid);
95 std::optional<uint8_t> cc_number = {},
96 std::optional<uint8_t>
channel = {},
97 uint32_t device_id = 0);
104 static InputBinding midi_note_on(
105 std::optional<uint8_t>
channel = {},
106 uint32_t device_id = 0);
113 static InputBinding midi_note_off(
114 std::optional<uint8_t>
channel = {},
115 uint32_t device_id = 0);
122 static InputBinding midi_pitch_bend(
123 std::optional<uint8_t>
channel = {},
124 uint32_t device_id = 0);
133 InputBinding& with_midi_channel(uint8_t
channel);
138 InputBinding& with_midi_cc(uint8_t cc);
143 InputBinding& with_osc_pattern(
const std::string& pattern);
166 uint16_t vendor_id {};
167 uint16_t product_id {};
173 uint8_t port_number {};
181 uint32_t baud_rate {};
197 [[nodiscard]]
InputBinding to_binding_osc(
const std::string& pattern)
const;
225 [[nodiscard]] uint8_t
channel()
const {
return status & 0x0F; }
226 [[nodiscard]] uint8_t
type()
const {
return status & 0xF0; }
232 using OSCArg = std::variant<int32_t, float, std::string, std::vector<uint8_t>>;
249 [[nodiscard]] std::optional<float> get_float(
size_t index = 0) const noexcept;
259 [[nodiscard]]
std::optional<int32_t> get_int(
size_t index = 0) const noexcept;
266 [[nodiscard]]
std::optional<
std::
string> get_string(
size_t index = 0) const noexcept;
273 [[nodiscard]]
std::optional<
std::vector<uint8_t>> get_blob(
size_t index = 0) const noexcept;
280 std::vector<uint8_t>,
286 uint64_t timestamp_ns;
290 [[nodiscard]]
double as_scalar()
const {
return std::get<double>(data); }
291 [[nodiscard]]
const std::vector<double>&
as_vector()
const {
return std::get<std::vector<double>>(data); }
292 [[nodiscard]]
const std::vector<uint8_t>&
as_bytes()
const {
return std::get<std::vector<uint8_t>>(data); }
302 static InputValue make_midi(uint8_t status, uint8_t d1, uint8_t d2, uint32_t dev_id);
304 static InputValue make_osc(std::string addr, std::vector<OSCArg> args, uint32_t dev_id);
310 [[nodiscard]] std::optional<double> try_scalar() const noexcept;
316 [[nodiscard]] const
std::vector<
double>* try_vector() const noexcept;
322 [[nodiscard]] const
std::vector<uint8_t>* try_bytes() const noexcept;
328 [[nodiscard]] const MIDIMessage* try_midi() const noexcept;
334 [[nodiscard]] const OSCMessage* try_osc() const noexcept;
InputType
Input backend type enumeration.
@ OSC
Open Sound Control (network)
@ HID
Generic HID devices (game controllers, custom hardware)
@ MIDI
MIDI controllers and instruments.
@ SERIAL
Serial port communication (Arduino, etc.)