diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-04-05 00:21:43 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-04-05 00:21:43 +0000 |
commit | 9ae0f6cbeec4702b50bcd2360ea4d5dc1aeebd47 (patch) | |
tree | 4879aebc558936ab87857749656b66a208b9ee99 /libs/surfaces/generic_midi | |
parent | f7c82c69113419a8db083f0095044af5ad4c872c (diff) |
a) dynamically loadable control surface support
b) move tranzport and generic midi into separate dirs under "surfaces"
git-svn-id: svn://localhost/trunk/ardour2@442 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/surfaces/generic_midi')
-rw-r--r-- | libs/surfaces/generic_midi/SConscript | 51 | ||||
-rw-r--r-- | libs/surfaces/generic_midi/generic_midi_control_protocol.cc | 55 | ||||
-rw-r--r-- | libs/surfaces/generic_midi/generic_midi_control_protocol.h | 31 | ||||
-rw-r--r-- | libs/surfaces/generic_midi/interface.cc | 34 |
4 files changed, 171 insertions, 0 deletions
diff --git a/libs/surfaces/generic_midi/SConscript b/libs/surfaces/generic_midi/SConscript new file mode 100644 index 0000000000..abede3f4d7 --- /dev/null +++ b/libs/surfaces/generic_midi/SConscript @@ -0,0 +1,51 @@ +# -*- python -*- + +import os +import glob + +Import('env final_prefix install_prefix final_config_prefix libraries i18n') + +genericmidi = env.Copy() + +# +# this defines the version number of libardour_genericmidi +# + +domain = 'ardour_genericmidi' + +genericmidi.Append(DOMAIN = domain, MAJOR = 1, MINOR = 0, MICRO = 0) +genericmidi.Append(CXXFLAGS = "-DPACKAGE=\\\"" + domain + "\\\"") +genericmidi.Append(CXXFLAGS="-DLIBSIGC_DISABLE_DEPRECATED") +genericmidi.Append(PACKAGE = domain) +genericmidi.Append(POTFILE = domain + '.pot') + +genericmidi_files=Split(""" +interface.cc +generic_midi_control_protocol.cc +""") + +genericmidi.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE") +genericmidi.Append(CXXFLAGS="-DDATA_DIR=\\\""+final_prefix+"/share\\\"") +genericmidi.Append(CXXFLAGS="-DCONFIG_DIR=\\\""+final_config_prefix+"\\\"") +genericmidi.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"") + +genericmidi.Merge ([ + libraries['usb'], + libraries['ardour'], + libraries['sigc2'], + libraries['pbd3'], + libraries['midi++2'], + libraries['xml'] + ]) + +libardour_genericmidi = genericmidi.SharedLibrary('ardour_genericmidi', genericmidi_files) + +Default(libardour_genericmidi) + +if env['NLS']: + i18n (genericmidi, genericmidi_files, env) + +env.Alias('tarball', env.Distribute (env['DISTTREE'], + [ 'SConscript', 'i18n.h', 'gettext.h' ] + + genericmidi_files + + glob.glob('po/*.po') + glob.glob('*.h'))) diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc new file mode 100644 index 0000000000..4d64c6ce23 --- /dev/null +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc @@ -0,0 +1,55 @@ +#include <ardour/route.h> +#include <ardour/session.h> + +#include "generic_midi_control_protocol.h" + +using namespace ARDOUR; + +#include "i18n.h" + +GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s) + : ControlProtocol (s, _("GenericMIDI")) +{ + _port = 0; +} + +GenericMidiControlProtocol::~GenericMidiControlProtocol () +{ +} + +void +GenericMidiControlProtocol::set_port (MIDI::Port* p) +{ + _port = p; +} + +void +GenericMidiControlProtocol::send_route_feedback (list<Route*>& routes) +{ + if (_port != 0) { + + const int32_t bufsize = 16 * 1024; + int32_t bsize = bufsize; + MIDI::byte* buf = new MIDI::byte[bufsize]; + MIDI::byte* end = buf; + + for (list<Route*>::iterator r = routes.begin(); r != routes.end(); ++r) { + end = (*r)->write_midi_feedback (end, bsize); + } + + if (end == buf) { + delete [] buf; + return; + } + + session.deliver_midi (_port, buf, (int32_t) (end - buf)); + //cerr << "MIDI feedback: wrote " << (int32_t) (end - buf) << " to midi port\n"; + } +} + +bool +GenericMidiControlProtocol::active() const +{ + return _port && send(); +} + diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h new file mode 100644 index 0000000000..75b514f016 --- /dev/null +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h @@ -0,0 +1,31 @@ +#ifndef ardour_generic_midi_control_protocol_h +#define ardour_generic_midi_control_protocol_h + +#include <ardour/control_protocol.h> + +namespace MIDI { + class Port; +} + +namespace ARDOUR { + +class GenericMidiControlProtocol : public ControlProtocol { + public: + GenericMidiControlProtocol (Session&); + virtual ~GenericMidiControlProtocol(); + + bool active() const; + + void set_port (MIDI::Port*); + MIDI::Port* port () const { return _port; } + + void send_route_feedback (std::list<Route*>&); + + private: + void route_feedback (ARDOUR::Route&, bool); + MIDI::Port* _port; +}; + +} + +#endif // ardour_generic_midi_control_protocol_h diff --git a/libs/surfaces/generic_midi/interface.cc b/libs/surfaces/generic_midi/interface.cc new file mode 100644 index 0000000000..8283b92e6f --- /dev/null +++ b/libs/surfaces/generic_midi/interface.cc @@ -0,0 +1,34 @@ +#include <ardour/control_protocol.h> + +#include "generic_midi_control_protocol.h" + +using namespace ARDOUR; + +ControlProtocol* +new_generic_midi_protocol (ControlProtocolDescriptor* descriptor, Session* s) +{ + return new GenericMidiControlProtocol (*s); +} + +void +delete_generic_midi_protocol (ControlProtocolDescriptor* descriptor, ControlProtocol* cp) +{ + delete cp; +} + +static ControlProtocolDescriptor generic_midi_descriptor = { + name : "Generic MIDI", + ptr : 0, + module : 0, + initialize : new_generic_midi_protocol, + destroy : delete_generic_midi_protocol +}; + + +extern "C" { +ControlProtocolDescriptor* +protocol_descriptor () { + return &generic_midi_descriptor; +} +} + |