MCP: debug tracing, plus start of a new cleaner handling system for button handling

git-svn-id: svn://localhost/ardour2/branches/3.0@11880 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-04-11 02:54:25 +00:00
parent f387e834fd
commit 261738d01e
3 changed files with 168 additions and 129 deletions

View File

@ -748,29 +748,36 @@ MackieControlProtocol::notify_transport_state_changed()
update_global_button ("ffwd", session->transport_speed() > 1.0);
_transport_previously_rolling = session->transport_rolling();
}
void
MackieControlProtocol::notify_record_state_changed ()
{
/* rec is a tristate */
Button * rec = reinterpret_cast<Button*> (surfaces.front()->controls_by_name["record"]);
if (rec) {
LedState ls;
switch (session->record_status()) {
case Session::Disabled:
DEBUG_TRACE (DEBUG::MackieControl, "record state changed to disabled, LED off\n");
ls = off;
break;
case Session::Recording:
DEBUG_TRACE (DEBUG::MackieControl, "record state changed to recording, LED on\n");
ls = on;
break;
case Session::Enabled:
DEBUG_TRACE (DEBUG::MackieControl, "record state changed to enabled, LED flashing\n");
ls = flashing;
break;
}
surfaces.front()->write (builder.build_led (*rec, ls));
} else {
DEBUG_TRACE (DEBUG::MackieControl, "record button control not found\n");
}
}
@ -874,6 +881,12 @@ MackieControlProtocol::update_led (Surface& surface, Button& button, Mackie::Led
}
}
void
MackieControlProtocol::build_button_map ()
{
button_map.insert (pair<int,ButtonHandlers> (Button::Io, ButtonHandlers (&MackieControlProtocol::io_press, &MackieControlProtocol::io_release)));
}
void
MackieControlProtocol::handle_button_event (Surface& surface, Button& button, ButtonState bs)
{
@ -999,134 +1012,6 @@ MackieControlProtocol::handle_button_event (Surface& surface, Button& button, Bu
}
break;
case 0x36: // F1
switch (bs) {
case press: ls = F1_press (button); break;
case release: ls = F1_release (button); break;
case neither: break;
}
break;
case 0x37: // F2
switch (bs) {
case press: ls = F2_press (button); break;
case release: ls = F2_release (button); break;
case neither: break;
}
break;
case 0x38: // F3
switch (bs) {
case press: ls = F3_press (button); break;
case release: ls = F3_release (button); break;
case neither: break;
}
break;
case 0x39: // F4
switch (bs) {
case press: ls = F4_press (button); break;
case release: ls = F4_release (button); break;
case neither: break;
}
break;
case 0x3a: // F5
switch (bs) {
case press: ls = F5_press (button); break;
case release: ls = F5_release (button); break;
case neither: break;
}
break;
case 0x3b: // F6
switch (bs) {
case press: ls = F6_press (button); break;
case release: ls = F6_release (button); break;
case neither: break;
}
break;
case 0x3c: // F7
switch (bs) {
case press: ls = F7_press (button); break;
case release: ls = F7_release (button); break;
case neither: break;
}
break;
case 0x3d: // F8
switch (bs) {
case press: ls = F8_press (button); break;
case release: ls = F8_release (button); break;
case neither: break;
}
break;
case 0x3e: // F9
switch (bs) {
case press: ls = F9_press (button); break;
case release: ls = F9_release (button); break;
case neither: break;
}
break;
case 0x3f: // F10
switch (bs) {
case press: ls = F10_press (button); break;
case release: ls = F10_release (button); break;
case neither: break;
}
break;
case 0x40: // F11
switch (bs) {
case press: ls = F11_press (button); break;
case release: ls = F11_release (button); break;
case neither: break;
}
break;
case 0x41: // F12
switch (bs) {
case press: ls = F12_press (button); break;
case release: ls = F12_release (button); break;
case neither: break;
}
break;
case 0x42: // F13
switch (bs) {
case press: ls = F13_press (button); break;
case release: ls = F13_release (button); break;
case neither: break;
}
break;
case 0x43: // F14
switch (bs) {
case press: ls = F14_press (button); break;
case release: ls = F14_release (button); break;
case neither: break;
}
break;
case 0x44: // F15
switch (bs) {
case press: ls = F15_press (button); break;
case release: ls = F15_release (button); break;
case neither: break;
}
break;
case 0x45: // F16
switch (bs) {
case press: ls = F16_press (button); break;
case release: ls = F16_release (button); break;
case neither: break;
}
break;
case 0x46: // shift
switch (bs) {
case press: ls = shift_press (button); break;
@ -1399,6 +1284,134 @@ MackieControlProtocol::handle_button_event (Surface& surface, Button& button, Bu
}
break;
case Button::F1:
switch (bs) {
case press: ls = F1_press (button); break;
case release: ls = F1_release (button); break;
case neither: break;
}
break;
case Button::F2:
switch (bs) {
case press: ls = F2_press (button); break;
case release: ls = F2_release (button); break;
case neither: break;
}
break;
case Button::F3:
switch (bs) {
case press: ls = F3_press (button); break;
case release: ls = F3_release (button); break;
case neither: break;
}
break;
case Button::F4:
switch (bs) {
case press: ls = F4_press (button); break;
case release: ls = F4_release (button); break;
case neither: break;
}
break;
case Button::F5:
switch (bs) {
case press: ls = F5_press (button); break;
case release: ls = F5_release (button); break;
case neither: break;
}
break;
case Button::F6:
switch (bs) {
case press: ls = F6_press (button); break;
case release: ls = F6_release (button); break;
case neither: break;
}
break;
case Button::F7:
switch (bs) {
case press: ls = F7_press (button); break;
case release: ls = F7_release (button); break;
case neither: break;
}
break;
case Button::F8:
switch (bs) {
case press: ls = F8_press (button); break;
case release: ls = F8_release (button); break;
case neither: break;
}
break;
case Button::F9:
switch (bs) {
case press: ls = F9_press (button); break;
case release: ls = F9_release (button); break;
case neither: break;
}
break;
case Button::F10:
switch (bs) {
case press: ls = F10_press (button); break;
case release: ls = F10_release (button); break;
case neither: break;
}
break;
case Button::F11:
switch (bs) {
case press: ls = F11_press (button); break;
case release: ls = F11_release (button); break;
case neither: break;
}
break;
case Button::F12:
switch (bs) {
case press: ls = F12_press (button); break;
case release: ls = F12_release (button); break;
case neither: break;
}
break;
case Button::F13:
switch (bs) {
case press: ls = F13_press (button); break;
case release: ls = F13_release (button); break;
case neither: break;
}
break;
case Button::F14:
switch (bs) {
case press: ls = F14_press (button); break;
case release: ls = F14_release (button); break;
case neither: break;
}
break;
case Button::F15:
switch (bs) {
case press: ls = F15_press (button); break;
case release: ls = F15_release (button); break;
case neither: break;
}
break;
case Button::F16:
switch (bs) {
case press: ls = F16_press (button); break;
case release: ls = F16_release (button); break;
case neither: break;
}
break;
}
update_led (surface, button, ls);

View File

@ -20,6 +20,7 @@
#define ardour_mackie_control_protocol_h
#include <vector>
#include <map>
#include <sys/time.h>
#include <pthread.h>
@ -48,6 +49,7 @@ namespace Mackie {
class Surface;
class Control;
class SurfacePort;
class Button;
}
/**
@ -377,6 +379,22 @@ class MackieControlProtocol
bool midi_input_handler (Glib::IOCondition ioc, MIDI::Port* port);
void clear_ports ();
struct ButtonHandlers {
Mackie::LedState (MackieControlProtocol::*press) (Mackie::Button&);
Mackie::LedState (MackieControlProtocol::*release) (Mackie::Button&);
ButtonHandlers (Mackie::LedState (MackieControlProtocol::*p) (Mackie::Button&),
Mackie::LedState (MackieControlProtocol::*r) (Mackie::Button&))
: press (p)
, release (r) {}
};
typedef std::map<int,ButtonHandlers> ButtonMap;
ButtonMap button_map;
void build_button_map ();
};
#endif // ardour_mackie_control_protocol_h

View File

@ -19,6 +19,7 @@
#include "pbd/memento_command.h"
#include "ardour/debug.h"
#include "ardour/session.h"
#include "ardour/route.h"
#include "ardour/location.h"
@ -35,6 +36,7 @@
using namespace Mackie;
using namespace ARDOUR;
using namespace PBD;
using std::string;
LedState
@ -92,6 +94,9 @@ MackieControlProtocol::left_press (Button &)
Sorted sorted = get_sorted_routes();
uint32_t strip_cnt = n_strips ();
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank left with current initial = %1 nstrips = %2 tracks/busses = %3\n",
_current_initial_bank, strip_cnt, sorted.size()));
if (sorted.size() > strip_cnt) {
int new_initial = _current_initial_bank - strip_cnt;
if (new_initial < 0) {
@ -120,6 +125,9 @@ MackieControlProtocol::right_press (Button &)
Sorted sorted = get_sorted_routes();
uint32_t strip_cnt = n_strips();
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank right with current initial = %1 nstrips = %2 tracks/busses = %3\n",
_current_initial_bank, strip_cnt, sorted.size()));
if (sorted.size() > strip_cnt) {
uint32_t delta = sorted.size() - (strip_cnt + _current_initial_bank);