-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Description
Implementation using HsmEventDispatcherSTD:
#include <chrono>
#include <thread>
#include <hsmcpp/hsm.hpp>
#include <hsmcpp/HsmEventDispatcherSTD.hpp>
enum class States
{
OFF,
ON
};
enum class Events
{
SWITCH
};
int main(const int argc, const char**argv)
{
std::shared_ptr<hsmcpp::HsmEventDispatcherSTD> dispatcher = hsmcpp::HsmEventDispatcherSTD::create();
hsmcpp::HierarchicalStateMachine<States, Events> hsm(States::OFF);
hsm.initialize(dispatcher);
hsm.registerState(States::OFF, [&hsm](const VariantList_t& args)
{
printf("Off\n");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
hsm.transition(Events::SWITCH);
});
hsm.registerState(States::ON, [&hsm](const VariantList_t& args)
{
printf("On\n");
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
hsm.transition(Events::SWITCH);
});
hsm.registerTransition(States::OFF, States::ON, Events::SWITCH);
hsm.registerTransition(States::ON, States::OFF, Events::SWITCH);
hsm.transition(Events::SWITCH);
dispatcher->join();
return 0;
}
The class hsmcpp::HierarchicalStateMachine
is not a template, so this example cannot be built.
Metadata
Metadata
Assignees
Labels
No labels