summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/top.fsm
blob: 04e0d982c613f3a8bfb65be02333ff91e99677ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Top FSM.
top
  Main FSM calling other FSM.

States:
 IDLE
  waiting for the beginning of the top FSM.
 WAIT_INIT_TO_FINISH
  waiting for the end of init.
 GET_PUCK_FROM_THE_GROUND [timeout=1590]
  get some pucks from the ground (with a timeout set to 7 seconds).
 GET_PUCK_FROM_DISTRIBUTOR
  get some pucks from the distributor.
 STOP_TO_GO_TO_UNLOAD_AREA
  stop the move FSM before starting a new one.
 STOP_TO_GET_PUCK_FROM_DISTRIBUTOR
  stop the move FSM before starting a new one.

Events:
 start
  initialize the FSM.
 move_fsm_succeed
  when the move FSM returns with success.
 move_fsm_failed
  when the move FSM returns with an error.
 init_match_is_started
  when the init FSM has finished and the match start.
 state_timeout
  timeout in cycle count.
 asserv_last_cmd_ack
  last command sent to the asserv board has been acquitted.
 bot_is_full_of_puck
  the bot has four pucks inside.

IDLE:
 start -> WAIT_INIT_TO_FINISH
  nothing to do.

WAIT_INIT_TO_FINISH:
 init_match_is_started -> GET_PUCK_FROM_THE_GROUND
  the match start, try to get some puck from the ground.

GET_PUCK_FROM_THE_GROUND:
 move_fsm_succeed: already_six_pucks_or_no_next_position -> GET_PUCK_FROM_DISTRIBUTOR
  get the next distributor position and launch move FSM to go there.
 move_fsm_succeed: next_position_exists -> .
  go to the next position using move FSM.
 move_fsm_failed -> GET_PUCK_FROM_DISTRIBUTOR
  we have failed to do a move, go the distributor.
 bot_is_full_of_puck -> STOP_TO_GO_TO_UNLOAD_AREA
  stop move FSM.
 state_timeout -> STOP_TO_GET_PUCK_FROM_DISTRIBUTOR
  too much time lost to get puck from the ground, stop move FSM.