mirror of
https://github.com/nasa/trick.git
synced 2024-12-21 06:03:10 +00:00
6d86a0fd97
* Updated to log applicable time in seconds instead of tics, remove scale attribute in dp product XMLs, and reset clock before realtime clock sync to avoid logging epoch time for frame logging. * Removed "_seconds" from applicable time variable names.
245 lines
5.5 KiB
C++
245 lines
5.5 KiB
C++
|
|
#include <math.h>
|
|
|
|
#include "trick/JobData.hh"
|
|
#include "trick/SimObject.hh"
|
|
|
|
long long Trick::JobData::time_tic_value = 0 ;
|
|
|
|
Trick::JobData::JobData() {
|
|
|
|
/** @par Detailed Design */
|
|
|
|
/** @li initializes the job as enabled with 0 cycle rate. */
|
|
disabled = false ;
|
|
handled = false ;
|
|
thread = 0 ;
|
|
id = 0 ;
|
|
sim_object_id = -1 ;
|
|
job_class = -1 ;
|
|
sup_class_data = NULL ;
|
|
cycle = 0.0 ;
|
|
start = 0.0 ;
|
|
stop = 0.0 ;
|
|
complete = false ;
|
|
rt_start_time = -1;
|
|
phase = 60000 ;
|
|
system_job_class = 0 ;
|
|
|
|
cycle_tics = 0 ;
|
|
start_tics = 0 ;
|
|
stop_tics = 0 ;
|
|
next_tics = 0 ;
|
|
|
|
frame_time = 0 ;
|
|
frame_time_seconds = 0.0;
|
|
}
|
|
|
|
Trick::JobData::JobData(int in_thread, int in_id, std::string in_job_class_name , void* in_sup_class_data,
|
|
double in_cycle, std::string in_name, std::string in_tag, int in_phase,
|
|
double in_start, double in_stop) {
|
|
|
|
/** @par Detailed Design */
|
|
|
|
/** @li initializes the job according to arguments */
|
|
disabled = false ;
|
|
handled = false ;
|
|
thread = in_thread ;
|
|
id = in_id ;
|
|
sim_object_id = -1 ;
|
|
job_class = -1 ;
|
|
job_class_name = in_job_class_name ;
|
|
sup_class_data = in_sup_class_data ;
|
|
cycle = in_cycle ;
|
|
start = in_start ;
|
|
stop = in_stop ;
|
|
complete = false ;
|
|
name = in_name ;
|
|
add_tag(in_tag) ;
|
|
rt_start_time = -1;
|
|
phase = in_phase ;
|
|
system_job_class = 0 ;
|
|
|
|
cycle_tics = 0 ;
|
|
start_tics = 0 ;
|
|
stop_tics = 0 ;
|
|
next_tics = 0 ;
|
|
|
|
frame_time = 0 ;
|
|
}
|
|
|
|
void Trick::JobData::enable() {
|
|
disabled = false ;
|
|
}
|
|
|
|
void Trick::JobData::disable() {
|
|
disabled = true ;
|
|
}
|
|
|
|
bool Trick::JobData::get_handled() {
|
|
return(handled) ;
|
|
}
|
|
|
|
int Trick::JobData::set_handled(bool yes_no) {
|
|
handled = yes_no ;
|
|
return(0) ;
|
|
}
|
|
|
|
int Trick::JobData::set_time_tic_value(long long in_time_tic_value) {
|
|
time_tic_value = in_time_tic_value ;
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::set_cycle(double in_cycle) {
|
|
cycle = in_cycle ;
|
|
calc_cycle_tics() ;
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::calc_cycle_tics() {
|
|
cycle_tics = (long long)round(cycle * time_tic_value) ;
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::set_next_call_time(long long time_tics) {
|
|
if ( next_tics > time_tics ) {
|
|
next_tics = time_tics - ( time_tics % cycle_tics ) + cycle_tics ;
|
|
} else {
|
|
next_tics = time_tics ;
|
|
}
|
|
return 0 ;
|
|
}
|
|
|
|
|
|
int Trick::JobData::set_system_job_class(bool yes_no) {
|
|
system_job_class = yes_no ;
|
|
return(0) ;
|
|
}
|
|
|
|
int Trick::JobData::add_tag( std::string in_tag ) {
|
|
if ( ! in_tag.empty() ) {
|
|
tags.insert(in_tag) ;
|
|
}
|
|
return(0) ;
|
|
}
|
|
|
|
int Trick::JobData::add_depend( JobData * depend_job ) {
|
|
depends.push_back(depend_job) ;
|
|
return(0) ;
|
|
}
|
|
|
|
int Trick::JobData::add_inst_before( InstrumentBase * in_job ) {
|
|
std::vector<Trick::InstrumentBase*>::size_type ii ;
|
|
for ( ii = 0 ; ii < inst_before.size() ; ++ii ) {
|
|
if ( in_job->phase < inst_before[ii]->phase ) {
|
|
break ;
|
|
}
|
|
}
|
|
inst_before.insert( inst_before.begin() + ii, in_job ) ;
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::add_inst_after( InstrumentBase * in_job ) {
|
|
std::vector<Trick::InstrumentBase*>::size_type ii ;
|
|
for ( ii = 0 ; ii < inst_after.size() ; ++ii ) {
|
|
if ( in_job->phase < inst_after[ii]->phase ) {
|
|
break ;
|
|
}
|
|
}
|
|
inst_after.insert( inst_after.begin() + ii, in_job ) ;
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::remove_inst( std::string job_name ) {
|
|
int ii , size ;
|
|
|
|
size = inst_before.size() ;
|
|
for ( ii = size - 1 ; ii >= 0 ; ii-- ) {
|
|
if ( ! inst_before[ii]->name.compare(job_name) ) {
|
|
inst_before.erase( inst_before.begin() + ii ) ;
|
|
}
|
|
}
|
|
|
|
size = inst_after.size() ;
|
|
for ( ii = size - 1 ; ii >= 0 ; ii-- ) {
|
|
if ( ! inst_after[ii]->name.compare(job_name) ) {
|
|
inst_after.erase( inst_after.begin() + ii ) ;
|
|
}
|
|
}
|
|
return 0 ;
|
|
}
|
|
|
|
int Trick::JobData::call() {
|
|
int ret ;
|
|
unsigned int ii , size ;
|
|
InstrumentBase * curr_job ;
|
|
|
|
size = inst_before.size() ;
|
|
for ( ii = 0 ; ii < size ; ii++ ) {
|
|
curr_job = inst_before[ii] ;
|
|
curr_job->call() ;
|
|
}
|
|
|
|
ret = parent_object->call_function(this) ;
|
|
|
|
size = inst_after.size() ;
|
|
for ( ii = 0 ; ii < size ; ii++ ) {
|
|
curr_job = inst_after[ii] ;
|
|
curr_job->call() ;
|
|
}
|
|
|
|
return ret ;
|
|
}
|
|
|
|
double Trick::JobData::call_double() {
|
|
double ret ;
|
|
unsigned int ii , size ;
|
|
InstrumentBase * curr_job ;
|
|
|
|
size = inst_before.size() ;
|
|
for ( ii = 0 ; ii < size ; ii++ ) {
|
|
curr_job = inst_before[ii] ;
|
|
curr_job->call() ;
|
|
}
|
|
|
|
ret = parent_object->call_function_double(this) ;
|
|
|
|
size = inst_after.size() ;
|
|
for ( ii = 0 ; ii < size ; ii++ ) {
|
|
curr_job = inst_after[ii] ;
|
|
curr_job->call() ;
|
|
}
|
|
|
|
return ret ;
|
|
}
|
|
|
|
int Trick::JobData::copy_from_checkpoint( JobData * in_job ) {
|
|
|
|
/** @par Detailed Design */
|
|
|
|
/** @li resets the current job disabled, cycle rate, and job class name and phase from
|
|
incoming job data */
|
|
|
|
disabled = in_job->disabled ;
|
|
complete = in_job->complete ;
|
|
|
|
handled = in_job->handled ;
|
|
|
|
cycle = in_job->cycle ;
|
|
start = in_job->start ;
|
|
stop = in_job->stop ;
|
|
|
|
job_class_name = in_job->job_class_name ;
|
|
phase = in_job->phase ;
|
|
system_job_class = in_job->system_job_class ;
|
|
|
|
thread = in_job->thread ;
|
|
|
|
cycle_tics = in_job->cycle_tics ;
|
|
start_tics = in_job->start_tics ;
|
|
stop_tics = in_job->stop_tics ;
|
|
next_tics = in_job->next_tics ;
|
|
|
|
return(0) ;
|
|
}
|