#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);
}
///////////////////////////////////////////////////////////////////////////////
-AlsaSeqMidiOut::AlsaSeqMidiOut (const char *device)
- : AlsaSeqMidiIO (device, false)
+AlsaSeqMidiOut::AlsaSeqMidiOut (const std::string &name, const char *device)
+ : AlsaSeqMidiIO (name, device, false)
, AlsaMidiOut ()
{
}
_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();
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;
///////////////////////////////////////////////////////////////////////////////
-AlsaSeqMidiIn::AlsaSeqMidiIn (const char *device)
- : AlsaSeqMidiIO (device, true)
+AlsaSeqMidiIn::AlsaSeqMidiIn (const std::string &name, const char *device)
+ : AlsaSeqMidiIO (name, device, true)
, AlsaMidiIn ()
{
}
_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) {
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;
}
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);