diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-07-23 22:33:05 +0200 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-07-23 22:33:05 +0200 |
commit | c5c195ff5318f00d544c0fbceb133abcc4ba7a5a (patch) | |
tree | 1c7a3e646f6eb72d748dd606fe9e8e12175b39bd /daemon/src/connection_manager.cpp | |
parent | 41f95375a65a3f67a75258680d6d8b03bb4d678b (diff) |
MVP
Diffstat (limited to 'daemon/src/connection_manager.cpp')
-rw-r--r-- | daemon/src/connection_manager.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp index f6a02c1..6de1800 100644 --- a/daemon/src/connection_manager.cpp +++ b/daemon/src/connection_manager.cpp @@ -21,13 +21,19 @@ struct Device_Connection : public Sender RtMidiOut midi_out {}; void - send(std::array<std::uint8_t, 3> const & payload) override + send(std::vector<std::uint8_t> const & payload) override { if (midi_out.isPortOpen()) { - midi_out.sendMessage(payload.data(), 3); + midi_out.sendMessage(&payload); } } + + std::string + get_id() const override + { + return source_id; + } }; static void @@ -35,12 +41,15 @@ callback(double time_stamp, std::vector<unsigned char> *raw, void *user_data) { Device_Connection* device = static_cast<Device_Connection*>(user_data); - if (raw->size() != 3) + if (raw->size() > 3) { - std::cerr << "Received message with wrong size from " << device->source_id << ", dropping\n"; + std::cerr << "Received message with wrong size (" << raw->size() << ") from " << device->source_id << ", dropping\n"; + for (auto const & byte : *raw) std::cerr << static_cast<unsigned>(byte); + std::cerr << "\n"; + return; } - Message message { &device->source_id, {raw->at(0), raw->at(1), raw->at(2)} }; + Message message { &device->source_id, *raw }; device->submitter.submit(message); } @@ -55,7 +64,7 @@ Connection_Manager::Connection_Manager(Device_Map const & device_map, Submitter auto & connection = m_connections[id]; connection->midi_in.setCallback(&callback, connection.get()); - connection->midi_in.ignoreTypes(true, true, true); + connection->midi_in.ignoreTypes(true, false, true); if (!open_port(&connection->midi_in, name)) { |