Paul Cercueil / libiio

Dependencies:   libserialport libxml2

Committer:
pcercuei
Date:
Thu Aug 25 15:54:09 2016 +0000
Revision:
0:df031b60ca29
Add first version of libiio, from upsteam commit 775b9f6 unmodified.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pcercuei 0:df031b60ca29 1 /*
pcercuei 0:df031b60ca29 2 * libiio - Library for interfacing industrial I/O (IIO) devices
pcercuei 0:df031b60ca29 3 *
pcercuei 0:df031b60ca29 4 * Copyright (C) 2015 Analog Devices, Inc.
pcercuei 0:df031b60ca29 5 * Author: Paul Cercueil <paul.cercueil@analog.com>
pcercuei 0:df031b60ca29 6 *
pcercuei 0:df031b60ca29 7 * This library is free software; you can redistribute it and/or
pcercuei 0:df031b60ca29 8 * modify it under the terms of the GNU Lesser General Public
pcercuei 0:df031b60ca29 9 * License as published by the Free Software Foundation; either
pcercuei 0:df031b60ca29 10 * version 2.1 of the License, or (at your option) any later version.
pcercuei 0:df031b60ca29 11 *
pcercuei 0:df031b60ca29 12 * This library is distributed in the hope that it will be useful,
pcercuei 0:df031b60ca29 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
pcercuei 0:df031b60ca29 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
pcercuei 0:df031b60ca29 15 * Lesser General Public License for more details.
pcercuei 0:df031b60ca29 16 *
pcercuei 0:df031b60ca29 17 */
pcercuei 0:df031b60ca29 18
pcercuei 0:df031b60ca29 19 #include "iio-config.h"
pcercuei 0:df031b60ca29 20
pcercuei 0:df031b60ca29 21 #ifdef _WIN32
pcercuei 0:df031b60ca29 22 #include <windows.h>
pcercuei 0:df031b60ca29 23 #elif !defined(NO_THREADS)
pcercuei 0:df031b60ca29 24 #include <pthread.h>
pcercuei 0:df031b60ca29 25 #endif
pcercuei 0:df031b60ca29 26
pcercuei 0:df031b60ca29 27 #include <stdlib.h>
pcercuei 0:df031b60ca29 28
pcercuei 0:df031b60ca29 29 struct iio_mutex {
pcercuei 0:df031b60ca29 30 #ifdef NO_THREADS
pcercuei 0:df031b60ca29 31 int foo; /* avoid complaints about empty structure */
pcercuei 0:df031b60ca29 32 #else
pcercuei 0:df031b60ca29 33 #ifdef _WIN32
pcercuei 0:df031b60ca29 34 CRITICAL_SECTION lock;
pcercuei 0:df031b60ca29 35 #else
pcercuei 0:df031b60ca29 36 pthread_mutex_t lock;
pcercuei 0:df031b60ca29 37 #endif
pcercuei 0:df031b60ca29 38 #endif
pcercuei 0:df031b60ca29 39 };
pcercuei 0:df031b60ca29 40
pcercuei 0:df031b60ca29 41 struct iio_mutex * iio_mutex_create(void)
pcercuei 0:df031b60ca29 42 {
pcercuei 0:df031b60ca29 43 struct iio_mutex *lock = malloc(sizeof(*lock));
pcercuei 0:df031b60ca29 44
pcercuei 0:df031b60ca29 45 if (!lock)
pcercuei 0:df031b60ca29 46 return NULL;
pcercuei 0:df031b60ca29 47
pcercuei 0:df031b60ca29 48 #ifndef NO_THREADS
pcercuei 0:df031b60ca29 49 #ifdef _WIN32
pcercuei 0:df031b60ca29 50 InitializeCriticalSection(&lock->lock);
pcercuei 0:df031b60ca29 51 #else
pcercuei 0:df031b60ca29 52 pthread_mutex_init(&lock->lock, NULL);
pcercuei 0:df031b60ca29 53 #endif
pcercuei 0:df031b60ca29 54 #endif
pcercuei 0:df031b60ca29 55 return lock;
pcercuei 0:df031b60ca29 56 }
pcercuei 0:df031b60ca29 57
pcercuei 0:df031b60ca29 58 void iio_mutex_destroy(struct iio_mutex *lock)
pcercuei 0:df031b60ca29 59 {
pcercuei 0:df031b60ca29 60 #ifndef NO_THREADS
pcercuei 0:df031b60ca29 61 #ifdef _WIN32
pcercuei 0:df031b60ca29 62 DeleteCriticalSection(&lock->lock);
pcercuei 0:df031b60ca29 63 #else
pcercuei 0:df031b60ca29 64 pthread_mutex_destroy(&lock->lock);
pcercuei 0:df031b60ca29 65 #endif
pcercuei 0:df031b60ca29 66 #endif
pcercuei 0:df031b60ca29 67 free(lock);
pcercuei 0:df031b60ca29 68 }
pcercuei 0:df031b60ca29 69
pcercuei 0:df031b60ca29 70 void iio_mutex_lock(struct iio_mutex *lock)
pcercuei 0:df031b60ca29 71 {
pcercuei 0:df031b60ca29 72 #ifndef NO_THREADS
pcercuei 0:df031b60ca29 73 #ifdef _WIN32
pcercuei 0:df031b60ca29 74 EnterCriticalSection(&lock->lock);
pcercuei 0:df031b60ca29 75 #else
pcercuei 0:df031b60ca29 76 pthread_mutex_lock(&lock->lock);
pcercuei 0:df031b60ca29 77 #endif
pcercuei 0:df031b60ca29 78 #endif
pcercuei 0:df031b60ca29 79 }
pcercuei 0:df031b60ca29 80
pcercuei 0:df031b60ca29 81 void iio_mutex_unlock(struct iio_mutex *lock)
pcercuei 0:df031b60ca29 82 {
pcercuei 0:df031b60ca29 83 #ifndef NO_THREADS
pcercuei 0:df031b60ca29 84 #ifdef _WIN32
pcercuei 0:df031b60ca29 85 LeaveCriticalSection(&lock->lock);
pcercuei 0:df031b60ca29 86 #else
pcercuei 0:df031b60ca29 87 pthread_mutex_unlock(&lock->lock);
pcercuei 0:df031b60ca29 88 #endif
pcercuei 0:df031b60ca29 89 #endif
pcercuei 0:df031b60ca29 90 }
pcercuei 0:df031b60ca29 91