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#include <fcntl.h>
18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <errno.h>
19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <math.h>
20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <poll.h>
21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <unistd.h>
22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdlib.h>
23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <dirent.h>
24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <sys/select.h>
25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <cutils/log.h>
26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <linux/input.h>
27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <cutils/properties.h>
29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "SensorBase.h"
31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*****************************************************************************/
33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro// static vars
35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::PROCESS_VERBOSE = false;
36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::EXTRA_VERBOSE = false;
37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::SYSFS_VERBOSE = false;
38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::FUNC_ENTRY = false;
40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::HANDLER_ENTRY = false;
41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::ENG_VERBOSE = false;
42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::INPUT_DATA = false;
43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::HANDLER_DATA = false;
44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::DEBUG_BATCHING = false;
45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroSensorBase::SensorBase(const char* dev_name,
47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                       const char* data_name)
48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                        : dev_name(dev_name),
49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                          data_name(data_name),
50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                          dev_fd(-1),
51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                          data_fd(-1)
52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (data_name) {
54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        data_fd = openInput(data_name);
55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    char value[PROPERTY_VALUE_MAX];
58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.verbose.basic", value, "0");
59c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
60c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        PROCESS_VERBOSE = true;
61c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
62c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.verbose.extra", value, "0");
63c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        EXTRA_VERBOSE = true;
65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.verbose.sysfs", value, "0");
67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        SYSFS_VERBOSE = true;
69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.verbose.engineering", value, "0");
71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        ENG_VERBOSE = true;
73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.entry.function", value, "0");
75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        FUNC_ENTRY = true;
77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.entry.handler", value, "0");
79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        HANDLER_ENTRY = true;
81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.data.input", value, "0");
83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        INPUT_DATA = true;
85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.data.handler", value, "0");
87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        HANDLER_DATA = true;
89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    property_get("invn.hal.debug.batching", value, "0");
91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (atoi(value)) {
92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        DEBUG_BATCHING = true;
93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick VaccaroSensorBase::~SensorBase()
97c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
98c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (data_fd >= 0) {
99c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        close(data_fd);
100c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
101c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (dev_fd >= 0) {
102c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        close(dev_fd);
103c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
104c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
105c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
106c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::open_device()
107c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
108c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (dev_fd<0 && dev_name) {
109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        dev_fd = open(dev_name, O_RDONLY);
110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        LOGE_IF(dev_fd<0, "Couldn't open %s (%s)", dev_name, strerror(errno));
111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::close_device()
116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (dev_fd >= 0) {
118c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        close(dev_fd);
119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        dev_fd = -1;
120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::getFd() const
125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (!data_name) {
127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return dev_fd;
128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return data_fd;
130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::setDelay(int32_t handle, int64_t ns)
133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarobool SensorBase::hasPendingEvents() const
138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return false;
140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint64_t SensorBase::getTimestamp()
143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    struct timespec t;
145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    t.tv_sec = t.tv_nsec = 0;
146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    clock_gettime(CLOCK_MONOTONIC, &t);
147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return int64_t(t.tv_sec) * 1000000000LL + t.tv_nsec;
148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
150c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::openInput(const char *inputName)
151c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
152c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    int fd = -1;
153c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    const char *dirname = "/dev/input";
154c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    char devname[PATH_MAX];
155c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    char *filename;
156c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    DIR *dir;
157c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    struct dirent *de;
158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    dir = opendir(dirname);
159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if(dir == NULL)
160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return -1;
161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    strcpy(devname, dirname);
162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    filename = devname + strlen(devname);
163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    *filename++ = '/';
164c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    while((de = readdir(dir))) {
165c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        if(de->d_name[0] == '.' &&
166c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                (de->d_name[1] == '\0' ||
167c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                        (de->d_name[1] == '.' && de->d_name[2] == '\0')))
168c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            continue;
169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        strcpy(filename, de->d_name);
170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        fd = open(devname, O_RDONLY);
171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        LOGV_IF(EXTRA_VERBOSE, "path open %s", devname);
172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        LOGI("path open %s", devname);
173c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        if (fd >= 0) {
174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            char name[80];
175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            if (ioctl(fd, EVIOCGNAME(sizeof(name) - 1), &name) < 1) {
176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                name[0] = '\0';
177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            }
178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            LOGV_IF(EXTRA_VERBOSE, "name read %s", name);
179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            if (!strcmp(name, inputName)) {
180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                strcpy(input_name, filename);
181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                break;
182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            } else {
183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                close(fd);
184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro                fd = -1;
185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            }
186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        }
187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    closedir(dir);
189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    LOGE_IF(fd < 0, "couldn't find '%s' input device", inputName);
190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return fd;
191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::enable(int32_t handle, int enabled)
194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
195c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
196c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
197c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
198c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::query(int what, int* value)
199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
201c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::batch(int handle, int flags, int64_t period_ns, int64_t timeout)
204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint SensorBase::flush(int handle)
209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
210c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    return 0;
211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
212