mirror of
https://github.com/nasa/trick.git
synced 2024-12-24 07:16:41 +00:00
19025d77ad
Reorganized. Created a new top level include directory that will hold all of Trick's header files. Moved all of the Trick headers to this directory. Created a libexec directory that holds all of the executables that users don't need to execute directly. Changed all of the executables remaining in bin to start with "trick-". In the sim_services directories changed all source files to find the Trick headers in their new location. Since all of the include files are gone in sim_services, removed the src directories as well, moving all of the source files up a level. Moved the makefiles, docs, man, and other architecture independent files into a top level share directory. Renamed lib_${TRICK_HOST_CPU} to lib64 or lib depending on the platform we're currently on. refs #63
154 lines
4.9 KiB
C++
154 lines
4.9 KiB
C++
/*
|
|
PURPOSE:
|
|
( Clock base class )
|
|
PROGRAMMERS:
|
|
(((Alex Lin) (NASA) (2009)))
|
|
*/
|
|
|
|
#ifndef CLOCK_HH
|
|
#define CLOCK_HH
|
|
|
|
#include <string>
|
|
|
|
namespace Trick {
|
|
|
|
/**
|
|
* This class is a virtual base class for maintaining real time synchronization
|
|
* in a Trick simulation. The base class provides entry names for a realtime clock
|
|
* which derivative classes must fill in.
|
|
*
|
|
* @author Robert W. Bailey
|
|
* @author Many other Trick developers of the past who did not add their names.
|
|
* @author Alexander S. Lin
|
|
*
|
|
* @date Jan. 2010
|
|
*
|
|
*/
|
|
|
|
class Clock {
|
|
|
|
public:
|
|
|
|
/**
|
|
* This is the constructor of the Clock class. It starts the Clock as
|
|
* disabled and sets the maximum overrun parameters to basically infinity.
|
|
* @param in_clock_tics_per_sec - number of tics per second of the hardware clock
|
|
* @param in_name - name of the clock to use in printouts.
|
|
*/
|
|
Clock( unsigned long long in_clock_tics_per_sec , std::string in_name ) ;
|
|
|
|
/**
|
|
* This is the destructor of the Clock class.
|
|
*/
|
|
virtual ~Clock() {} ;
|
|
|
|
/**
|
|
* @brief Gets the simulation time tics and calculates sim time to clock time tic ratio.
|
|
* @return 0
|
|
*/
|
|
virtual int calc_sim_time_ratio( int in_time_tic_value ) ;
|
|
|
|
/**
|
|
* @brief Gets the rt_clock_ratio
|
|
* @return current clock ratio
|
|
*/
|
|
double get_rt_clock_ratio() ;
|
|
|
|
/**
|
|
* @brief Sets the global_clock_pointer to this instance
|
|
* @return returns 0
|
|
*/
|
|
int set_global_clock() ;
|
|
|
|
/**
|
|
* @brief Sets the rt_clock_ratio
|
|
* @return returns 0 if clock_ratio sucessfully set.
|
|
*/
|
|
int set_rt_clock_ratio(double) ;
|
|
|
|
/**
|
|
* @brief Moves the ref_time_tics by the number of incoming simulation time tics
|
|
* @return 0
|
|
*/
|
|
int adjust_ref_time(long long in_tics) ;
|
|
|
|
/**
|
|
* @brief Sets the reference time to the incoming value
|
|
* @param ref - the reference time in tics
|
|
* @return always 0
|
|
*/
|
|
int set_reference(long long ref) ;
|
|
|
|
/**
|
|
* @brief Syncs clock to next whole second
|
|
* @return 0
|
|
*/
|
|
virtual int sync_to_wall_clock(double align_tic_mult, int tics_per_sec) ;
|
|
|
|
/**
|
|
* @brief Gets the simulation elapsed time from the clock.
|
|
*/
|
|
virtual long long clock_time() ;
|
|
|
|
/**
|
|
* @brief Resets the clock's reference time is set to be relative to the incoming ref
|
|
* @param ref - the simulation time in tics
|
|
* @return current wall clock time in tics
|
|
*/
|
|
virtual long long clock_reset(long long ref) ;
|
|
|
|
/**
|
|
* @brief Gets the name of the clock
|
|
* @return string with the clock name
|
|
*/
|
|
virtual const char * get_name() ;
|
|
|
|
/**
|
|
* @brief Initializes the clock. Clock hardware (if any) should be initialized here.
|
|
* @param ref - the simulation time in tics
|
|
* @return return 0 if successful. Otherwise return error code.
|
|
*/
|
|
virtual int clock_init() = 0 ;
|
|
|
|
/**
|
|
* @brief Gets the actual time from the clock.
|
|
*/
|
|
virtual long long wall_clock_time() = 0 ;
|
|
|
|
/**
|
|
* @brief Enters a spin loop waiting for wall clock time to match the requested simulation time
|
|
* @param req_time - the simulation time in tics
|
|
* @return current wall clock time in tics
|
|
*/
|
|
virtual long long clock_spin(long long req_time) ;
|
|
|
|
/**
|
|
* @brief Stops the real time clock
|
|
* @return always 0
|
|
*/
|
|
virtual int clock_stop() = 0 ;
|
|
|
|
// These variables are left public to allow the variable server access
|
|
|
|
/** Name of the clock\n */
|
|
std::string name ;
|
|
|
|
/** Number of tics per second of the hardware clock\n */
|
|
unsigned long long clock_tics_per_sec ; /**< trick_units(--) */
|
|
|
|
/** Ratio of desired sim time to real-time. i.e. 2.0 = sim executes 2
|
|
times faster than realtime, 0.1 = sim executes 10 times slower than real-time.\n */
|
|
double rt_clock_ratio ; /**< trick_units(--) */
|
|
|
|
/** Ratio of sim time tics to clock tics.\n */
|
|
double sim_tic_ratio ;
|
|
|
|
/** Reference time where the current time is relative to.\n */
|
|
long long ref_time_tics ; /**< trick_io(**) */
|
|
|
|
} ;
|
|
|
|
} ;
|
|
|
|
#endif
|