Deleted.
Diff: pelican.cpp
- Revision:
- 4:64ecf7d8ebc4
- Parent:
- 3:4df7120f6f33
diff -r 4df7120f6f33 -r 64ecf7d8ebc4 pelican.cpp --- a/pelican.cpp Mon Sep 26 03:32:15 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// Model: pelican.qm -// File: ./pelican.cpp -// -// This file has been generated automatically by QP Modeler (QM). -// DO NOT EDIT THIS FILE MANUALLY. -// -// Please visit www.state-machine.com/qm for more information. -////////////////////////////////////////////////////////////////////////////// -#include "qp_port.h" -#include "bsp.h" -#include "pelican.h" - -Q_DEFINE_THIS_FILE - -enum PelicanTimeouts { // various timeouts in ticks - CARS_GREEN_MIN_TOUT = BSP_TICKS_PER_SEC * 8, // min green for cars - CARS_YELLOW_TOUT = BSP_TICKS_PER_SEC * 3, // yellow for cars - PEDS_WALK_TOUT = BSP_TICKS_PER_SEC * 3, // walking time for peds - PEDS_FLASH_TOUT = BSP_TICKS_PER_SEC / 5, // flashing timeout for peds - PEDS_FLASH_NUM = 5*2, // number of flashes for peds - OFF_FLASH_TOUT = BSP_TICKS_PER_SEC / 2 // flashing timeout when off -}; - -// Pelican class ------------------------------------------------------------- -// $(components::Pelican) .................................................... -/// PEdestrian LIght CONtrolled (PELICAN) crossing -class Pelican : public QActive { -private: - QTimeEvt m_timeout; - uint8_t m_flashCtr; - -public: - /// constructor - Pelican() : QActive((QStateHandler)&Pelican::initial), m_timeout(TIMEOUT_SIG) { - } - -protected: - static QState initial(Pelican *me, QEvent const *e); - static QState operational(Pelican *me, QEvent const *e); - static QState carsEnabled(Pelican *me, QEvent const *e); - static QState carsGreen(Pelican *me, QEvent const *e); - static QState carsGreenNoPed(Pelican *me, QEvent const *e); - static QState carsGreenInt(Pelican *me, QEvent const *e); - static QState carsGreenPedWait(Pelican *me, QEvent const *e); - static QState carsYellow(Pelican *me, QEvent const *e); - static QState pedsEnabled(Pelican *me, QEvent const *e); - static QState pedsWalk(Pelican *me, QEvent const *e); - static QState pedsFlash(Pelican *me, QEvent const *e); - static QState offline(Pelican *me, QEvent const *e); -}; - -// Local objects ------------------------------------------------------------- -static Pelican l_Pelican; // the single instance of Pelican active object - -// Global objects ------------------------------------------------------------ -QActive * const AO_Pelican = &l_Pelican; // the opaque pointer - -// Pelican class definition -------------------------------------------------- -// $(components::Pelican) .................................................... - -// $(components::Pelican::Statechart) ........................................ -// @(/1/0/3/0) -QState Pelican::initial(Pelican *me, QEvent const *e) { - me->subscribe(PEDS_WAITING_SIG); - - QS_OBJ_DICTIONARY(&l_Pelican); - QS_OBJ_DICTIONARY(&l_Pelican.m_timeout); - - QS_FUN_DICTIONARY(&QHsm::top); - QS_FUN_DICTIONARY(&Pelican::initial); - QS_FUN_DICTIONARY(&Pelican::offline); - QS_FUN_DICTIONARY(&Pelican::operational); - QS_FUN_DICTIONARY(&Pelican::carsEnabled); - QS_FUN_DICTIONARY(&Pelican::carsGreen); - QS_FUN_DICTIONARY(&Pelican::carsGreenNoPed); - QS_FUN_DICTIONARY(&Pelican::carsGreenPedWait); - QS_FUN_DICTIONARY(&Pelican::carsGreenInt); - QS_FUN_DICTIONARY(&Pelican::carsYellow); - QS_FUN_DICTIONARY(&Pelican::pedsEnabled); - QS_FUN_DICTIONARY(&Pelican::pedsWalk); - QS_FUN_DICTIONARY(&Pelican::pedsFlash); - - QS_SIG_DICTIONARY(PEDS_WAITING_SIG, 0); // global signals - QS_SIG_DICTIONARY(ON_SIG, 0); - QS_SIG_DICTIONARY(OFF_SIG, 0); - - QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Pelican); // just for Pelican - return Q_TRAN(&Pelican::operational); -} -// $(components::Pelican::Statechart::operational) ........................... -QState Pelican::operational(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1) - case Q_ENTRY_SIG: { - BSP_signalCars(CARS_RED); - BSP_signalPeds(PEDS_DONT_WALK); - return Q_HANDLED(); - } - // @(/1/0/3/1/0) - case Q_INIT_SIG: { - return Q_TRAN(&Pelican::carsEnabled); - } - // @(/1/0/3/1/1) - case OFF_SIG: { - return Q_TRAN(&Pelican::offline); - } - } - return Q_SUPER(&QHsm::top); -} -// $(components::Pelican::Statechart::operational::carsEnabled) .............. -QState Pelican::carsEnabled(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2) - case Q_EXIT_SIG: { - BSP_signalCars(CARS_RED); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/0) - case Q_INIT_SIG: { - return Q_TRAN(&Pelican::carsGreen); - } - } - return Q_SUPER(&Pelican::operational); -} -// $(components::Pelican::Statechart::operational::carsEnabled::carsGreen) ... -QState Pelican::carsGreen(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2/1) - case Q_ENTRY_SIG: { - BSP_signalCars(CARS_GREEN); - me->m_timeout.postIn(me, CARS_GREEN_MIN_TOUT); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/1) - case Q_EXIT_SIG: { - me->m_timeout.disarm(); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/1/0) - case Q_INIT_SIG: { - return Q_TRAN(&Pelican::carsGreenNoPed); - } - } - return Q_SUPER(&Pelican::carsEnabled); -} -// $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenNoPed) -QState Pelican::carsGreenNoPed(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2/1/1) - case Q_ENTRY_SIG: { - BSP_showState("carsGreenNoPed"); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/1/1/0) - case PEDS_WAITING_SIG: { - return Q_TRAN(&Pelican::carsGreenPedWait); - } - // @(/1/0/3/1/2/1/1/1) - case TIMEOUT_SIG: { - return Q_TRAN(&Pelican::carsGreenInt); - } - } - return Q_SUPER(&Pelican::carsGreen); -} -// $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenInt) -QState Pelican::carsGreenInt(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2/1/2) - case Q_ENTRY_SIG: { - BSP_showState("carsGreenInt"); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/1/2/0) - case PEDS_WAITING_SIG: { - return Q_TRAN(&Pelican::carsYellow); - } - } - return Q_SUPER(&Pelican::carsGreen); -} -// $(components::Pelican::Statechart::operational::carsEnabled::carsGreen::carsGreenPedWait) -QState Pelican::carsGreenPedWait(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2/1/3) - case Q_ENTRY_SIG: { - BSP_showState("carsGreenPedWait"); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/1/3/0) - case TIMEOUT_SIG: { - return Q_TRAN(&Pelican::carsYellow); - } - } - return Q_SUPER(&Pelican::carsGreen); -} -// $(components::Pelican::Statechart::operational::carsEnabled::carsYellow) .. -QState Pelican::carsYellow(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/2/2) - case Q_ENTRY_SIG: { - BSP_showState("carsYellow"); - BSP_signalCars(CARS_YELLOW); - me->m_timeout.postIn(me, CARS_YELLOW_TOUT); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/2) - case Q_EXIT_SIG: { - me->m_timeout.disarm(); - return Q_HANDLED(); - } - // @(/1/0/3/1/2/2/0) - case TIMEOUT_SIG: { - return Q_TRAN(&Pelican::pedsEnabled); - } - } - return Q_SUPER(&Pelican::carsEnabled); -} -// $(components::Pelican::Statechart::operational::pedsEnabled) .............. -QState Pelican::pedsEnabled(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/3) - case Q_EXIT_SIG: { - BSP_signalPeds(PEDS_DONT_WALK); - return Q_HANDLED(); - } - // @(/1/0/3/1/3/0) - case Q_INIT_SIG: { - return Q_TRAN(&Pelican::pedsWalk); - } - } - return Q_SUPER(&Pelican::operational); -} -// $(components::Pelican::Statechart::operational::pedsEnabled::pedsWalk) .... -QState Pelican::pedsWalk(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/3/1) - case Q_ENTRY_SIG: { - BSP_showState("pedsWalk"); - BSP_signalPeds(PEDS_WALK); - me->m_timeout.postIn(me, PEDS_WALK_TOUT); - return Q_HANDLED(); - } - // @(/1/0/3/1/3/1) - case Q_EXIT_SIG: { - me->m_timeout.disarm(); - return Q_HANDLED(); - } - // @(/1/0/3/1/3/1/0) - case TIMEOUT_SIG: { - return Q_TRAN(&Pelican::pedsFlash); - } - } - return Q_SUPER(&Pelican::pedsEnabled); -} -// $(components::Pelican::Statechart::operational::pedsEnabled::pedsFlash) ... -QState Pelican::pedsFlash(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/1/3/2) - case Q_ENTRY_SIG: { - BSP_showState("pedsFlash"); - me->m_timeout.postEvery(me, PEDS_FLASH_TOUT); - me->m_flashCtr = PEDS_FLASH_NUM*2 + 1; - return Q_HANDLED(); - } - // @(/1/0/3/1/3/2) - case Q_EXIT_SIG: { - me->m_timeout.disarm(); - return Q_HANDLED(); - } - // @(/1/0/3/1/3/2/0) - case TIMEOUT_SIG: { - // @(/1/0/3/1/3/2/0/0) - if (me->m_flashCtr != 0) { - --me->m_flashCtr; - // @(/1/0/3/1/3/2/0/0/0) - if ((me->m_flashCtr & 1) == 0) { - BSP_signalPeds(PEDS_DONT_WALK); - return Q_HANDLED(); - } - // @(/1/0/3/1/3/2/0/0/1) - else { - BSP_signalPeds(PEDS_BLANK); - return Q_HANDLED(); - } - } - // @(/1/0/3/1/3/2/0/1) - else { - return Q_TRAN(&Pelican::carsEnabled); - } - } - } - return Q_SUPER(&Pelican::pedsEnabled); -} -// $(components::Pelican::Statechart::offline) ............................... -QState Pelican::offline(Pelican *me, QEvent const *e) { - switch (e->sig) { - // @(/1/0/3/2) - case Q_ENTRY_SIG: { - BSP_showState("offline"); - me->m_timeout.postEvery(me, OFF_FLASH_TOUT); - me->m_flashCtr = 0; - return Q_HANDLED(); - } - // @(/1/0/3/2) - case Q_EXIT_SIG: { - me->m_timeout.disarm(); - return Q_HANDLED(); - } - // @(/1/0/3/2/0) - case TIMEOUT_SIG: { - me->m_flashCtr ^= 1; - // @(/1/0/3/2/0/0) - if ((me->m_flashCtr & 1) == 0) { - BSP_signalCars(CARS_RED); - BSP_signalPeds(PEDS_DONT_WALK); - return Q_HANDLED(); - } - // @(/1/0/3/2/0/1) - else { - BSP_signalCars(CARS_BLANK); - BSP_signalPeds(PEDS_BLANK); - return Q_HANDLED(); - } - } - // @(/1/0/3/2/1) - case ON_SIG: { - return Q_TRAN(&Pelican::operational); - } - } - return Q_SUPER(&QHsm::top); -} -