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