31 uint32_t device_id { 0 };
57 static InputBinding midi(uint32_t device_id = 0, std::optional<uint8_t> channel = {});
63 static InputBinding osc(
const std::string& pattern =
"");
89 static InputBinding hid_by_vid_pid(uint16_t vid, uint16_t pid);
102 std::optional<uint8_t> cc_number = {},
103 std::optional<uint8_t> channel = {},
104 uint32_t device_id = 0);
111 static InputBinding midi_note_on(
112 std::optional<uint8_t> channel = {},
113 uint32_t device_id = 0);
120 static InputBinding midi_note_off(
121 std::optional<uint8_t> channel = {},
122 uint32_t device_id = 0);
129 static InputBinding midi_pitch_bend(
130 std::optional<uint8_t> channel = {},
131 uint32_t device_id = 0);
140 InputBinding& with_midi_channel(uint8_t channel);
145 InputBinding& with_midi_cc(uint8_t cc);
150 InputBinding& with_osc_pattern(
const std::string& pattern);
173 uint16_t vendor_id {};
174 uint16_t product_id {};
180 uint8_t port_number {};
188 uint32_t baud_rate {};
203 [[nodiscard]]
InputBinding to_binding_midi(std::optional<uint8_t> channel)
const;
204 [[nodiscard]]
InputBinding to_binding_osc(
const std::string& pattern)
const;
232 [[nodiscard]] uint8_t
channel()
const {
return status & 0x0F; }
233 [[nodiscard]] uint8_t
type()
const {
return status & 0xF0; }
239 using OSCArg = std::variant<int32_t, float, std::string, std::vector<uint8_t>>;
256 [[nodiscard]] std::optional<float> get_float(
size_t index = 0) const noexcept;
266 [[nodiscard]]
std::optional<int32_t> get_int(
size_t index = 0) const noexcept;
273 [[nodiscard]]
std::optional<
std::
string> get_string(
size_t index = 0) const noexcept;
280 [[nodiscard]]
std::optional<
std::vector<uint8_t>> get_blob(
size_t index = 0) const noexcept;
287 std::vector<uint8_t>,
293 uint64_t timestamp_ns;
297 [[nodiscard]]
double as_scalar()
const {
return std::get<double>(data); }
298 [[nodiscard]]
const std::vector<double>&
as_vector()
const {
return std::get<std::vector<double>>(data); }
299 [[nodiscard]]
const std::vector<uint8_t>&
as_bytes()
const {
return std::get<std::vector<uint8_t>>(data); }
309 static InputValue make_midi(uint8_t status, uint8_t d1, uint8_t d2, uint32_t dev_id);
311 static InputValue make_osc(std::string addr, std::vector<OSCArg> args, uint32_t dev_id);
317 [[nodiscard]] std::optional<double> try_scalar() const noexcept;
323 [[nodiscard]] const
std::vector<
double>* try_vector() const noexcept;
329 [[nodiscard]] const
std::vector<uint8_t>* try_bytes() const noexcept;
335 [[nodiscard]] const MIDIMessage* try_midi() const noexcept;
341 [[nodiscard]] const OSCMessage* try_osc() const noexcept;
vk::PhysicalDeviceType type
InputType
Input backend type enumeration.
@ OSC
Open Sound Control (network)
@ TABLET
Digitizers and styluses (pressure, tilt, rotation)
@ HID
Generic HID devices (game controllers, custom hardware)
@ MIDI
MIDI controllers and instruments.
@ SERIAL
Serial port communication (Arduino, etc.)