#include "ardour/session.h"
#include "ardour/tempo.h"
+#include "gtkmm2ext/gui_thread.h"
#include "gtkmm2ext/rgb_macros.h"
#include "canvas/colors.h"
#include "track_mix.h"
#include "menu.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace ARDOUR;
using namespace std;
, _in_key (true)
, octave_shift (0)
, percussion (false)
+ , _pressure_mode (AfterTouch)
{
- cerr << "new push2 @ " << this << "\n";
-
context = Cairo::Context::create (frame_buffer);
build_maps ();
Push2::~Push2 ()
{
- cerr << "push2 deleted\n";
stop ();
+
+ delete track_mix_layout;
+ delete mix_layout;
+ delete scale_layout;
}
void
Push2::port_registration_handler ()
{
- cerr << "preg for " << this << endl;
-
if (!_async_in && !_async_out) {
/* ports not registered yet */
return;
Push2::handle_midi_sysex (MIDI::Parser&, MIDI::byte* raw_bytes, size_t sz)
{
DEBUG_TRACE (DEBUG::Push2, string_compose ("Sysex, %1 bytes\n", sz));
+ MidiByteArray msg (sz, raw_bytes);
+ MidiByteArray aftertouch_mode_response (9, 0xF0, 0x00, 0x21, 0x1D, 0x01, 0x01, 0x1F, 0x0, 0xF7);
+ MidiByteArray polypress_mode_response (9, 0xF0, 0x00, 0x21, 0x1D, 0x01, 0x01, 0x1F, 0x1, 0xF7);
+
+ if (msg == aftertouch_mode_response) {
+ _pressure_mode = AfterTouch;
+ PressureModeChange (AfterTouch);
+ cerr << "Pressure mod eis after\n";
+ } else if (msg == polypress_mode_response) {
+ _pressure_mode = PolyPressure;
+ PressureModeChange (PolyPressure);
+ cerr << "Pressure mod eis poly\n";
+ }
}
void
matched = true;
}
- } else if ((*ev).is_pitch_bender() || (*ev).is_aftertouch() || (*ev).is_channel_pressure()) {
+ } else if ((*ev).is_pitch_bender() || (*ev).is_poly_pressure() || (*ev).is_channel_pressure()) {
out.push_back (*ev);
}
}
g_usleep (100000);
DEBUG_TRACE (DEBUG::FaderPort, "device now connected for both input and output\n");
- // connected ();
+ connected ();
} else {
DEBUG_TRACE (DEBUG::FaderPort, "Device disconnected (input or output or both) or not yet fully connected\n");
return true; /* connection status changed */
}
+void
+Push2::connected ()
+{
+ request_pressure_mode ();
+}
+
boost::shared_ptr<Port>
Push2::output_port()
{
_current_layout->on_show ();
}
}
+
+void
+Push2::request_pressure_mode ()
+{
+ MidiByteArray msg (8, 0xF0, 0x00, 0x21, 0x1D, 0x01, 0x01, 0x1F, 0xF7);
+ write (msg);
+}
+
+void
+Push2::set_pressure_mode (PressureMode pm)
+{
+ MidiByteArray msg (9, 0xF0, 0x00, 0x21, 0x1D, 0x01, 0x01, 0x1E, 0x0, 0xF7);
+
+ switch (pm) {
+ case AfterTouch:
+ /* nothing to do, message is correct */
+ break;
+ case PolyPressure:
+ msg[7] = 0x1;
+ break;
+ default:
+ return;
+ }
+
+ write (msg);
+ cerr << "Sent PM message " << msg << endl;
+}