diff options
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/src/connection_manager.cpp | 11 | ||||
-rw-r--r-- | daemon/src/device_connection.h | 14 |
2 files changed, 18 insertions, 7 deletions
diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp index faad061..88f6659 100644 --- a/daemon/src/connection_manager.cpp +++ b/daemon/src/connection_manager.cpp @@ -90,13 +90,20 @@ Connection_Manager::refresh_devices([[maybe_unused]] bool add, [[maybe_unused]] for (auto & [id, device] : m_connections) { + bool attached = false; for (auto const & [port, name] : port_map) { - if (name.contains(device->device_name)) + attached |= name.contains(device->device_name); + if (attached) { - device->reconnect(port); + device->connect(port); + break; } } + if (!attached) + { + device->disconnect(); + } } } diff --git a/daemon/src/device_connection.h b/daemon/src/device_connection.h index a2af8cc..58ddd7f 100644 --- a/daemon/src/device_connection.h +++ b/daemon/src/device_connection.h @@ -41,13 +41,17 @@ struct Device_Connection : public Sender } void - reconnect(std::size_t port) + connect(std::size_t port) { - midi_in.closePort(); - midi_out.closePort(); + if (!midi_in.isPortOpen()) midi_in.openPort(port); + if (!midi_out.isPortOpen()) midi_out.openPort(port); + } - midi_in.openPort(port); - midi_out.openPort(port); + void + disconnect() + { + if (midi_in.isPortOpen()) midi_in.closePort(); + if (midi_out.isPortOpen()) midi_out.closePort(); } }; |