simts.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <utils/time/simts.h>
00025 #include <cstddef>
00026
00027 namespace fawkes {
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 SimulatorTimeSource::SimulatorTimeSource()
00044 {
00045 clock = Clock::instance();
00046 clock->get_systime(start_time);
00047 start_simoffset = 0;
00048 current_simtime = start_time;
00049 }
00050
00051
00052 SimulatorTimeSource::~SimulatorTimeSource()
00053 {
00054 }
00055
00056
00057 void
00058 SimulatorTimeSource::get_time(timeval *tv) const
00059 {
00060 if ( tv != NULL ) {
00061 const timeval *curt = current_simtime.get_timeval();
00062 tv->tv_sec = curt->tv_sec;
00063 tv->tv_usec = curt->tv_usec;
00064 }
00065 }
00066
00067
00068 timeval
00069 SimulatorTimeSource::conv_to_realtime(const timeval *tv) const
00070 {
00071 float simdiff = current_simoffset - start_simoffset;
00072 float realdiff = current_realtime - &start_time;
00073
00074 float sim_to_real = realdiff / simdiff;
00075
00076 Time query_simtime(tv);
00077 query_simtime -= start_time;
00078 float query_simtime_offset = query_simtime.in_sec() - start_simoffset;
00079
00080 query_simtime_offset *= sim_to_real;
00081
00082 Time final(query_simtime_offset);
00083 final += start_time;
00084
00085 return *(final.get_timeval());;
00086 }
00087
00088
00089
00090
00091
00092 void
00093 SimulatorTimeSource::set_start(float initial_offset)
00094 {
00095 clock->get_systime(start_time);
00096 start_simoffset = initial_offset;
00097 current_simtime = start_time;
00098
00099 }
00100
00101
00102
00103
00104
00105 void
00106 SimulatorTimeSource::set_sim_offset(float sim_offset)
00107 {
00108 clock->get_systime(current_realtime);
00109 current_simtime = start_time + (sim_offset - start_simoffset);
00110 current_simoffset = sim_offset;
00111
00112
00113 }
00114
00115 }