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