/* * Copyright (C) 2008-2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SENSORS_H_ #include <poll.h> #include <hardware/hardware.h> #include <hardware/sensors.h> /* * cros_ec_sensors_poll_context_t: * * Responsible for implementing the pool functions. * We are currently polling on 2 files: * - the IIO ring buffer (via CrosECSensor object) * - a pipe to sleep on. a call to activate() will wake up * the context poll() is running in. * * This code could accomodate more than one ring buffer. * If we implement wake up/non wake up sensors, we would lister to * iio buffer woken up by sysfs triggers. */ struct cros_ec_sensors_poll_context_t { sensors_poll_device_1_t device; // must be first cros_ec_sensors_poll_context_t( const struct hw_module_t *module, const char *ring_device_name, const char *ring_trigger_name); private: enum { crosEcRingFd = 0, crosEcWakeFd, numFds, }; static const char WAKE_MESSAGE = 'W'; struct pollfd mPollFds[numFds]; int mWritePipeFd; CrosECSensor *mSensor; ~cros_ec_sensors_poll_context_t(); int activate(int handle, int enabled); int setDelay(int handle, int64_t ns); int pollEvents(sensors_event_t* data, int count); int batch(int handle, int flags, int64_t period_ns, int64_t timeout); int flush(int handle); static int wrapper_close(struct hw_device_t *dev); static int wrapper_activate(struct sensors_poll_device_t *dev, int handle, int enabled); static int wrapper_setDelay(struct sensors_poll_device_t *dev, int handle, int64_t ns); static int wrapper_poll(struct sensors_poll_device_t *dev, sensors_event_t* data, int count); static int wrapper_batch(struct sensors_poll_device_1 *dev, int handle, int flags, int64_t period_ns, int64_t timeout); static int wrapper_flush(struct sensors_poll_device_1 *dev, int handle); }; #define SENSORS_H_ #endif /* SENSORS_H_ */