diff -r 5b351628a377 -r 15d87fdd6e6c AlsaBridge.cpp
--- a/AlsaBridge.cpp Mon Jan 04 13:38:08 2021 +0100
+++ b/AlsaBridge.cpp Mon Jan 04 15:45:12 2021 +0100
@@ -15,6 +15,7 @@
* along with this program. If not, see .
*/
#include
+#include
#include
#include
#include
@@ -24,13 +25,17 @@
#include
#include "AlsaBridge.h"
+#include "Logger.h"
namespace djmfix {
namespace alsa {
+using L = djmfix::logging::Level;
+
class AlsaBridgeImpl : public AlsaBridge, private djmfix::MidiSender {
private:
djmfix::DJMFix* djmFix;
+ djmfix::logging::Logger* logger;
snd_rawmidi_t* input;
snd_rawmidi_t* output;
std::thread receivingThread;
@@ -41,22 +46,27 @@
std::vector cardNumbers;
- std::cerr << "Looking for available cards:" << std::endl; // TODO: do not mess STDIO
+ logger->log(L::INFO, "Looking for available cards:");
for (int card = -1; snd_card_next(&card) == 0 && card >= 0;) {
char* longName = nullptr;
snd_card_get_longname(card, &longName);
- std::cerr << "card: #" << card << ": '" << longName << "'"; // TODO: do not mess STDIO
+
+ std::stringstream logMessage;
+ logMessage << " - card: #" << card << ": '" << longName << "'";
+
if (std::regex_match(longName, cardNamePattern)) {
cardNumbers.push_back(card);
- std::cerr << " [matches]"; // TODO: do not mess STDIO
+ logMessage << " [matches]";
}
- std::cerr << std::endl;
+
+ logger->log(L::INFO, logMessage.str());
+
free(longName);
}
if (cardNumbers.size() == 1) {
- std::cerr << "Going to fix card #" << cardNumbers[0] << std::endl; // TODO: do not mess STDIO
+ logger->log(L::INFO, "Going to fix card #" + std::to_string(cardNumbers[0]));
return "hw:" + std::to_string(cardNumbers[0]);
} 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.");
@@ -82,7 +92,7 @@
}
public:
- AlsaBridgeImpl(djmfix::DJMFix* djmFix, const std::string& cardNamePattern) : djmFix(djmFix) {
+ 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));
@@ -95,10 +105,10 @@
}
virtual ~AlsaBridgeImpl() {
- // TODO: do not use raw/exclusive access to the device
+ // TODO: do not use raw/exclusive access to the MIDI device
snd_rawmidi_close(input);
snd_rawmidi_close(output);
- std::cerr << "~AlsaBridgeImpl()" << std::endl; // TODO: do not mess STDIO
+ logger->log(L::FINE, "~AlsaBridgeImpl()");
}
virtual void start() override {
@@ -115,13 +125,13 @@
virtual void send(MidiMessage midiMessage) override {
std::lock_guard lock(midiMutex);
ssize_t length = snd_rawmidi_write(output, midiMessage.data(), midiMessage.size());
- std::cerr << "AlsaBridgeImpl::send(): length = " << length << std::endl; // TODO: do not mess STDIO
+ logger->log(L::INFO, "AlsaBridgeImpl::send(): length = " + std::to_string(length));
}
};
-AlsaBridge* create(djmfix::DJMFix* djmFix, const std::string& deviceName) {
- return new AlsaBridgeImpl(djmFix, deviceName);
+AlsaBridge* create(djmfix::DJMFix* djmFix, const std::string& deviceName, djmfix::logging::Logger* logger) {
+ return new AlsaBridgeImpl(djmFix, deviceName, logger);
}
}