MAV'RIC
/home/travis/build/lis-epfl/MAVRIC_Library/runtime/scheduler_task.hpp
00001 /*******************************************************************************
00002  * Copyright (c) 2009-2016, MAV'RIC Development Team
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  * 1. Redistributions of source code must retain the above copyright notice,
00009  * this list of conditions and the following disclaimer.
00010  *
00011  * 2. Redistributions in binary form must reproduce the above copyright notice,
00012  * this list of conditions and the following disclaimer in the documentation
00013  * and/or other materials provided with the distribution.
00014  *
00015  * 3. Neither the name of the copyright holder nor the names of its contributors
00016  * may be used to endorse or promote products derived from this software without
00017  * specific prior written permission.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00020  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00023  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  * POSSIBILITY OF SUCH DAMAGE.
00030  ******************************************************************************/
00031 
00032 /*******************************************************************************
00033  * \file scheduler_task.hpp
00034  *
00035  * \author MAV'RIC Team
00036  *
00037  * \brief Task managed by the scheduler
00038  *
00039  ******************************************************************************/
00040 
00041 
00042 #ifndef SCHEDULER_TASK_HPP_
00043 #define SCHEDULER_TASK_HPP_
00044 
00045 #include <cstdint>
00046 
00047 
00051 class Scheduler_task
00052 {
00053 public:
00054 
00055 
00065     template<typename T>
00066     struct function
00067     {
00068         typedef bool(*type_t)(T*);
00069     };
00070 
00071 
00075     enum return_t
00076     {
00077         RUN_ERROR   = -1,      
00078         RUN_BLOCKED = 0,       
00079         RUN_SUCCESS = 1        
00080     };
00081 
00082 
00086     enum run_mode_t
00087     {
00088         RUN_NEVER,                  
00089         RUN_ONCE,                   
00090         RUN_REGULAR                 
00091     };
00092 
00093 
00097     enum timing_mode_t
00098     {
00099         PERIODIC_ABSOLUTE,          
00100         PERIODIC_RELATIVE           
00101     } ;
00102 
00103 
00107     enum priority_t
00108     {
00109         PRIORITY_LOWEST  = 0,       
00110         PRIORITY_LOW     = 1,       
00111         PRIORITY_NORMAL  = 2,       
00112         PRIORITY_HIGH    = 3,       
00113         PRIORITY_HIGHEST = 4        
00114     };
00115 
00116 
00120     Scheduler_task(void);
00121 
00122 
00136     template<typename T>
00137     Scheduler_task( uint32_t repeat_period,
00138                     run_mode_t run_mode,
00139                     timing_mode_t timing_mode,
00140                     priority_t priority,
00141                     typename function<T>::type_t task_function,
00142                     T* task_argument,
00143                     int32_t task_id);
00144 
00150     void set_run_mode(run_mode_t mode);
00151 
00152 
00157     void run_now();
00158 
00159 
00165     void suspend(uint32_t delay);
00166 
00167 
00173     void change_period(uint32_t repeat_period);
00174 
00175 
00181     int32_t get_id();
00182 
00188     bool execute();
00189 
00195     bool is_due();
00196 
00197     int32_t             task_id;                
00198     run_mode_t          run_mode;               
00199     timing_mode_t       timing_mode;            
00200     priority_t          priority;               
00201     uint32_t            repeat_period;          
00202     uint32_t            next_run;               
00203 
00204     float               execution_time;         
00205     float               execution_time_avg;     
00206     float               execution_time_var;     
00207     float               execution_time_max;     
00208     float               delay;                  
00209     float               delay_avg;              
00210     float               delay_var;              
00211     float               delay_max;              
00212     uint32_t            rt_violations;          
00213 
00214 private:
00215     function<void>::type_t  task_function;      
00216     void*                   task_argument;      
00217 };
00218 
00219 #include "scheduler_task.hxx"
00220 
00221 #endif /* SCHEDULER_TASK_HPP_ */
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines