diff options
Diffstat (limited to 'libsensors_iio/software/simple_apps/common/helper.c')
-rw-r--r-- | libsensors_iio/software/simple_apps/common/helper.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/libsensors_iio/software/simple_apps/common/helper.c b/libsensors_iio/software/simple_apps/common/helper.c new file mode 100644 index 0000000..4d634bd --- /dev/null +++ b/libsensors_iio/software/simple_apps/common/helper.c @@ -0,0 +1,110 @@ +/* + $License: + Copyright (C) 2011 InvenSense Corporation, All Rights Reserved. + $ + */ +/******************************************************************************* + * + * $Id: helper.c 4367 2010-12-21 03:02:55Z prao $ + * + *******************************************************************************/ + +#include <stdio.h> +#ifdef _WIN32 +#include <windows.h> +#include <conio.h> +#endif +#ifdef LINUX +#include <sys/select.h> +#endif +#include <time.h> +#include <string.h> + +#include "ml.h" +#include "slave.h" +#include "mldl.h" +#include "mltypes.h" +#include "mlstates.h" +#include "compass.h" + +#include "mlsl.h" +#include "ml.h" + +#include "helper.h" +#include "mlsetup.h" +#include "fopenCMake.h" +#include "int.h" +#include "mlos.h" + +#include "log.h" +#undef MPL_LOG_TAG +#define MPL_LOG_TAG "MPL-helper" + +#ifdef AIO +extern inv_error_t MLSLSetYamahaCompassDataMode(unsigned char mode); +#endif + +// Keyboard hit function +int ConsoleKbhit(void) +{ +#ifdef _WIN32 + return _kbhit(); +#else + struct timeval tv; + fd_set read_fd; + + tv.tv_sec=0; + tv.tv_usec=0; + FD_ZERO(&read_fd); + FD_SET(0,&read_fd); + + if(select(1, &read_fd, NULL, NULL, &tv) == -1) + return 0; + + if(FD_ISSET(0,&read_fd)) + return 1; + + return 0; +#endif +} + +char ConsoleGetChar(void) { +#ifdef _WIN32 + return _getch(); +#else + return getchar(); +#endif +} +struct mpuirq_data** InterruptPoll(int *handles, int numHandles, long tv_sec, long tv_usec) +{ + struct mpuirq_data **data; + void *tmp; + int ii; + const int irq_data_size = sizeof(**data) * numHandles + + sizeof(*data) * numHandles; + + tmp = (void *)inv_malloc(irq_data_size); + memset(tmp, 0, irq_data_size); + data = (struct mpuirq_data **)tmp; + for (ii = 0; ii < numHandles; ii++) { + data[ii] = (struct mpuirq_data *)((unsigned long)tmp + + (sizeof(*data) * numHandles) + sizeof(**data) * ii); + } + + if (IntProcess(handles, numHandles, data, tv_sec, tv_usec) > 0) { + for (ii = 0; ii < numHandles; ii++) { + if (data[ii]->interruptcount) { + inv_interrupt_handler(ii); + } + } + } + + /* Return data incase the application needs to look at the timestamp or + other part of the data */ + return data; +} + +void InterruptPollDone(struct mpuirq_data ** data) +{ + inv_free(data); +} |