push2: working port i/o
This commit is contained in:
parent
67698b8232
commit
96db13e1ba
@ -24,11 +24,11 @@
|
|||||||
#include "pbd/debug.h"
|
#include "pbd/debug.h"
|
||||||
#include "pbd/failed_constructor.h"
|
#include "pbd/failed_constructor.h"
|
||||||
|
|
||||||
#include "ardour/debug.h"
|
|
||||||
#include "ardour/audioengine.h"
|
|
||||||
#include "ardour/async_midi_port.h"
|
#include "ardour/async_midi_port.h"
|
||||||
|
#include "ardour/audioengine.h"
|
||||||
|
#include "ardour/debug.h"
|
||||||
#include "ardour/midiport_manager.h"
|
#include "ardour/midiport_manager.h"
|
||||||
|
#include "ardour/session.h"
|
||||||
#include "push2.h"
|
#include "push2.h"
|
||||||
|
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
@ -97,8 +97,8 @@ Push2::open ()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
_input_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_in[1]).get();
|
_input_port[0] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_in[0]).get();
|
||||||
_output_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_out[1]).get();
|
_output_port[0] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_out[0]).get();
|
||||||
|
|
||||||
_async_in[1] = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("push2 in2"), true);
|
_async_in[1] = AudioEngine::instance()->register_input_port (DataType::MIDI, X_("push2 in2"), true);
|
||||||
_async_out[1] = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("push2 out2"), true);
|
_async_out[1] = AudioEngine::instance()->register_output_port (DataType::MIDI, X_("push2 out2"), true);
|
||||||
@ -110,6 +110,16 @@ Push2::open ()
|
|||||||
_input_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_in[1]).get();
|
_input_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_in[1]).get();
|
||||||
_output_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_out[1]).get();
|
_output_port[1] = boost::dynamic_pointer_cast<AsyncMIDIPort>(_async_out[1]).get();
|
||||||
|
|
||||||
|
AsyncMIDIPort* asp;
|
||||||
|
|
||||||
|
asp = dynamic_cast<AsyncMIDIPort*> (_input_port[0]);
|
||||||
|
asp->xthread().set_receive_handler (sigc::bind (sigc::mem_fun (this, &Push2::midi_input_handler), _input_port[0]));
|
||||||
|
asp->xthread().attach (main_loop()->get_context());
|
||||||
|
|
||||||
|
asp = dynamic_cast<AsyncMIDIPort*> (_input_port[1]);
|
||||||
|
asp->xthread().set_receive_handler (sigc::bind (sigc::mem_fun (this, &Push2::midi_input_handler), _input_port[1]));
|
||||||
|
asp->xthread().attach (main_loop()->get_context());
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,9 +196,8 @@ Push2::do_request (Push2Request * req)
|
|||||||
int
|
int
|
||||||
Push2::stop ()
|
Push2::stop ()
|
||||||
{
|
{
|
||||||
close ();
|
|
||||||
BaseUI::quit ();
|
BaseUI::quit ();
|
||||||
|
close ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,16 +288,16 @@ Push2::set_active (bool yn)
|
|||||||
|
|
||||||
if (yn) {
|
if (yn) {
|
||||||
|
|
||||||
|
/* start event loop */
|
||||||
|
|
||||||
|
BaseUI::run ();
|
||||||
|
|
||||||
if (open ()) {
|
if (open ()) {
|
||||||
DEBUG_TRACE (DEBUG::Push2, "device open failed\n");
|
DEBUG_TRACE (DEBUG::Push2, "device open failed\n");
|
||||||
close ();
|
close ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start event loop */
|
|
||||||
|
|
||||||
BaseUI::run ();
|
|
||||||
|
|
||||||
// connect_session_signals ();
|
// connect_session_signals ();
|
||||||
|
|
||||||
/* say hello */
|
/* say hello */
|
||||||
@ -332,8 +341,7 @@ Push2::set_active (bool yn)
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
BaseUI::quit ();
|
stop ();
|
||||||
close ();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,3 +358,28 @@ Push2::write (int port, const MidiByteArray& data)
|
|||||||
/* immediate delivery */
|
/* immediate delivery */
|
||||||
_output_port[port]->write (&data[0], data.size(), 0);
|
_output_port[port]->write (&data[0], data.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Push2::midi_input_handler (IOCondition ioc, MIDI::Port* port)
|
||||||
|
{
|
||||||
|
if (ioc & ~IO_IN) {
|
||||||
|
DEBUG_TRACE (DEBUG::Push2, "MIDI port closed\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioc & IO_IN) {
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::Push2, string_compose ("something happend on %1\n", port->name()));
|
||||||
|
|
||||||
|
AsyncMIDIPort* asp = dynamic_cast<AsyncMIDIPort*>(port);
|
||||||
|
if (asp) {
|
||||||
|
asp->clear ();
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::Push2, string_compose ("data available on %1\n", port->name()));
|
||||||
|
framepos_t now = AudioEngine::instance()->sample_time();
|
||||||
|
// port->parse (now);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -147,6 +147,7 @@ class Push2 : public ARDOUR::ControlProtocol
|
|||||||
boost::shared_ptr<ARDOUR::Port> _async_out[2];
|
boost::shared_ptr<ARDOUR::Port> _async_out[2];
|
||||||
|
|
||||||
void write (int port, const MidiByteArray&);
|
void write (int port, const MidiByteArray&);
|
||||||
|
bool midi_input_handler (Glib::IOCondition ioc, MIDI::Port* port);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user