Doesn\'t work, I just want SVN access
Embed:
(wiki syntax)
Show/hide line numbers
network.cpp
00001 ////////////////////////////////////////////////////////////////////////////// 00002 // Model: Network.qm 00003 // File: ./network.cpp 00004 // 00005 // This file has been generated automatically by QP Modeler (QM). 00006 // DO NOT EDIT THIS FILE MANUALLY. 00007 // 00008 // Please visit www.state-machine.com/qm for more information. 00009 ////////////////////////////////////////////////////////////////////////////// 00010 #include "qp_port.h" 00011 #include "bsp.h" 00012 #include "network.h" 00013 00014 Q_DEFINE_THIS_FILE 00015 00016 enum PelicanTimeouts { // various timeouts in ticks 00017 CARS_GREEN_MIN_TOUT = BSP_TICKS_PER_SEC * 8, // min green for cars 00018 CARS_YELLOW_TOUT = BSP_TICKS_PER_SEC * 3, // yellow for cars 00019 PEDS_WALK_TOUT = BSP_TICKS_PER_SEC * 3, // walking time for peds 00020 PEDS_FLASH_TOUT = BSP_TICKS_PER_SEC / 5, // flashing timeout for peds 00021 PEDS_FLASH_NUM = 5*2, // number of flashes for peds 00022 OFF_FLASH_TOUT = BSP_TICKS_PER_SEC / 2 // flashing timeout when off 00023 }; 00024 00025 enum SenseTimeouts { // various timeouts in ticks 00026 SENSE1_N1_TOUT = BSP_TICKS_PER_SEC * 3, 00027 TOGGLE_TOUT = BSP_TICKS_PER_SEC/5 00028 }; 00029 00030 enum PollTimeouts { // various timeouts in ticks 00031 POLL_TOUT = BSP_TICKS_PER_SEC /10, // poll wait 00032 }; 00033 00034 // Pelican class ------------------------------------------------------------- 00035 // $(components::Pelican) .................................................... 00036 class Pelican : public QActive { 00037 private: 00038 QTimeEvt m_timeout; 00039 uint8_t m_flashCtr; 00040 00041 public: 00042 Pelican() : QActive((QStateHandler)&Pelican::initial), m_timeout(TIMEOUT_SIG) { 00043 } 00044 00045 protected: 00046 static QState initial(Pelican *me, QEvent const *e); 00047 static QState operational(Pelican *me, QEvent const *e); 00048 static QState carsEnabled(Pelican *me, QEvent const *e); 00049 static QState carsGreen(Pelican *me, QEvent const *e); 00050 static QState carsGreenNoPed(Pelican *me, QEvent const *e); 00051 static QState carsGreenInt(Pelican *me, QEvent const *e); 00052 static QState carsGreenPedWait(Pelican *me, QEvent const *e); 00053 static QState carsYellow(Pelican *me, QEvent const *e); 00054 static QState pedsEnabled(Pelican *me, QEvent const *e); 00055 static QState pedsWalk(Pelican *me, QEvent const *e); 00056 static QState pedsFlash(Pelican *me, QEvent const *e); 00057 static QState offline(Pelican *me, QEvent const *e); 00058 }; 00059 // $(components::Sense1_N1) .................................................. 00060 class Sense1_N1 : public QActive { 00061 private: 00062 QTimeEvt m_timeout; 00063 00064 public: 00065 Sense1_N1(); 00066 00067 protected: 00068 static QState initial(Sense1_N1 *me, QEvent const *e); 00069 static QState disconnected(Sense1_N1 *me, QEvent const *e); 00070 static QState connected(Sense1_N1 *me, QEvent const *e); 00071 static QState toggle_sense(Sense1_N1 *me, QEvent const *e); 00072 static QState detect_down(Sense1_N1 *me, QEvent const *e); 00073 }; 00074 // $(components::Poll) ....................................................... 00075 class Poll : public QActive { 00076 private: 00077 QTimeEvt m_timeout; 00078 00079 public: 00080 Poll(); 00081 00082 protected: 00083 static QState initial(Poll *me, QEvent const *e); 00084 static QState poll(Poll *me, QEvent const *e); 00085 }; 00086 00087 // Local objects ------------------------------------------------------------- 00088 static Pelican l_Pelican; // the single instance of Pelican active object 00089 static Sense1_N1 l_Sense1_N1; // the single instance of Pelican active 00090 static Poll l_Poll; // the single instance of Poll 00091 00092 00093 // Global objects ------------------------------------------------------------ 00094 QActive * const AO_Pelican = &l_Pelican; // the opaque pointer 00095 QActive * const AO_Sense1_N1 = &l_Sense1_N1; // the opaque pointer 00096 QActive * const AO_Poll = &l_Poll; // the opaque pointer 00097 00098 // Pelican class definition -------------------------------------------------- 00099 // $(components::Pelican) .................................................... 00100 00101 // $(components::Pelican::Statechart) ........................................ 00102 // @(/1/0/3/0) 00103 QState Pelican::initial(Pelican *me, QEvent const *e) { 00104 me->subscribe(PEDS_WAITING_SIG); 00105 00106 QS_OBJ_DICTIONARY(&l_Pelican); 00107 QS_OBJ_DICTIONARY(&l_Pelican.m_timeout); 00108 00109 QS_FUN_DICTIONARY(&QHsm::top); 00110 QS_FUN_DICTIONARY(&Pelican::initial); 00111 QS_FUN_DICTIONARY(&Pelican::offline); 00112 QS_FUN_DICTIONARY(&Pelican::operational); 00113 QS_FUN_DICTIONARY(&Pelican::carsEnabled); 00114 QS_FUN_DICTIONARY(&Pelican::carsGreen); 00115 QS_FUN_DICTIONARY(&Pelican::carsGreenNoPed); 00116 QS_FUN_DICTIONARY(&Pelican::carsGreenPedWait); 00117 QS_FUN_DICTIONARY(&Pelican::carsGreenInt); 00118 QS_FUN_DICTIONARY(&Pelican::carsYellow); 00119 QS_FUN_DICTIONARY(&Pelican::pedsEnabled); 00120 QS_FUN_DICTIONARY(&Pelican::pedsWalk); 00121 QS_FUN_DICTIONARY(&Pelican::pedsFlash); 00122 00123 QS_SIG_DICTIONARY(PEDS_WAITING_SIG, 0); // global signals 00124 QS_SIG_DICTIONARY(ON_SIG, 0); 00125 QS_SIG_DICTIONARY(OFF_SIG, 0); 00126 00127 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Pelican); // just for Pelican 00128 return Q_TRAN(&Pelican::operational); 00129 } 00130 // $(components::Pelican::Statechart::operational) ........................... 00131 QState Pelican::operational(Pelican *me, QEvent const *e) { 00132 switch (e->sig) { 00133 // @(/1/0/3/1) 00134 case Q_ENTRY_SIG: { 00135 BSP_signalCars(CARS_RED); 00136 BSP_signalPeds(PEDS_DONT_WALK); 00137 return Q_HANDLED(); 00138 } 00139 // @(/1/0/3/1/0) 00140 case Q_INIT_SIG: { 00141 return Q_TRAN(&Pelican::carsEnabled); 00142 } 00143 // @(/1/0/3/1/1) 00144 case OFF_SIG: { 00145 return Q_TRAN(&Pelican::offline); 00146 } 00147 } 00148 return Q_SUPER(&QHsm::top); 00149 } 00150 // $(components::Pelican::Statechart::operational::carsEnabled) .............. 00151 QState Pelican::carsEnabled(Pelican *me, QEvent const *e) { 00152 switch (e->sig) { 00153 // @(/1/0/3/1/2) 00154 case Q_EXIT_SIG: { 00155 BSP_signalCars(CARS_RED); 00156 return Q_HANDLED(); 00157 } 00158 // @(/1/0/3/1/2/0) 00159 case Q_INIT_SIG: { 00160 return Q_TRAN(&Pelican::carsGreen); 00161 } 00162 } 00163 return Q_SUPER(&Pelican::operational); 00164 } 00165 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen) ... 00166 QState Pelican::carsGreen(Pelican *me, QEvent const *e) { 00167 switch (e->sig) { 00168 // @(/1/0/3/1/2/1) 00169 case Q_ENTRY_SIG: { 00170 BSP_signalCars(CARS_GREEN); 00171 me->m_timeout.postIn(me, CARS_GREEN_MIN_TOUT); 00172 return Q_HANDLED(); 00173 } 00174 // @(/1/0/3/1/2/1) 00175 case Q_EXIT_SIG: { 00176 me->m_timeout.disarm(); 00177 return Q_HANDLED(); 00178 } 00179 // @(/1/0/3/1/2/1/0) 00180 case Q_INIT_SIG: { 00181 return Q_TRAN(&Pelican::carsGreenNoPed); 00182 } 00183 } 00184 return Q_SUPER(&Pelican::carsEnabled); 00185 } 00186 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenNoPed) 00187 QState Pelican::carsGreenNoPed(Pelican *me, QEvent const *e) { 00188 switch (e->sig) { 00189 // @(/1/0/3/1/2/1/1) 00190 case Q_ENTRY_SIG: { 00191 BSP_showState("carsGreenNoPed"); 00192 return Q_HANDLED(); 00193 } 00194 // @(/1/0/3/1/2/1/1/0) 00195 case PEDS_WAITING_SIG: { 00196 return Q_TRAN(&Pelican::carsGreenPedWait); 00197 } 00198 // @(/1/0/3/1/2/1/1/1) 00199 case TIMEOUT_SIG: { 00200 return Q_TRAN(&Pelican::carsGreenInt); 00201 } 00202 } 00203 return Q_SUPER(&Pelican::carsGreen); 00204 } 00205 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenInt) 00206 QState Pelican::carsGreenInt(Pelican *me, QEvent const *e) { 00207 switch (e->sig) { 00208 // @(/1/0/3/1/2/1/2) 00209 case Q_ENTRY_SIG: { 00210 BSP_showState("carsGreenInt"); 00211 return Q_HANDLED(); 00212 } 00213 // @(/1/0/3/1/2/1/2/0) 00214 case PEDS_WAITING_SIG: { 00215 return Q_TRAN(&Pelican::carsYellow); 00216 } 00217 } 00218 return Q_SUPER(&Pelican::carsGreen); 00219 } 00220 // $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenPedWait) 00221 QState Pelican::carsGreenPedWait(Pelican *me, QEvent const *e) { 00222 switch (e->sig) { 00223 // @(/1/0/3/1/2/1/3) 00224 case Q_ENTRY_SIG: { 00225 BSP_showState("carsGreenPedWait"); 00226 return Q_HANDLED(); 00227 } 00228 // @(/1/0/3/1/2/1/3/0) 00229 case TIMEOUT_SIG: { 00230 return Q_TRAN(&Pelican::carsYellow); 00231 } 00232 } 00233 return Q_SUPER(&Pelican::carsGreen); 00234 } 00235 // $(components::Pelican::Statechart::operational::carsEnabled::carsYellow) .. 00236 QState Pelican::carsYellow(Pelican *me, QEvent const *e) { 00237 switch (e->sig) { 00238 // @(/1/0/3/1/2/2) 00239 case Q_ENTRY_SIG: { 00240 BSP_showState("carsYellow"); 00241 BSP_signalCars(CARS_YELLOW); 00242 me->m_timeout.postIn(me, CARS_YELLOW_TOUT); 00243 return Q_HANDLED(); 00244 } 00245 // @(/1/0/3/1/2/2) 00246 case Q_EXIT_SIG: { 00247 me->m_timeout.disarm(); 00248 return Q_HANDLED(); 00249 } 00250 // @(/1/0/3/1/2/2/0) 00251 case TIMEOUT_SIG: { 00252 return Q_TRAN(&Pelican::pedsEnabled); 00253 } 00254 } 00255 return Q_SUPER(&Pelican::carsEnabled); 00256 } 00257 // $(components::Pelican::Statechart::operational::pedsEnabled) .............. 00258 QState Pelican::pedsEnabled(Pelican *me, QEvent const *e) { 00259 switch (e->sig) { 00260 // @(/1/0/3/1/3) 00261 case Q_EXIT_SIG: { 00262 BSP_signalPeds(PEDS_DONT_WALK); 00263 return Q_HANDLED(); 00264 } 00265 // @(/1/0/3/1/3/0) 00266 case Q_INIT_SIG: { 00267 return Q_TRAN(&Pelican::pedsWalk); 00268 } 00269 } 00270 return Q_SUPER(&Pelican::operational); 00271 } 00272 // $(components::Pelican::Statechart::operational::pedsEnabled::pedsWalk) .... 00273 QState Pelican::pedsWalk(Pelican *me, QEvent const *e) { 00274 switch (e->sig) { 00275 // @(/1/0/3/1/3/1) 00276 case Q_ENTRY_SIG: { 00277 BSP_showState("pedsWalk"); 00278 BSP_signalPeds(PEDS_WALK); 00279 me->m_timeout.postIn(me, PEDS_WALK_TOUT); 00280 return Q_HANDLED(); 00281 } 00282 // @(/1/0/3/1/3/1) 00283 case Q_EXIT_SIG: { 00284 me->m_timeout.disarm(); 00285 return Q_HANDLED(); 00286 } 00287 // @(/1/0/3/1/3/1/0) 00288 case TIMEOUT_SIG: { 00289 return Q_TRAN(&Pelican::pedsFlash); 00290 } 00291 } 00292 return Q_SUPER(&Pelican::pedsEnabled); 00293 } 00294 // $(components::Pelican::Statechart::operational::pedsEnabled::pedsFlash) ... 00295 QState Pelican::pedsFlash(Pelican *me, QEvent const *e) { 00296 switch (e->sig) { 00297 // @(/1/0/3/1/3/2) 00298 case Q_ENTRY_SIG: { 00299 BSP_showState("pedsFlash"); 00300 me->m_timeout.postEvery(me, PEDS_FLASH_TOUT); 00301 me->m_flashCtr = PEDS_FLASH_NUM*2 + 1; 00302 return Q_HANDLED(); 00303 } 00304 // @(/1/0/3/1/3/2) 00305 case Q_EXIT_SIG: { 00306 me->m_timeout.disarm(); 00307 return Q_HANDLED(); 00308 } 00309 // @(/1/0/3/1/3/2/0) 00310 case TIMEOUT_SIG: { 00311 // @(/1/0/3/1/3/2/0/0) 00312 if (me->m_flashCtr != 0) { 00313 --me->m_flashCtr; 00314 // @(/1/0/3/1/3/2/0/0/0) 00315 if ((me->m_flashCtr & 1) == 0) { 00316 BSP_signalPeds(PEDS_DONT_WALK); 00317 return Q_HANDLED(); 00318 } 00319 // @(/1/0/3/1/3/2/0/0/1) 00320 else { 00321 BSP_signalPeds(PEDS_BLANK); 00322 return Q_HANDLED(); 00323 } 00324 } 00325 // @(/1/0/3/1/3/2/0/1) 00326 else { 00327 return Q_TRAN(&Pelican::carsEnabled); 00328 } 00329 } 00330 } 00331 return Q_SUPER(&Pelican::pedsEnabled); 00332 } 00333 // $(components::Pelican::Statechart::offline) ............................... 00334 QState Pelican::offline(Pelican *me, QEvent const *e) { 00335 switch (e->sig) { 00336 // @(/1/0/3/2) 00337 case Q_ENTRY_SIG: { 00338 BSP_showState("offline"); 00339 me->m_timeout.postEvery(me, OFF_FLASH_TOUT); 00340 me->m_flashCtr = 0; 00341 return Q_HANDLED(); 00342 } 00343 // @(/1/0/3/2) 00344 case Q_EXIT_SIG: { 00345 me->m_timeout.disarm(); 00346 return Q_HANDLED(); 00347 } 00348 // @(/1/0/3/2/0) 00349 case TIMEOUT_SIG: { 00350 me->m_flashCtr ^= 1; 00351 // @(/1/0/3/2/0/0) 00352 if ((me->m_flashCtr & 1) == 0) { 00353 BSP_signalCars(CARS_RED); 00354 BSP_signalPeds(PEDS_DONT_WALK); 00355 return Q_HANDLED(); 00356 } 00357 // @(/1/0/3/2/0/1) 00358 else { 00359 BSP_signalCars(CARS_BLANK); 00360 BSP_signalPeds(PEDS_BLANK); 00361 return Q_HANDLED(); 00362 } 00363 } 00364 // @(/1/0/3/2/1) 00365 case ON_SIG: { 00366 return Q_TRAN(&Pelican::operational); 00367 } 00368 } 00369 return Q_SUPER(&QHsm::top); 00370 } 00371 00372 // $(components::Sense1_N1) .................................................. 00373 // $(components::Sense1_N1::Sense1_N1) ....................................... 00374 Sense1_N1::Sense1_N1() : QActive((QStateHandler)&Sense1_N1::initial), m_timeout(TIMEOUT_SIG) { 00375 } 00376 // $(components::Sense1_N1::Statechart) ...................................... 00377 // @(/1/2/2/0) 00378 QState Sense1_N1::initial(Sense1_N1 *me, QEvent const *e) { 00379 me->subscribe(SENSE1_N1_UP_SIG); 00380 me->subscribe(SENSE1_N1_DOWN_SIG); 00381 me->subscribe(SENSE_N1_SIG); 00382 00383 QS_OBJ_DICTIONARY(&l_Sense1_N1); 00384 QS_OBJ_DICTIONARY(&l_Sense1_N1.m_timeout); 00385 00386 QS_FUN_DICTIONARY(&QHsm::top); 00387 QS_FUN_DICTIONARY(&Sense1_N1::initial); 00388 QS_FUN_DICTIONARY(&Sense1_N1::disconnected); 00389 QS_FUN_DICTIONARY(&Sense1_N1::connected); 00390 QS_FUN_DICTIONARY(&Sense1_N1::toggle_sense); 00391 QS_FUN_DICTIONARY(&Sense1_N1::detect_down); 00392 00393 QS_SIG_DICTIONARY(SENSE1_N1_UP_SIG, 0); // global signals 00394 QS_SIG_DICTIONARY(SENSE1_N1_DOWN_SIG,0); 00395 QS_SIG_DICTIONARY(SENSE_N1_SIG,0); 00396 00397 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Sense1_N1); // just for Sense1_N1 00398 return Q_TRAN(&Sense1_N1::disconnected); 00399 } 00400 // $(components::Sense1_N1::Statechart::disconnected) ........................ 00401 QState Sense1_N1::disconnected(Sense1_N1 *me, QEvent const *e) { 00402 switch (e->sig) { 00403 // @(/1/2/2/1) 00404 case Q_ENTRY_SIG: { 00405 BSP_signalSense(SENSE_1_DIS); 00406 return Q_HANDLED(); 00407 } 00408 // @(/1/2/2/1/0) 00409 case SENSE1_N1_UP_SIG: { 00410 return Q_TRAN(&Sense1_N1::connected); 00411 } 00412 } 00413 return Q_SUPER(&QHsm::top); 00414 } 00415 // $(components::Sense1_N1::Statechart::connected) ........................... 00416 QState Sense1_N1::connected(Sense1_N1 *me, QEvent const *e) { 00417 switch (e->sig) { 00418 // @(/1/2/2/2) 00419 case Q_ENTRY_SIG: { 00420 BSP_signalSense(SENSE_1_CON); 00421 return Q_HANDLED(); 00422 } 00423 // @(/1/2/2/2/0) 00424 case SENSE1_N1_DOWN_SIG: { 00425 return Q_TRAN(&Sense1_N1::disconnected); 00426 } 00427 // @(/1/2/2/2/1) 00428 case SENSE_N1_SIG: { 00429 return Q_TRAN(&Sense1_N1::toggle_sense); 00430 } 00431 } 00432 return Q_SUPER(&QHsm::top); 00433 } 00434 // $(components::Sense1_N1::Statechart::toggle_sense) ........................ 00435 QState Sense1_N1::toggle_sense(Sense1_N1 *me, QEvent const *e) { 00436 switch (e->sig) { 00437 // @(/1/2/2/3) 00438 case Q_ENTRY_SIG: { 00439 me->m_timeout.postIn(me, TOGGLE_TOUT); 00440 return Q_HANDLED(); 00441 } 00442 // @(/1/2/2/3) 00443 case Q_EXIT_SIG: { 00444 me->m_timeout.disarm(); 00445 return Q_HANDLED(); 00446 } 00447 // @(/1/2/2/3/0) 00448 case TIMEOUT_SIG: { 00449 return Q_TRAN(&Sense1_N1::connected); 00450 } 00451 // @(/1/2/2/3/1) 00452 case SENSE1_N1_DOWN_SIG: { 00453 return Q_TRAN(&Sense1_N1::detect_down); 00454 } 00455 } 00456 return Q_SUPER(&QHsm::top); 00457 } 00458 // $(components::Sense1_N1::Statechart::detect_down) ......................... 00459 QState Sense1_N1::detect_down(Sense1_N1 *me, QEvent const *e) { 00460 switch (e->sig) { 00461 // @(/1/2/2/4) 00462 case Q_ENTRY_SIG: { 00463 me->m_timeout.postIn(me, TOGGLE_TOUT); 00464 return Q_HANDLED(); 00465 } 00466 // @(/1/2/2/4) 00467 case Q_EXIT_SIG: { 00468 me->m_timeout.disarm(); 00469 return Q_HANDLED(); 00470 } 00471 // @(/1/2/2/4/0) 00472 case TIMEOUT_SIG: { 00473 return Q_TRAN(&Sense1_N1::disconnected); 00474 } 00475 // @(/1/2/2/4/1) 00476 case SENSE1_N1_UP_SIG: { 00477 return Q_TRAN(&Sense1_N1::connected); 00478 } 00479 } 00480 return Q_SUPER(&QHsm::top); 00481 } 00482 00483 // $(components::Poll) ....................................................... 00484 // $(components::Poll::Poll) ................................................. 00485 Poll::Poll() : QActive((QStateHandler)&Poll::initial), m_timeout(TIMEOUT_SIG) { 00486 } 00487 // $(components::Poll::Statechart) ........................................... 00488 // @(/1/1/2/0) 00489 QState Poll::initial(Poll *me, QEvent const *e) { 00490 QS_OBJ_DICTIONARY(&l_Poll); 00491 QS_OBJ_DICTIONARY(&l_Poll.m_timeout); 00492 00493 00494 QS_FUN_DICTIONARY(&QHsm::top); 00495 QS_FUN_DICTIONARY(&Poll::initial); 00496 QS_FUN_DICTIONARY(&Poll::poll); 00497 00498 00499 QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Poll); // just for Ped 00500 00501 me->m_timeout.postEvery(me, POLL_TOUT); 00502 00503 return Q_TRAN(&Poll::poll); 00504 } 00505 // $(components::Poll::Statechart::poll) ..................................... 00506 QState Poll::poll(Poll *me, QEvent const *e) { 00507 switch (e->sig) { 00508 // @(/1/1/2/1) 00509 case Q_EXIT_SIG: { 00510 BSP_chk_io(); 00511 return Q_HANDLED(); 00512 } 00513 // @(/1/1/2/1/0) 00514 case TIMEOUT_SIG: { 00515 return Q_TRAN(&Poll::poll); 00516 } 00517 } 00518 return Q_SUPER(&QHsm::top); 00519 } 00520
Generated on Tue Aug 2 2022 11:35:56 by
1.7.2