qpc/source/qf_qact.c

82 lines
2.9 KiB
C
Raw Normal View History

2014-04-06 11:43:13 -04:00
/**
2015-04-28 13:45:35 -04:00
* @file
* @brief QActive_ctor() definition
*
* @description
* This file must remain separate from the rest to avoid pulling in the
* "virtual" functions QHsm_init_() and QHsm_dispatch_() in case they
* are not used by the application.
*
* @sa qf_qmact.c
*
* @ingroup qf
* @cond
2014-04-06 11:43:13 -04:00
******************************************************************************
2015-04-28 13:45:35 -04:00
* Last updated for version 5.4.0
* Last updated on 2015-03-26
2012-08-14 18:07:04 -04:00
*
* Q u a n t u m L e a P s
* ---------------------------
* innovating embedded systems
*
2014-04-06 11:43:13 -04:00
* Copyright (C) Quantum Leaps, www.state-machine.com.
2012-08-14 18:07:04 -04:00
*
2013-02-12 10:04:39 -05:00
* 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, either version 3 of the License, or
2013-02-12 10:04:39 -05:00
* (at your option) any later version.
2012-08-14 18:07:04 -04:00
*
2013-02-12 10:04:39 -05:00
* Alternatively, this program may be distributed and modified under the
2012-08-14 18:07:04 -04:00
* terms of Quantum Leaps commercial licenses, which expressly supersede
2013-02-12 10:04:39 -05:00
* the GNU General Public License and are specifically designed for
* licensees interested in retaining the proprietary status of their code.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
2012-08-14 18:07:04 -04:00
*
* Contact information:
2014-04-06 11:43:13 -04:00
* Web: www.state-machine.com
* Email: info@state-machine.com
******************************************************************************
2015-04-28 13:45:35 -04:00
* @endcond
2014-04-06 11:43:13 -04:00
*/
#define QP_IMPL /* this is QP implementation */
#include "qf_port.h" /* QF port */
2012-08-14 18:07:04 -04:00
2015-04-28 13:45:35 -04:00
/*Q_DEFINE_THIS_MODULE("qf_qact")*/
2012-08-14 18:07:04 -04:00
2014-04-06 11:43:13 -04:00
/****************************************************************************/
2013-09-23 14:34:35 -04:00
/**
2015-04-28 13:45:35 -04:00
* @description
2014-04-06 11:43:13 -04:00
* Performs the first step of active object initialization by assigning
* the virtual pointer and calling the superclass constructor.
*
2015-04-28 13:45:35 -04:00
* @param[in,out] me pointer (see @ref oop)
* @param[in] initial pointer to the event to be dispatched to the MSM
2014-04-06 11:43:13 -04:00
*
2015-04-28 13:45:35 -04:00
* @note Must be called only __once__ before QMSM_INIT().
* @sa QMsm_ctor() and QHsm_ctor()
2013-09-23 14:34:35 -04:00
*/
void QActive_ctor(QActive * const me, QStateHandler initial) {
2014-04-06 11:43:13 -04:00
static QActiveVtbl const vtbl = { /* QActive virtual table */
2013-12-30 17:37:40 -05:00
{ &QHsm_init_,
&QHsm_dispatch_ },
&QActive_start_,
&QActive_post_,
&QActive_postLIFO_
2013-09-23 14:34:35 -04:00
};
2015-04-28 13:45:35 -04:00
/* clear the whole QActive object, so that the framework can start
* correctly even if the startup code fails to clear the uninitialized
* data (as is required by the C Standard).
*/
QF_bzero(me, (uint_fast16_t)sizeof(*me));
2014-04-06 11:43:13 -04:00
QHsm_ctor(&me->super, initial); /* explicitly call superclass' ctor */
2013-09-23 14:34:35 -04:00
me->super.vptr = &vtbl.super; /* hook the vptr to QActive virtual table */
2012-08-14 18:07:04 -04:00
}