summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/mackie_control_protocol.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-11-23 17:37:13 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2014-11-23 17:37:13 +0200
commitbfe49540b94b6ac451e2978fd45a47656fecd92e (patch)
tree5db3eef1625b41129974ff43618a53bc8df53db1 /libs/surfaces/mackie/mackie_control_protocol.cc
parentdcf632d99f38a581c7b54d34abc421e0acec24e9 (diff)
remove use of CrossThreadChannel::selectable() to allow cross-platform implementation of CrossThreadChannel via Glib::IOSource
Diffstat (limited to 'libs/surfaces/mackie/mackie_control_protocol.cc')
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc41
1 files changed, 35 insertions, 6 deletions
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index a2667b8a7d..563ca14d7d 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -41,6 +41,7 @@
#include "pbd/convert.h"
#include "ardour/automation_control.h"
+#include "ardour/async_midi_port.h"
#include "ardour/dB.h"
#include "ardour/debug.h"
#include "ardour/location.h"
@@ -727,11 +728,28 @@ MackieControlProtocol::create_surfaces ()
session->BundleRemoved (_output_bundle);
}
- int fd;
MIDI::Port& input_port (surface->port().input_port());
+ AsyncMIDIPort* asp = dynamic_cast<AsyncMIDIPort*> (&input_port);
+ Glib::RefPtr<IOSource> psrc;
+
+ if (asp) {
+
+ /* async MIDI port */
+
+ psrc = asp->ios();
+
+ } else {
+
+ /* ipMIDI port, no IOSource method at this time */
- if ((fd = input_port.selectable ()) >= 0) {
- Glib::RefPtr<IOSource> psrc = IOSource::create (fd, IO_IN|IO_HUP|IO_ERR);
+ int fd;
+
+ if ((fd = input_port.selectable ()) >= 0) {
+ psrc = IOSource::create (fd, IO_IN|IO_HUP|IO_ERR);
+ }
+ }
+
+ if (psrc) {
psrc->connect (sigc::bind (sigc::mem_fun (this, &MackieControlProtocol::midi_input_handler), &input_port));
psrc->attach (main_loop()->get_context());
@@ -740,6 +758,16 @@ MackieControlProtocol::create_surfaces ()
port_sources.push_back (psrc->gobj());
g_source_ref (psrc->gobj());
+
+ } else {
+
+ if (n == 0) {
+ error << string_compose (_("Could not create IOSource for Mackie Control surface, MIDI port was called %1"),
+ input_port.name());
+ } else {
+ error << string_compose (_("Could not create IOSource for Mackie Control extender #%1, MIDI port was called %2"),
+ n+1, input_port.name());
+ }
}
}
@@ -1285,9 +1313,10 @@ MackieControlProtocol::midi_input_handler (IOCondition ioc, MIDI::Port* port)
*/
if (!_device_info.uses_ipmidi()) {
-#ifndef PLATFORM_WINDOWS
- CrossThreadChannel::drain (port->selectable());
-#endif
+ AsyncMIDIPort* asp = dynamic_cast<AsyncMIDIPort*>(port);
+ if (asp) {
+ asp->clear ();
+ }
}
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("data available on %1\n", port->name()));