1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* 2a73d574dda77810ae10046c68e7a9aa38ad77603Nick Vaccaro* Copyright (C) 2014 Invensense, Inc. 3c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* Licensed under the Apache License, Version 2.0 (the "License"); 5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* you may not use this file except in compliance with the License. 6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* You may obtain a copy of the License at 7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* http://www.apache.org/licenses/LICENSE-2.0 9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* 10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* Unless required by applicable law or agreed to in writing, software 11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* distributed under the License is distributed on an "AS IS" BASIS, 12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* See the License for the specific language governing permissions and 14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro* limitations under the License. 15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro*/ 16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef ANDROID_SENSOR_BASE_H 18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define ANDROID_SENSOR_BASE_H 19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdint.h> 21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h> 22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/cdefs.h> 23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/types.h> 24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if defined ANDROID_JELLYBEAN || defined ANDROID_KITKAT 26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro//build for Jellybean or KitKat 27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGV_IF ALOGV_IF 28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGE_IF ALOGE_IF 29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGI_IF ALOGI_IF 30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGI ALOGI 31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGE ALOGE 32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGV ALOGV 33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOGW ALOGW 34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else 35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro//build for ICS or earlier version 36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif 37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define FUNC_LOG \ 39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV("%s", __PRETTY_FUNCTION__) 40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VFUNC_LOG \ 41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SensorBase::FUNC_ENTRY, \ 42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "Entering function '%s'", __PRETTY_FUNCTION__) 43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define VHANDLER_LOG \ 44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro LOGV_IF(SensorBase::HANDLER_ENTRY, \ 45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro "Entering handler '%s'", __PRETTY_FUNCTION__) 46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define CALL_MEMBER_FN(pobject, ptrToMember) ((pobject)->*(ptrToMember)) 47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MAX_SYSFS_NAME_LEN (100) 49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define IIO_BUFFER_LENGTH (480) 50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostruct sensors_event_t; 54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroclass SensorBase { 56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaropublic: 57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* Log enablers, each of these independent */ 58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool PROCESS_VERBOSE; /* process log messages */ 59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool EXTRA_VERBOSE; /* verbose log messages */ 60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool SYSFS_VERBOSE; /* log sysfs interactions as cat/echo for 61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro repro purpose on a shell */ 62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro /* Note that enabling this logs may affect performance */ 63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool FUNC_ENTRY; /* log entry in all one-time functions */ 64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool HANDLER_ENTRY; /* log entry in all handler functions */ 65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool ENG_VERBOSE; /* log a lot more info about the internals */ 66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool INPUT_DATA; /* log the data input from the events */ 67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool HANDLER_DATA; /* log the data fetched from the handlers */ 68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static bool DEBUG_BATCHING; /* log the data for debugging batching */ 69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroprotected: 71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char *dev_name; 72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro const char *data_name; 73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro char input_name[PATH_MAX]; 74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int dev_fd; 75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int data_fd; 76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int openInput(const char* inputName); 78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static int64_t getTimestamp(); 79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro static int64_t timevalToNano(timeval const& t) { 80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro return t.tv_sec * 1000000000LL + t.tv_usec * 1000; 81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro } 82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int open_device(); 84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int close_device(); 85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaropublic: 87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro SensorBase(const char* dev_name, const char* data_name); 88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual ~SensorBase(); 89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int readEvents(sensors_event_t* data, int count) = 0; 91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readSample(long *data, int64_t *timestamp); 92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro int readRawSample(float *data, int64_t *timestamp); 93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual bool hasPendingEvents() const; 94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int getFd() const; 95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int setDelay(int32_t handle, int64_t ns); 96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int enable(int32_t handle, int enabled); 97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int query(int what, int* value); 98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro virtual int flush(int handle); 100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}; 101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/ 103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro 104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif // ANDROID_SENSOR_BASE_H 105