ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VP_SDK / VP_Os / elinux / vp_os_signal.c
1 /**
2  * @file signal.c
3  * @author aurelien.morelle@parrot.fr
4  * @date 2006/12/15
5  */
6
7 #include "VP_Os/vp_os_signal.h"
8
9 #ifndef __USE_GNU
10 #define __USE_GNU
11 #endif
12 #include <sys/time.h>
13 #include <errno.h>
14
15 void
16 vp_os_mutex_init(vp_os_mutex_t *mutex)
17 {
18   pthread_mutex_init((pthread_mutex_t *)mutex, NULL);
19 }
20
21
22 void
23 vp_os_mutex_destroy(vp_os_mutex_t *mutex)
24 {
25   pthread_mutex_destroy((pthread_mutex_t *)mutex);
26 }
27
28
29 void
30 vp_os_mutex_lock(vp_os_mutex_t *mutex)
31 {
32   pthread_mutex_lock((pthread_mutex_t *)mutex);
33 }
34
35 C_RESULT
36 vp_os_mutex_trylock(vp_os_mutex_t *mutex)
37 {
38   return pthread_mutex_trylock((pthread_mutex_t *)mutex) ? C_FAIL : C_OK;
39 }
40
41 void
42 vp_os_mutex_unlock(vp_os_mutex_t *mutex)
43 {
44   pthread_mutex_unlock((pthread_mutex_t *)mutex);
45 }
46
47
48 void
49 vp_os_cond_init(vp_os_cond_t *cond, vp_os_mutex_t *mutex)
50 {
51   pthread_cond_init(&cond->cond, NULL);
52   cond->mutex = mutex;
53 }
54
55
56 void
57 vp_os_cond_destroy(vp_os_cond_t *cond)
58 {
59   pthread_cond_destroy(&cond->cond);
60 }
61
62
63 void
64 vp_os_cond_wait(vp_os_cond_t *cond)
65 {
66   pthread_cond_wait(&cond->cond, (pthread_mutex_t *)cond->mutex);
67 }
68
69
70 C_RESULT
71 vp_os_cond_timed_wait(vp_os_cond_t *cond, uint32_t ms)
72 {
73   struct timespec ts;
74   struct timeval tv;
75   gettimeofday(&tv, NULL);
76   TIMEVAL_TO_TIMESPEC(&tv, &ts);
77 /*  ts.tv_sec += ms/1000;
78 //  ts.tv_nsec += (ms%1000)*1000;
79   ts.tv_nsec += (ms%1000)*1000000;*/
80
81   int tmp;
82   ts.tv_nsec += ms * 1000000;
83   tmp = ts.tv_nsec / (1000 * 1000000);
84   ts.tv_sec += tmp;
85   ts.tv_nsec -= tmp * (1000 * 1000000);
86   return ( pthread_cond_timedwait(&cond->cond, (pthread_mutex_t *)cond->mutex, &ts) == ETIMEDOUT ? FAIL : SUCCESS );
87 }
88
89
90 void
91 vp_os_cond_signal(vp_os_cond_t *cond)
92 {
93   pthread_cond_signal(&cond->cond);
94 }
95