diff -r 1c74985d4c4e -r 63154f9d24a2 AlsaBridge.cpp --- a/AlsaBridge.cpp Tue Apr 15 22:44:31 2025 +0200 +++ b/AlsaBridge.cpp Tue Apr 15 22:45:25 2025 +0200 @@ -1,6 +1,6 @@ /** * DJM-Fix - * Copyright © 2020 František Kučera (Frantovo.cz, GlobalCode.info) + * Copyright © 2025 František Kučera (Frantovo.cz, GlobalCode.info) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -67,18 +67,24 @@ } if (cardNumbers.size() == 1) { - logger->log(L::INFO, "Going to fix card #" + std::to_string(cardNumbers[0])); - return "hw:" + std::to_string(cardNumbers[0]); + const auto n = std::to_string(cardNumbers[0]); + logger->log(L::INFO, "Going to fix card #" + n); + return "hw:" + n; } else if (cardNumbers.empty()) { - throw std::invalid_argument("No card with matching name found. Is the card connected? Maybe try to provide different name pattern."); + throw std::invalid_argument( + "No card with matching name found. Is the card connected? " + "Maybe try to provide different name pattern."); } else { - throw std::invalid_argument("Multiple cards with matching name found. Please provide a name pattern that matches only one card"); + throw std::invalid_argument( + "Multiple cards with matching name found. " + "Please provide a name pattern that matches only one card"); } } std::string toString(const MidiMessage& midiMessage) { std::stringstream result; - for (uint8_t b : midiMessage) result << std::hex << std::setw(2) << std::setfill('0') << (int) b; + for (uint8_t b : midiMessage) + result << std::hex << std::setw(2) << std::setfill('0') << (int) b; return result.str(); } @@ -87,11 +93,11 @@ { std::lock_guard lock(midiMutex); // TODO: poll - uint8_t buffer[256]; - ssize_t length = snd_rawmidi_read(input, buffer, sizeof (buffer)); - if (length > 0 && length <= sizeof (buffer)) { + uint8_t buf[256]; + ssize_t length = snd_rawmidi_read(input, buf, sizeof (buf)); + if (length > 0 && length <= sizeof (buf)) { // TODO: multiple messages combined together? - djmFix->receive(MidiMessage(buffer, buffer + length)); + djmFix->receive(MidiMessage(buf, buf + length)); } } std::this_thread::sleep_for(std::chrono::milliseconds(100)); @@ -99,15 +105,21 @@ } public: - AlsaBridgeImpl(djmfix::DJMFix* djmFix, const std::string& cardNamePattern, djmfix::logging::Logger* logger) : djmFix(djmFix), logger(logger ? logger : djmfix::logging::blackhole()) { - if (djmFix == nullptr) throw std::invalid_argument("Need a djmFix for AlsaBridge."); + AlsaBridgeImpl( + djmfix::DJMFix* djmFix, + const std::string& cardNamePattern, + djmfix::logging::Logger* logger) + : djmFix(djmFix), logger(logger ? logger : djmfix::logging::blackhole()) // + { + if (djmFix == nullptr) + throw std::invalid_argument("Need a djmFix for AlsaBridge."); std::string deviceName = findDeviceName(std::regex(cardNamePattern)); - int error = snd_rawmidi_open(&input, &output, deviceName.c_str(), SND_RAWMIDI_NONBLOCK); + int mode = SND_RAWMIDI_NONBLOCK; + int error = snd_rawmidi_open(&input, &output, deviceName.c_str(), mode); if (error) throw std::invalid_argument("Unable to open ALSA device."); - djmFix->setMidiSender(this); } @@ -129,15 +141,21 @@ djmFix->stop(); } - virtual void send(MidiMessage midiMessage) override { + virtual void send(MidiMessage msg) override { std::lock_guard lock(midiMutex); - ssize_t length = snd_rawmidi_write(output, midiMessage.data(), midiMessage.size()); - logger->log(L::FINE, "Sent message: length = " + std::to_string(length) + " data = " + toString(midiMessage)); + ssize_t length = snd_rawmidi_write(output, msg.data(), msg.size()); + logger->log(L::FINE, "Sent message:" + " length = " + std::to_string(length) + + " data = " + toString(msg)); } }; -AlsaBridge* create(djmfix::DJMFix* djmFix, const std::string& deviceName, djmfix::logging::Logger* logger) { +AlsaBridge* create( + djmfix::DJMFix* djmFix, + const std::string& deviceName, + djmfix::logging::Logger* logger) // +{ return new AlsaBridgeImpl(djmFix, deviceName, logger); }