1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
2c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $License:
32eed2d4028b5706e977b016e49b010ee5595e48aNick Vaccaro    Copyright (C) 2014 InvenSense Corporation, All Rights Reserved.
4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $
5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*******************************************************************************
8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * $Id: mlos_linux.c 5629 2011-06-11 03:13:08Z mcaramello $
10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro ******************************************************************************/
12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @defgroup MLOS
15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief OS Interface.
16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @{
18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *      @file mlos.c
19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *      @brief OS Interface.
20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* ------------- */
23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* - Includes. - */
24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* ------------- */
25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/time.h>
27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <unistd.h>
28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <pthread.h>
29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdlib.h>
30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h>
31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "stdint_invensense.h"
33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "mlos.h"
34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* -------------- */
37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* - Functions. - */
38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* -------------- */
39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Allocate space
42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  num_bytes  number of bytes
43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return pointer to allocated space
44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid *inv_malloc(unsigned int num_bytes)
46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    // Allocate space.
48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    void *alloc_ptr = malloc(num_bytes);
49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return alloc_ptr;
50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Free allocated space
55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  ptr pointer to space to deallocate
56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_free(void *ptr)
59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (ptr)
61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        free(ptr);
62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return INV_SUCCESS;
63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Mutex create function
68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  mutex   pointer to mutex handle
69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_create_mutex(HANDLE *mutex)
72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    int res;
74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    pthread_mutex_t *pm = malloc(sizeof(pthread_mutex_t));
75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if(pm == NULL)
76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return INV_ERROR;
77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    res = pthread_mutex_init(pm, NULL);
79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if(res == -1) {
80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        free(pm);
81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return INV_ERROR_OS_CREATE_FAILED;
82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    *mutex = (HANDLE)pm;
85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return INV_SUCCESS;
87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Mutex lock function
92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  mutex   Mutex handle
93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_lock_mutex(HANDLE mutex)
96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    int res;
98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    pthread_mutex_t *pm = (pthread_mutex_t *)mutex;
99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    res = pthread_mutex_lock(pm);
101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if(res == -1)
102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return INV_ERROR_OS_LOCK_FAILED;
103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return INV_SUCCESS;
105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Mutex unlock function
110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  mutex   mutex handle
111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_unlock_mutex(HANDLE mutex)
114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    int res;
116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    pthread_mutex_t *pm = (pthread_mutex_t *)mutex;
117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    res = pthread_mutex_unlock(pm);
119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if(res == -1)
120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return INV_ERROR_OS_LOCK_FAILED;
121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return INV_SUCCESS;
123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  open file
128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  filename    name of the file to open.
129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroFILE *inv_fopen(char *filename)
132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    FILE *fp = fopen(filename, "r");
134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return fp;
135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  close the file.
140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  fp  handle to file to close.
141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return error code.
142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_fclose(FILE *fp)
144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    fclose(fp);
146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Close Handle
150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @param  handle  handle to the resource.
151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return Zero if success, an error code otherwise.
152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroinv_error_t inv_destroy_mutex(HANDLE handle)
154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    int error;
156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    pthread_mutex_t *pm = (pthread_mutex_t *)handle;
157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    error = pthread_mutex_destroy(pm);
158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (error)
159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return errno;
160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    free((void*) handle);
161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return INV_SUCCESS;}
163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  Sleep function.
167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarovoid inv_sleep(int m_secs)
169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    usleep(m_secs * 1000);
171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/**
175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @brief  get system's internal tick count.
176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *          Used for time reference.
177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  @return current tick count.
178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarounsigned long inv_get_tick_count()
180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    struct timeval tv;
182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (gettimeofday(&tv, NULL) != 0)
184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return 0;
185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return (long)((tv.tv_sec * 1000000LL + tv.tv_usec) / 1000LL);
187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/** @} */
190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
191