ardour
midiport_manager.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 1998 Paul Barton-Davis
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
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 
18 */
19 
20 #ifndef __midiport_manager_h__
21 #define __midiport_manager_h__
22 
23 #include <list>
24 
25 #include <string>
26 
27 #include "pbd/rcu.h"
28 
29 #include "midi++/types.h"
30 #include "midi++/port.h"
31 
33 #include "ardour/midi_port.h"
34 #include "ardour/types.h"
35 
36 namespace ARDOUR {
37 
38 class MidiPort;
39 class Port;
40 
42  public:
44  virtual ~MidiPortManager ();
45 
46  /* Ports used for control. These are read/written to outside of the
47  * process callback (asynchronously with respect to when data
48  * actually arrives).
49  *
50  * More detail: we do actually read/write data for these ports
51  * inside the process callback, but incoming data is only parsed
52  * and outgoing data is only generated *outside* the process
53  * callback.
54  */
55 
56  MIDI::Port* midi_input_port () const { return _midi_input_port; }
57  MIDI::Port* midi_output_port () const { return _midi_output_port; }
58  MIDI::Port* mmc_input_port () const { return _mmc_input_port; }
59  MIDI::Port* mmc_output_port () const { return _mmc_output_port; }
60  MIDI::Port* scene_input_port () const { return _scene_input_port; }
61  MIDI::Port* scene_output_port () const { return _scene_output_port; }
62 
65 
66  /* Ports used for synchronization. These have their I/O handled inside the
67  * process callback.
68  */
69 
70  boost::shared_ptr<MidiPort> mtc_input_port() const { return _mtc_input_port; }
71  boost::shared_ptr<MidiPort> mtc_output_port() const { return _mtc_output_port; }
72  boost::shared_ptr<MidiPort> midi_clock_input_port() const { return _midi_clock_input_port; }
73  boost::shared_ptr<MidiPort> midi_clock_output_port() const { return _midi_clock_output_port; }
74 
75  void set_midi_port_states (const XMLNodeList&);
76  std::list<XMLNode*> get_midi_port_states () const;
77 
78  PBD::Signal0<void> PortsChanged;
79 
80  protected:
81  /* asynchronously handled ports: MIDI::Port */
82  MIDI::Port* _midi_input_port;
83  MIDI::Port* _midi_output_port;
84  MIDI::Port* _mmc_input_port;
85  MIDI::Port* _mmc_output_port;
86  MIDI::Port* _scene_input_port;
87  MIDI::Port* _scene_output_port;
88  /* these point to the same objects as the members above,
89  but cast to their ARDOUR::Port base class
90  */
97 
98  /* synchronously handled ports: ARDOUR::MidiPort */
103 
104  void create_ports ();
105 
106 };
107 
108 } // namespace MIDI
109 
110 #endif // __midi_port_manager_h__
boost::shared_ptr< MidiPort > midi_clock_output_port() const
boost::shared_ptr< Port > _scene_out
boost::shared_ptr< MidiPort > scene_out() const
MIDI::Port * mmc_input_port() const
boost::shared_ptr< MidiPort > mtc_output_port() const
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
Definition: shared_ptr.hpp:396
boost::shared_ptr< Port > _mmc_out
MIDI::Port * midi_input_port() const
boost::shared_ptr< MidiPort > midi_clock_input_port() const
boost::shared_ptr< MidiPort > _midi_clock_output_port
boost::shared_ptr< MidiPort > _mtc_input_port
std::list< XMLNode * > XMLNodeList
Definition: xml++.h:44
boost::shared_ptr< Port > _midi_in
PBD::Signal0< void > PortsChanged
boost::shared_ptr< MidiPort > scene_in() const
boost::shared_ptr< MidiPort > mtc_input_port() const
Definition: amp.h:29
MIDI::Port * _scene_output_port
#define LIBARDOUR_API
MIDI::Port * _midi_output_port
MIDI::Port * midi_output_port() const
boost::shared_ptr< Port > _scene_in
MIDI::Port * scene_input_port() const
MIDI::Port * scene_output_port() const
MIDI::Port * _scene_input_port
boost::shared_ptr< Port > _mmc_in
MIDI::Port * mmc_output_port() const
boost::shared_ptr< MidiPort > _mtc_output_port
boost::shared_ptr< Port > _midi_out
boost::shared_ptr< MidiPort > _midi_clock_input_port