hello/
hello.rs

1use core::convert::TryInto;
2
3use heapless::LinearMap;
4use state_governor::{create_states, state::State, Governor};
5
6create_states! {IDLE, RUN, FINISH}
7
8static mut GOVERNOR: Governor<3> = Governor::<3> {
9    states: LinearMap::new(),
10    current_state: Some(State::unknown()),
11    previous_state: Some(State::unknown()),
12    transition_function: None,
13};
14
15fn state_changer() {
16    unsafe {
17        match GOVERNOR.get_current_state().id().try_into() {
18            Ok(StateEnum::IDLE) => {
19                GOVERNOR.change_state_to(StateEnum::RUN as u8);
20            }
21            Ok(StateEnum::RUN) => {
22                GOVERNOR.change_state_to(StateEnum::FINISH as u8);
23            }
24            Ok(StateEnum::FINISH) => {}
25            Err(_) => {}
26        }
27    }
28}
29
30fn state_handler() {
31    unsafe {
32        match GOVERNOR.get_current_state().id().try_into() {
33            Ok(StateEnum::RUN) => {
34                println!(
35                    "State handler: {}",
36                    GOVERNOR
37                        .get_current_state()
38                        .name()
39                        .iter()
40                        .collect::<String>()
41                        .trim()
42                )
43            }
44            Ok(StateEnum::IDLE) => {
45                println!(
46                    "State handler: {}",
47                    GOVERNOR
48                        .get_current_state()
49                        .name()
50                        .iter()
51                        .collect::<String>()
52                        .trim()
53                )
54            }
55            Ok(StateEnum::FINISH) => {
56                println!(
57                    "State handler: {}",
58                    GOVERNOR
59                        .get_current_state()
60                        .name()
61                        .iter()
62                        .collect::<String>()
63                        .trim()
64                )
65            }
66            _ => {}
67        }
68    }
69}
70
71fn main() {
72    unsafe {
73        GOVERNOR.add_state(State::from(StateEnum::RUN));
74        GOVERNOR.add_state(State::from(StateEnum::IDLE));
75        GOVERNOR.add_state(State::from(StateEnum::FINISH));
76        GOVERNOR.change_state_to(StateEnum::IDLE as u8);
77        loop {
78            state_handler();
79            if GOVERNOR.get_current_state().id() == StateEnum::FINISH as u8 {
80                break;
81            }
82            state_changer();
83        }
84    }
85}