Deleted.
ped.cpp@2:27716f570c3d, 2011-09-26 (annotated)
- Committer:
- QL
- Date:
- Mon Sep 26 02:20:21 2011 +0000
- Revision:
- 2:27716f570c3d
- Parent:
- 1:3fe0c7f27d97
Updated for QP 4.2.04 and for QM 2.0.00
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
QL | 2:27716f570c3d | 1 | ////////////////////////////////////////////////////////////////////////////// |
QL | 2:27716f570c3d | 2 | // Model: pelican.qm |
QL | 2:27716f570c3d | 3 | // File: ./ped.cpp |
QL | 2:27716f570c3d | 4 | // |
QL | 2:27716f570c3d | 5 | // This file has been generated automatically by QP Modeler (QM). |
QL | 2:27716f570c3d | 6 | // DO NOT EDIT THIS FILE MANUALLY. |
QL | 2:27716f570c3d | 7 | // |
QL | 2:27716f570c3d | 8 | // Please visit www.state-machine.com/qm for more information. |
QL | 2:27716f570c3d | 9 | ////////////////////////////////////////////////////////////////////////////// |
QL | 2:27716f570c3d | 10 | #include "qp_port.h" |
QL | 2:27716f570c3d | 11 | #include "bsp.h" |
QL | 2:27716f570c3d | 12 | #include "pelican.h" |
QL | 2:27716f570c3d | 13 | |
QL | 2:27716f570c3d | 14 | Q_DEFINE_THIS_FILE |
QL | 2:27716f570c3d | 15 | |
QL | 2:27716f570c3d | 16 | enum PedTimeouts { // various timeouts in ticks |
QL | 2:27716f570c3d | 17 | N_ATTEMPTS = 10, // number of PED_WAITING attempts |
QL | 2:27716f570c3d | 18 | WAIT_TOUT = BSP_TICKS_PER_SEC * 3, // wait between posting PED_WAITING |
QL | 2:27716f570c3d | 19 | OFF_TOUT = BSP_TICKS_PER_SEC * 8 // wait time after posting OFF_SIG |
QL | 2:27716f570c3d | 20 | }; |
QL | 2:27716f570c3d | 21 | |
QL | 2:27716f570c3d | 22 | // Ped class ----------------------------------------------------------------- |
QL | 2:27716f570c3d | 23 | // $(components::Ped) ........................................................ |
QL | 2:27716f570c3d | 24 | /// Ped (Pedestrian) active object. |
QL | 2:27716f570c3d | 25 | /// |
QL | 2:27716f570c3d | 26 | /// NOTE: The mbed borad does not provide a push button (at least not out of the box) to provide the PEDS_WAITING event to the system. Instead, to be able to run this example on a bare-bones mbed board, the Pedestrian is *simulated* as the Ped active object. |
QL | 2:27716f570c3d | 27 | class Ped : public QActive { |
QL | 2:27716f570c3d | 28 | private: |
QL | 2:27716f570c3d | 29 | QTimeEvt m_timeout; |
QL | 2:27716f570c3d | 30 | uint8_t m_retryCtr; |
QL | 2:27716f570c3d | 31 | |
QL | 2:27716f570c3d | 32 | public: |
QL | 2:27716f570c3d | 33 | Ped(); |
QL | 2:27716f570c3d | 34 | |
QL | 2:27716f570c3d | 35 | protected: |
QL | 2:27716f570c3d | 36 | static QState initial(Ped *me, QEvent const *e); |
QL | 2:27716f570c3d | 37 | static QState wait(Ped *me, QEvent const *e); |
QL | 2:27716f570c3d | 38 | static QState off(Ped *me, QEvent const *e); |
QL | 2:27716f570c3d | 39 | }; |
QL | 2:27716f570c3d | 40 | |
QL | 2:27716f570c3d | 41 | // Local objects ------------------------------------------------------------- |
QL | 2:27716f570c3d | 42 | static Ped l_Ped; // the single instance of Ped active object |
QL | 2:27716f570c3d | 43 | |
QL | 2:27716f570c3d | 44 | // Global objects ------------------------------------------------------------ |
QL | 2:27716f570c3d | 45 | QActive * const AO_Ped = &l_Ped; // the opaque pointer |
QL | 2:27716f570c3d | 46 | |
QL | 2:27716f570c3d | 47 | // Ped class definition ------------------------------------------------------ |
QL | 2:27716f570c3d | 48 | // $(components::Ped) ........................................................ |
QL | 2:27716f570c3d | 49 | // $(components::Ped::Ped) ................................................... |
QL | 2:27716f570c3d | 50 | Ped::Ped() : QActive((QStateHandler)&Ped::initial), m_timeout(TIMEOUT_SIG) { |
QL | 2:27716f570c3d | 51 | } |
QL | 2:27716f570c3d | 52 | // $(components::Ped::Statechart) ............................................ |
QL | 2:27716f570c3d | 53 | // @(/1/1/3/0) |
QL | 2:27716f570c3d | 54 | QState Ped::initial(Ped *me, QEvent const *e) { |
QL | 2:27716f570c3d | 55 | QS_OBJ_DICTIONARY(&l_Ped); |
QL | 2:27716f570c3d | 56 | QS_OBJ_DICTIONARY(&l_Ped.m_timeout); |
QL | 2:27716f570c3d | 57 | |
QL | 2:27716f570c3d | 58 | QS_FUN_DICTIONARY(&Ped::initial); |
QL | 2:27716f570c3d | 59 | QS_FUN_DICTIONARY(&Ped::wait); |
QL | 2:27716f570c3d | 60 | QS_FUN_DICTIONARY(&Ped::off); |
QL | 2:27716f570c3d | 61 | |
QL | 2:27716f570c3d | 62 | QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Ped); // just for Ped |
QL | 2:27716f570c3d | 63 | return Q_TRAN(&Ped::wait); |
QL | 2:27716f570c3d | 64 | } |
QL | 2:27716f570c3d | 65 | // $(components::Ped::Statechart::wait) ...................................... |
QL | 2:27716f570c3d | 66 | QState Ped::wait(Ped *me, QEvent const *e) { |
QL | 2:27716f570c3d | 67 | switch (e->sig) { |
QL | 2:27716f570c3d | 68 | // @(/1/1/3/1) |
QL | 2:27716f570c3d | 69 | case Q_ENTRY_SIG: { |
QL | 2:27716f570c3d | 70 | me->m_retryCtr = N_ATTEMPTS; |
QL | 2:27716f570c3d | 71 | me->m_timeout.postEvery(me, WAIT_TOUT); |
QL | 2:27716f570c3d | 72 | return Q_HANDLED(); |
QL | 2:27716f570c3d | 73 | } |
QL | 2:27716f570c3d | 74 | // @(/1/1/3/1) |
QL | 2:27716f570c3d | 75 | case Q_EXIT_SIG: { |
QL | 2:27716f570c3d | 76 | me->m_timeout.disarm(); |
QL | 2:27716f570c3d | 77 | return Q_HANDLED(); |
QL | 2:27716f570c3d | 78 | } |
QL | 2:27716f570c3d | 79 | // @(/1/1/3/1/0) |
QL | 2:27716f570c3d | 80 | case TIMEOUT_SIG: { |
QL | 2:27716f570c3d | 81 | --me->m_retryCtr; |
QL | 2:27716f570c3d | 82 | // @(/1/1/3/1/0/1) |
QL | 2:27716f570c3d | 83 | if (me->m_retryCtr != 0) { |
QL | 2:27716f570c3d | 84 | QF::PUBLISH(Q_NEW(QEvent, PEDS_WAITING_SIG), me); |
QL | 2:27716f570c3d | 85 | return Q_HANDLED(); |
QL | 2:27716f570c3d | 86 | } |
QL | 2:27716f570c3d | 87 | // @(/1/1/3/1/0/0) |
QL | 2:27716f570c3d | 88 | else { |
QL | 2:27716f570c3d | 89 | return Q_TRAN(&Ped::off); |
QL | 2:27716f570c3d | 90 | } |
QL | 2:27716f570c3d | 91 | } |
QL | 2:27716f570c3d | 92 | } |
QL | 2:27716f570c3d | 93 | return Q_SUPER(&QHsm::top); |
QL | 2:27716f570c3d | 94 | } |
QL | 2:27716f570c3d | 95 | // $(components::Ped::Statechart::off) ....................................... |
QL | 2:27716f570c3d | 96 | QState Ped::off(Ped *me, QEvent const *e) { |
QL | 2:27716f570c3d | 97 | switch (e->sig) { |
QL | 2:27716f570c3d | 98 | // @(/1/1/3/2) |
QL | 2:27716f570c3d | 99 | case Q_ENTRY_SIG: { |
QL | 2:27716f570c3d | 100 | me->m_timeout.postEvery(me, OFF_TOUT); |
QL | 2:27716f570c3d | 101 | AO_Pelican->POST(Q_NEW(QEvent, OFF_SIG), me); |
QL | 2:27716f570c3d | 102 | return Q_HANDLED(); |
QL | 2:27716f570c3d | 103 | } |
QL | 2:27716f570c3d | 104 | // @(/1/1/3/2) |
QL | 2:27716f570c3d | 105 | case Q_EXIT_SIG: { |
QL | 2:27716f570c3d | 106 | me->m_timeout.disarm(); |
QL | 2:27716f570c3d | 107 | return Q_HANDLED(); |
QL | 2:27716f570c3d | 108 | } |
QL | 2:27716f570c3d | 109 | // @(/1/1/3/2/0) |
QL | 2:27716f570c3d | 110 | case TIMEOUT_SIG: { |
QL | 2:27716f570c3d | 111 | AO_Pelican->POST(Q_NEW(QEvent, ON_SIG), me); |
QL | 2:27716f570c3d | 112 | return Q_TRAN(&Ped::wait); |
QL | 2:27716f570c3d | 113 | } |
QL | 2:27716f570c3d | 114 | } |
QL | 2:27716f570c3d | 115 | return Q_SUPER(&QHsm::top); |
QL | 2:27716f570c3d | 116 | } |