summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/filterbridge.fsm
blob: d1495abe69c047fdbe12c998f693c3e1ca567682 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Filter Bridge FSM
# Filter column element (our colour -> go to lift, !our colour -> EJECT)
filterbridge

States:
 IDLE
  waiting the lift is ready to accept new puck
 WAIT_A_PUCK
  waiting for a new puck
 CLOSE_FIRST_DOOR
  isolating the firt puck on the bridge
 WAIT_RGB_PROBE
  waiting for RGB probe the first puck
 EJECT_PUCK
  eject a bad puck
 RETURN_NORMAL_POS
  move the bridge to his normal position
 OPEN_SECOND_DOOR
  open and free the puck to the lift
 CLOSE_SECOND_DOOR
  prepare for a new puck
 OPEN_FIRST_DOOR
  accept a puck for a new test

Events:
 lift_ready
  lift ready to accept new puck
 puck_on_pos2
  a puck has been detected on bridge's position 2
 first_door_closed
  the first door is closed
 no_puck_on_pos2
  there is no puck on position 2
 bridge_in_position
  bridge is in his normal position
 second_door_closed
  you shall not pass to the lift
 first_door_opened
  bridge ready to test a new puck
 puck_ejected
  the ejection procedure is completed
 color_probed
  the result of the investigation will be revealed (suspens!!)


IDLE:
 lift_ready -> WAIT_A_PUCK
  the lift is ready to get pucks, we can begin testing procedure

WAIT_A_PUCK:
 puck_on_pos2 -> CLOSE_FIRST_DOOR
  close the first door after a puck is ready for filtering

CLOSE_FIRST_DOOR:
 first_door_closed -> WAIT_RGB_PROBE
  get puck color

WAIT_RGB_PROBE:
 color_probed: bad_color -> EJECT_PUCK
  eject bad PUCK
 color_probed: good_color -> OPEN_SECOND_DOOR
  put puck to the lift

EJECT_PUCK:
 puck_ejected -> RETURN_NORMAL_POS
  put bridge on normal position after puck ejection

RETURN_NORMAL_POS:
 bridge_in_position: puck_still_here -> EJECT_PUCK
  re-eject this sticky puck, grml!
 bridge_in_position: no_puck_anymore -> OPEN_FIRST_DOOR
  make bridge ready to test a new puck

OPEN_SECOND_DOOR:
 no_puck_on_pos2 -> CLOSE_SECOND_DOOR
  close the lift access door and tell to lift it has a new puck

CLOSE_SECOND_DOOR:
 second_door_closed -> OPEN_FIRST_DOOR
  filter bridge is ready to get a new puck

OPEN_FIRST_DOOR:
 first_door_opened -> IDLE
  filter bridge ready