summaryrefslogtreecommitdiff
path: root/libs/ardour/transport_fsm.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-02-21 11:50:52 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2020-02-21 11:54:08 -0700
commitf0316430c62fcef19bd3eb79054f471bc5bdb34b (patch)
tree44e3dc27946feec42b4d4d1f416a1e2218503927 /libs/ardour/transport_fsm.cc
parent2fb260e6e8d0ba06a34696b2a4d20648fcbed0b3 (diff)
make "reversing" back into a DirectionState and prohibit speed changes while reversing
Diffstat (limited to 'libs/ardour/transport_fsm.cc')
-rw-r--r--libs/ardour/transport_fsm.cc33
1 files changed, 21 insertions, 12 deletions
diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc
index 6b8ee1fd61..85f004f082 100644
--- a/libs/ardour/transport_fsm.cc
+++ b/libs/ardour/transport_fsm.cc
@@ -203,16 +203,26 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred)
switch (ev.type) {
case SetSpeed:
- switch (_motion_state) {
- case Stopped:
- case Rolling:
- set_speed (ev);
- break;
- default:
+ switch (_direction_state) {
+ case Reversing:
if (!already_deferred) {
defer (ev);
deferred = true;
}
+ break;
+ default:
+ switch (_motion_state) {
+ case Stopped:
+ case Rolling:
+ set_speed (ev);
+ break;
+ default:
+ if (!already_deferred) {
+ defer (ev);
+ deferred = true;
+ }
+ }
+ break;
}
break;
@@ -315,10 +325,7 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred)
switch (_motion_state) {
case WaitingForLocate:
- if (_reversing) {
-
- _reversing = false;
- transition (Rolling);
+ if (reversing()) {
if (most_recently_requested_speed > 0) {
transition (Forwards);
@@ -326,6 +333,8 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred)
transition (Forwards);
}
+ transition (Rolling);
+
api->set_transport_speed (last_speed_request.speed, last_speed_request.abort_capture, last_speed_request.clear_state, last_speed_request.as_default);
if (most_recently_requested_speed != 0.0) {
@@ -617,7 +626,7 @@ TransportFSM::set_speed (Event const & ev)
most_recently_requested_speed = ev.speed;
last_speed_request = ev;
- _reversing = true;
+ transition (Reversing);
DEBUG_TRACE (DEBUG::TFSMState, string_compose ("reverse, target speed %1 MRRS %2 state %3\n", ev.speed, most_recently_requested_speed, current_state()));
@@ -638,7 +647,7 @@ TransportFSM::set_speed (Event const & ev)
bool
TransportFSM::will_roll_fowards () const
{
- if (_reversing) {
+ if (reversing()) {
return most_recently_requested_speed >= 0; /* note: future speed of zero is equivalent to Forwards */
}
return (_direction_state == Forwards);