Add backwards compatibility for removed ChangeState(int)

This commit is contained in:
Alexey Rybalchenko 2019-02-26 13:10:51 +01:00 committed by Dennis Klein
parent 7dcd84dd93
commit d9edcad845
3 changed files with 25 additions and 15 deletions

View File

@ -40,6 +40,21 @@ static map<fair::mq::Transition, fair::mq::State> backwardsCompatibilityWaitForE
{ fair::mq::Transition::ResetDevice, fair::mq::State::Idle } { fair::mq::Transition::ResetDevice, fair::mq::State::Idle }
}; };
static map<int, fair::mq::Transition> backwardsCompatibilityChangeStateHelper =
{
{ FairMQDevice::Event::INIT_DEVICE, fair::mq::Transition::InitDevice },
{ FairMQDevice::Event::internal_DEVICE_READY, fair::mq::Transition::Auto },
{ FairMQDevice::Event::INIT_TASK, fair::mq::Transition::InitTask },
{ FairMQDevice::Event::internal_READY, fair::mq::Transition::Auto },
{ FairMQDevice::Event::RUN, fair::mq::Transition::Run },
{ FairMQDevice::Event::STOP, fair::mq::Transition::Stop },
{ FairMQDevice::Event::RESET_TASK, fair::mq::Transition::ResetTask },
{ FairMQDevice::Event::RESET_DEVICE, fair::mq::Transition::ResetDevice },
{ FairMQDevice::Event::internal_IDLE, fair::mq::Transition::Auto },
{ FairMQDevice::Event::END, fair::mq::Transition::End },
{ FairMQDevice::Event::ERROR_FOUND, fair::mq::Transition::ErrorFound }
};
FairMQDevice::FairMQDevice() FairMQDevice::FairMQDevice()
: FairMQDevice(nullptr, {0, 0, 0}) : FairMQDevice(nullptr, {0, 0, 0})
{ {
@ -162,6 +177,11 @@ void FairMQDevice::WaitForState(fair::mq::State state)
while (WaitForNextState() != state) {} while (WaitForNextState() != state) {}
} }
bool FairMQDevice::ChangeState(const int transition)
{
return ChangeState(backwardsCompatibilityChangeStateHelper.at(transition));
}
void FairMQDevice::WaitForEndOfState(fair::mq::Transition transition) void FairMQDevice::WaitForEndOfState(fair::mq::Transition transition)
{ {
WaitForState(backwardsCompatibilityWaitForEndOfStateHelper.at(transition)); WaitForState(backwardsCompatibilityWaitForEndOfStateHelper.at(transition));

View File

@ -476,6 +476,8 @@ class FairMQDevice
bool ChangeState(const fair::mq::Transition transition) { return fStateMachine.ChangeState(transition); } bool ChangeState(const fair::mq::Transition transition) { return fStateMachine.ChangeState(transition); }
bool ChangeState(const std::string& transition) { return fStateMachine.ChangeState(fair::mq::StateMachine::GetTransition(transition)); } bool ChangeState(const std::string& transition) { return fStateMachine.ChangeState(fair::mq::StateMachine::GetTransition(transition)); }
bool ChangeState(const int transition) __attribute__((deprecated("Use ChangeState(const fair::mq::Transition transition).")));
void WaitForEndOfState(const fair::mq::Transition transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState)."))); void WaitForEndOfState(const fair::mq::Transition transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState).")));
void WaitForEndOfState(const std::string& transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState)."))) { WaitForState(transition); } void WaitForEndOfState(const std::string& transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState)."))) { WaitForState(transition); }

View File

@ -201,20 +201,6 @@ struct Machine_ : public state_machine_def<Machine_>
} }
}; };
struct ErrorFct
{
template<typename EVT, typename FSM, typename SourceState, typename TargetState>
void operator()(EVT const& e, FSM& fsm, SourceState& /* ss */, TargetState& ts)
{
fsm.fState = ts.Type();
fsm.fLastTransitionResult = true;
fsm.CallNewTransitionCallbacks(e.Type());
fsm.CallStateChangeCallbacks(ts.Type());
fsm.fNewStatePending = true;
fsm.fNewStatePendingCV.notify_all();
}
};
struct transition_table : bmpl::vector< struct transition_table : bmpl::vector<
// Start Transition Next Action Guard // Start Transition Next Action Guard
Row<IDLE_S, END_E, EXITING_S, DefaultFct, none>, Row<IDLE_S, END_E, EXITING_S, DefaultFct, none>,
@ -242,7 +228,7 @@ struct Machine_ : public state_machine_def<Machine_>
Row<RESETTING_TASK_S, AUTO_E, DEVICE_READY_S, DefaultFct, none>, Row<RESETTING_TASK_S, AUTO_E, DEVICE_READY_S, DefaultFct, none>,
Row<RESETTING_DEVICE_S, AUTO_E, IDLE_S, DefaultFct, none>, Row<RESETTING_DEVICE_S, AUTO_E, IDLE_S, DefaultFct, none>,
Row<OK_S, ERROR_FOUND_E, ERROR_S, ErrorFct, none>> {}; Row<OK_S, ERROR_FOUND_E, ERROR_S, DefaultFct, none>> {};
void CallStateChangeCallbacks(const State state) const void CallStateChangeCallbacks(const State state) const
{ {
@ -480,6 +466,8 @@ void StateMachine::ProcessWork()
} catch(...) { } catch(...) {
{ {
lock_guard<mutex> lock(fsm->fStateMtx); lock_guard<mutex> lock(fsm->fStateMtx);
fsm->fState = State::Error;
fsm->CallStateChangeCallbacks(State::Error);
fsm->fWorkOngoing = false; fsm->fWorkOngoing = false;
fsm->fWorkDoneCV.notify_one(); fsm->fWorkDoneCV.notify_one();
} }