• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  $License:
3    Copyright 2011 InvenSense, Inc.
4 
5  Licensed under the Apache License, Version 2.0 (the "License");
6  you may not use this file except in compliance with the License.
7  You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11  Unless required by applicable law or agreed to in writing, software
12  distributed under the License is distributed on an "AS IS" BASIS,
13  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  See the License for the specific language governing permissions and
15  limitations under the License.
16   $
17  */
18 /*******************************************************************************
19  *
20  * $Id: mlos_linux.c 5629 2011-06-11 03:13:08Z mcaramello $
21  *
22  *******************************************************************************/
23 
24 /**
25  *  @defgroup MLOS
26  *  @brief OS Interface.
27  *
28  *  @{
29  *      @file mlos.c
30  *      @brief OS Interface.
31 **/
32 
33 /* ------------- */
34 /* - Includes. - */
35 /* ------------- */
36 
37 #include <sys/time.h>
38 #include <unistd.h>
39 #include <pthread.h>
40 #include <stdlib.h>
41 
42 #include "stdint_invensense.h"
43 
44 #include "mlos.h"
45 #include <errno.h>
46 
47 
48 /* -------------- */
49 /* - Functions. - */
50 /* -------------- */
51 
52 /**
53  *  @brief  Allocate space
54  *  @param  numBytes  number of bytes
55  *  @return pointer to allocated space
56 **/
inv_malloc(unsigned int numBytes)57 void *inv_malloc(unsigned int numBytes)
58 {
59     // Allocate space.
60     void *allocPtr = malloc(numBytes);
61     return allocPtr;
62 }
63 
64 
65 /**
66  *  @brief  Free allocated space
67  *  @param  ptr pointer to space to deallocate
68  *  @return error code.
69 **/
inv_free(void * ptr)70 inv_error_t inv_free(void *ptr)
71 {
72     // Deallocate space.
73     free(ptr);
74 
75     return INV_SUCCESS;
76 }
77 
78 
79 /**
80  *  @brief  Mutex create function
81  *  @param  mutex   pointer to mutex handle
82  *  @return error code.
83  */
inv_create_mutex(HANDLE * mutex)84 inv_error_t inv_create_mutex(HANDLE *mutex)
85 {
86     int res;
87     pthread_mutex_t *pm = malloc(sizeof(pthread_mutex_t));
88     if(pm == NULL)
89         return INV_ERROR;
90 
91     res = pthread_mutex_init(pm, NULL);
92     if(res == -1) {
93         free(pm);
94         return INV_ERROR_OS_CREATE_FAILED;
95     }
96 
97     *mutex = (HANDLE)pm;
98 
99     return INV_SUCCESS;
100 }
101 
102 
103 /**
104  *  @brief  Mutex lock function
105  *  @param  mutex   Mutex handle
106  *  @return error code.
107  */
inv_lock_mutex(HANDLE mutex)108 inv_error_t inv_lock_mutex(HANDLE mutex)
109 {
110     int res;
111     pthread_mutex_t *pm = (pthread_mutex_t*)mutex;
112 
113     res = pthread_mutex_lock(pm);
114     if(res == -1)
115         return INV_ERROR_OS_LOCK_FAILED;
116 
117     return INV_SUCCESS;
118 }
119 
120 
121 /**
122  *  @brief  Mutex unlock function
123  *  @param  mutex   mutex handle
124  *  @return error code.
125 **/
inv_unlock_mutex(HANDLE mutex)126 inv_error_t inv_unlock_mutex(HANDLE mutex)
127 {
128     int res;
129     pthread_mutex_t *pm = (pthread_mutex_t*)mutex;
130 
131     res = pthread_mutex_unlock(pm);
132     if(res == -1)
133         return INV_ERROR_OS_LOCK_FAILED;
134 
135     return INV_SUCCESS;
136 }
137 
138 
139 /**
140  *  @brief  open file
141  *  @param  filename    name of the file to open.
142  *  @return error code.
143  */
inv_fopen(char * filename)144 FILE *inv_fopen(char *filename)
145 {
146     FILE *fp = fopen(filename,"r");
147     return fp;
148 }
149 
150 
151 /**
152  *  @brief  close the file.
153  *  @param  fp  handle to file to close.
154  *  @return error code.
155  */
inv_fclose(FILE * fp)156 void inv_fclose(FILE *fp)
157 {
158     fclose(fp);
159 }
160 
161 /**
162  *  @brief  Close Handle
163  *  @param  handle  handle to the resource.
164  *  @return Zero if success, an error code otherwise.
165  */
inv_destroy_mutex(HANDLE handle)166 inv_error_t inv_destroy_mutex(HANDLE handle)
167 {
168     int error;
169     pthread_mutex_t *pm = (pthread_mutex_t*)handle;
170     error = pthread_mutex_destroy(pm);
171     if (error) {
172         return errno;
173     }
174     free((void*) handle);
175 
176     return INV_SUCCESS;}
177 
178 
179 /**
180  *  @brief  Sleep function.
181  */
inv_sleep(int mSecs)182 void inv_sleep(int mSecs)
183 {
184     usleep(mSecs*1000);
185 }
186 
187 
188 /**
189  *  @brief  get system's internal tick count.
190  *          Used for time reference.
191  *  @return current tick count.
192  */
inv_get_tick_count()193 unsigned long inv_get_tick_count()
194 {
195     struct timeval tv;
196 
197     if (gettimeofday(&tv, NULL) !=0)
198         return 0;
199 
200     return (long)((tv.tv_sec * 1000000LL + tv.tv_usec) / 1000LL);
201 }
202 
203   /**********************/
204  /** @} */ /* defgroup */
205 /**********************/
206 
207