summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midiport_manager.h
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-08-07 22:21:36 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-08-07 22:21:36 -0400
commit83a0c30c24ce6bb6e3e718c267a82fbaffc33b4b (patch)
treea02c8bb4877932c876f784527831b57d6ef0e5cc /libs/ardour/ardour/midiport_manager.h
parent616f2a0370a10dcc7372a95f6bca9f5a45698980 (diff)
major redesign of MIDI port heirarchy and management
basic, very flaky functionality is back. program unstable at present
Diffstat (limited to 'libs/ardour/ardour/midiport_manager.h')
-rw-r--r--libs/ardour/ardour/midiport_manager.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h
new file mode 100644
index 0000000000..9c45e60341
--- /dev/null
+++ b/libs/ardour/ardour/midiport_manager.h
@@ -0,0 +1,94 @@
+/*
+ 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 __midiport_manager_h__
+#define __midiport_manager_h__
+
+#include <list>
+
+#include <string>
+
+#include "pbd/rcu.h"
+
+#include "midi++/types.h"
+#include "midi++/port.h"
+
+#include "ardour/types.h"
+
+namespace ARDOUR {
+
+class MidiPort;
+class Port;
+
+class MidiPortManager {
+ public:
+ MidiPortManager();
+ virtual ~MidiPortManager ();
+
+ MidiPort* add_port (MidiPort *);
+ void remove_port (MidiPort *);
+
+ MidiPort* port (const std::string&);
+
+ /* Ports used for control. These are read/written to outside of the
+ * process callback (asynchronously with respect to when data
+ * actually arrives).
+ *
+ * More detail: we do actually read/write data for these ports
+ * inside the process callback, but incoming data is only parsed
+ * and outgoing data is only generated *outside* the process
+ * callback.
+ */
+
+ MIDI::Port* midi_input_port () { return _midi_input_port; }
+ MIDI::Port* midi_output_port () { return _midi_output_port; }
+
+ /* Ports used for synchronization. These have their I/O handled inside the
+ * process callback.
+ */
+
+ boost::shared_ptr<MidiPort> mtc_input_port() const { return _mtc_input_port; }
+ boost::shared_ptr<MidiPort> mtc_output_port() const { return _mtc_output_port; }
+ boost::shared_ptr<MidiPort> midi_clock_input_port() const { return _midi_clock_input_port; }
+ boost::shared_ptr<MidiPort> midi_clock_output_port() const { return _midi_clock_output_port; }
+
+ void set_port_states (std::list<XMLNode*>);
+
+ PBD::Signal0<void> PortsChanged;
+
+ protected:
+ /* asynchronously handled ports: MIDI::Port */
+ MIDI::Port* _midi_input_port;
+ MIDI::Port* _midi_output_port;
+ boost::shared_ptr<Port> _midi_in;
+ boost::shared_ptr<Port> _midi_out;
+
+ /* synchronously handled ports: ARDOUR::MidiPort */
+ boost::shared_ptr<MidiPort> _mtc_input_port;
+ boost::shared_ptr<MidiPort> _mtc_output_port;
+ boost::shared_ptr<MidiPort> _midi_clock_input_port;
+ boost::shared_ptr<MidiPort> _midi_clock_output_port;
+
+ void create_ports ();
+
+};
+
+} // namespace MIDI
+
+#endif // __midi_port_manager_h__