avoid compiler warning on at least some linux versions
[ardour.git] / libs / backends / alsa / alsa_sequencer.cc
index aa0aac09fa9f7ee7186d7e3c6ce014cf7868bd82..ae0ccf94d2b507336e104580183f9aaa32ed2596 100644 (file)
 #include "alsa_sequencer.h"
 
 #include "pbd/error.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 
-/* max bytes per individual midi-event
- * events larger than this are ignored */
-#define MaxAlsaSeqEventSize (64)
-
 #ifndef NDEBUG
 #define _DEBUGPRINT(STR) fprintf(stderr, STR);
 #else
 #define _DEBUGPRINT(STR) ;
 #endif
 
-AlsaSeqMidiIO::AlsaSeqMidiIO (const char *device, const bool input)
+AlsaSeqMidiIO::AlsaSeqMidiIO (const std::string &name, const char *device, const bool input)
        : AlsaMidiIO()
        , _seq (0)
 {
+       _name = name;
        init (device, input);
 }
 
@@ -117,8 +114,8 @@ initerr:
 
 ///////////////////////////////////////////////////////////////////////////////
 
-AlsaSeqMidiOut::AlsaSeqMidiOut (const char *device)
-               : AlsaSeqMidiIO (device, false)
+AlsaSeqMidiOut::AlsaSeqMidiOut (const std::string &name, const char *device)
+               : AlsaSeqMidiIO (name, device, false)
                , AlsaMidiOut ()
 {
 }
@@ -129,12 +126,12 @@ AlsaSeqMidiOut::main_process_thread ()
        _running = true;
        bool need_drain = false;
        snd_midi_event_t *alsa_codec = NULL;
-       snd_midi_event_new (MaxAlsaSeqEventSize, &alsa_codec);
+       snd_midi_event_new (MaxAlsaMidiEventSize, &alsa_codec);
        pthread_mutex_lock (&_notify_mutex);
        while (_running) {
                bool have_data = false;
                struct MidiEventHeader h(0,0);
-               uint8_t data[MaxAlsaSeqEventSize];
+               uint8_t data[MaxAlsaMidiEventSize];
 
                const uint32_t read_space = _rb->read_space();
 
@@ -144,7 +141,7 @@ AlsaSeqMidiOut::main_process_thread ()
                                break;
                        }
                        assert (read_space >= h.size);
-                       if (h.size > MaxAlsaSeqEventSize) {
+                       if (h.size > MaxAlsaMidiEventSize) {
                                _rb->increment_read_idx (h.size);
                                _DEBUGPRINT("AlsaSeqMidiOut: MIDI event too large!\n");
                                continue;
@@ -227,8 +224,8 @@ retry:
 
 ///////////////////////////////////////////////////////////////////////////////
 
-AlsaSeqMidiIn::AlsaSeqMidiIn (const char *device)
-               : AlsaSeqMidiIO (device, true)
+AlsaSeqMidiIn::AlsaSeqMidiIn (const std::string &name, const char *device)
+               : AlsaSeqMidiIO (name, device, true)
                , AlsaMidiIn ()
 {
 }
@@ -239,7 +236,7 @@ AlsaSeqMidiIn::main_process_thread ()
        _running = true;
        bool do_poll = true;
        snd_midi_event_t *alsa_codec = NULL;
-       snd_midi_event_new (MaxAlsaSeqEventSize, &alsa_codec);
+       snd_midi_event_new (MaxAlsaMidiEventSize, &alsa_codec);
 
        while (_running) {
 
@@ -260,7 +257,11 @@ AlsaSeqMidiIn::main_process_thread ()
                uint64_t time = g_get_monotonic_time();
                ssize_t err = snd_seq_event_input (_seq, &event);
 
+#if EAGAIN == EWOULDBLOCK
+               if (err == -EAGAIN) {
+#else
                if ((err == -EAGAIN) || (err == -EWOULDBLOCK)) {
+#endif
                        do_poll = true;
                        continue;
                }
@@ -274,7 +275,7 @@ AlsaSeqMidiIn::main_process_thread ()
                        break;
                }
 
-               uint8_t data[MaxAlsaSeqEventSize];
+               uint8_t data[MaxAlsaMidiEventSize];
                snd_midi_event_reset_decode (alsa_codec);
                ssize_t size = snd_midi_event_decode (alsa_codec, data, sizeof(data), event);