1.1 --- a/AlsaBridge.cpp Mon Jan 04 15:45:12 2021 +0100
1.2 +++ b/AlsaBridge.cpp Mon Jan 04 17:11:57 2021 +0100
1.3 @@ -15,6 +15,7 @@
1.4 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1.5 */
1.6 #include <iostream>
1.7 +#include <iomanip>
1.8 #include <sstream>
1.9 #include <stdexcept>
1.10 #include <thread>
1.11 @@ -75,6 +76,12 @@
1.12 }
1.13 }
1.14
1.15 + std::string toString(const MidiMessage& midiMessage) {
1.16 + std::stringstream result;
1.17 + for (uint8_t b : midiMessage) result << std::hex << std::setw(2) << std::setfill('0') << (int) b;
1.18 + return result.str();
1.19 + }
1.20 +
1.21 void run() {
1.22 while (!stopped) {
1.23 {
1.24 @@ -93,12 +100,12 @@
1.25 public:
1.26
1.27 AlsaBridgeImpl(djmfix::DJMFix* djmFix, const std::string& cardNamePattern, djmfix::logging::Logger* logger) : djmFix(djmFix), logger(logger ? logger : djmfix::logging::blackhole()) {
1.28 - if (djmFix == nullptr) throw std::invalid_argument("need a djmFix for AlsaBridge");
1.29 + if (djmFix == nullptr) throw std::invalid_argument("Need a djmFix for AlsaBridge.");
1.30
1.31 std::string deviceName = findDeviceName(std::regex(cardNamePattern));
1.32
1.33 int error = snd_rawmidi_open(&input, &output, deviceName.c_str(), SND_RAWMIDI_NONBLOCK);
1.34 - if (error) throw std::invalid_argument("unable to open ALSA device");
1.35 + if (error) throw std::invalid_argument("Unable to open ALSA device.");
1.36
1.37
1.38 djmFix->setMidiSender(this);
1.39 @@ -108,7 +115,7 @@
1.40 // TODO: do not use raw/exclusive access to the MIDI device
1.41 snd_rawmidi_close(input);
1.42 snd_rawmidi_close(output);
1.43 - logger->log(L::FINE, "~AlsaBridgeImpl()");
1.44 + logger->log(L::FINER, "~AlsaBridgeImpl()");
1.45 }
1.46
1.47 virtual void start() override {
1.48 @@ -125,7 +132,7 @@
1.49 virtual void send(MidiMessage midiMessage) override {
1.50 std::lock_guard<std::recursive_mutex> lock(midiMutex);
1.51 ssize_t length = snd_rawmidi_write(output, midiMessage.data(), midiMessage.size());
1.52 - logger->log(L::INFO, "AlsaBridgeImpl::send(): length = " + std::to_string(length));
1.53 + logger->log(L::FINE, "Sent message: length = " + std::to_string(length) + " data = " + toString(midiMessage));
1.54 }
1.55
1.56 };