Beispiel #1
0
void _TOD_Set_with_timestamp(
  const Timestamp_Control *tod
)
{
  uint32_t nanoseconds = _Timestamp_Get_nanoseconds( tod );
  Watchdog_Interval seconds_next = _Timestamp_Get_seconds( tod );
  Watchdog_Interval seconds_now;

  _Thread_Disable_dispatch();
  _TOD_Deactivate();

  seconds_now = _TOD_Seconds_since_epoch();

  if ( seconds_next < seconds_now )
    _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds_now - seconds_next );
  else
    _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, seconds_next - seconds_now );

  _TOD.now = *tod;
  _TOD.seconds_trigger = nanoseconds;
  _TOD.is_set = true;

  _TOD_Activate();
  _Thread_Enable_dispatch();
}
Beispiel #2
0
void _TOD_Set(
  const struct timespec *time
)
{
  long seconds;

  _Thread_Disable_dispatch();
  _TOD_Deactivate();

  seconds = _TOD_Seconds_since_epoch();

  if ( time->tv_sec < seconds )
    _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds - time->tv_sec );
  else
    _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds );

  /* POSIX format TOD (timespec) */
  _Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec );
  _TOD_Is_set = true;

  _TOD_Activate();

  _Thread_Enable_dispatch();
}