| 
							- /*
 - Copyright (C) 2011 Devin Anderson
 - 
 - This program is free software; you can redistribute it and/or modify
 - it under the terms of the GNU General Public License as published by
 - the Free Software Foundation; either version 2 of the License, or
 - (at your option) any later version.
 - 
 - This program is distributed in the hope that it will be useful,
 - but WITHOUT ANY WARRANTY; without even the implied warranty of
 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - GNU General Public License for more details.
 - 
 - You should have received a copy of the GNU General Public License
 - along with this program; if not, write to the Free Software
 - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 - 
 - */
 - 
 - #include <cassert>
 - 
 - #include "JackALSARawMidiSendQueue.h"
 - #include "JackMidiUtil.h"
 - #include "JackError.h"
 - 
 - using Jack::JackALSARawMidiSendQueue;
 - 
 - JackALSARawMidiSendQueue::JackALSARawMidiSendQueue(snd_rawmidi_t *rawmidi,
 -                                                    size_t bytes_per_poll)
 - {
 -     assert(bytes_per_poll > 0);
 -     this->bytes_per_poll = bytes_per_poll;
 -     this->rawmidi = rawmidi;
 -     blocked = false;
 -     bytes_available = bytes_per_poll;
 - }
 - 
 - Jack::JackMidiWriteQueue::EnqueueResult
 - JackALSARawMidiSendQueue::EnqueueEvent(jack_nframes_t time, size_t size,
 -                                        jack_midi_data_t *buffer)
 - {
 -     assert(size == 1);
 -     if (time > GetCurrentFrame()) {
 -         return EVENT_EARLY;
 -     }
 -     if (! bytes_available) {
 -         return BUFFER_FULL;
 -     }
 -     ssize_t result = snd_rawmidi_write(rawmidi, buffer, 1);
 -     switch (result) {
 -     case 1:
 -         blocked = false;
 -         bytes_available--;
 -         return OK;
 -     case -EWOULDBLOCK:
 -         blocked = true;
 -         return BUFFER_FULL;
 -     }
 -     jack_error("JackALSARawMidiSendQueue::EnqueueEvent - snd_rawmidi_write: "
 -                "%s", snd_strerror(result));
 -     return EN_ERROR;
 - }
 - 
 - bool
 - JackALSARawMidiSendQueue::IsBlocked()
 - {
 -     return blocked;
 - }
 - 
 - void
 - JackALSARawMidiSendQueue::ResetPollByteCount()
 - {
 -     bytes_available = bytes_per_poll;
 - }
 
 
  |