diff -r 2cb34a4ac65a -r 6b5a4c21e061 doc/doxygen/html/timers__unix_8c-source.html --- a/doc/doxygen/html/timers__unix_8c-source.html Tue Jun 05 17:34:33 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ - -
-00001 #include <stdlib.h> -00002 -00003 #include <sys/time.h> -00004 #include <pthread.h> -00005 #include <signal.h> -00006 -00007 #include "applicfg.h" -00008 #include "timer.h" -00009 -00010 pthread_mutex_t CanFestival_mutex = PTHREAD_MUTEX_INITIALIZER; -00011 -00012 TASK_HANDLE TimerLoopThread; -00013 -00014 TIMEVAL last_time_set = TIMEVAL_MAX; -00015 -00016 struct timeval last_sig; -00017 -00018 timer_t timer; -00019 -00020 void EnterMutex(void) -00021 { -00022 pthread_mutex_lock(&CanFestival_mutex); -00023 } -00024 -00025 void LeaveMutex(void) -00026 { -00027 pthread_mutex_unlock(&CanFestival_mutex); -00028 } -00029 -00030 void timer_notify(sigval_t val) -00031 { -00032 gettimeofday(&last_sig,NULL); -00033 EnterMutex(); -00034 TimeDispatch(); -00035 LeaveMutex(); -00036 // printf("getCurrentTime() return=%u\n", p.tv_usec); -00037 } -00038 -00039 void initTimer(void) -00040 { -00041 struct sigevent sigev; -00042 -00043 // Take first absolute time ref. -00044 gettimeofday(&last_sig,NULL); -00045 -00046 memset (&sigev, 0, sizeof (struct sigevent)); -00047 sigev.sigev_value.sival_int = 0; -00048 sigev.sigev_notify = SIGEV_THREAD; -00049 sigev.sigev_notify_attributes = NULL; -00050 sigev.sigev_notify_function = timer_notify; -00051 -00052 timer_create (CLOCK_REALTIME, &sigev, &timer); -00053 } -00054 -00055 void StopTimerLoop(void) -00056 { -00057 EnterMutex(); -00058 timer_delete (timer); -00059 LeaveMutex(); -00060 } -00061 -00062 void StartTimerLoop(TimerCallback_t init_callback) -00063 { -00064 initTimer(); -00065 EnterMutex(); -00066 // At first, TimeDispatch will call init_callback. -00067 SetAlarm(NULL, 0, init_callback, 0, 0); -00068 LeaveMutex(); -00069 } -00070 -00071 void CreateReceiveTask(CAN_PORT port, TASK_HANDLE* Thread, void* ReceiveLoopPtr) -00072 { -00073 pthread_create(Thread, NULL, ReceiveLoopPtr, (void*)port); -00074 } -00075 -00076 void WaitReceiveTaskEnd(TASK_HANDLE Thread) -00077 { -00078 pthread_kill(Thread, SIGTERM); -00079 pthread_join(Thread, NULL); -00080 } -00081 -00082 #define maxval(a,b) ((a>b)?a:b) -00083 void setTimer(TIMEVAL value) -00084 { -00085 // printf("setTimer(TIMEVAL value=%d)\n", value); -00086 // TIMEVAL is us whereas setitimer wants ns... -00087 long tv_nsec = 1000 * (maxval(value,1)%1000000); -00088 time_t tv_sec = value/1000000; -00089 struct itimerspec timerValues; -00090 timerValues.it_value.tv_sec = tv_sec; -00091 timerValues.it_value.tv_nsec = tv_nsec; -00092 timerValues.it_interval.tv_sec = 0; -00093 timerValues.it_interval.tv_nsec = 0; -00094 -00095 timer_settime (timer, 0, &timerValues, NULL); -00096 } -00097 -00098 TIMEVAL getElapsedTime(void) -00099 { -00100 struct timeval p; -00101 gettimeofday(&p,NULL); -00102 // printf("getCurrentTime() return=%u\n", p.tv_usec); -00103 return (p.tv_sec - last_sig.tv_sec)* 1000000 + p.tv_usec - last_sig.tv_usec; -00104 } -