MayaFlux 0.5.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 tablet tools
48 * @return Vector of InputDeviceInfo, one per pen or eraser
49 */
50MAYAFLUX_API std::vector<Core::InputDeviceInfo> get_tablet_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_midi_devices();
57
58/**
59 * @brief Get a list of connected MIDI devices
60 * @return Vector of InputDeviceInfo for each connected MIDI device
61 */
62MAYAFLUX_API std::vector<Core::InputDeviceInfo> get_all_input_devices();
63
64/**
65 * @brief Find a HID device by vendor and product ID
66 * @param vendor_id The vendor ID
67 * @param product_id The product ID
68 * @return Optional InputDeviceInfo if found
69 */
70MAYAFLUX_API std::optional<Core::InputDeviceInfo> find_hid_device(
71 uint16_t vendor_id,
72 uint16_t product_id);
73
74/**
75 * @brief Gets the input subsystem
76 * @return InputSubsystem for input device management
77 *
78 * The InputSubsystem handles initialization and management of input devices.
79 * Access through Engine ensures proper lifecycle coordination.
80 */
81MAYAFLUX_API const Core::InputSubsystem& get_input_subsystem();
82
83// ═══════════════════════════════════════════════════════════════════════════
84// Input Binding Factories
85// ═══════════════════════════════════════════════════════════════════════════
86
87/**
88 * @brief Create binding for HID device
89 * @param device_id Device ID (0 = any HID device)
90 */
91MAYAFLUX_API Core::InputBinding bind_hid(uint32_t device_id = 0);
92
93/**
94 * @brief Create binding for HID device by vendor/product ID
95 * @param vid USB Vendor ID
96 * @param pid USB Product ID
97 */
98MAYAFLUX_API Core::InputBinding bind_hid(uint16_t vid, uint16_t pid);
99
100/**
101 * @brief Create binding for MIDI device
102 * @param device_id Device ID (0 = any MIDI device)
103 * @param channel MIDI channel filter (1-16, nullopt = any)
104 */
105MAYAFLUX_API Core::InputBinding bind_midi(uint32_t device_id = 0, std::optional<uint8_t> channel = {});
106
107/**
108 * @brief Create binding for MIDI Control Change messages
109 * @param cc_number CC number (0-127, nullopt = any CC)
110 * @param channel MIDI channel (1-16, nullopt = any channel)
111 * @param device_id Device ID (0 = any device)
112 */
114 std::optional<uint8_t> cc_number = {},
115 std::optional<uint8_t> channel = {},
116 uint32_t device_id = 0);
117
118/**
119 * @brief Create binding for MIDI Note On messages
120 */
121MAYAFLUX_API Core::InputBinding bind_midi_note_on(
122 std::optional<uint8_t> channel = {},
123 uint32_t device_id = 0);
124
125/**
126 * @brief Create binding for MIDI Note Off messages
127 */
128MAYAFLUX_API Core::InputBinding bind_midi_note_off(
129 std::optional<uint8_t> channel = {},
130 uint32_t device_id = 0);
131
132/**
133 * @brief Create binding for MIDI Pitch Bend messages
134 */
135MAYAFLUX_API Core::InputBinding bind_midi_pitch_bend(
136 std::optional<uint8_t> channel = {},
137 uint32_t device_id = 0);
138
139/**
140 * @brief Create binding for OSC messages
141 * @param pattern OSC address pattern to match (empty = all)
142 */
143MAYAFLUX_API Core::InputBinding bind_osc(const std::string& pattern = "");
144
145/**
146 * @brief Create binding for Serial device
147 * @param device_id Device ID (0 = any Serial device)
148 */
149MAYAFLUX_API Core::InputBinding bind_serial(uint32_t device_id = 0);
150
151/**
152 * @brief Create binding for a tablet tool
153 * @param device_id Tool ID (0 = any tool)
154 */
155MAYAFLUX_API Core::InputBinding bind_tablet(uint32_t device_id = 0);
156
157} // 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
std::vector< Core::InputDeviceInfo > get_tablet_devices()
Get a list of connected tablet tools.
Definition Input.cpp:41
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:88
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:81
Core::InputBinding bind_osc(const std::string &pattern)
Create binding for OSC messages.
Definition Input.cpp:102
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:51
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:107
std::vector< Core::InputDeviceInfo > get_all_input_devices()
Get a list of connected MIDI devices.
Definition Input.cpp:46
Core::InputBinding bind_midi(uint32_t device_id, std::optional< uint8_t > channel)
Create binding for MIDI device.
Definition Input.cpp:68
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:95
Core::InputBinding bind_hid(uint32_t device_id)
Create binding for HID device.
Definition Input.cpp:58
std::vector< Core::InputDeviceInfo > get_hid_devices()
Get a list of connected HID devices.
Definition Input.cpp:31
Core::InputBinding bind_tablet(uint32_t device_id)
Create binding for a tablet tool.
Definition Input.cpp:112
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:73
Main namespace for the Maya Flux audio engine.
Definition Runtime.cpp:12
Specifies what input an InputNode wants to receive.