SensorBase.h revision cd79002b2edb60b25843e5f4f9a06e768bc1a568
149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* 249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Copyright (C) 2012 Invensense, Inc. 349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Licensed under the Apache License, Version 2.0 (the "License"); 549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* you may not use this file except in compliance with the License. 649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* You may obtain a copy of the License at 749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* http://www.apache.org/licenses/LICENSE-2.0 949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* 1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* Unless required by applicable law or agreed to in writing, software 1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* distributed under the License is distributed on an "AS IS" BASIS, 1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* See the License for the specific language governing permissions and 1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow* limitations under the License. 1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow*/ 1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef ANDROID_SENSOR_BASE_H 1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ANDROID_SENSOR_BASE_H 1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <stdint.h> 2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <errno.h> 2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <sys/cdefs.h> 2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#include <sys/types.h> 2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#if defined ANDROID_JELLYBEAN 2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow//build for Jellybean 2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGV_IF ALOGV_IF 2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGE_IF ALOGE_IF 2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGI_IF ALOGI_IF 3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGI ALOGI 3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGE ALOGE 3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGV ALOGV 3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define LOGW ALOGW 3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#else 3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow//build for ICS or earlier version 3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif 3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define FUNC_LOG \ 3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LOGV("%s", __PRETTY_FUNCTION__) 4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define VFUNC_LOG \ 41cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro LOGV_IF(SensorBase::FUNC_ENTRY, \ 42cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro "Entering function '%s'", __PRETTY_FUNCTION__) 4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define VHANDLER_LOG \ 44cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro LOGV_IF(SensorBase::HANDLER_ENTRY, \ 45cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro "Entering handler '%s'", __PRETTY_FUNCTION__) 4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define CALL_MEMBER_FN(pobject, ptrToMember) ((pobject)->*(ptrToMember)) 4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_SYSFS_NAME_LEN (100) 4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define IIO_BUFFER_LENGTH (480) 5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowstruct sensors_event_t; 5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowclass SensorBase { 56cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaropublic: 57cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro /* Log enablers, each of these independent */ 58cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool PROCESS_VERBOSE; /* process log messages */ 59cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool EXTRA_VERBOSE; /* verbose log messages */ 60cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool SYSFS_VERBOSE; /* log sysfs interactions as cat/echo for 61cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro repro purpose on a shell */ 62cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro /* Note that enabling this logs may affect performance */ 63cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool FUNC_ENTRY; /* log entry in all one-time functions */ 64cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool HANDLER_ENTRY; /* log entry in all handler functions */ 65cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool ENG_VERBOSE; /* log a lot more info about the internals */ 66cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool INPUT_DATA; /* log the data input from the events */ 67cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro static bool HANDLER_DATA; /* log the data fetched from the handlers */ 68cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro 6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprotected: 7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *dev_name; 7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *data_name; 7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char input_name[PATH_MAX]; 7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dev_fd; 7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int data_fd; 7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int openInput(const char* inputName); 7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static int64_t getTimestamp(); 7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static int64_t timevalToNano(timeval const& t) { 7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return t.tv_sec * 1000000000LL + t.tv_usec * 1000; 8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow } 8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int open_device(); 8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int close_device(); 8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowpublic: 8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow SensorBase(const char* dev_name, const char* data_name); 8749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual ~SensorBase(); 8849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int readEvents(sensors_event_t* data, int count) = 0; 9049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readSample(long *data, int64_t *timestamp); 9149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int readRawSample(float *data, int64_t *timestamp); 9249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual bool hasPendingEvents() const; 9349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int getFd() const; 9449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int setDelay(int32_t handle, int64_t ns); 9549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int enable(int32_t handle, int enabled); 9649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int query(int what, int* value); 9749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 98cd79002b2edb60b25843e5f4f9a06e768bc1a568Nick Vaccaro virtual int flush(int handle); 9949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}; 10049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 10149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 10249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 10349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif // ANDROID_SENSOR_BASE_H 104