+LedState MackieControlProtocol::channel_right_release (Button &)
+{
+ return off;
+}
+
+/////////////////////////////////////
+// Functions
+/////////////////////////////////////
+LedState MackieControlProtocol::marker_press (Button &)
+{
+ // cut'n'paste from LocationUI::add_new_location()
+ string markername;
+ nframes_t where = session->audible_frame();
+ session->locations()->next_available_name(markername,"mcu");
+ Location *location = new Location (where, where, markername, Location::IsMark);
+ session->begin_reversible_command (_("add marker"));
+ XMLNode &before = session->locations()->get_state();
+ session->locations()->add (location, true);
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+ session->commit_reversible_command ();
+ return on;
+}
+
+LedState MackieControlProtocol::marker_release (Button &)
+{
+ return off;
+}
+
+void jog_wheel_state_display( JogWheel::State state, SurfacePort & port )
+{
+ switch( state )
+ {
+ case JogWheel::zoom: port.write( builder.two_char_display( "Zm" ) ); break;
+ case JogWheel::scroll: port.write( builder.two_char_display( "Sc" ) ); break;
+ case JogWheel::scrub: port.write( builder.two_char_display( "Sb" ) ); break;
+ case JogWheel::shuttle: port.write( builder.two_char_display( "Sh" ) ); break;
+ case JogWheel::speed: port.write( builder.two_char_display( "Sp" ) ); break;
+ case JogWheel::select: port.write( builder.two_char_display( "Se" ) ); break;
+ }
+}
+
+Mackie::LedState MackieControlProtocol::zoom_press( Mackie::Button & )
+{
+ _jog_wheel.zoom_state_toggle();
+ update_global_button( "scrub", _jog_wheel.jog_wheel_state() == JogWheel::scrub );
+ jog_wheel_state_display( _jog_wheel.jog_wheel_state(), mcu_port() );
+ return _jog_wheel.jog_wheel_state() == JogWheel::zoom;
+}
+
+Mackie::LedState MackieControlProtocol::zoom_release( Mackie::Button & )
+{
+ return _jog_wheel.jog_wheel_state() == JogWheel::zoom;
+}
+
+Mackie::LedState MackieControlProtocol::scrub_press( Mackie::Button & )
+{
+ _jog_wheel.scrub_state_cycle();
+ update_global_button( "zoom", _jog_wheel.jog_wheel_state() == JogWheel::zoom );
+ jog_wheel_state_display( _jog_wheel.jog_wheel_state(), mcu_port() );
+ return
+ _jog_wheel.jog_wheel_state() == JogWheel::scrub
+ ||
+ _jog_wheel.jog_wheel_state() == JogWheel::shuttle
+ ;
+}
+
+Mackie::LedState MackieControlProtocol::scrub_release( Mackie::Button & )
+{
+ return
+ _jog_wheel.jog_wheel_state() == JogWheel::scrub
+ ||
+ _jog_wheel.jog_wheel_state() == JogWheel::shuttle
+ ;
+}
+
+LedState MackieControlProtocol::drop_press (Button &)
+{
+ session->remove_last_capture();
+ return on;
+}
+
+LedState MackieControlProtocol::drop_release (Button &)
+{
+ return off;
+}
+
+LedState MackieControlProtocol::save_press (Button &)
+{
+ session->save_state( "" );
+ return on;
+}
+
+LedState MackieControlProtocol::save_release (Button &)
+{
+ return off;
+}
+
+LedState MackieControlProtocol::smpte_beats_press (Button &)
+{
+ switch ( _timecode_type )
+ {
+ case ARDOUR::AnyTime::BBT:
+ _timecode_type = ARDOUR::AnyTime::SMPTE;
+ break;
+ case ARDOUR::AnyTime::SMPTE:
+ _timecode_type = ARDOUR::AnyTime::BBT;
+ break;
+ default:
+ ostringstream os;
+ os << "Unknown Anytime::Type " << _timecode_type;
+ throw runtime_error( os.str() );
+ }
+ update_smpte_beats_led();
+ return on;
+}
+
+LedState MackieControlProtocol::smpte_beats_release( Button & )