13
0
livetrax/libs/surfaces/mackie/surface_port.h
Paul Davis f8875df18f Several changes to Mackie support. Breaks existing Mackie state on disk but not
in any way that causes problems, just loss of pre-existing connectivity.

1. retain state of current device (and serialize to disk) when switching
devices, and restore that state when switching back to it.
2. fix port and surfacenaming.
3. fix bundle assembly so that all ports (for multi-surface combos) work.
4. rationalize master position numbering
5. add small sleep before starting device handshake after reconnection. This
is ugly but seems to be necessary, unfortunately.
2015-10-11 12:01:27 -04:00

92 lines
1.9 KiB
C++

/*
Copyright (C) 2006,2007 John 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.
*/
#ifndef surface_port_h
#define surface_port_h
#include <midi++/types.h>
#include "pbd/signals.h"
#include "midi_byte_array.h"
#include "types.h"
namespace MIDI {
class Parser;
class Port;
}
namespace ARDOUR {
class AsyncMIDIPort;
class Port;
}
namespace ArdourSurface {
class MackieControlProtocol;
namespace Mackie
{
class Surface;
/**
Make a relationship between a midi port and a Mackie device.
*/
class SurfacePort
{
public:
SurfacePort (Mackie::Surface&);
virtual ~SurfacePort();
/// an easier way to output bytes via midi
int write (const MidiByteArray&);
MIDI::Port& input_port() const { return *_input_port; }
MIDI::Port& output_port() const { return *_output_port; }
ARDOUR::Port& input() const { return *_async_in; }
ARDOUR::Port& output() const { return *_async_out; }
std::string input_name() const;
std::string output_name() const;
void reconnect ();
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
protected:
private:
Mackie::Surface* _surface;
MIDI::Port* _input_port;
MIDI::Port* _output_port;
boost::shared_ptr<ARDOUR::Port> _async_in;
boost::shared_ptr<ARDOUR::Port> _async_out;
};
std::ostream& operator << (std::ostream& , const SurfacePort& port);
}
}
#endif