summaryrefslogtreecommitdiffstats
path: root/osdep/timer-lx.c
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/timer-lx.c')
-rw-r--r--osdep/timer-lx.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/osdep/timer-lx.c b/osdep/timer-lx.c
new file mode 100644
index 0000000000..4321e46bfa
--- /dev/null
+++ b/osdep/timer-lx.c
@@ -0,0 +1,67 @@
+// Precise timer routines for LINUX (C) LGB & A'rpi/ASTRAL
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/time.h>
+#include "../config.h"
+
+int usec_sleep(int usec_delay)
+{
+#ifdef HAVE_NANOSLEEP
+ struct timespec ts;
+ ts.tv_sec = usec_delay / 1000000;
+ ts.tv_nsec = (usec_delay % 1000000) * 1000;
+ return nanosleep(&ts, NULL);
+#else
+ return usleep(usec_delay);
+#endif
+}
+
+
+// Returns current time in microseconds
+unsigned int GetTimer(){
+ struct timeval tv;
+ struct timezone tz;
+// float s;
+ gettimeofday(&tv,&tz);
+// s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
+ return (tv.tv_sec*1000000+tv.tv_usec);
+}
+
+// Returns current time in milliseconds
+unsigned int GetTimerMS(){
+ struct timeval tv;
+ struct timezone tz;
+// float s;
+ gettimeofday(&tv,&tz);
+// s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
+ return (tv.tv_sec*1000+tv.tv_usec/1000);
+}
+
+static unsigned int RelativeTime=0;
+
+// Returns time spent between now and last call in seconds
+float GetRelativeTime(){
+unsigned int t,r;
+ t=GetTimer();
+// t*=16;printf("time=%ud\n",t);
+ r=t-RelativeTime;
+ RelativeTime=t;
+ return (float)r * 0.000001F;
+}
+
+// Initialize timer, must be called at least once at start
+void InitTimer(){
+ GetRelativeTime();
+}
+
+
+#if 0
+void main(){
+ float t=0;
+ InitTimer();
+ while(1){ t+=GetRelativeTime();printf("time= %10.6f\r",t);fflush(stdout); }
+}
+#endif
+