QP/C++
qte_rarm.cpp
Go to the documentation of this file.
00001 
00002 // Product: QF/C++
00003 // Last Updated for Version: 4.3.00
00004 // Date of the Last Update:  Nov 01, 2011
00005 //
00006 //                    Q u a n t u m     L e a P s
00007 //                    ---------------------------
00008 //                    innovating embedded systems
00009 //
00010 // Copyright (C) 2002-2011 Quantum Leaps, LLC. All rights reserved.
00011 //
00012 // This software may be distributed and modified under the terms of the GNU
00013 // General Public License version 2 (GPL) as published by the Free Software
00014 // Foundation and appearing in the file GPL.TXT included in the packaging of
00015 // this file. Please note that GPL Section 2[b] requires that all works based
00016 // on this software must also be made publicly available under the terms of
00017 // the GPL ("Copyleft").
00018 //
00019 // Alternatively, this software may be distributed and modified under the
00020 // terms of Quantum Leaps commercial licenses, which expressly supersede
00021 // the GPL and are specifically designed for licensees interested in
00022 // retaining the proprietary status of their code.
00023 //
00024 // Contact information:
00025 // Quantum Leaps Web site:  http://www.quantum-leaps.com
00026 // e-mail:                  info@quantum-leaps.com
00028 #include "qf_pkg.h"
00029 #include "qassert.h"
00030 
00034 
00035 #ifdef Q_USE_NAMESPACE
00036 namespace QP {
00037 #endif
00038 
00039 Q_DEFINE_THIS_MODULE(qte_rarm)
00040 
00041 //............................................................................
00042 uint8_t QTimeEvt::rearm(QTimeEvtCtr nTicks) {
00043     Q_REQUIRE((nTicks > (QTimeEvtCtr)0)        /* cannot rearm with 0 ticks */
00044               && (sig >= (QSignal)Q_USER_SIG)               /* valid signal */
00045               && (m_act != (QActive *)0));              // valid active object
00046     uint8_t isArmed;
00047     QF_CRIT_STAT_
00048     QF_CRIT_ENTRY_();
00049     m_ctr = nTicks;
00050     if (m_prev == (QTimeEvt *)0) {             // is this time event disarmed?
00051         isArmed = (uint8_t)0;
00052         m_next = QF_timeEvtListHead_;
00053         if (QF_timeEvtListHead_ != (QTimeEvt *)0) {
00054             QF_timeEvtListHead_->m_prev = this;
00055         }
00056         QF_timeEvtListHead_ = this;
00057         m_prev = this;                             // mark the time evt in use
00058     }
00059     else {                                          // the time event is armed
00060         isArmed = (uint8_t)1;
00061     }
00062 
00063     QS_BEGIN_NOCRIT_(QS_QF_TIMEEVT_REARM, QS::teObj_, this)
00064         QS_TIME_();                                               // timestamp
00065         QS_OBJ_(this);                               // this time event object
00066         QS_OBJ_(m_act);                                   // the active object
00067         QS_TEC_(m_ctr);                                 // the number of ticks
00068         QS_TEC_(m_interval);                                   // the interval
00069         QS_U8_(isArmed);                               // was the timer armed?
00070     QS_END_NOCRIT_()
00071 
00072     QF_CRIT_EXIT_();
00073     return isArmed;
00074 }
00075 
00076 #ifdef Q_USE_NAMESPACE
00077 }                                                              // namespace QP
00078 #endif
00079