summaryrefslogtreecommitdiff
path: root/libs/surfaces/generic_midi
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-04-05 00:21:43 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-04-05 00:21:43 +0000
commit9ae0f6cbeec4702b50bcd2360ea4d5dc1aeebd47 (patch)
tree4879aebc558936ab87857749656b66a208b9ee99 /libs/surfaces/generic_midi
parentf7c82c69113419a8db083f0095044af5ad4c872c (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/SConscript51
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc55
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.h31
-rw-r--r--libs/surfaces/generic_midi/interface.cc34
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;
+}
+}
+