Skip to content

Commit

Permalink
Add: statemachine example finished
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonyang-ee committed Jul 4, 2023
1 parent f37bfed commit f9d6e89
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 33 deletions.
2 changes: 1 addition & 1 deletion Application/Inc/Instances.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ extern CustomDAC dac;
extern CustomADC adc;

extern sml::sm<StreamState> stream_sm;
extern sml::sm<MainState, sml::process_queue<std::queue>> main_sm;
extern sml::sm<MainState, sml::process_queue<std::queue>, sml::defer_queue<std::deque>> main_sm;

#endif /* APPLICATION_INC_INSTANCES */
21 changes: 6 additions & 15 deletions Application/Inc/State.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ struct function_ended {};
struct sub_transit {};

// Application Events
struct goIdle {};
struct dac_update {};
struct dac_direct {};
struct dac_direct_t {};

struct Idle {
auto operator()() {
Expand All @@ -47,7 +50,7 @@ struct Idle {
// State Machine Logics
// clang-format off
return make_transition_table(
*state<begin> / act_start = state<on>,
*state<begin> + event<start> / act_start = state<on>,
state<on> + event<finish> / act_delay = state<on>,
state<on> + event<shutdown> / act_shutdown = state<shutting_down>,
state<shutting_down> / process(function_ended{}) = X
Expand Down Expand Up @@ -90,24 +93,12 @@ struct MainState {
auto operator()() {
using namespace sml;

auto act_idle = [](Thread *thread, SerialCOM *serial) {
// thread->idling_start();
// vTaskResume(thread->idle_handle);
serial->sendString("MainState act_idle completed\n");
};
auto act_dac = [](Thread *thread, SerialCOM *serial) {
// thread->dac_start();
// xTaskResumeFromISR(thread->dac_handle);
serial->sendString("MainState act_dac completed\n");
};

// State Machine Logics
// clang-format off
return make_transition_table(
*state<begin> + event<start> / act_idle = state<Idle>,
state<Idle> + event<dac_update> / act_dac = state<DACState>,
*state<begin> + event<start> = state<Idle>,
state<Idle> + event<dac_update> = state<DACState>,
state<DACState> + event<function_ended> = state<Idle>

);
// clang-format on
}
Expand Down
31 changes: 15 additions & 16 deletions Application/Src/CLI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ void CLI::init() {
lwshell_register_cmd("help", &CLI::cmd_help, NULL);
lwshell_register_cmd("led", &CLI::cmd_led, NULL);
lwshell_register_cmd("flash", &CLI::cmd_flash, NULL);
lwshell_register_cmd("idle", &CLI::cmd_idle, NULL);
lwshell_register_cmd("idle", &CLI::cmd_idle, NULL);
lwshell_register_cmd("dac", &CLI::cmd_dac, NULL);
lwshell_register_cmd("show", &CLI::cmd_show, NULL);
}
Expand Down Expand Up @@ -117,16 +117,15 @@ int32_t CLI::cmd_flash(int32_t argc, char** argv) {
return 0;
}

int32_t CLI::cmd_idle(int32_t argc, char** argv) {

if (argc == 1) {
main_sm.process_event(shutdown{});
main_sm.process_event(start{});
main_sm.process_event(start{});
} else {
serialCOM.sendString("Unknown Command\n");
}
return 0; }
int32_t CLI::cmd_idle(int32_t argc, char** argv) {
if (argc == 1) {
main_sm.process_event(shutdown{});
main_sm.process_event(start{});
} else {
serialCOM.sendString("Unknown Command\n");
}
return 0;
}

int32_t CLI::cmd_dac(int32_t argc, char** argv) {
// Detailed Menu
Expand All @@ -137,11 +136,11 @@ int32_t CLI::cmd_dac(int32_t argc, char** argv) {
" add #value\tIncrease or Decrease DAC level\n\n";

// Sub Command
if (argc ==1) {
main_sm.process_event(shutdown{});
main_sm.process_event(dac_update{});
main_sm.process_event(start{});
} else if (argc == 2) {
if (argc == 1) {
main_sm.process_event(shutdown{});
main_sm.process_event(dac_update{});
main_sm.process_event(start{});
} else if (argc == 2) {
if (!strcmp(argv[1], "help")) {
serialCOM.sendString(help_text);
} else if (!strcmp(argv[1], "on")) {
Expand Down
2 changes: 1 addition & 1 deletion Application/Src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ CustomDAC dac{};
CustomADC adc{};

sml::sm<StreamState> stream_sm{&thread};
sml::sm<MainState, sml::process_queue<std::queue>> main_sm{&thread, &serialCOM};
sml::sm<MainState, sml::process_queue<std::queue>, sml::defer_queue<std::deque>> main_sm{&thread, &serialCOM};

/**
* @brief The application entry point.
Expand Down

0 comments on commit f9d6e89

Please sign in to comment.