SensorBase.h revision 49ea3e26ca3c6a779e527a0322e49a663333350a
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/* Log enablers, each of these independent */ 3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define PROCESS_VERBOSE (0) /* process log messages */ 4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define EXTRA_VERBOSE (0) /* verbose log messages */ 4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define SYSFS_VERBOSE (0) /* log sysfs interactions as cat/echo for repro 4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow purpose on a shell */ 4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define FUNC_ENTRY (0) /* log entry in all one-time functions */ 4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/* Note that enabling this logs may affect performance */ 4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define HANDLER_ENTRY (0) /* log entry in all handler functions */ 4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define ENG_VERBOSE (0) /* log some a lot more info about the internals */ 4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define INPUT_DATA (0) /* log the data input from the events */ 5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define HANDLER_DATA (0) /* log the data fetched from the handlers */ 5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define FUNC_LOG \ 5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LOGV("%s", __PRETTY_FUNCTION__) 5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define VFUNC_LOG \ 5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LOGV_IF(FUNC_ENTRY, "Entering function '%s'", __PRETTY_FUNCTION__) 5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define VHANDLER_LOG \ 5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow LOGV_IF(HANDLER_ENTRY, "Entering handler '%s'", __PRETTY_FUNCTION__) 5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define CALL_MEMBER_FN(pobject, ptrToMember) ((pobject)->*(ptrToMember)) 5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define MAX_SYSFS_NAME_LEN (100) 6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define IIO_BUFFER_LENGTH (480) 6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowstruct sensors_event_t; 6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowclass SensorBase { 6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowprotected: 6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *dev_name; 7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow const char *data_name; 7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow char input_name[PATH_MAX]; 7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int dev_fd; 7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int data_fd; 7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int openInput(const char* inputName); 7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static int64_t getTimestamp(); 7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow static int64_t timevalToNano(timeval const& t) { 7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow return t.tv_sec * 1000000000LL + t.tv_usec * 1000; 7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow } 8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int open_device(); 8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow int close_device(); 8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowpublic: 8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow SensorBase(const char* dev_name, const char* data_name); 8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 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); 9849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}; 9949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 10049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*****************************************************************************/ 10149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow 10249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif // ANDROID_SENSOR_BASE_H 103