Linux Face / QPFramework
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers qf_pkg.h Source File

qf_pkg.h

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////////
00002 // Product: QF/C++
00003 // Last Updated for Version: 4.0.01
00004 // Date of the Last Update:  Jun 09, 2008
00005 //
00006 //                    Q u a n t u m     L e a P s
00007 //                    ---------------------------
00008 //                    innovating embedded systems
00009 //
00010 // Copyright (C) 2002-2008 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
00027 //////////////////////////////////////////////////////////////////////////////
00028 #ifndef qf_pkg_h
00029 #define qf_pkg_h
00030 
00031 /// \file
00032 /// \ingroup qf
00033 /// \brief Internal (package scope) QF/C++ interface.
00034 
00035 #include "qf_port.h"                                                // QF port
00036 
00037                                     // QF-specific interrupt locking/unlocking
00038 #ifndef QF_INT_KEY_TYPE
00039 
00040     /// \brief This is an internal macro for defining the interrupt lock key.
00041     ///
00042     /// The purpose of this macro is to enable writing the same code for the
00043     /// case when interrupt key is defined and when it is not. If the macro
00044     /// #QF_INT_KEY_TYPE is defined, this internal macro provides the
00045     /// definition of the lock key variable. Otherwise this macro is empty.
00046     /// \sa #QF_INT_KEY_TYPE
00047     #define QF_INT_LOCK_KEY_
00048 
00049     /// \brief This is an internal macro for locking interrupts.
00050     ///
00051     /// The purpose of this macro is to enable writing the same code for the
00052     /// case when interrupt key is defined and when it is not. If the macro
00053     /// #QF_INT_KEY_TYPE is defined, this internal macro invokes #QF_INT_LOCK
00054     /// passing the key variable as the parameter. Otherwise #QF_INT_LOCK
00055     /// is invoked with a dummy parameter.
00056     /// \sa #QF_INT_LOCK, #QK_INT_LOCK
00057     #define QF_INT_LOCK_()      QF_INT_LOCK(dummy)
00058 
00059     /// \brief This is an internal macro for unlocking interrupts.
00060     ///
00061     /// The purpose of this macro is to enable writing the same code for the
00062     /// case when interrupt key is defined and when it is not. If the macro
00063     /// #QF_INT_KEY_TYPE is defined, this internal macro invokes
00064     /// #QF_INT_UNLOCK passing the key variable as the parameter.
00065     /// Otherwise #QF_INT_UNLOCK is invoked with a dummy parameter.
00066     /// \sa #QF_INT_UNLOCK, #QK_INT_UNLOCK
00067     #define QF_INT_UNLOCK_()    QF_INT_UNLOCK(dummy)
00068 #else
00069     #define QF_INT_LOCK_KEY_    QF_INT_KEY_TYPE intLockKey_;
00070     #define QF_INT_LOCK_()      QF_INT_LOCK(intLockKey_)
00071     #define QF_INT_UNLOCK_()    QF_INT_UNLOCK(intLockKey_)
00072 #endif
00073 
00074 // package-scope objects -----------------------------------------------------
00075 extern QTimeEvt *QF_timeEvtListHead_;  ///< head of linked list of time events
00076 extern QF_EPOOL_TYPE_ QF_pool_[3];                 ///< allocate 3 event pools
00077 extern uint8_t QF_maxPool_;                  ///< # of initialized event pools
00078 extern QSubscrList *QF_subscrList_;             ///< the subscriber list array
00079 extern QSignal QF_maxSignal_;                ///< the maximum published signal
00080 
00081 //............................................................................
00082 /// \brief Structure representing a free block in the Native QF Memory Pool
00083 /// \sa ::QMPool
00084 struct QFreeBlock {
00085     QFreeBlock *m_next;
00086 };
00087 
00088 #endif                                                             // qf_pkg_h
00089