/** * @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 ****************************************************************************** * Last updated for version 5.4.0 * Last updated on 2015-03-26 * * Q u a n t u m L e a P s * --------------------------- * innovating embedded systems * * Copyright (C) Quantum Leaps, www.state-machine.com. * * 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 * (at your option) any later version. * * Alternatively, this program may be distributed and modified under the * terms of Quantum Leaps commercial licenses, which expressly supersede * 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 . * * Contact information: * Web: www.state-machine.com * Email: info@state-machine.com ****************************************************************************** * @endcond */ #define QP_IMPL /* this is QP implementation */ #include "qf_port.h" /* QF port */ /*Q_DEFINE_THIS_MODULE("qf_qact")*/ /****************************************************************************/ /** * @description * Performs the first step of active object initialization by assigning * the virtual pointer and calling the superclass constructor. * * @param[in,out] me pointer (see @ref oop) * @param[in] initial pointer to the event to be dispatched to the MSM * * @note Must be called only __once__ before QMSM_INIT(). * @sa QMsm_ctor() and QHsm_ctor() */ void QActive_ctor(QActive * const me, QStateHandler initial) { static QActiveVtbl const vtbl = { /* QActive virtual table */ { &QHsm_init_, &QHsm_dispatch_ }, &QActive_start_, &QActive_post_, &QActive_postLIFO_ }; /* 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)); QHsm_ctor(&me->super, initial); /* explicitly call superclass' ctor */ me->super.vptr = &vtbl.super; /* hook the vptr to QActive virtual table */ }