aboutsummaryrefslogtreecommitdiffstats
path: root/daemon/src/connection_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/src/connection_manager.cpp')
-rw-r--r--daemon/src/connection_manager.cpp69
1 files changed, 15 insertions, 54 deletions
diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp
index 6de1800..ac4c6cb 100644
--- a/daemon/src/connection_manager.cpp
+++ b/daemon/src/connection_manager.cpp
@@ -1,41 +1,15 @@
#include "connection_manager.h"
-#include "sender.h"
+#include "device_connection.h"
+
+#include "udevw/include/udevw.hpp"
#include <iostream>
-#include <rtmidi/RtMidi.h>
+#include <chrono>
namespace midi_router
{
-struct Device_Connection : public Sender
-{
- Device_Connection(Device_Id const & source_id, Submitter & submitter):
- source_id(source_id),
- submitter(submitter)
- {}
-
- Device_Id const & source_id;
- Submitter & submitter;
- RtMidiIn midi_in {};
- RtMidiOut midi_out {};
-
- void
- send(std::vector<std::uint8_t> const & payload) override
- {
- if (midi_out.isPortOpen())
- {
- midi_out.sendMessage(&payload);
- }
- }
-
- std::string
- get_id() const override
- {
- return source_id;
- }
-};
-
static void
callback(double time_stamp, std::vector<unsigned char> *raw, void *user_data)
{
@@ -56,26 +30,13 @@ callback(double time_stamp, std::vector<unsigned char> *raw, void *user_data)
Connection_Manager::Connection_Manager(Device_Map const & device_map, Submitter & submitter):
m_device_map(device_map),
m_submitter(submitter),
- m_connections{}
+ m_connections{},
+ m_detector(std::bind(&Connection_Manager::detect_devices, this))
{
for (auto const & [name, id] : device_map)
{
- m_connections[id] = std::make_unique<Device_Connection>(id, submitter);
- auto & connection = m_connections[id];
-
- connection->midi_in.setCallback(&callback, connection.get());
- connection->midi_in.ignoreTypes(true, false, true);
-
- if (!open_port(&connection->midi_in, name))
- {
- std::cerr << "Input port not found for device " << name << "\n";
- }
-
- if (!open_port(&connection->midi_out, name))
- {
- std::cerr << "Output port not found for device " << name << "\n";
- }
-
+ m_connections[id] = std::make_unique<Device_Connection>(id, name, submitter, callback);
+ m_connections[id]->open();
}
}
@@ -87,18 +48,18 @@ Connection_Manager::get_sender(Device_Id const & device) const
return *m_connections.at(device);
}
-bool
-Connection_Manager::open_port(RtMidi* const midi, std::string const & name)
+void
+Connection_Manager::detect_devices()
{
- for (std::size_t i = 0; i < midi->getPortCount(); ++i)
+ while (true)
{
- if (midi->getPortName(i).contains(name))
+ std::cout << "Polling for devices\n";
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ for (auto && [id, connection] : m_connections)
{
- midi->openPort(i);
- return true;
+ connection->open();
}
}
- return false;
}
} // namespace midi_router