1 /* 2 * Copyright (C) 2014-2015 Robin Gareus <robin@gareus.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License along 15 * with this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 */ 18 19 #ifndef __libbackend_alsa_sequencer_h__ 20 #define __libbackend_alsa_sequencer_h__ 21 22 #include <stdint.h> 23 #include <poll.h> 24 #include <pthread.h> 25 26 #include <alsa/asoundlib.h> 27 28 #include "pbd/ringbuffer.h" 29 #include "ardour/types.h" 30 #include "alsa_midi.h" 31 32 namespace ARDOUR { 33 34 class AlsaSeqMidiIO : virtual public AlsaMidiIO { 35 public: 36 AlsaSeqMidiIO (const std::string &name, const char *port_name, const bool input); 37 virtual ~AlsaSeqMidiIO (); 38 39 protected: 40 snd_seq_t *_seq; 41 int _port; 42 43 private: 44 void init (const char *device_name, const bool input); 45 }; 46 47 class AlsaSeqMidiOut : public AlsaSeqMidiIO, public AlsaMidiOut 48 { 49 public: 50 AlsaSeqMidiOut (const std::string &name, const char *port_name); 51 void* main_process_thread (); 52 }; 53 54 class AlsaSeqMidiIn : public AlsaSeqMidiIO, public AlsaMidiIn 55 { 56 public: 57 AlsaSeqMidiIn (const std::string &name, const char *port_name); 58 59 void* main_process_thread (); 60 }; 61 62 } // namespace 63 64 #endif 65