controls_by_name["option"] = control;
group->add( *control );
- group = groups["modifiers"];
- control = new Button ( 72, 1, "control", *group );
- buttons[0x48] = control;
- controls.push_back( control );
- controls_by_name["control"] = control;
- group->add( *control );
-
group = groups["modifiers"];
control = new Button ( 73, 1, "cmd_alt", *group );
buttons[0x49] = control;
controls_by_name["snapshot"] = control;
group->add( *control );
- group = groups["automation"];
- control = new Button ( 78, 1, "touch", *group );
- buttons[0x4e] = control;
- controls.push_back( control );
- controls_by_name["touch"] = control;
- group->add( *control );
-
group = groups["functions"];
control = new Button ( 79, 1, "redo", *group );
buttons[0x4f] = control;
group->add( *control );
group = groups["transport"];
- control = new Button ( 84, 1, "frm_left", *group );
- buttons[0x54] = control;
+ control = new Button ( 91, 1, "frm_left", *group );
+ buttons[0x5b] = control;
controls.push_back( control );
controls_by_name["frm_left"] = control;
group->add( *control );
group = groups["transport"];
- control = new Button ( 85, 1, "frm_right", *group );
- buttons[0x55] = control;
+ control = new Button ( 92, 1, "frm_right", *group );
+ buttons[0x5c] = control;
controls.push_back( control );
controls_by_name["frm_right"] = control;
group->add( *control );
group->add( *control );
group = groups["transport"];
- control = new Button ( 44, 1, "punch_in", *group );
- buttons[0x2c] = control;
+ control = new Button ( 72, 1, "punch_in", *group );
+ buttons[0x48] = control;
controls.push_back( control );
controls_by_name["punch_in"] = control;
group->add( *control );
group = groups["transport"];
- control = new Button ( 43, 1, "punch_out", *group );
- buttons[0x2b] = control;
+ control = new Button ( 78, 1, "punch_out", *group );
+ buttons[0x4e] = control;
controls.push_back( control );
controls_by_name["punch_out"] = control;
group->add( *control );
group->add( *control );
group = groups["transport"];
- control = new Button ( 91, 1, "rewind", *group );
- buttons[0x5b] = control;
+ control = new Button ( 44, 1, "rewind", *group );
+ buttons[0x2c] = control;
controls.push_back( control );
controls_by_name["rewind"] = control;
group->add( *control );
group = groups["transport"];
- control = new Button ( 92, 1, "ffwd", *group );
- buttons[0x5c] = control;
+ control = new Button ( 43, 1, "ffwd", *group );
+ buttons[0x2b] = control;
controls.push_back( control );
controls_by_name["ffwd"] = control;
group->add( *control );
}
break;
- case 0x48: // control
- switch ( bs ) {
- case press: ls = mbh.control_press( button ); break;
- case release: ls = mbh.control_release( button ); break;
- case neither: break;
- }
- break;
-
case 0x49: // cmd_alt
switch ( bs ) {
case press: ls = mbh.cmd_alt_press( button ); break;
}
break;
- case 0x4e: // touch
- switch ( bs ) {
- case press: ls = mbh.touch_press( button ); break;
- case release: ls = mbh.touch_release( button ); break;
- case neither: break;
- }
- break;
-
case 0x4f: // redo
switch ( bs ) {
case press: ls = mbh.redo_press( button ); break;
}
break;
- case 0x54: // frm_left
+ case 0x5b: // frm_left
switch ( bs ) {
case press: ls = mbh.frm_left_press( button ); break;
case release: ls = mbh.frm_left_release( button ); break;
}
break;
- case 0x55: // frm_right
+ case 0x5c: // frm_right
switch ( bs ) {
case press: ls = mbh.frm_right_press( button ); break;
case release: ls = mbh.frm_right_release( button ); break;
}
break;
- case 0x2c: // punch_in
+ case 0x48: // punch_in
switch ( bs ) {
case press: ls = mbh.punch_in_press( button ); break;
case release: ls = mbh.punch_in_release( button ); break;
}
break;
- case 0x2b: // punch_out
+ case 0x4e: // punch_out
switch ( bs ) {
case press: ls = mbh.punch_out_press( button ); break;
case release: ls = mbh.punch_out_release( button ); break;
}
break;
- case 0x5b: // rewind
+ case 0x2c: // rewind
switch ( bs ) {
case press: ls = mbh.rewind_press( button ); break;
case release: ls = mbh.rewind_release( button ); break;
}
break;
- case 0x5c: // ffwd
+ case 0x2b: // ffwd
switch ( bs ) {
case press: ls = mbh.ffwd_press( button ); break;
case release: ls = mbh.ffwd_release( button ); break;
// Transport Buttons
/////////////////////////////////////
-LedState MackieControlProtocol::rewind_press( Button & button )
+LedState MackieControlProtocol::frm_left_press( Button & button )
{
// can use first_mark_before/after as well
Location * loc = session->locations()->first_location_before (
return on;
}
-LedState MackieControlProtocol::rewind_release( Button & button )
+LedState MackieControlProtocol::frm_left_release( Button & button )
{
return off;
}
-LedState MackieControlProtocol::ffwd_press( Button & button )
+LedState MackieControlProtocol::frm_right_press( Button & button )
{
// can use first_mark_before/after as well
Location * loc = session->locations()->first_location_after (
return on;
}
-LedState MackieControlProtocol::ffwd_release( Button & button )
+LedState MackieControlProtocol::frm_right_release( Button & button )
{
return off;
}
return off;
}
+LedState MackieControlProtocol::rewind_press( Button & button )
+{
+ session->request_transport_speed( -2.0 );
+ return on;
+}
+
+LedState MackieControlProtocol::rewind_release( Button & button )
+{
+ if ( _transport_previously_rolling )
+ session->request_transport_speed( 1.0 );
+ else
+ session->request_stop();
+ return off;
+}
+
+LedState MackieControlProtocol::ffwd_press( Button & button )
+{
+ session->request_transport_speed( 2.0 );
+ return on;
+}
+
+LedState MackieControlProtocol::ffwd_release( Button & button )
+{
+ if ( _transport_previously_rolling )
+ session->request_transport_speed( 1.0 );
+ else
+ session->request_stop();
+ return off;
+}
+
///////////////////////////////////////////
// Session signals
///////////////////////////////////////////
update_global_button( "stop", !session->transport_rolling() );
update_global_button( "loop", session->get_play_loop() );
+ _transport_previously_rolling = session->transport_rolling();
+
// rec is special because it's tristate
Button * rec = reinterpret_cast<Button*>( surface().controls_by_name["record"] );
mcu_port().write( builder.build_led( *rec, record_release( *rec ) ) );
void update_global_button( const std::string & name, Mackie::LedState );
// transport button handler methods from MackieButtonHandler
- virtual Mackie::LedState rewind_press( Mackie::Button & );
- virtual Mackie::LedState rewind_release( Mackie::Button & );
+ virtual Mackie::LedState frm_left_press( Mackie::Button & );
+ virtual Mackie::LedState frm_left_release( Mackie::Button & );
- virtual Mackie::LedState ffwd_press( Mackie::Button & );
- virtual Mackie::LedState ffwd_release( Mackie::Button & );
+ virtual Mackie::LedState frm_right_press( Mackie::Button & );
+ virtual Mackie::LedState frm_right_release( Mackie::Button & );
virtual Mackie::LedState stop_press( Mackie::Button & );
virtual Mackie::LedState stop_release( Mackie::Button & );
virtual Mackie::LedState end_press( Mackie::Button & );
virtual Mackie::LedState end_release( Mackie::Button & );
- // bank switching button handler methods from MackieButtonHandler
+ virtual Mackie::LedState rewind_press( Mackie::Button & button );
+ virtual Mackie::LedState rewind_release( Mackie::Button & button );
+
+ virtual Mackie::LedState ffwd_press( Mackie::Button & button );
+ virtual Mackie::LedState ffwd_release( Mackie::Button & button );
+
+ // bank switching button handler methods from MackieButtonHandler
virtual Mackie::LedState left_press( Mackie::Button & );
virtual Mackie::LedState left_release( Mackie::Button & );
bool _polling;
struct pollfd * pfd;
int nfds;
+
+ bool _transport_previously_rolling;
};
#endif // ardour_mackie_control_protocol_h
# turn on/off all solos
button,1,,global_solo,1,0,0x27
button,1,modifiers,option,1,0,0x47
-button,1,modifiers,control,1,0,0x48
button,1,modifiers,cmd_alt,1,0,0x49
button,1,automation,on,1,1,0x4a
button,1,automation,rec_ready,1,1,0x4b
button,1,functions,undo,1,1,0x4c
button,1,automation,snapshot,1,1,0x4d
-button,1,automation,touch,1,1,0x4e
button,1,functions,redo,1,1,0x4f
button,1,functions,marker,1,1,0x50
button,1,functions,enter,1,1,0x51
button,1,functions,cancel,1,0,0x52
button,1,functions,mixer,1,0,0x53
-button,1,transport,frm_left,1,1,0x54
-button,1,transport,frm_right,1,1,0x55
+
+# transport buttons
+button,1,transport,frm_left,1,1,0x5b
+button,1,transport,frm_right,1,1,0x5c
button,1,transport,loop,1,1,0x46
-button,1,transport,punch_in,1,1,0x2c
-button,1,transport,punch_out,1,1,0x2b
+button,1,transport,punch_in,1,1,0x48
+button,1,transport,punch_out,1,1,0x4e
button,1,transport,home,1,1,0x2a
button,1,transport,end,1,1,0x29
-
-# transport buttons
-button,1,transport,"rewind",1,1,0x5b
-button,1,transport,"ffwd",1,1,0x5c
+button,1,transport,"rewind",1,1,0x2c
+button,1,transport,"ffwd",1,1,0x2b
button,1,transport,"stop",1,1,0x5d
button,1,transport,"play",1,1,0x5e
button,1,transport,"record",1,1,0x1f
</entry>
<entry>
- loop
+ loop (shift2: punch in)
</entry>
</row>
</entry>
<entry>
- click
+ click (shift2: punch out)
</entry>
</row>
</entry>
<entry>
- punch in
+ rewind
</entry>
<entry>
- punch out
+ ffwd
</entry>
</row>
<row>
<entry>
- previous bank (shift 1 is previous route)
+ previous bank (shift 1: previous route)
</entry>
<entry>
- next bank (shift 1 is next route)
+ next bank (shift 1: next route)
</entry>
</row>