MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Input.hpp
Go to the documentation of this file.
1#pragma once
2
3namespace MayaFlux {
4
5namespace Core {
6 struct GlobalInputConfig;
7 struct InputBinding;
8 class InputManager;
9 class InputSubsystem;
10 struct InputDeviceInfo;
11}
12
13namespace Nodes::Input {
14 class InputNode;
15}
16
17/**
18 * @brief Gets a handle to default input manager
19 * @return Reference to the InputManager
20 */
22
23/**
24 * @brief Register an input node with specified binding
25 * @param node The InputNode to register
26 * @param binding Specifies what input the node wants
27 *
28 * Convenience wrapper for InputManager::register_node() on the default engine.
29 */
30MAYAFLUX_API void register_input_node(const std::shared_ptr<Nodes::Input::InputNode>& node, const Core::InputBinding& binding);
31
32/**
33 * @brief Unregister an input node
34 * @param node The InputNode to unregister
35 *
36 * Convenience wrapper for InputManager::unregister_node() on the default engine.
37 */
38MAYAFLUX_API void unregister_input_node(const std::shared_ptr<Nodes::Input::InputNode>& node);
39
40/**
41 * @brief Get a list of connected HID devices
42 * @return Vector of InputDeviceInfo for each connected HID device
43 */
44MAYAFLUX_API std::vector<Core::InputDeviceInfo> get_hid_devices();
45
46/**
47 * @brief Get a list of connected MIDI devices
48 * @return Vector of InputDeviceInfo for each connected MIDI device
49 */
50MAYAFLUX_API std::vector<Core::InputDeviceInfo> get_midi_devices();
51
52/**
53 * @brief Get a list of connected MIDI devices
54 * @return Vector of InputDeviceInfo for each connected MIDI device
55 */
56MAYAFLUX_API std::vector<Core::InputDeviceInfo> get_all_input_devices();
57
58/**
59 * @brief Find a HID device by vendor and product ID
60 * @param vendor_id The vendor ID
61 * @param product_id The product ID
62 * @return Optional InputDeviceInfo if found
63 */
64MAYAFLUX_API std::optional<Core::InputDeviceInfo> find_hid_device(
65 uint16_t vendor_id,
66 uint16_t product_id);
67
68/**
69 * @brief Gets the input subsystem
70 * @return InputSubsystem for input device management
71 *
72 * The InputSubsystem handles initialization and management of input devices.
73 * Access through Engine ensures proper lifecycle coordination.
74 */
75MAYAFLUX_API const Core::InputSubsystem& get_input_subsystem();
76
77// ═══════════════════════════════════════════════════════════════════════════
78// Input Binding Factories
79// ═══════════════════════════════════════════════════════════════════════════
80
81/**
82 * @brief Create binding for HID device
83 * @param device_id Device ID (0 = any HID device)
84 */
85MAYAFLUX_API Core::InputBinding bind_hid(uint32_t device_id = 0);
86
87/**
88 * @brief Create binding for HID device by vendor/product ID
89 * @param vid USB Vendor ID
90 * @param pid USB Product ID
91 */
92MAYAFLUX_API Core::InputBinding bind_hid(uint16_t vid, uint16_t pid);
93
94/**
95 * @brief Create binding for MIDI device
96 * @param device_id Device ID (0 = any MIDI device)
97 * @param channel MIDI channel filter (1-16, nullopt = any)
98 */
99MAYAFLUX_API Core::InputBinding bind_midi(uint32_t device_id = 0, std::optional<uint8_t> channel = {});
100
101/**
102 * @brief Create binding for MIDI Control Change messages
103 * @param cc_number CC number (0-127, nullopt = any CC)
104 * @param channel MIDI channel (1-16, nullopt = any channel)
105 * @param device_id Device ID (0 = any device)
106 */
108 std::optional<uint8_t> cc_number = {},
109 std::optional<uint8_t> channel = {},
110 uint32_t device_id = 0);
111
112/**
113 * @brief Create binding for MIDI Note On messages
114 */
115MAYAFLUX_API Core::InputBinding bind_midi_note_on(
116 std::optional<uint8_t> channel = {},
117 uint32_t device_id = 0);
118
119/**
120 * @brief Create binding for MIDI Note Off messages
121 */
122MAYAFLUX_API Core::InputBinding bind_midi_note_off(
123 std::optional<uint8_t> channel = {},
124 uint32_t device_id = 0);
125
126/**
127 * @brief Create binding for MIDI Pitch Bend messages
128 */
129MAYAFLUX_API Core::InputBinding bind_midi_pitch_bend(
130 std::optional<uint8_t> channel = {},
131 uint32_t device_id = 0);
132
133/**
134 * @brief Create binding for OSC messages
135 * @param pattern OSC address pattern to match (empty = all)
136 */
137MAYAFLUX_API Core::InputBinding bind_osc(const std::string& pattern = "");
138
139/**
140 * @brief Create binding for Serial device
141 * @param device_id Device ID (0 = any Serial device)
142 */
143MAYAFLUX_API Core::InputBinding bind_serial(uint32_t device_id = 0);
144
145} // namespace MayaFlux
Manages input processing thread and node dispatch.
Input processing subsystem for external devices.
Abstract base class for nodes that receive external input.
@ InputSubsystem
Input subsystem operations (device management, event dispatch)
@ Core
Core engine, backend, subsystems.
void register_input_node(const std::shared_ptr< Nodes::Input::InputNode > &node, const Core::InputBinding &binding)
Register an input node with specified binding.
Definition Input.cpp:21
std::vector< Core::InputDeviceInfo > get_midi_devices()
Get a list of connected MIDI devices.
Definition Input.cpp:36
void unregister_input_node(const std::shared_ptr< Nodes::Input::InputNode > &node)
Unregister an input node.
Definition Input.cpp:26
Core::InputBinding bind_midi_note_off(std::optional< uint8_t > channel, uint32_t device_id)
Create binding for MIDI Note Off messages.
Definition Input.cpp:83
Core::InputBinding bind_midi_note_on(std::optional< uint8_t > channel, uint32_t device_id)
Create binding for MIDI Note On messages.
Definition Input.cpp:76
Core::InputBinding bind_osc(const std::string &pattern)
Create binding for OSC messages.
Definition Input.cpp:97
std::optional< Core::InputDeviceInfo > find_hid_device(uint16_t vendor_id, uint16_t product_id)
Find a HID device by vendor and product ID.
Definition Input.cpp:46
const Core::InputSubsystem & get_input_subsystem()
Gets the input subsystem.
Definition Input.cpp:10
Core::InputManager & get_input_manager()
Gets a handle to default input manager.
Definition Input.cpp:16
Core::InputBinding bind_serial(uint32_t device_id)
Create binding for Serial device.
Definition Input.cpp:102
std::vector< Core::InputDeviceInfo > get_all_input_devices()
Get a list of connected MIDI devices.
Definition Input.cpp:41
Core::InputBinding bind_midi(uint32_t device_id, std::optional< uint8_t > channel)
Create binding for MIDI device.
Definition Input.cpp:63
Core::InputBinding bind_midi_pitch_bend(std::optional< uint8_t > channel, uint32_t device_id)
Create binding for MIDI Pitch Bend messages.
Definition Input.cpp:90
Core::InputBinding bind_hid(uint32_t device_id)
Create binding for HID device.
Definition Input.cpp:53
std::vector< Core::InputDeviceInfo > get_hid_devices()
Get a list of connected HID devices.
Definition Input.cpp:31
Core::InputBinding bind_midi_cc(std::optional< uint8_t > cc_number, std::optional< uint8_t > channel, uint32_t device_id)
Create binding for MIDI Control Change messages.
Definition Input.cpp:68
Main namespace for the Maya Flux audio engine.
Definition LiveAid.hpp:6
Specifies what input an InputNode wants to receive.