MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ open_device()

bool MayaFlux::Core::HIDBackend::open_device ( uint32_t  device_id)
overridevirtual

Open a device for input.

Parameters
device_idDevice identifier from get_devices()
Returns
true if device was opened successfully

Implements MayaFlux::Core::IInputBackend.

Definition at line 232 of file HIDBackend.cpp.

233{
234 std::lock_guard lock(m_devices_mutex);
235
236 if (m_open_devices.find(device_id) != m_open_devices.end()) {
238 "HID device {} already open", device_id);
239 return true;
240 }
241
242 auto it = m_enumerated_devices.find(device_id);
243 if (it == m_enumerated_devices.end()) {
245 "HID device {} not found", device_id);
246 return false;
247 }
248
249 hid_device* handle = hid_open_path(it->second.path.c_str());
250 if (!handle) {
252 "Failed to open HID device {}: {}", device_id, it->second.name);
253 return false;
254 }
255
256 hid_set_nonblocking(handle, 1);
257
258 HIDDeviceState state;
259 state.handle = handle;
260 state.info = it->second;
261 state.read_buffer.resize(m_config.read_buffer_size);
262 state.active.store(true);
263
264 auto state_ptr = std::make_shared<HIDDeviceState>();
265 state_ptr->handle = handle;
266 state_ptr->info = it->second;
267 state_ptr->read_buffer.resize(m_config.read_buffer_size);
268 state_ptr->active.store(true);
269
270 m_open_devices.insert_or_assign(device_id, state_ptr);
271
273 "Opened HID device {}: {}", device_id, it->second.name);
274
275 return true;
276}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
hid_device_ hid_device
Definition HIDBackend.hpp:5
std::unordered_map< uint32_t, HIDDeviceInfoExt > m_enumerated_devices
std::unordered_map< uint32_t, std::shared_ptr< HIDDeviceState > > m_open_devices
@ InputBackend
Input device backend (HID, MIDI, OSC)
@ Core
Core engine, backend, subsystems.
size_t read_buffer_size
Per-device read buffer size.

References MayaFlux::Core::HIDDeviceState::active, MayaFlux::Journal::Core, MayaFlux::Core::HIDDeviceState::handle, MayaFlux::Core::HIDDeviceState::info, MayaFlux::Journal::InputBackend, m_config, m_devices_mutex, m_enumerated_devices, m_open_devices, MF_ERROR, MF_INFO, MF_WARN, MayaFlux::Core::HIDDeviceState::read_buffer, and MayaFlux::Core::HIDBackend::Config::read_buffer_size.

Referenced by MayaFlux::Core::InputSubsystem::initialize_hid_backend().

+ Here is the caller graph for this function: