From 7f85c4bbdbf52cddcf3be7b39c7d645c7fe80388 Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Thu, 24 Jul 2025 12:40:13 +0200 Subject: Improved autoconnect --- daemon/src/connection_manager.cpp | 11 +++++++++-- daemon/src/device_connection.h | 14 +++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'daemon/src') 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(); } }; -- cgit v1.2.3