1cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca/* 2cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Copyright (C) 2015 Intel Corporation 3cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * 4cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Licensed under the Apache License, Version 2.0 (the "License"); 5cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * you may not use this file except in compliance with the License. 6cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * You may obtain a copy of the License at 7cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * 8cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * http://www.apache.org/licenses/LICENSE-2.0 9cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * 10cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Unless required by applicable law or agreed to in writing, software 11cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * distributed under the License is distributed on an "AS IS" BASIS, 12cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * See the License for the specific language governing permissions and 14cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * limitations under the License. 15cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 16cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 17cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#ifndef SENSOR_HPP 18cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#define SENSOR_HPP 19cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 202260148caf820ec683166792851b504e036c1f39Constantin Musca/** 212260148caf820ec683166792851b504e036c1f39Constantin Musca * The default sensor __attribute__((constructor)) priority is represented by 222260148caf820ec683166792851b504e036c1f39Constantin Musca * the first available priority value. The [0, 100] ones are used by the system 232260148caf820ec683166792851b504e036c1f39Constantin Musca * implementation. 242260148caf820ec683166792851b504e036c1f39Constantin Musca */ 252260148caf820ec683166792851b504e036c1f39Constantin Musca#define DEFAULT_SENSOR_CONSTRUCTOR_PRIORITY 101 262260148caf820ec683166792851b504e036c1f39Constantin Musca 27cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#include "AcquisitionThread.hpp" 28cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 29cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Muscastruct sensors_event_t; 30cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Muscaclass AcquisitionThread; 31cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 32cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca/** 33cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Sensor representation class 34cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * 35cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * It supports sensor enabling/disabling, changing the sensor's parameters 36cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * and event reading. 37cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 38cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Muscaclass Sensor { 39cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca public: 40cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 41cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Sensor constructor 42cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 43cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca Sensor(); 44cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 45cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 46cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Sensor destructor 47cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 48cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual ~Sensor(); 49cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 50cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 51cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Activate the sensor 52cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param handle sensor identifier 53cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param enabled 1 for enabling and 0 for disabling 54cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return 0 on success and a negative error number otherwise 55cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 56cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual int activate(int handle, int enabled); 57cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 58cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 59cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Set delay 60cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param handle sensor identifier 61cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param ns the sampling period at which the sensor should run, in nanoseconds 62cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return 0 on success and a negative error number otherwise 63cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 64cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual int setDelay(int handle, int64_t ns); 65cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 66cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 67cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Poll for events 68cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param data where to store the events 69cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param count the number of events returned must be <= to the count 709178ce05cb05831817580fc11fb7b20bc2031319Constantin Musca * @return number of events returned in data on success and a negative error number otherwise 71cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 72cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual int pollEvents(sensors_event_t* data, int count) = 0; 73cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 74cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 75cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Sets a sensor’s parameters, including sampling frequency and maximum report latency 76cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param handle sensor identifier 77cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param flags currently unused 78cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param period_ns the sampling period at which the sensor should run, in nanoseconds 79cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param timeout the maximum time by which events can be delayed before being reported 80cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * through the HAL, in nanoseconds 81cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return 0 on success and a negative error number otherwise 82cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 83cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual int batch(int handle, int flags, int64_t period_ns, int64_t timeout); 84cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 85cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 86cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Add a flush complete event to the end of the hardware FIFO for the specified sensor and flushes the FIFO 87cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param handle sensor identifier 88cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return 0 on success and a negative error number otherwise 89cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 90cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual int flush(int handle); 91cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 92cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 93cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Read and store an event 94cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param event where to store the event 95cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return true on success and a false otherwise 96cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 97cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca virtual bool readOneEvent(sensors_event_t *event); 98cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 99cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 100cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Get sensor identifier 101cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return sensor handle 102cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 103cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca int getHandle() { return handle; } 104cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 105cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 106cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Get sensor type 107cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return sensor type 108cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 109cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca int getType() { return type; } 110cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 111cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 112cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Get sensor delay in nanoseconds 113cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return sensor delay 114cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 115cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca int64_t getDelay() { return delay; } 116cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 117d6572c0c36e5e96c4a40bb6d8728d0fef0adc351Constantin Musca /** 118d6572c0c36e5e96c4a40bb6d8728d0fef0adc351Constantin Musca * Gravitational acceleration constant in m/s^2 119d6572c0c36e5e96c4a40bb6d8728d0fef0adc351Constantin Musca */ 120d6572c0c36e5e96c4a40bb6d8728d0fef0adc351Constantin Musca static const float kGravitationalAcceleration; 121d6572c0c36e5e96c4a40bb6d8728d0fef0adc351Constantin Musca 122cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca protected: 123cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca /** 124cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Enable or disable the associated acquisition thread 1252260148caf820ec683166792851b504e036c1f39Constantin Musca * @param pollFd poll file descriptor 126cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param handle sensor identifier 127cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @param enabled 1 for enabling and 0 for disabling 128cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * @return 0 on success and a negative error number otherwise 129cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */ 1302260148caf820ec683166792851b504e036c1f39Constantin Musca virtual int activateAcquisitionThread(int pollFd, int handle, int enabled); 131cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 132cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca AcquisitionThread *acquisitionThread; 133cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca int handle, type; 134cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca int64_t delay; 135cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca}; 136cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca 137cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#endif // SENSOR_HPP 138