Simple "Blinky" example for the QP active object framework
Fork of qp_dpp by
blinky.cpp
- Committer:
- QL
- Date:
- 2014-10-12
- Revision:
- 7:80bbc7a6c78c
File content as of revision 7:80bbc7a6c78c:
//**************************************************************************** // Model: blinky.qm // File: ./blinky.cpp // // This code has been generated by QM tool (see state-machine.com/qm). // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost. // // This program is open source software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License // for more details. //**************************************************************************** //${.::blinky.cpp} ........................................................... #include "qp_port.h" #include "blinky.h" #include "bsp.h" Q_DEFINE_THIS_FILE //${AOs::BlinkClass} ......................................................... class BlinkClass : public QP::QActive { private: QP::QTimeEvt m_timeEvt; public: BlinkClass(); protected: static QP::QState initial(BlinkClass * const me, QP::QEvt const * const e); static QP::QState led_on(BlinkClass * const me, QP::QEvt const * const e); static QP::QState led_off(BlinkClass * const me, QP::QEvt const * const e); }; static BlinkClass l_blinky; QP::QActive * const AO_Blinky = &l_blinky; //${AOs::BlinkClass} ......................................................... //${AOs::BlinkClass::BlinkClass} ............................................. BlinkClass::BlinkClass() : QActive(Q_STATE_CAST(&BlinkClass::initial)) , m_timeEvt(TIMEOUT_SIG){ } //${AOs::BlinkClass::SM} ..................................................... QP::QState BlinkClass::initial(BlinkClass * const me, QP::QEvt const * const e) { // ${AOs::BlinkClass::SM::initial} // Make sure it only happens once static bool registered = false; // Stop compiler warning (void)e; // Add objects and signals to the kernal dictionary for QSPY if (!registered) { registered = true; QS_OBJ_DICTIONARY(&l_blinky); QS_OBJ_DICTIONARY(&l_blinky.m_timeEvt); QS_FUN_DICTIONARY(&BlinkClass::initial); QS_FUN_DICTIONARY(&BlinkClass::led_on); QS_FUN_DICTIONARY(&BlinkClass::led_off); } QS_SIG_DICTIONARY(TIMEOUT_SIG, me); return Q_TRAN(&led_on); } //${AOs::BlinkClass::SM::led_on} ............................................. QP::QState BlinkClass::led_on(BlinkClass * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // ${AOs::BlinkClass::SM::led_on} case Q_ENTRY_SIG: { BSP_ledOn(); me->m_timeEvt.postEvery(me, BSP_TICKS_PER_SEC / 2); status_ = Q_HANDLED(); break; } // ${AOs::BlinkClass::SM::led_on} case Q_EXIT_SIG: { (void)me->m_timeEvt.disarm(); status_ = Q_HANDLED(); break; } // ${AOs::BlinkClass::SM::led_on::TIMEOUT} case TIMEOUT_SIG: { status_ = Q_TRAN(&led_off); break; } default: { status_ = Q_SUPER(&QP::QHsm::top); break; } } return status_; } //${AOs::BlinkClass::SM::led_off} ............................................ QP::QState BlinkClass::led_off(BlinkClass * const me, QP::QEvt const * const e) { QP::QState status_; switch (e->sig) { // ${AOs::BlinkClass::SM::led_off} case Q_ENTRY_SIG: { BSP_ledOff(); me->m_timeEvt.postEvery(me, BSP_TICKS_PER_SEC / 2); status_ = Q_HANDLED(); break; } // ${AOs::BlinkClass::SM::led_off} case Q_EXIT_SIG: { (void)me->m_timeEvt.disarm(); status_ = Q_HANDLED(); break; } // ${AOs::BlinkClass::SM::led_off::TIMEOUT} case TIMEOUT_SIG: { status_ = Q_TRAN(&led_on); break; } default: { status_ = Q_SUPER(&QP::QHsm::top); break; } } return status_; }