Tom Larkworthy / Mbed 2 deprecated MeshNetwork

Dependencies:   mbed

Committer:
t_lark
Date:
Wed Apr 27 17:11:08 2011 +0000
Revision:
0:7225ff529d1c
.00000001

Who changed what in which revision?

UserRevisionLine numberNew contents of line
t_lark 0:7225ff529d1c 1 //////////////////////////////////////////////////////////////////////////////
t_lark 0:7225ff529d1c 2 // Model: Network.qm
t_lark 0:7225ff529d1c 3 // File: ./network.cpp
t_lark 0:7225ff529d1c 4 //
t_lark 0:7225ff529d1c 5 // This file has been generated automatically by QP Modeler (QM).
t_lark 0:7225ff529d1c 6 // DO NOT EDIT THIS FILE MANUALLY.
t_lark 0:7225ff529d1c 7 //
t_lark 0:7225ff529d1c 8 // Please visit www.state-machine.com/qm for more information.
t_lark 0:7225ff529d1c 9 //////////////////////////////////////////////////////////////////////////////
t_lark 0:7225ff529d1c 10 #include "qp_port.h"
t_lark 0:7225ff529d1c 11 #include "bsp.h"
t_lark 0:7225ff529d1c 12 #include "network.h"
t_lark 0:7225ff529d1c 13
t_lark 0:7225ff529d1c 14 Q_DEFINE_THIS_FILE
t_lark 0:7225ff529d1c 15
t_lark 0:7225ff529d1c 16 enum PelicanTimeouts { // various timeouts in ticks
t_lark 0:7225ff529d1c 17 CARS_GREEN_MIN_TOUT = BSP_TICKS_PER_SEC * 8, // min green for cars
t_lark 0:7225ff529d1c 18 CARS_YELLOW_TOUT = BSP_TICKS_PER_SEC * 3, // yellow for cars
t_lark 0:7225ff529d1c 19 PEDS_WALK_TOUT = BSP_TICKS_PER_SEC * 3, // walking time for peds
t_lark 0:7225ff529d1c 20 PEDS_FLASH_TOUT = BSP_TICKS_PER_SEC / 5, // flashing timeout for peds
t_lark 0:7225ff529d1c 21 PEDS_FLASH_NUM = 5*2, // number of flashes for peds
t_lark 0:7225ff529d1c 22 OFF_FLASH_TOUT = BSP_TICKS_PER_SEC / 2 // flashing timeout when off
t_lark 0:7225ff529d1c 23 };
t_lark 0:7225ff529d1c 24
t_lark 0:7225ff529d1c 25 enum SenseTimeouts { // various timeouts in ticks
t_lark 0:7225ff529d1c 26 SENSE1_N1_TOUT = BSP_TICKS_PER_SEC * 3,
t_lark 0:7225ff529d1c 27 TOGGLE_TOUT = BSP_TICKS_PER_SEC/5
t_lark 0:7225ff529d1c 28 };
t_lark 0:7225ff529d1c 29
t_lark 0:7225ff529d1c 30 enum PollTimeouts { // various timeouts in ticks
t_lark 0:7225ff529d1c 31 POLL_TOUT = BSP_TICKS_PER_SEC /10, // poll wait
t_lark 0:7225ff529d1c 32 };
t_lark 0:7225ff529d1c 33
t_lark 0:7225ff529d1c 34 // Pelican class -------------------------------------------------------------
t_lark 0:7225ff529d1c 35 // $(components::Pelican) ....................................................
t_lark 0:7225ff529d1c 36 class Pelican : public QActive {
t_lark 0:7225ff529d1c 37 private:
t_lark 0:7225ff529d1c 38 QTimeEvt m_timeout;
t_lark 0:7225ff529d1c 39 uint8_t m_flashCtr;
t_lark 0:7225ff529d1c 40
t_lark 0:7225ff529d1c 41 public:
t_lark 0:7225ff529d1c 42 Pelican() : QActive((QStateHandler)&Pelican::initial), m_timeout(TIMEOUT_SIG) {
t_lark 0:7225ff529d1c 43 }
t_lark 0:7225ff529d1c 44
t_lark 0:7225ff529d1c 45 protected:
t_lark 0:7225ff529d1c 46 static QState initial(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 47 static QState operational(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 48 static QState carsEnabled(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 49 static QState carsGreen(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 50 static QState carsGreenNoPed(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 51 static QState carsGreenInt(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 52 static QState carsGreenPedWait(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 53 static QState carsYellow(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 54 static QState pedsEnabled(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 55 static QState pedsWalk(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 56 static QState pedsFlash(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 57 static QState offline(Pelican *me, QEvent const *e);
t_lark 0:7225ff529d1c 58 };
t_lark 0:7225ff529d1c 59 // $(components::Sense1_N1) ..................................................
t_lark 0:7225ff529d1c 60 class Sense1_N1 : public QActive {
t_lark 0:7225ff529d1c 61 private:
t_lark 0:7225ff529d1c 62 QTimeEvt m_timeout;
t_lark 0:7225ff529d1c 63
t_lark 0:7225ff529d1c 64 public:
t_lark 0:7225ff529d1c 65 Sense1_N1();
t_lark 0:7225ff529d1c 66
t_lark 0:7225ff529d1c 67 protected:
t_lark 0:7225ff529d1c 68 static QState initial(Sense1_N1 *me, QEvent const *e);
t_lark 0:7225ff529d1c 69 static QState disconnected(Sense1_N1 *me, QEvent const *e);
t_lark 0:7225ff529d1c 70 static QState connected(Sense1_N1 *me, QEvent const *e);
t_lark 0:7225ff529d1c 71 static QState toggle_sense(Sense1_N1 *me, QEvent const *e);
t_lark 0:7225ff529d1c 72 static QState detect_down(Sense1_N1 *me, QEvent const *e);
t_lark 0:7225ff529d1c 73 };
t_lark 0:7225ff529d1c 74 // $(components::Poll) .......................................................
t_lark 0:7225ff529d1c 75 class Poll : public QActive {
t_lark 0:7225ff529d1c 76 private:
t_lark 0:7225ff529d1c 77 QTimeEvt m_timeout;
t_lark 0:7225ff529d1c 78
t_lark 0:7225ff529d1c 79 public:
t_lark 0:7225ff529d1c 80 Poll();
t_lark 0:7225ff529d1c 81
t_lark 0:7225ff529d1c 82 protected:
t_lark 0:7225ff529d1c 83 static QState initial(Poll *me, QEvent const *e);
t_lark 0:7225ff529d1c 84 static QState poll(Poll *me, QEvent const *e);
t_lark 0:7225ff529d1c 85 };
t_lark 0:7225ff529d1c 86
t_lark 0:7225ff529d1c 87 // Local objects -------------------------------------------------------------
t_lark 0:7225ff529d1c 88 static Pelican l_Pelican; // the single instance of Pelican active object
t_lark 0:7225ff529d1c 89 static Sense1_N1 l_Sense1_N1; // the single instance of Pelican active
t_lark 0:7225ff529d1c 90 static Poll l_Poll; // the single instance of Poll
t_lark 0:7225ff529d1c 91
t_lark 0:7225ff529d1c 92
t_lark 0:7225ff529d1c 93 // Global objects ------------------------------------------------------------
t_lark 0:7225ff529d1c 94 QActive * const AO_Pelican = &l_Pelican; // the opaque pointer
t_lark 0:7225ff529d1c 95 QActive * const AO_Sense1_N1 = &l_Sense1_N1; // the opaque pointer
t_lark 0:7225ff529d1c 96 QActive * const AO_Poll = &l_Poll; // the opaque pointer
t_lark 0:7225ff529d1c 97
t_lark 0:7225ff529d1c 98 // Pelican class definition --------------------------------------------------
t_lark 0:7225ff529d1c 99 // $(components::Pelican) ....................................................
t_lark 0:7225ff529d1c 100
t_lark 0:7225ff529d1c 101 // $(components::Pelican::Statechart) ........................................
t_lark 0:7225ff529d1c 102 // @(/1/0/3/0)
t_lark 0:7225ff529d1c 103 QState Pelican::initial(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 104 me->subscribe(PEDS_WAITING_SIG);
t_lark 0:7225ff529d1c 105
t_lark 0:7225ff529d1c 106 QS_OBJ_DICTIONARY(&l_Pelican);
t_lark 0:7225ff529d1c 107 QS_OBJ_DICTIONARY(&l_Pelican.m_timeout);
t_lark 0:7225ff529d1c 108
t_lark 0:7225ff529d1c 109 QS_FUN_DICTIONARY(&QHsm::top);
t_lark 0:7225ff529d1c 110 QS_FUN_DICTIONARY(&Pelican::initial);
t_lark 0:7225ff529d1c 111 QS_FUN_DICTIONARY(&Pelican::offline);
t_lark 0:7225ff529d1c 112 QS_FUN_DICTIONARY(&Pelican::operational);
t_lark 0:7225ff529d1c 113 QS_FUN_DICTIONARY(&Pelican::carsEnabled);
t_lark 0:7225ff529d1c 114 QS_FUN_DICTIONARY(&Pelican::carsGreen);
t_lark 0:7225ff529d1c 115 QS_FUN_DICTIONARY(&Pelican::carsGreenNoPed);
t_lark 0:7225ff529d1c 116 QS_FUN_DICTIONARY(&Pelican::carsGreenPedWait);
t_lark 0:7225ff529d1c 117 QS_FUN_DICTIONARY(&Pelican::carsGreenInt);
t_lark 0:7225ff529d1c 118 QS_FUN_DICTIONARY(&Pelican::carsYellow);
t_lark 0:7225ff529d1c 119 QS_FUN_DICTIONARY(&Pelican::pedsEnabled);
t_lark 0:7225ff529d1c 120 QS_FUN_DICTIONARY(&Pelican::pedsWalk);
t_lark 0:7225ff529d1c 121 QS_FUN_DICTIONARY(&Pelican::pedsFlash);
t_lark 0:7225ff529d1c 122
t_lark 0:7225ff529d1c 123 QS_SIG_DICTIONARY(PEDS_WAITING_SIG, 0); // global signals
t_lark 0:7225ff529d1c 124 QS_SIG_DICTIONARY(ON_SIG, 0);
t_lark 0:7225ff529d1c 125 QS_SIG_DICTIONARY(OFF_SIG, 0);
t_lark 0:7225ff529d1c 126
t_lark 0:7225ff529d1c 127 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Pelican); // just for Pelican
t_lark 0:7225ff529d1c 128 return Q_TRAN(&Pelican::operational);
t_lark 0:7225ff529d1c 129 }
t_lark 0:7225ff529d1c 130 // $(components::Pelican::Statechart::operational) ...........................
t_lark 0:7225ff529d1c 131 QState Pelican::operational(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 132 switch (e->sig) {
t_lark 0:7225ff529d1c 133 // @(/1/0/3/1)
t_lark 0:7225ff529d1c 134 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 135 BSP_signalCars(CARS_RED);
t_lark 0:7225ff529d1c 136 BSP_signalPeds(PEDS_DONT_WALK);
t_lark 0:7225ff529d1c 137 return Q_HANDLED();
t_lark 0:7225ff529d1c 138 }
t_lark 0:7225ff529d1c 139 // @(/1/0/3/1/0)
t_lark 0:7225ff529d1c 140 case Q_INIT_SIG: {
t_lark 0:7225ff529d1c 141 return Q_TRAN(&Pelican::carsEnabled);
t_lark 0:7225ff529d1c 142 }
t_lark 0:7225ff529d1c 143 // @(/1/0/3/1/1)
t_lark 0:7225ff529d1c 144 case OFF_SIG: {
t_lark 0:7225ff529d1c 145 return Q_TRAN(&Pelican::offline);
t_lark 0:7225ff529d1c 146 }
t_lark 0:7225ff529d1c 147 }
t_lark 0:7225ff529d1c 148 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 149 }
t_lark 0:7225ff529d1c 150 // $(components::Pelican::Statechart::operational::carsEnabled) ..............
t_lark 0:7225ff529d1c 151 QState Pelican::carsEnabled(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 152 switch (e->sig) {
t_lark 0:7225ff529d1c 153 // @(/1/0/3/1/2)
t_lark 0:7225ff529d1c 154 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 155 BSP_signalCars(CARS_RED);
t_lark 0:7225ff529d1c 156 return Q_HANDLED();
t_lark 0:7225ff529d1c 157 }
t_lark 0:7225ff529d1c 158 // @(/1/0/3/1/2/0)
t_lark 0:7225ff529d1c 159 case Q_INIT_SIG: {
t_lark 0:7225ff529d1c 160 return Q_TRAN(&Pelican::carsGreen);
t_lark 0:7225ff529d1c 161 }
t_lark 0:7225ff529d1c 162 }
t_lark 0:7225ff529d1c 163 return Q_SUPER(&Pelican::operational);
t_lark 0:7225ff529d1c 164 }
t_lark 0:7225ff529d1c 165 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen) ...
t_lark 0:7225ff529d1c 166 QState Pelican::carsGreen(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 167 switch (e->sig) {
t_lark 0:7225ff529d1c 168 // @(/1/0/3/1/2/1)
t_lark 0:7225ff529d1c 169 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 170 BSP_signalCars(CARS_GREEN);
t_lark 0:7225ff529d1c 171 me->m_timeout.postIn(me, CARS_GREEN_MIN_TOUT);
t_lark 0:7225ff529d1c 172 return Q_HANDLED();
t_lark 0:7225ff529d1c 173 }
t_lark 0:7225ff529d1c 174 // @(/1/0/3/1/2/1)
t_lark 0:7225ff529d1c 175 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 176 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 177 return Q_HANDLED();
t_lark 0:7225ff529d1c 178 }
t_lark 0:7225ff529d1c 179 // @(/1/0/3/1/2/1/0)
t_lark 0:7225ff529d1c 180 case Q_INIT_SIG: {
t_lark 0:7225ff529d1c 181 return Q_TRAN(&Pelican::carsGreenNoPed);
t_lark 0:7225ff529d1c 182 }
t_lark 0:7225ff529d1c 183 }
t_lark 0:7225ff529d1c 184 return Q_SUPER(&Pelican::carsEnabled);
t_lark 0:7225ff529d1c 185 }
t_lark 0:7225ff529d1c 186 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenNoPed)
t_lark 0:7225ff529d1c 187 QState Pelican::carsGreenNoPed(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 188 switch (e->sig) {
t_lark 0:7225ff529d1c 189 // @(/1/0/3/1/2/1/1)
t_lark 0:7225ff529d1c 190 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 191 BSP_showState("carsGreenNoPed");
t_lark 0:7225ff529d1c 192 return Q_HANDLED();
t_lark 0:7225ff529d1c 193 }
t_lark 0:7225ff529d1c 194 // @(/1/0/3/1/2/1/1/0)
t_lark 0:7225ff529d1c 195 case PEDS_WAITING_SIG: {
t_lark 0:7225ff529d1c 196 return Q_TRAN(&Pelican::carsGreenPedWait);
t_lark 0:7225ff529d1c 197 }
t_lark 0:7225ff529d1c 198 // @(/1/0/3/1/2/1/1/1)
t_lark 0:7225ff529d1c 199 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 200 return Q_TRAN(&Pelican::carsGreenInt);
t_lark 0:7225ff529d1c 201 }
t_lark 0:7225ff529d1c 202 }
t_lark 0:7225ff529d1c 203 return Q_SUPER(&Pelican::carsGreen);
t_lark 0:7225ff529d1c 204 }
t_lark 0:7225ff529d1c 205 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenInt)
t_lark 0:7225ff529d1c 206 QState Pelican::carsGreenInt(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 207 switch (e->sig) {
t_lark 0:7225ff529d1c 208 // @(/1/0/3/1/2/1/2)
t_lark 0:7225ff529d1c 209 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 210 BSP_showState("carsGreenInt");
t_lark 0:7225ff529d1c 211 return Q_HANDLED();
t_lark 0:7225ff529d1c 212 }
t_lark 0:7225ff529d1c 213 // @(/1/0/3/1/2/1/2/0)
t_lark 0:7225ff529d1c 214 case PEDS_WAITING_SIG: {
t_lark 0:7225ff529d1c 215 return Q_TRAN(&Pelican::carsYellow);
t_lark 0:7225ff529d1c 216 }
t_lark 0:7225ff529d1c 217 }
t_lark 0:7225ff529d1c 218 return Q_SUPER(&Pelican::carsGreen);
t_lark 0:7225ff529d1c 219 }
t_lark 0:7225ff529d1c 220 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenPedWait)
t_lark 0:7225ff529d1c 221 QState Pelican::carsGreenPedWait(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 222 switch (e->sig) {
t_lark 0:7225ff529d1c 223 // @(/1/0/3/1/2/1/3)
t_lark 0:7225ff529d1c 224 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 225 BSP_showState("carsGreenPedWait");
t_lark 0:7225ff529d1c 226 return Q_HANDLED();
t_lark 0:7225ff529d1c 227 }
t_lark 0:7225ff529d1c 228 // @(/1/0/3/1/2/1/3/0)
t_lark 0:7225ff529d1c 229 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 230 return Q_TRAN(&Pelican::carsYellow);
t_lark 0:7225ff529d1c 231 }
t_lark 0:7225ff529d1c 232 }
t_lark 0:7225ff529d1c 233 return Q_SUPER(&Pelican::carsGreen);
t_lark 0:7225ff529d1c 234 }
t_lark 0:7225ff529d1c 235 // $(components::Pelican::Statechart::operational::carsEnabled::carsYellow) ..
t_lark 0:7225ff529d1c 236 QState Pelican::carsYellow(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 237 switch (e->sig) {
t_lark 0:7225ff529d1c 238 // @(/1/0/3/1/2/2)
t_lark 0:7225ff529d1c 239 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 240 BSP_showState("carsYellow");
t_lark 0:7225ff529d1c 241 BSP_signalCars(CARS_YELLOW);
t_lark 0:7225ff529d1c 242 me->m_timeout.postIn(me, CARS_YELLOW_TOUT);
t_lark 0:7225ff529d1c 243 return Q_HANDLED();
t_lark 0:7225ff529d1c 244 }
t_lark 0:7225ff529d1c 245 // @(/1/0/3/1/2/2)
t_lark 0:7225ff529d1c 246 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 247 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 248 return Q_HANDLED();
t_lark 0:7225ff529d1c 249 }
t_lark 0:7225ff529d1c 250 // @(/1/0/3/1/2/2/0)
t_lark 0:7225ff529d1c 251 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 252 return Q_TRAN(&Pelican::pedsEnabled);
t_lark 0:7225ff529d1c 253 }
t_lark 0:7225ff529d1c 254 }
t_lark 0:7225ff529d1c 255 return Q_SUPER(&Pelican::carsEnabled);
t_lark 0:7225ff529d1c 256 }
t_lark 0:7225ff529d1c 257 // $(components::Pelican::Statechart::operational::pedsEnabled) ..............
t_lark 0:7225ff529d1c 258 QState Pelican::pedsEnabled(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 259 switch (e->sig) {
t_lark 0:7225ff529d1c 260 // @(/1/0/3/1/3)
t_lark 0:7225ff529d1c 261 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 262 BSP_signalPeds(PEDS_DONT_WALK);
t_lark 0:7225ff529d1c 263 return Q_HANDLED();
t_lark 0:7225ff529d1c 264 }
t_lark 0:7225ff529d1c 265 // @(/1/0/3/1/3/0)
t_lark 0:7225ff529d1c 266 case Q_INIT_SIG: {
t_lark 0:7225ff529d1c 267 return Q_TRAN(&Pelican::pedsWalk);
t_lark 0:7225ff529d1c 268 }
t_lark 0:7225ff529d1c 269 }
t_lark 0:7225ff529d1c 270 return Q_SUPER(&Pelican::operational);
t_lark 0:7225ff529d1c 271 }
t_lark 0:7225ff529d1c 272 // $(components::Pelican::Statechart::operational::pedsEnabled::pedsWalk) ....
t_lark 0:7225ff529d1c 273 QState Pelican::pedsWalk(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 274 switch (e->sig) {
t_lark 0:7225ff529d1c 275 // @(/1/0/3/1/3/1)
t_lark 0:7225ff529d1c 276 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 277 BSP_showState("pedsWalk");
t_lark 0:7225ff529d1c 278 BSP_signalPeds(PEDS_WALK);
t_lark 0:7225ff529d1c 279 me->m_timeout.postIn(me, PEDS_WALK_TOUT);
t_lark 0:7225ff529d1c 280 return Q_HANDLED();
t_lark 0:7225ff529d1c 281 }
t_lark 0:7225ff529d1c 282 // @(/1/0/3/1/3/1)
t_lark 0:7225ff529d1c 283 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 284 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 285 return Q_HANDLED();
t_lark 0:7225ff529d1c 286 }
t_lark 0:7225ff529d1c 287 // @(/1/0/3/1/3/1/0)
t_lark 0:7225ff529d1c 288 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 289 return Q_TRAN(&Pelican::pedsFlash);
t_lark 0:7225ff529d1c 290 }
t_lark 0:7225ff529d1c 291 }
t_lark 0:7225ff529d1c 292 return Q_SUPER(&Pelican::pedsEnabled);
t_lark 0:7225ff529d1c 293 }
t_lark 0:7225ff529d1c 294 // $(components::Pelican::Statechart::operational::pedsEnabled::pedsFlash) ...
t_lark 0:7225ff529d1c 295 QState Pelican::pedsFlash(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 296 switch (e->sig) {
t_lark 0:7225ff529d1c 297 // @(/1/0/3/1/3/2)
t_lark 0:7225ff529d1c 298 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 299 BSP_showState("pedsFlash");
t_lark 0:7225ff529d1c 300 me->m_timeout.postEvery(me, PEDS_FLASH_TOUT);
t_lark 0:7225ff529d1c 301 me->m_flashCtr = PEDS_FLASH_NUM*2 + 1;
t_lark 0:7225ff529d1c 302 return Q_HANDLED();
t_lark 0:7225ff529d1c 303 }
t_lark 0:7225ff529d1c 304 // @(/1/0/3/1/3/2)
t_lark 0:7225ff529d1c 305 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 306 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 307 return Q_HANDLED();
t_lark 0:7225ff529d1c 308 }
t_lark 0:7225ff529d1c 309 // @(/1/0/3/1/3/2/0)
t_lark 0:7225ff529d1c 310 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 311 // @(/1/0/3/1/3/2/0/0)
t_lark 0:7225ff529d1c 312 if (me->m_flashCtr != 0) {
t_lark 0:7225ff529d1c 313 --me->m_flashCtr;
t_lark 0:7225ff529d1c 314 // @(/1/0/3/1/3/2/0/0/0)
t_lark 0:7225ff529d1c 315 if ((me->m_flashCtr & 1) == 0) {
t_lark 0:7225ff529d1c 316 BSP_signalPeds(PEDS_DONT_WALK);
t_lark 0:7225ff529d1c 317 return Q_HANDLED();
t_lark 0:7225ff529d1c 318 }
t_lark 0:7225ff529d1c 319 // @(/1/0/3/1/3/2/0/0/1)
t_lark 0:7225ff529d1c 320 else {
t_lark 0:7225ff529d1c 321 BSP_signalPeds(PEDS_BLANK);
t_lark 0:7225ff529d1c 322 return Q_HANDLED();
t_lark 0:7225ff529d1c 323 }
t_lark 0:7225ff529d1c 324 }
t_lark 0:7225ff529d1c 325 // @(/1/0/3/1/3/2/0/1)
t_lark 0:7225ff529d1c 326 else {
t_lark 0:7225ff529d1c 327 return Q_TRAN(&Pelican::carsEnabled);
t_lark 0:7225ff529d1c 328 }
t_lark 0:7225ff529d1c 329 }
t_lark 0:7225ff529d1c 330 }
t_lark 0:7225ff529d1c 331 return Q_SUPER(&Pelican::pedsEnabled);
t_lark 0:7225ff529d1c 332 }
t_lark 0:7225ff529d1c 333 // $(components::Pelican::Statechart::offline) ...............................
t_lark 0:7225ff529d1c 334 QState Pelican::offline(Pelican *me, QEvent const *e) {
t_lark 0:7225ff529d1c 335 switch (e->sig) {
t_lark 0:7225ff529d1c 336 // @(/1/0/3/2)
t_lark 0:7225ff529d1c 337 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 338 BSP_showState("offline");
t_lark 0:7225ff529d1c 339 me->m_timeout.postEvery(me, OFF_FLASH_TOUT);
t_lark 0:7225ff529d1c 340 me->m_flashCtr = 0;
t_lark 0:7225ff529d1c 341 return Q_HANDLED();
t_lark 0:7225ff529d1c 342 }
t_lark 0:7225ff529d1c 343 // @(/1/0/3/2)
t_lark 0:7225ff529d1c 344 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 345 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 346 return Q_HANDLED();
t_lark 0:7225ff529d1c 347 }
t_lark 0:7225ff529d1c 348 // @(/1/0/3/2/0)
t_lark 0:7225ff529d1c 349 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 350 me->m_flashCtr ^= 1;
t_lark 0:7225ff529d1c 351 // @(/1/0/3/2/0/0)
t_lark 0:7225ff529d1c 352 if ((me->m_flashCtr & 1) == 0) {
t_lark 0:7225ff529d1c 353 BSP_signalCars(CARS_RED);
t_lark 0:7225ff529d1c 354 BSP_signalPeds(PEDS_DONT_WALK);
t_lark 0:7225ff529d1c 355 return Q_HANDLED();
t_lark 0:7225ff529d1c 356 }
t_lark 0:7225ff529d1c 357 // @(/1/0/3/2/0/1)
t_lark 0:7225ff529d1c 358 else {
t_lark 0:7225ff529d1c 359 BSP_signalCars(CARS_BLANK);
t_lark 0:7225ff529d1c 360 BSP_signalPeds(PEDS_BLANK);
t_lark 0:7225ff529d1c 361 return Q_HANDLED();
t_lark 0:7225ff529d1c 362 }
t_lark 0:7225ff529d1c 363 }
t_lark 0:7225ff529d1c 364 // @(/1/0/3/2/1)
t_lark 0:7225ff529d1c 365 case ON_SIG: {
t_lark 0:7225ff529d1c 366 return Q_TRAN(&Pelican::operational);
t_lark 0:7225ff529d1c 367 }
t_lark 0:7225ff529d1c 368 }
t_lark 0:7225ff529d1c 369 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 370 }
t_lark 0:7225ff529d1c 371
t_lark 0:7225ff529d1c 372 // $(components::Sense1_N1) ..................................................
t_lark 0:7225ff529d1c 373 // $(components::Sense1_N1::Sense1_N1) .......................................
t_lark 0:7225ff529d1c 374 Sense1_N1::Sense1_N1() : QActive((QStateHandler)&Sense1_N1::initial), m_timeout(TIMEOUT_SIG) {
t_lark 0:7225ff529d1c 375 }
t_lark 0:7225ff529d1c 376 // $(components::Sense1_N1::Statechart) ......................................
t_lark 0:7225ff529d1c 377 // @(/1/2/2/0)
t_lark 0:7225ff529d1c 378 QState Sense1_N1::initial(Sense1_N1 *me, QEvent const *e) {
t_lark 0:7225ff529d1c 379 me->subscribe(SENSE1_N1_UP_SIG);
t_lark 0:7225ff529d1c 380 me->subscribe(SENSE1_N1_DOWN_SIG);
t_lark 0:7225ff529d1c 381 me->subscribe(SENSE_N1_SIG);
t_lark 0:7225ff529d1c 382
t_lark 0:7225ff529d1c 383 QS_OBJ_DICTIONARY(&l_Sense1_N1);
t_lark 0:7225ff529d1c 384 QS_OBJ_DICTIONARY(&l_Sense1_N1.m_timeout);
t_lark 0:7225ff529d1c 385
t_lark 0:7225ff529d1c 386 QS_FUN_DICTIONARY(&QHsm::top);
t_lark 0:7225ff529d1c 387 QS_FUN_DICTIONARY(&Sense1_N1::initial);
t_lark 0:7225ff529d1c 388 QS_FUN_DICTIONARY(&Sense1_N1::disconnected);
t_lark 0:7225ff529d1c 389 QS_FUN_DICTIONARY(&Sense1_N1::connected);
t_lark 0:7225ff529d1c 390 QS_FUN_DICTIONARY(&Sense1_N1::toggle_sense);
t_lark 0:7225ff529d1c 391 QS_FUN_DICTIONARY(&Sense1_N1::detect_down);
t_lark 0:7225ff529d1c 392
t_lark 0:7225ff529d1c 393 QS_SIG_DICTIONARY(SENSE1_N1_UP_SIG, 0); // global signals
t_lark 0:7225ff529d1c 394 QS_SIG_DICTIONARY(SENSE1_N1_DOWN_SIG,0);
t_lark 0:7225ff529d1c 395 QS_SIG_DICTIONARY(SENSE_N1_SIG,0);
t_lark 0:7225ff529d1c 396
t_lark 0:7225ff529d1c 397 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Sense1_N1); // just for Sense1_N1
t_lark 0:7225ff529d1c 398 return Q_TRAN(&Sense1_N1::disconnected);
t_lark 0:7225ff529d1c 399 }
t_lark 0:7225ff529d1c 400 // $(components::Sense1_N1::Statechart::disconnected) ........................
t_lark 0:7225ff529d1c 401 QState Sense1_N1::disconnected(Sense1_N1 *me, QEvent const *e) {
t_lark 0:7225ff529d1c 402 switch (e->sig) {
t_lark 0:7225ff529d1c 403 // @(/1/2/2/1)
t_lark 0:7225ff529d1c 404 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 405 BSP_signalSense(SENSE_1_DIS);
t_lark 0:7225ff529d1c 406 return Q_HANDLED();
t_lark 0:7225ff529d1c 407 }
t_lark 0:7225ff529d1c 408 // @(/1/2/2/1/0)
t_lark 0:7225ff529d1c 409 case SENSE1_N1_UP_SIG: {
t_lark 0:7225ff529d1c 410 return Q_TRAN(&Sense1_N1::connected);
t_lark 0:7225ff529d1c 411 }
t_lark 0:7225ff529d1c 412 }
t_lark 0:7225ff529d1c 413 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 414 }
t_lark 0:7225ff529d1c 415 // $(components::Sense1_N1::Statechart::connected) ...........................
t_lark 0:7225ff529d1c 416 QState Sense1_N1::connected(Sense1_N1 *me, QEvent const *e) {
t_lark 0:7225ff529d1c 417 switch (e->sig) {
t_lark 0:7225ff529d1c 418 // @(/1/2/2/2)
t_lark 0:7225ff529d1c 419 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 420 BSP_signalSense(SENSE_1_CON);
t_lark 0:7225ff529d1c 421 return Q_HANDLED();
t_lark 0:7225ff529d1c 422 }
t_lark 0:7225ff529d1c 423 // @(/1/2/2/2/0)
t_lark 0:7225ff529d1c 424 case SENSE1_N1_DOWN_SIG: {
t_lark 0:7225ff529d1c 425 return Q_TRAN(&Sense1_N1::disconnected);
t_lark 0:7225ff529d1c 426 }
t_lark 0:7225ff529d1c 427 // @(/1/2/2/2/1)
t_lark 0:7225ff529d1c 428 case SENSE_N1_SIG: {
t_lark 0:7225ff529d1c 429 return Q_TRAN(&Sense1_N1::toggle_sense);
t_lark 0:7225ff529d1c 430 }
t_lark 0:7225ff529d1c 431 }
t_lark 0:7225ff529d1c 432 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 433 }
t_lark 0:7225ff529d1c 434 // $(components::Sense1_N1::Statechart::toggle_sense) ........................
t_lark 0:7225ff529d1c 435 QState Sense1_N1::toggle_sense(Sense1_N1 *me, QEvent const *e) {
t_lark 0:7225ff529d1c 436 switch (e->sig) {
t_lark 0:7225ff529d1c 437 // @(/1/2/2/3)
t_lark 0:7225ff529d1c 438 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 439 me->m_timeout.postIn(me, TOGGLE_TOUT);
t_lark 0:7225ff529d1c 440 return Q_HANDLED();
t_lark 0:7225ff529d1c 441 }
t_lark 0:7225ff529d1c 442 // @(/1/2/2/3)
t_lark 0:7225ff529d1c 443 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 444 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 445 return Q_HANDLED();
t_lark 0:7225ff529d1c 446 }
t_lark 0:7225ff529d1c 447 // @(/1/2/2/3/0)
t_lark 0:7225ff529d1c 448 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 449 return Q_TRAN(&Sense1_N1::connected);
t_lark 0:7225ff529d1c 450 }
t_lark 0:7225ff529d1c 451 // @(/1/2/2/3/1)
t_lark 0:7225ff529d1c 452 case SENSE1_N1_DOWN_SIG: {
t_lark 0:7225ff529d1c 453 return Q_TRAN(&Sense1_N1::detect_down);
t_lark 0:7225ff529d1c 454 }
t_lark 0:7225ff529d1c 455 }
t_lark 0:7225ff529d1c 456 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 457 }
t_lark 0:7225ff529d1c 458 // $(components::Sense1_N1::Statechart::detect_down) .........................
t_lark 0:7225ff529d1c 459 QState Sense1_N1::detect_down(Sense1_N1 *me, QEvent const *e) {
t_lark 0:7225ff529d1c 460 switch (e->sig) {
t_lark 0:7225ff529d1c 461 // @(/1/2/2/4)
t_lark 0:7225ff529d1c 462 case Q_ENTRY_SIG: {
t_lark 0:7225ff529d1c 463 me->m_timeout.postIn(me, TOGGLE_TOUT);
t_lark 0:7225ff529d1c 464 return Q_HANDLED();
t_lark 0:7225ff529d1c 465 }
t_lark 0:7225ff529d1c 466 // @(/1/2/2/4)
t_lark 0:7225ff529d1c 467 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 468 me->m_timeout.disarm();
t_lark 0:7225ff529d1c 469 return Q_HANDLED();
t_lark 0:7225ff529d1c 470 }
t_lark 0:7225ff529d1c 471 // @(/1/2/2/4/0)
t_lark 0:7225ff529d1c 472 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 473 return Q_TRAN(&Sense1_N1::disconnected);
t_lark 0:7225ff529d1c 474 }
t_lark 0:7225ff529d1c 475 // @(/1/2/2/4/1)
t_lark 0:7225ff529d1c 476 case SENSE1_N1_UP_SIG: {
t_lark 0:7225ff529d1c 477 return Q_TRAN(&Sense1_N1::connected);
t_lark 0:7225ff529d1c 478 }
t_lark 0:7225ff529d1c 479 }
t_lark 0:7225ff529d1c 480 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 481 }
t_lark 0:7225ff529d1c 482
t_lark 0:7225ff529d1c 483 // $(components::Poll) .......................................................
t_lark 0:7225ff529d1c 484 // $(components::Poll::Poll) .................................................
t_lark 0:7225ff529d1c 485 Poll::Poll() : QActive((QStateHandler)&Poll::initial), m_timeout(TIMEOUT_SIG) {
t_lark 0:7225ff529d1c 486 }
t_lark 0:7225ff529d1c 487 // $(components::Poll::Statechart) ...........................................
t_lark 0:7225ff529d1c 488 // @(/1/1/2/0)
t_lark 0:7225ff529d1c 489 QState Poll::initial(Poll *me, QEvent const *e) {
t_lark 0:7225ff529d1c 490 QS_OBJ_DICTIONARY(&l_Poll);
t_lark 0:7225ff529d1c 491 QS_OBJ_DICTIONARY(&l_Poll.m_timeout);
t_lark 0:7225ff529d1c 492
t_lark 0:7225ff529d1c 493
t_lark 0:7225ff529d1c 494 QS_FUN_DICTIONARY(&QHsm::top);
t_lark 0:7225ff529d1c 495 QS_FUN_DICTIONARY(&Poll::initial);
t_lark 0:7225ff529d1c 496 QS_FUN_DICTIONARY(&Poll::poll);
t_lark 0:7225ff529d1c 497
t_lark 0:7225ff529d1c 498
t_lark 0:7225ff529d1c 499 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Poll); // just for Ped
t_lark 0:7225ff529d1c 500
t_lark 0:7225ff529d1c 501 me->m_timeout.postEvery(me, POLL_TOUT);
t_lark 0:7225ff529d1c 502
t_lark 0:7225ff529d1c 503 return Q_TRAN(&Poll::poll);
t_lark 0:7225ff529d1c 504 }
t_lark 0:7225ff529d1c 505 // $(components::Poll::Statechart::poll) .....................................
t_lark 0:7225ff529d1c 506 QState Poll::poll(Poll *me, QEvent const *e) {
t_lark 0:7225ff529d1c 507 switch (e->sig) {
t_lark 0:7225ff529d1c 508 // @(/1/1/2/1)
t_lark 0:7225ff529d1c 509 case Q_EXIT_SIG: {
t_lark 0:7225ff529d1c 510 BSP_chk_io();
t_lark 0:7225ff529d1c 511 return Q_HANDLED();
t_lark 0:7225ff529d1c 512 }
t_lark 0:7225ff529d1c 513 // @(/1/1/2/1/0)
t_lark 0:7225ff529d1c 514 case TIMEOUT_SIG: {
t_lark 0:7225ff529d1c 515 return Q_TRAN(&Poll::poll);
t_lark 0:7225ff529d1c 516 }
t_lark 0:7225ff529d1c 517 }
t_lark 0:7225ff529d1c 518 return Q_SUPER(&QHsm::top);
t_lark 0:7225ff529d1c 519 }
t_lark 0:7225ff529d1c 520