diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-08-07 22:21:36 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-08-07 22:21:36 -0400 |
commit | 83a0c30c24ce6bb6e3e718c267a82fbaffc33b4b (patch) | |
tree | a02c8bb4877932c876f784527831b57d6ef0e5cc /libs/midi++2/midi++ | |
parent | 616f2a0370a10dcc7372a95f6bca9f5a45698980 (diff) |
major redesign of MIDI port heirarchy and management
basic, very flaky functionality is back. program unstable at present
Diffstat (limited to 'libs/midi++2/midi++')
-rw-r--r-- | libs/midi++2/midi++/jack_midi_port.h | 104 | ||||
-rw-r--r-- | libs/midi++2/midi++/manager.h | 107 |
2 files changed, 0 insertions, 211 deletions
diff --git a/libs/midi++2/midi++/jack_midi_port.h b/libs/midi++2/midi++/jack_midi_port.h deleted file mode 100644 index 492756067c..0000000000 --- a/libs/midi++2/midi++/jack_midi_port.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright (C) 1998-2010 Paul Barton-Davis - 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. - -*/ - -#ifndef __libmidi_port_h__ -#define __libmidi_port_h__ - -#include <string> -#include <iostream> - -#include "pbd/xml++.h" -#include "pbd/crossthread.h" -#include "pbd/signals.h" -#include "pbd/ringbuffer.h" - -#include "evoral/Event.hpp" -#include "evoral/EventRingBuffer.hpp" - -#include "midi++/types.h" -#include "midi++/parser.h" -#include "midi++/port.h" - -#include "ardour/port_engine.h" - -namespace MIDI { - -class Channel; -class PortRequest; - -class JackMIDIPort : public Port { - public: - JackMIDIPort (std::string const &, Port::Flags, ARDOUR::PortEngine&); - JackMIDIPort (const XMLNode&, ARDOUR::PortEngine&); - ~JackMIDIPort (); - - XMLNode& get_state () const; - void set_state (const XMLNode&); - - void cycle_start (pframes_t nframes); - void cycle_end (); - - void parse (framecnt_t timestamp); - int write (const byte *msg, size_t msglen, timestamp_t timestamp); - int read (byte *buf, size_t bufsize); - void drain (int check_interval_usecs); - int selectable () const { return xthread.selectable(); } - - pframes_t nframes_this_cycle() const { return _nframes_this_cycle; } - - void reestablish (); - void reconnect (); - - static void set_process_thread (pthread_t); - static pthread_t get_process_thread () { return _process_thread; } - static bool is_process_thread(); - - static PBD::Signal0<void> MakeConnections; - static PBD::Signal0<void> EngineHalted; - -private: - ARDOUR::PortEngine& _port_engine; - ARDOUR::PortEngine::PortHandle _port_handle; - - bool _currently_in_cycle; - pframes_t _nframes_this_cycle; - timestamp_t _last_write_timestamp; - RingBuffer< Evoral::Event<double> > output_fifo; - Evoral::EventRingBuffer<timestamp_t> input_fifo; - Glib::Threads::Mutex output_fifo_lock; - CrossThreadChannel xthread; - - int create_port (); - - /** Channel used to signal to the MidiControlUI that input has arrived */ - - std::string _connections; - PBD::ScopedConnection connect_connection; - PBD::ScopedConnection halt_connection; - void flush (void* port_buffer); - void engine_halted (); - void make_connections (); - void init (std::string const &, Flags); - - static pthread_t _process_thread; - -}; - -} // namespace MIDI - -#endif // __libmidi_port_h__ diff --git a/libs/midi++2/midi++/manager.h b/libs/midi++2/midi++/manager.h deleted file mode 100644 index 7f4df5c6c8..0000000000 --- a/libs/midi++2/midi++/manager.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright (C) 1998 Paul Barton-Davis - - 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. - -*/ - -#ifndef __midi_manager_h__ -#define __midi_manager_h__ - -#include <list> - -#include <string> - -#include "pbd/rcu.h" - -#include "midi++/types.h" -#include "midi++/port.h" - -namespace ARDOUR { - class PortEngine; -} - -namespace MIDI { - -class MachineControl; - -class Manager { - public: - ~Manager (); - - /** Signal the start of an audio cycle. - * This MUST be called before any reading/writing for this cycle. - * Realtime safe. - */ - void cycle_start (pframes_t nframes); - - /** Signal the end of an audio cycle. - * This signifies that the cycle began with @ref cycle_start has ended. - * This MUST be called at the end of each cycle. - * Realtime safe. - */ - void cycle_end (); - - MachineControl* mmc () const { return _mmc; } - Port *mtc_input_port() const { return _mtc_input_port; } - Port *mtc_output_port() const { return _mtc_output_port; } - Port *midi_input_port() const { return _midi_input_port; } - Port *midi_output_port() const { return _midi_output_port; } - Port *midi_clock_input_port() const { return _midi_clock_input_port; } - Port *midi_clock_output_port() const { return _midi_clock_output_port; } - - Port* add_port (Port *); - void remove_port (Port *); - - Port* port (std::string const &); - - void set_port_states (std::list<XMLNode*>); - - typedef std::list<Port *> PortList; - - boost::shared_ptr<const PortList> get_midi_ports() const { return _ports.reader (); } - - static void create (ARDOUR::PortEngine&); - - static Manager *instance () { - return theManager; - } - static void destroy (); - - void reestablish (); - void reconnect (); - - PBD::Signal0<void> PortsChanged; - - private: - /* This is a SINGLETON pattern */ - - Manager (ARDOUR::PortEngine&); - static Manager *theManager; - - MIDI::MachineControl* _mmc; - MIDI::Port* _mtc_input_port; - MIDI::Port* _mtc_output_port; - MIDI::Port* _midi_input_port; - MIDI::Port* _midi_output_port; - MIDI::Port* _midi_clock_input_port; - MIDI::Port* _midi_clock_output_port; - - SerializedRCUManager<PortList> _ports; -}; - -} // namespace MIDI - -#endif // __midi_manager_h__ |