Simple "Blinky" example for the QP active object framework

Dependencies:   mbed qp

Fork of qp_dpp by Quantum Leaps

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?

UserRevisionLine numberNew 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 }