Simple "Blinky" example for the QP active object framework
Fork of qp_dpp by
blinky.cpp@7:80bbc7a6c78c, 2014-10-12 (annotated)
- Committer:
- QL
- Date:
- Sun Oct 12 18:56:53 2014 +0000
- Revision:
- 7:80bbc7a6c78c
Simple "Blinky" example for the QP active object framework
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
QL | 7:80bbc7a6c78c | 1 | //**************************************************************************** |
QL | 7:80bbc7a6c78c | 2 | // Model: blinky.qm |
QL | 7:80bbc7a6c78c | 3 | // File: ./blinky.cpp |
QL | 7:80bbc7a6c78c | 4 | // |
QL | 7:80bbc7a6c78c | 5 | // This code has been generated by QM tool (see state-machine.com/qm). |
QL | 7:80bbc7a6c78c | 6 | // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost. |
QL | 7:80bbc7a6c78c | 7 | // |
QL | 7:80bbc7a6c78c | 8 | // This program is open source software: you can redistribute it and/or |
QL | 7:80bbc7a6c78c | 9 | // modify it under the terms of the GNU General Public License as published |
QL | 7:80bbc7a6c78c | 10 | // by the Free Software Foundation. |
QL | 7:80bbc7a6c78c | 11 | // |
QL | 7:80bbc7a6c78c | 12 | // This program is distributed in the hope that it will be useful, but |
QL | 7:80bbc7a6c78c | 13 | // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
QL | 7:80bbc7a6c78c | 14 | // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
QL | 7:80bbc7a6c78c | 15 | // for more details. |
QL | 7:80bbc7a6c78c | 16 | //**************************************************************************** |
QL | 7:80bbc7a6c78c | 17 | //${.::blinky.cpp} ........................................................... |
QL | 7:80bbc7a6c78c | 18 | #include "qp_port.h" |
QL | 7:80bbc7a6c78c | 19 | #include "blinky.h" |
QL | 7:80bbc7a6c78c | 20 | #include "bsp.h" |
QL | 7:80bbc7a6c78c | 21 | |
QL | 7:80bbc7a6c78c | 22 | Q_DEFINE_THIS_FILE |
QL | 7:80bbc7a6c78c | 23 | |
QL | 7:80bbc7a6c78c | 24 | |
QL | 7:80bbc7a6c78c | 25 | |
QL | 7:80bbc7a6c78c | 26 | //${AOs::BlinkClass} ......................................................... |
QL | 7:80bbc7a6c78c | 27 | class BlinkClass : public QP::QActive { |
QL | 7:80bbc7a6c78c | 28 | private: |
QL | 7:80bbc7a6c78c | 29 | QP::QTimeEvt m_timeEvt; |
QL | 7:80bbc7a6c78c | 30 | |
QL | 7:80bbc7a6c78c | 31 | public: |
QL | 7:80bbc7a6c78c | 32 | BlinkClass(); |
QL | 7:80bbc7a6c78c | 33 | |
QL | 7:80bbc7a6c78c | 34 | protected: |
QL | 7:80bbc7a6c78c | 35 | static QP::QState initial(BlinkClass * const me, QP::QEvt const * const e); |
QL | 7:80bbc7a6c78c | 36 | static QP::QState led_on(BlinkClass * const me, QP::QEvt const * const e); |
QL | 7:80bbc7a6c78c | 37 | static QP::QState led_off(BlinkClass * const me, QP::QEvt const * const e); |
QL | 7:80bbc7a6c78c | 38 | }; |
QL | 7:80bbc7a6c78c | 39 | |
QL | 7:80bbc7a6c78c | 40 | |
QL | 7:80bbc7a6c78c | 41 | |
QL | 7:80bbc7a6c78c | 42 | |
QL | 7:80bbc7a6c78c | 43 | |
QL | 7:80bbc7a6c78c | 44 | static BlinkClass l_blinky; |
QL | 7:80bbc7a6c78c | 45 | |
QL | 7:80bbc7a6c78c | 46 | QP::QActive * const AO_Blinky = &l_blinky; |
QL | 7:80bbc7a6c78c | 47 | |
QL | 7:80bbc7a6c78c | 48 | |
QL | 7:80bbc7a6c78c | 49 | |
QL | 7:80bbc7a6c78c | 50 | |
QL | 7:80bbc7a6c78c | 51 | //${AOs::BlinkClass} ......................................................... |
QL | 7:80bbc7a6c78c | 52 | //${AOs::BlinkClass::BlinkClass} ............................................. |
QL | 7:80bbc7a6c78c | 53 | BlinkClass::BlinkClass() |
QL | 7:80bbc7a6c78c | 54 | : QActive(Q_STATE_CAST(&BlinkClass::initial)) , |
QL | 7:80bbc7a6c78c | 55 | m_timeEvt(TIMEOUT_SIG){ |
QL | 7:80bbc7a6c78c | 56 | } |
QL | 7:80bbc7a6c78c | 57 | |
QL | 7:80bbc7a6c78c | 58 | //${AOs::BlinkClass::SM} ..................................................... |
QL | 7:80bbc7a6c78c | 59 | QP::QState BlinkClass::initial(BlinkClass * const me, QP::QEvt const * const e) { |
QL | 7:80bbc7a6c78c | 60 | // ${AOs::BlinkClass::SM::initial} |
QL | 7:80bbc7a6c78c | 61 | // Make sure it only happens once |
QL | 7:80bbc7a6c78c | 62 | static bool registered = false; |
QL | 7:80bbc7a6c78c | 63 | |
QL | 7:80bbc7a6c78c | 64 | // Stop compiler warning |
QL | 7:80bbc7a6c78c | 65 | (void)e; |
QL | 7:80bbc7a6c78c | 66 | |
QL | 7:80bbc7a6c78c | 67 | // Add objects and signals to the kernal dictionary for QSPY |
QL | 7:80bbc7a6c78c | 68 | if (!registered) { |
QL | 7:80bbc7a6c78c | 69 | registered = true; |
QL | 7:80bbc7a6c78c | 70 | |
QL | 7:80bbc7a6c78c | 71 | QS_OBJ_DICTIONARY(&l_blinky); |
QL | 7:80bbc7a6c78c | 72 | QS_OBJ_DICTIONARY(&l_blinky.m_timeEvt); |
QL | 7:80bbc7a6c78c | 73 | |
QL | 7:80bbc7a6c78c | 74 | QS_FUN_DICTIONARY(&BlinkClass::initial); |
QL | 7:80bbc7a6c78c | 75 | QS_FUN_DICTIONARY(&BlinkClass::led_on); |
QL | 7:80bbc7a6c78c | 76 | QS_FUN_DICTIONARY(&BlinkClass::led_off); |
QL | 7:80bbc7a6c78c | 77 | } |
QL | 7:80bbc7a6c78c | 78 | |
QL | 7:80bbc7a6c78c | 79 | QS_SIG_DICTIONARY(TIMEOUT_SIG, me); |
QL | 7:80bbc7a6c78c | 80 | return Q_TRAN(&led_on); |
QL | 7:80bbc7a6c78c | 81 | } |
QL | 7:80bbc7a6c78c | 82 | //${AOs::BlinkClass::SM::led_on} ............................................. |
QL | 7:80bbc7a6c78c | 83 | QP::QState BlinkClass::led_on(BlinkClass * const me, QP::QEvt const * const e) { |
QL | 7:80bbc7a6c78c | 84 | QP::QState status_; |
QL | 7:80bbc7a6c78c | 85 | switch (e->sig) { |
QL | 7:80bbc7a6c78c | 86 | // ${AOs::BlinkClass::SM::led_on} |
QL | 7:80bbc7a6c78c | 87 | case Q_ENTRY_SIG: { |
QL | 7:80bbc7a6c78c | 88 | BSP_ledOn(); |
QL | 7:80bbc7a6c78c | 89 | me->m_timeEvt.postEvery(me, BSP_TICKS_PER_SEC / 2); |
QL | 7:80bbc7a6c78c | 90 | status_ = Q_HANDLED(); |
QL | 7:80bbc7a6c78c | 91 | break; |
QL | 7:80bbc7a6c78c | 92 | } |
QL | 7:80bbc7a6c78c | 93 | // ${AOs::BlinkClass::SM::led_on} |
QL | 7:80bbc7a6c78c | 94 | case Q_EXIT_SIG: { |
QL | 7:80bbc7a6c78c | 95 | (void)me->m_timeEvt.disarm(); |
QL | 7:80bbc7a6c78c | 96 | status_ = Q_HANDLED(); |
QL | 7:80bbc7a6c78c | 97 | break; |
QL | 7:80bbc7a6c78c | 98 | } |
QL | 7:80bbc7a6c78c | 99 | // ${AOs::BlinkClass::SM::led_on::TIMEOUT} |
QL | 7:80bbc7a6c78c | 100 | case TIMEOUT_SIG: { |
QL | 7:80bbc7a6c78c | 101 | status_ = Q_TRAN(&led_off); |
QL | 7:80bbc7a6c78c | 102 | break; |
QL | 7:80bbc7a6c78c | 103 | } |
QL | 7:80bbc7a6c78c | 104 | default: { |
QL | 7:80bbc7a6c78c | 105 | status_ = Q_SUPER(&QP::QHsm::top); |
QL | 7:80bbc7a6c78c | 106 | break; |
QL | 7:80bbc7a6c78c | 107 | } |
QL | 7:80bbc7a6c78c | 108 | } |
QL | 7:80bbc7a6c78c | 109 | return status_; |
QL | 7:80bbc7a6c78c | 110 | } |
QL | 7:80bbc7a6c78c | 111 | //${AOs::BlinkClass::SM::led_off} ............................................ |
QL | 7:80bbc7a6c78c | 112 | QP::QState BlinkClass::led_off(BlinkClass * const me, QP::QEvt const * const e) { |
QL | 7:80bbc7a6c78c | 113 | QP::QState status_; |
QL | 7:80bbc7a6c78c | 114 | switch (e->sig) { |
QL | 7:80bbc7a6c78c | 115 | // ${AOs::BlinkClass::SM::led_off} |
QL | 7:80bbc7a6c78c | 116 | case Q_ENTRY_SIG: { |
QL | 7:80bbc7a6c78c | 117 | BSP_ledOff(); |
QL | 7:80bbc7a6c78c | 118 | me->m_timeEvt.postEvery(me, BSP_TICKS_PER_SEC / 2); |
QL | 7:80bbc7a6c78c | 119 | status_ = Q_HANDLED(); |
QL | 7:80bbc7a6c78c | 120 | break; |
QL | 7:80bbc7a6c78c | 121 | } |
QL | 7:80bbc7a6c78c | 122 | // ${AOs::BlinkClass::SM::led_off} |
QL | 7:80bbc7a6c78c | 123 | case Q_EXIT_SIG: { |
QL | 7:80bbc7a6c78c | 124 | (void)me->m_timeEvt.disarm(); |
QL | 7:80bbc7a6c78c | 125 | status_ = Q_HANDLED(); |
QL | 7:80bbc7a6c78c | 126 | break; |
QL | 7:80bbc7a6c78c | 127 | } |
QL | 7:80bbc7a6c78c | 128 | // ${AOs::BlinkClass::SM::led_off::TIMEOUT} |
QL | 7:80bbc7a6c78c | 129 | case TIMEOUT_SIG: { |
QL | 7:80bbc7a6c78c | 130 | status_ = Q_TRAN(&led_on); |
QL | 7:80bbc7a6c78c | 131 | break; |
QL | 7:80bbc7a6c78c | 132 | } |
QL | 7:80bbc7a6c78c | 133 | default: { |
QL | 7:80bbc7a6c78c | 134 | status_ = Q_SUPER(&QP::QHsm::top); |
QL | 7:80bbc7a6c78c | 135 | break; |
QL | 7:80bbc7a6c78c | 136 | } |
QL | 7:80bbc7a6c78c | 137 | } |
QL | 7:80bbc7a6c78c | 138 | return status_; |
QL | 7:80bbc7a6c78c | 139 | } |