repost: [vdr] [Patch] Re: Time jumps
Sergei Haller
Sergei.Haller at math.uni-giessen.de
Sun Jun 19 12:21:04 CEST 2005
repost for the thread [vdr] [PATCH] time warp
---------- Forwarded message ----------
From: Sergei Haller <Sergei.Haller at math.uni-giessen.de>
Organization: University of Giessen * Germany
To: VDR List <vdr at linuxtv.org>
Date: Thu, 2 Jan 2003 00:19:18 +0100 (CET)
Subject: [vdr] [Patch] Re: Time jumps
[...]
Anyway, here is a small implementation of the cMJD::SetSystemTime()
method. This one just uses adjtime for small clock drifts and old
behaviour (jump) for bigger drifts.
(again, I'm sorry, but my vdr box is still broken, that's why I can't try
it out directly in vdr, but this function should cleanly fit in 1.1.20's
eit.c)
--------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
/* these are for emulating vdr source only */
#define bool int
#define true 1
#define false 0
#define isyslog printf
#define esyslog printf
time_t mjdtime;
/* Note that adjtime speeds up or slows down the system clock by
just 500 usec per second.
That means, a difference of 1 second is done after ~33 minutes
and a diff of 30 seconds after ~16.6 hours
should this value become a setup parameter?
*/
#define MAXADJTIME 30 // seconds
/* this is a modified cMJD::SetSystemTime() from eit.c */
bool SetSystemTime(void)
{
time_t loctim, diff;
struct timeval delta;
loctim = time(NULL); /* system time in seconds since epoch */
diff = mjdtime - loctim;
if ( abs(diff) > 0 ) {
isyslog("System Time = %s (%ld)\n", ctime(&loctim), loctim);
isyslog("Local Time = %s (%ld)\n", ctime(&mjdtime), mjdtime);
}
if ( abs(diff) > MAXADJTIME )
{
if (stime(&mjdtime) < 0)
esyslog("ERROR while setting system time: %m\n");
return true;
}
else if ( abs(diff) > 0 )
{
delta.tv_sec = diff;
delta.tv_usec = 0;
if (adjtime(&delta, NULL) < 0)
esyslog("ERROR while adjusting system time: %m\n");
return true;
}
return false;
}
int main(void) {
bool result;
mjdtime = time(NULL) + 20 ; /* adjust the time by +20 seconds */
result = SetSystemTime();
return result;
}
--------------------------------------
c ya
Sergei
--
-------------------------------------------------------------------- -?)
eMail: Sergei.Haller at math.uni-giessen.de /\\
-------------------------------------------------------------------- _\_V
Be careful of reading health books, you might die of a misprint.
-- Mark Twain
More information about the vdr
mailing list