AlsaBridge.cpp
branchv_0
changeset 13 334b727f7516
parent 12 15d87fdd6e6c
     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  };