16 .Buffer = Buffers::ProcessingToken::INPUT_BACKEND,
17 .Node = Nodes::ProcessingToken::EVENT_RATE,
18 .Task = Vruta::ProcessingToken::EVENT_DRIVEN
37 "Initializing Input Subsystem...");
59 "Input Subsystem initialized with {} backend(s)",
m_backends.size());
66 auto input_service = std::make_shared<Registry::Service::InputService>();
68 input_service->get_all_devices = [
this]() {
72 input_service->open_device = [
this](
InputType type, uint32_t id) {
76 input_service->close_device = [
this](
InputType type, uint32_t id) {
83 [input_service]() ->
void* {
84 return input_service.get();
92 "Cannot start InputSubsystem: not initialized");
112 "Input Subsystem started");
162 "Input Subsystem stopped");
189 "Input Subsystem shutdown complete");
207 "Backend type {} already registered",
static_cast<int>(type));
211 if (!backend->initialize()) {
213 "Failed to initialize backend: {}", backend->get_name());
222 "Added input backend: {}",
m_backends[type]->get_name());
231 return (it !=
m_backends.end()) ? it->second.get() :
nullptr;
237 std::vector<IInputBackend*> result;
239 for (
const auto& [type, backend] :
m_backends) {
240 result.push_back(backend.get());
252 std::vector<InputDeviceInfo> result;
253 for (
const auto& [type, backend] :
m_backends) {
254 auto devices = backend->get_devices();
255 result.insert(result.end(), devices.begin(), devices.end());
266 "Backend not found for device open request");
269 return it->second->open_device(device_id);
277 it->second->close_device(device_id);
293 "Device {}: {} ({})",
294 connected ?
"connected" :
"disconnected",
308 auto hid = std::make_unique<HIDBackend>(hid_config);
313 for (
const auto& dev : backend->get_devices()) {
330 auto midi = std::make_unique<MIDIBackend>(midi_config);
335 for (
const auto& dev : backend->get_devices()) {
347 "OSC backend not yet implemented");
353 "Serial backend not yet implemented");
360 return (it !=
m_backends.end()) ? it->second->get_devices() : std::vector<InputDeviceInfo> {};
367 return (it !=
m_backends.end()) ? it->second->get_devices() : std::vector<InputDeviceInfo> {};
372 uint32_t device_id)
const
379 auto devices = it->second->get_devices();
380 for (
const auto& dev : devices) {
381 if (dev.id == device_id) {
390 uint16_t product_id)
const
393 for (
const auto& dev : devices) {
394 if (dev.vendor_id == vendor_id && dev.product_id == product_id) {
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
bool open_device(uint32_t device_id) override
Open a device for input.
HIDAPI-based HID input backend.
bool open_device(uint32_t device_id) override
Open a device for input.
RtMidi-based MIDI input backend.
InputManagerHandle inputs
Unified interface combining buffer and node processing for subsystems.
static BackendRegistry & instance()
Get the global registry instance.
InputType
Input backend type enumeration.
@ HID
Generic HID devices (game controllers, custom hardware)
@ MIDI
MIDI controllers and instruments.
@ InputSubsystem
Input subsystem operations (device management, event dispatch)
@ Core
Core engine, backend, subsystems.
size_t read_buffer_size
Per-device read buffer size.
int poll_timeout_ms
Polling timeout in milliseconds.
bool enabled
Enable HID backend.
uint32_t reconnect_interval_ms
Reconnection attempt interval.
bool auto_open
Auto-open matching devices on start.
std::vector< HIDDeviceFilter > filters
Device filters (empty = all devices)
bool auto_reconnect
Auto-reconnect disconnected devices.
int poll_timeout_ms
Timeout for hid_read_timeout.
size_t read_buffer_size
Per-device read buffer size.
std::vector< HIDDeviceFilter > filters
Device filters (empty = all devices)
uint32_t reconnect_interval_ms
Reconnection attempt interval.
bool auto_reconnect
Auto-reopen disconnected devices.
Configuration for HID backend.
bool auto_open_outputs
Auto-open all MIDI output ports.
bool enabled
Enable MIDI backend.
bool enable_virtual_port
Create a virtual MIDI port.
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.
bool auto_open_inputs
Auto-open all MIDI input ports.
std::string virtual_port_name
Name for virtual port.
std::vector< std::string > input_port_filters
std::vector< std::string > output_port_filters
std::string virtual_port_name
bool enabled
Enable OSC backend.
bool enabled
Enable Serial backend.