1 /* 2 * Author: Lay, Kuan Loon <kuan.loon.lay@intel.com> 3 * Copyright (c) 2015 Intel Corporation. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be 14 * included in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25 //For kernel 4.1+, 26 //#include <linux/iio/types.h> 27 //#include <linux/iio/events.h> 28 29 //linux/iio/types.h 30 enum iio_chan_type { 31 IIO_VOLTAGE, 32 IIO_CURRENT, 33 IIO_POWER, 34 IIO_ACCEL, 35 IIO_ANGL_VEL, 36 IIO_MAGN, 37 IIO_LIGHT, 38 IIO_INTENSITY, 39 IIO_PROXIMITY, 40 IIO_TEMP, 41 IIO_INCLI, 42 IIO_ROT, 43 IIO_ANGL, 44 IIO_TIMESTAMP, 45 IIO_CAPACITANCE, 46 IIO_ALTVOLTAGE, 47 IIO_CCT, 48 IIO_PRESSURE, 49 IIO_HUMIDITYRELATIVE, 50 IIO_ACTIVITY, 51 IIO_STEPS, 52 IIO_ENERGY, 53 IIO_DISTANCE, 54 IIO_VELOCITY, 55 }; 56 57 enum iio_modifier { 58 IIO_NO_MOD, 59 IIO_MOD_X, 60 IIO_MOD_Y, 61 IIO_MOD_Z, 62 IIO_MOD_X_AND_Y, 63 IIO_MOD_X_AND_Z, 64 IIO_MOD_Y_AND_Z, 65 IIO_MOD_X_AND_Y_AND_Z, 66 IIO_MOD_X_OR_Y, 67 IIO_MOD_X_OR_Z, 68 IIO_MOD_Y_OR_Z, 69 IIO_MOD_X_OR_Y_OR_Z, 70 IIO_MOD_LIGHT_BOTH, 71 IIO_MOD_LIGHT_IR, 72 IIO_MOD_ROOT_SUM_SQUARED_X_Y, 73 IIO_MOD_SUM_SQUARED_X_Y_Z, 74 IIO_MOD_LIGHT_CLEAR, 75 IIO_MOD_LIGHT_RED, 76 IIO_MOD_LIGHT_GREEN, 77 IIO_MOD_LIGHT_BLUE, 78 IIO_MOD_QUATERNION, 79 IIO_MOD_TEMP_AMBIENT, 80 IIO_MOD_TEMP_OBJECT, 81 IIO_MOD_NORTH_MAGN, 82 IIO_MOD_NORTH_TRUE, 83 IIO_MOD_NORTH_MAGN_TILT_COMP, 84 IIO_MOD_NORTH_TRUE_TILT_COMP, 85 IIO_MOD_RUNNING, 86 IIO_MOD_JOGGING, 87 IIO_MOD_WALKING, 88 IIO_MOD_STILL, 89 IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z, 90 }; 91 92 enum iio_event_type { 93 IIO_EV_TYPE_THRESH, 94 IIO_EV_TYPE_MAG, 95 IIO_EV_TYPE_ROC, 96 IIO_EV_TYPE_THRESH_ADAPTIVE, 97 IIO_EV_TYPE_MAG_ADAPTIVE, 98 IIO_EV_TYPE_CHANGE, 99 }; 100 101 enum iio_event_direction { 102 IIO_EV_DIR_EITHER, 103 IIO_EV_DIR_RISING, 104 IIO_EV_DIR_FALLING, 105 IIO_EV_DIR_NONE, 106 }; 107 108 //linux/iio/events.h 109 #include <linux/ioctl.h> 110 111 /** 112 * struct iio_event_data - The actual event being pushed to userspace 113 * @id: event identifier 114 * @timestamp: best estimate of time of event occurrence (often from 115 * the interrupt handler) 116 */ 117 struct iio_event_data { 118 unsigned long long int id; 119 long long int timestamp; 120 }; 121 122 #define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int) 123 124 #define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF) 125 126 #define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F) 127 128 #define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF) 129 130 /* Event code number extraction depends on which type of event we have. 131 * Perhaps review this function in the future*/ 132 #define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((short int)(mask & 0xFFFF)) 133 #define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((short int)(((mask) >> 16) & 0xFFFF)) 134 135 #define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF) 136 #define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1) 137