Elliot Heisenberg / APDS_9960

Dependents:   MoveYourTetris

Fork of APDS_9960 by Krishan Bhagat

Committer:
Willheisen
Date:
Sun Apr 24 21:38:02 2016 +0000
Revision:
5:edeac466a3b7
fre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Willheisen 5:edeac466a3b7 1 #include "mbed.h"
Willheisen 5:edeac466a3b7 2
Willheisen 5:edeac466a3b7 3 //Classe du capteur de mouvement APDS_9960
Willheisen 5:edeac466a3b7 4
Willheisen 5:edeac466a3b7 5 #define DEBUG 0
Willheisen 5:edeac466a3b7 6
Willheisen 5:edeac466a3b7 7 /* APDS-9960 I2C address */
Willheisen 5:edeac466a3b7 8 #define APDS9960_I2C_ADDR 0x39
Willheisen 5:edeac466a3b7 9
Willheisen 5:edeac466a3b7 10 /* Gesture parameters */
Willheisen 5:edeac466a3b7 11 #define GESTURE_THRESHOLD_OUT 10
Willheisen 5:edeac466a3b7 12 #define GESTURE_SENSITIVITY_1 50
Willheisen 5:edeac466a3b7 13 #define GESTURE_SENSITIVITY_2 20
Willheisen 5:edeac466a3b7 14
Willheisen 5:edeac466a3b7 15 /* Error code for returned values */
Willheisen 5:edeac466a3b7 16 #define ERROR 0xFF
Willheisen 5:edeac466a3b7 17
Willheisen 5:edeac466a3b7 18 /* Acceptable device IDs */
Willheisen 5:edeac466a3b7 19 #define APDS9960_ID_1 0xAB
Willheisen 5:edeac466a3b7 20 #define APDS9960_ID_2 0x9C
Willheisen 5:edeac466a3b7 21
Willheisen 5:edeac466a3b7 22 /* Misc parameters */
Willheisen 5:edeac466a3b7 23 #define FIFO_PAUSE_TIME 0.30 // Wait period (ms) between FIFO reads
Willheisen 5:edeac466a3b7 24
Willheisen 5:edeac466a3b7 25 /* APDS-9960 register addresses */
Willheisen 5:edeac466a3b7 26 #define APDS9960_ENABLE 0x80
Willheisen 5:edeac466a3b7 27 #define APDS9960_ATIME 0x81
Willheisen 5:edeac466a3b7 28 #define APDS9960_WTIME 0x83
Willheisen 5:edeac466a3b7 29 #define APDS9960_AILTL 0x84
Willheisen 5:edeac466a3b7 30 #define APDS9960_AILTH 0x85
Willheisen 5:edeac466a3b7 31 #define APDS9960_AIHTL 0x86
Willheisen 5:edeac466a3b7 32 #define APDS9960_AIHTH 0x87
Willheisen 5:edeac466a3b7 33 #define APDS9960_PILT 0x89
Willheisen 5:edeac466a3b7 34 #define APDS9960_PIHT 0x8B
Willheisen 5:edeac466a3b7 35 #define APDS9960_PERS 0x8C
Willheisen 5:edeac466a3b7 36 #define APDS9960_CONFIG1 0x8D
Willheisen 5:edeac466a3b7 37 #define APDS9960_PPULSE 0x8E
Willheisen 5:edeac466a3b7 38 #define APDS9960_CONTROL 0x8F
Willheisen 5:edeac466a3b7 39 #define APDS9960_CONFIG2 0x90
Willheisen 5:edeac466a3b7 40 #define APDS9960_ID 0x92
Willheisen 5:edeac466a3b7 41 #define APDS9960_STATUS 0x93
Willheisen 5:edeac466a3b7 42 #define APDS9960_CDATAL 0x94
Willheisen 5:edeac466a3b7 43 #define APDS9960_CDATAH 0x95
Willheisen 5:edeac466a3b7 44 #define APDS9960_RDATAL 0x96
Willheisen 5:edeac466a3b7 45 #define APDS9960_RDATAH 0x97
Willheisen 5:edeac466a3b7 46 #define APDS9960_GDATAL 0x98
Willheisen 5:edeac466a3b7 47 #define APDS9960_GDATAH 0x99
Willheisen 5:edeac466a3b7 48 #define APDS9960_BDATAL 0x9A
Willheisen 5:edeac466a3b7 49 #define APDS9960_BDATAH 0x9B
Willheisen 5:edeac466a3b7 50 #define APDS9960_PDATA 0x9C
Willheisen 5:edeac466a3b7 51 #define APDS9960_POFFSET_UR 0x9D
Willheisen 5:edeac466a3b7 52 #define APDS9960_POFFSET_DL 0x9E
Willheisen 5:edeac466a3b7 53 #define APDS9960_CONFIG3 0x9F
Willheisen 5:edeac466a3b7 54 #define APDS9960_GPENTH 0xA0
Willheisen 5:edeac466a3b7 55 #define APDS9960_GEXTH 0xA1
Willheisen 5:edeac466a3b7 56 #define APDS9960_GCONF1 0xA2
Willheisen 5:edeac466a3b7 57 #define APDS9960_GCONF2 0xA3
Willheisen 5:edeac466a3b7 58 #define APDS9960_GOFFSET_U 0xA4
Willheisen 5:edeac466a3b7 59 #define APDS9960_GOFFSET_D 0xA5
Willheisen 5:edeac466a3b7 60 #define APDS9960_GOFFSET_L 0xA7
Willheisen 5:edeac466a3b7 61 #define APDS9960_GOFFSET_R 0xA9
Willheisen 5:edeac466a3b7 62 #define APDS9960_GPULSE 0xA6
Willheisen 5:edeac466a3b7 63 #define APDS9960_GCONF3 0xAA
Willheisen 5:edeac466a3b7 64 #define APDS9960_GCONF4 0xAB
Willheisen 5:edeac466a3b7 65 #define APDS9960_GFLVL 0xAE
Willheisen 5:edeac466a3b7 66 #define APDS9960_GSTATUS 0xAF
Willheisen 5:edeac466a3b7 67 #define APDS9960_IFORCE 0xE4
Willheisen 5:edeac466a3b7 68 #define APDS9960_PICLEAR 0xE5
Willheisen 5:edeac466a3b7 69 #define APDS9960_CICLEAR 0xE6
Willheisen 5:edeac466a3b7 70 #define APDS9960_AICLEAR 0xE7
Willheisen 5:edeac466a3b7 71 #define APDS9960_GFIFO_U 0xFC
Willheisen 5:edeac466a3b7 72 #define APDS9960_GFIFO_D 0xFD
Willheisen 5:edeac466a3b7 73 #define APDS9960_GFIFO_L 0xFE
Willheisen 5:edeac466a3b7 74 #define APDS9960_GFIFO_R 0xFF
Willheisen 5:edeac466a3b7 75
Willheisen 5:edeac466a3b7 76 /* Bit fields */
Willheisen 5:edeac466a3b7 77 #define APDS9960_PON 0x01
Willheisen 5:edeac466a3b7 78 #define APDS9960_AEN 0x02
Willheisen 5:edeac466a3b7 79 #define APDS9960_PEN 0x04
Willheisen 5:edeac466a3b7 80 #define APDS9960_WEN 0x08
Willheisen 5:edeac466a3b7 81 #define APSD9960_AIEN 0x10
Willheisen 5:edeac466a3b7 82 #define APDS9960_PIEN 0x20
Willheisen 5:edeac466a3b7 83 #define APDS9960_GEN 0x40
Willheisen 5:edeac466a3b7 84 #define APDS9960_GVALID 0x01
Willheisen 5:edeac466a3b7 85
Willheisen 5:edeac466a3b7 86 /* On/Off definitions */
Willheisen 5:edeac466a3b7 87 #define Off 0
Willheisen 5:edeac466a3b7 88 #define On 1
Willheisen 5:edeac466a3b7 89
Willheisen 5:edeac466a3b7 90 /* Acceptable parameters for setMode */
Willheisen 5:edeac466a3b7 91 #define Power 0
Willheisen 5:edeac466a3b7 92 #define AMBIENT_LIGHT 1
Willheisen 5:edeac466a3b7 93 #define PROXIMITY 2
Willheisen 5:edeac466a3b7 94 #define WAIT 3
Willheisen 5:edeac466a3b7 95 #define AMBIENT_LIGHT_INT 4
Willheisen 5:edeac466a3b7 96 #define PROXIMITY_INT 5
Willheisen 5:edeac466a3b7 97 #define GESTURE 6
Willheisen 5:edeac466a3b7 98 #define ALL 7
Willheisen 5:edeac466a3b7 99
Willheisen 5:edeac466a3b7 100 /* LED Drive values */
Willheisen 5:edeac466a3b7 101 #define LED_DRIVE_100MA 0
Willheisen 5:edeac466a3b7 102 #define LED_DRIVE_50MA 1
Willheisen 5:edeac466a3b7 103 #define LED_DRIVE_25MA 2
Willheisen 5:edeac466a3b7 104 #define LED_DRIVE_12_5MA 3
Willheisen 5:edeac466a3b7 105
Willheisen 5:edeac466a3b7 106 /* Proximity Gain (PGAIN) values */
Willheisen 5:edeac466a3b7 107 #define PGAIN_1X 0
Willheisen 5:edeac466a3b7 108 #define PGAIN_2X 1
Willheisen 5:edeac466a3b7 109 #define PGAIN_4X 2
Willheisen 5:edeac466a3b7 110 #define PGAIN_8X 3
Willheisen 5:edeac466a3b7 111
Willheisen 5:edeac466a3b7 112 /* ALS Gain (AGAIN) values */
Willheisen 5:edeac466a3b7 113 #define AGAIN_1X 0
Willheisen 5:edeac466a3b7 114 #define AGAIN_4X 1
Willheisen 5:edeac466a3b7 115 #define AGAIN_16X 2
Willheisen 5:edeac466a3b7 116 #define AGAIN_64X 3
Willheisen 5:edeac466a3b7 117
Willheisen 5:edeac466a3b7 118 /* Gesture Gain (GGAIN) values */
Willheisen 5:edeac466a3b7 119 #define GGAIN_1X 0
Willheisen 5:edeac466a3b7 120 #define GGAIN_2X 1
Willheisen 5:edeac466a3b7 121 #define GGAIN_4X 2
Willheisen 5:edeac466a3b7 122 #define GGAIN_8X 3
Willheisen 5:edeac466a3b7 123
Willheisen 5:edeac466a3b7 124 /* LED Boost values */
Willheisen 5:edeac466a3b7 125 #define LED_BOOST_100 0
Willheisen 5:edeac466a3b7 126 #define LED_BOOST_150 1
Willheisen 5:edeac466a3b7 127 #define LED_BOOST_200 2
Willheisen 5:edeac466a3b7 128 #define LED_BOOST_300 3
Willheisen 5:edeac466a3b7 129
Willheisen 5:edeac466a3b7 130 /* Gesture wait time values */
Willheisen 5:edeac466a3b7 131 #define GWTIME_0MS 0
Willheisen 5:edeac466a3b7 132 #define GWTIME_2_8MS 1
Willheisen 5:edeac466a3b7 133 #define GWTIME_5_6MS 2
Willheisen 5:edeac466a3b7 134 #define GWTIME_8_4MS 3
Willheisen 5:edeac466a3b7 135 #define GWTIME_14_0MS 4
Willheisen 5:edeac466a3b7 136 #define GWTIME_22_4MS 5
Willheisen 5:edeac466a3b7 137 #define GWTIME_30_8MS 6
Willheisen 5:edeac466a3b7 138 #define GWTIME_39_2MS 7
Willheisen 5:edeac466a3b7 139
Willheisen 5:edeac466a3b7 140 /* Default values */
Willheisen 5:edeac466a3b7 141 #define DEFAULT_ATIME 219 // 103ms
Willheisen 5:edeac466a3b7 142 #define DEFAULT_WTIME 246 // 27ms
Willheisen 5:edeac466a3b7 143 #define DEFAULT_PROX_PPULSE 0x87 // 16us, 8 pulses
Willheisen 5:edeac466a3b7 144 #define DEFAULT_GESTURE_PPULSE 0x89 // 16us, 10 pulses
Willheisen 5:edeac466a3b7 145 #define DEFAULT_POFFSET_UR 0 // 0 offset
Willheisen 5:edeac466a3b7 146 #define DEFAULT_POFFSET_DL 0 // 0 offset
Willheisen 5:edeac466a3b7 147 #define DEFAULT_CONFIG1 0x60 // No 12x wait (WTIME) factor
Willheisen 5:edeac466a3b7 148 #define DEFAULT_LDRIVE LED_DRIVE_100MA
Willheisen 5:edeac466a3b7 149 #define DEFAULT_PGAIN PGAIN_4X
Willheisen 5:edeac466a3b7 150 #define DEFAULT_AGAIN AGAIN_4X
Willheisen 5:edeac466a3b7 151 #define DEFAULT_PILT 0 // Low proximity threshold
Willheisen 5:edeac466a3b7 152 #define DEFAULT_PIHT 50 // High proximity threshold
Willheisen 5:edeac466a3b7 153 #define DEFAULT_AILT 0xFFFF // Force interrupt for calibration
Willheisen 5:edeac466a3b7 154 #define DEFAULT_AIHT 0
Willheisen 5:edeac466a3b7 155 #define DEFAULT_PERS 0x11 // 2 consecutive prox or ALS for int.
Willheisen 5:edeac466a3b7 156 #define DEFAULT_CONFIG2 0x01 // No saturation interrupts or LED boost
Willheisen 5:edeac466a3b7 157 #define DEFAULT_CONFIG3 0 // Enable all photodiodes, no SAI
Willheisen 5:edeac466a3b7 158 #define DEFAULT_GPENTH 40 // Threshold for entering gesture mode
Willheisen 5:edeac466a3b7 159 #define DEFAULT_GEXTH 30 // Threshold for exiting gesture mode
Willheisen 5:edeac466a3b7 160 #define DEFAULT_GCONF1 0x40 // 4 gesture events for int., 1 for exit
Willheisen 5:edeac466a3b7 161 #define DEFAULT_GGAIN GGAIN_4X
Willheisen 5:edeac466a3b7 162 #define DEFAULT_GLDRIVE LED_DRIVE_100MA
Willheisen 5:edeac466a3b7 163 #define DEFAULT_GWTIME GWTIME_2_8MS
Willheisen 5:edeac466a3b7 164 #define DEFAULT_GOFFSET 0 // No offset scaling for gesture mode
Willheisen 5:edeac466a3b7 165 #define DEFAULT_GPULSE 0xC9 // 32us, 10 pulses
Willheisen 5:edeac466a3b7 166 #define DEFAULT_GCONF3 0 // All photodiodes active during gesture
Willheisen 5:edeac466a3b7 167 #define DEFAULT_GIEN 0 // Disable gesture interrupts
Willheisen 5:edeac466a3b7 168
Willheisen 5:edeac466a3b7 169 /* Direction definitions */
Willheisen 5:edeac466a3b7 170 enum {
Willheisen 5:edeac466a3b7 171 DIR_NONE,
Willheisen 5:edeac466a3b7 172 DIR_LEFT,
Willheisen 5:edeac466a3b7 173 DIR_RIGHT,
Willheisen 5:edeac466a3b7 174 DIR_UP,
Willheisen 5:edeac466a3b7 175 DIR_DOWN,
Willheisen 5:edeac466a3b7 176 DIR_NEAR,
Willheisen 5:edeac466a3b7 177 DIR_FAR,
Willheisen 5:edeac466a3b7 178 DIR_ALL
Willheisen 5:edeac466a3b7 179 };
Willheisen 5:edeac466a3b7 180
Willheisen 5:edeac466a3b7 181 /* State definitions */
Willheisen 5:edeac466a3b7 182 enum {
Willheisen 5:edeac466a3b7 183 NA_STATE,
Willheisen 5:edeac466a3b7 184 NEAR_STATE,
Willheisen 5:edeac466a3b7 185 FAR_STATE,
Willheisen 5:edeac466a3b7 186 ALL_STATE
Willheisen 5:edeac466a3b7 187 };
Willheisen 5:edeac466a3b7 188
Willheisen 5:edeac466a3b7 189 /* Container for gesture data */
Willheisen 5:edeac466a3b7 190 typedef struct gesture_data_type {
Willheisen 5:edeac466a3b7 191 uint8_t u_data[32];
Willheisen 5:edeac466a3b7 192 uint8_t d_data[32];
Willheisen 5:edeac466a3b7 193 uint8_t l_data[32];
Willheisen 5:edeac466a3b7 194 uint8_t r_data[32];
Willheisen 5:edeac466a3b7 195 uint8_t sindex;
Willheisen 5:edeac466a3b7 196 uint8_t total_gestures;
Willheisen 5:edeac466a3b7 197 uint8_t in_threshold;
Willheisen 5:edeac466a3b7 198 uint8_t out_threshold;
Willheisen 5:edeac466a3b7 199 } gesture_data_type;
Willheisen 5:edeac466a3b7 200
Willheisen 5:edeac466a3b7 201
Willheisen 5:edeac466a3b7 202 class glibr{
Willheisen 5:edeac466a3b7 203
Willheisen 5:edeac466a3b7 204 public:
Willheisen 5:edeac466a3b7 205
Willheisen 5:edeac466a3b7 206
Willheisen 5:edeac466a3b7 207 glibr(PinName sda, PinName scl); //constructor
Willheisen 5:edeac466a3b7 208 ~glibr();
Willheisen 5:edeac466a3b7 209
Willheisen 5:edeac466a3b7 210
Willheisen 5:edeac466a3b7 211 bool ginit();
Willheisen 5:edeac466a3b7 212 /* Initialization methods */
Willheisen 5:edeac466a3b7 213
Willheisen 5:edeac466a3b7 214 uint8_t getMode();
Willheisen 5:edeac466a3b7 215 bool setMode(uint8_t mode, uint8_t enable);
Willheisen 5:edeac466a3b7 216
Willheisen 5:edeac466a3b7 217 /* Turn the APDS-9960 on and off */
Willheisen 5:edeac466a3b7 218 bool enablePower();
Willheisen 5:edeac466a3b7 219 bool disablePower();
Willheisen 5:edeac466a3b7 220
Willheisen 5:edeac466a3b7 221 /* Enable or disable specific sensors */
Willheisen 5:edeac466a3b7 222 bool enableLightSensor(bool interrupts = false);
Willheisen 5:edeac466a3b7 223 bool disableLightSensor();
Willheisen 5:edeac466a3b7 224 bool enableProximitySensor(bool interrupts = false);
Willheisen 5:edeac466a3b7 225 bool disableProximitySensor();
Willheisen 5:edeac466a3b7 226 bool enableGestureSensor(bool interrupts = true);
Willheisen 5:edeac466a3b7 227 bool disableGestureSensor();
Willheisen 5:edeac466a3b7 228
Willheisen 5:edeac466a3b7 229 /* LED drive strength control */
Willheisen 5:edeac466a3b7 230 uint8_t getLEDDrive();
Willheisen 5:edeac466a3b7 231 bool setLEDDrive(uint8_t drive);
Willheisen 5:edeac466a3b7 232 uint8_t getGestureLEDDrive();
Willheisen 5:edeac466a3b7 233 bool setGestureLEDDrive(uint8_t drive);
Willheisen 5:edeac466a3b7 234
Willheisen 5:edeac466a3b7 235 /* Gain control */
Willheisen 5:edeac466a3b7 236 uint8_t getAmbientLightGain();
Willheisen 5:edeac466a3b7 237 bool setAmbientLightGain(uint8_t gain);
Willheisen 5:edeac466a3b7 238 uint8_t getProximityGain();
Willheisen 5:edeac466a3b7 239 bool setProximityGain(uint8_t gain);
Willheisen 5:edeac466a3b7 240 uint8_t getGestureGain();
Willheisen 5:edeac466a3b7 241 bool setGestureGain(uint8_t gain);
Willheisen 5:edeac466a3b7 242
Willheisen 5:edeac466a3b7 243 /* Get and set light interrupt thresholds */
Willheisen 5:edeac466a3b7 244 bool getLightIntLowThreshold(uint16_t &threshold);
Willheisen 5:edeac466a3b7 245 bool setLightIntLowThreshold(uint16_t threshold);
Willheisen 5:edeac466a3b7 246 bool getLightIntHighThreshold(uint16_t &threshold);
Willheisen 5:edeac466a3b7 247 bool setLightIntHighThreshold(uint16_t threshold);
Willheisen 5:edeac466a3b7 248
Willheisen 5:edeac466a3b7 249 /* Get and set proximity interrupt thresholds */
Willheisen 5:edeac466a3b7 250 bool getProximityIntLowThreshold(uint8_t &threshold);
Willheisen 5:edeac466a3b7 251 bool setProximityIntLowThreshold(uint8_t threshold);
Willheisen 5:edeac466a3b7 252 bool getProximityIntHighThreshold(uint8_t &threshold);
Willheisen 5:edeac466a3b7 253 bool setProximityIntHighThreshold(uint8_t threshold);
Willheisen 5:edeac466a3b7 254
Willheisen 5:edeac466a3b7 255 /* Get and set interrupt enables */
Willheisen 5:edeac466a3b7 256 uint8_t getAmbientLightIntEnable();
Willheisen 5:edeac466a3b7 257 bool setAmbientLightIntEnable(uint8_t enable);
Willheisen 5:edeac466a3b7 258 uint8_t getProximityIntEnable();
Willheisen 5:edeac466a3b7 259 bool setProximityIntEnable(uint8_t enable);
Willheisen 5:edeac466a3b7 260 uint8_t getGestureIntEnable();
Willheisen 5:edeac466a3b7 261 bool setGestureIntEnable(uint8_t enable);
Willheisen 5:edeac466a3b7 262
Willheisen 5:edeac466a3b7 263 /* Clear interrupts */
Willheisen 5:edeac466a3b7 264 bool clearAmbientLightInt();
Willheisen 5:edeac466a3b7 265 bool clearProximityInt();
Willheisen 5:edeac466a3b7 266
Willheisen 5:edeac466a3b7 267 /* Ambient light methods */
Willheisen 5:edeac466a3b7 268 bool readAmbientLight(uint16_t &val);
Willheisen 5:edeac466a3b7 269 bool readRedLight(uint16_t &val);
Willheisen 5:edeac466a3b7 270 bool readGreenLight(uint16_t &val);
Willheisen 5:edeac466a3b7 271 bool readBlueLight(uint16_t &val);
Willheisen 5:edeac466a3b7 272
Willheisen 5:edeac466a3b7 273 /* Proximity methods */
Willheisen 5:edeac466a3b7 274 bool readProximity(uint8_t &val);
Willheisen 5:edeac466a3b7 275
Willheisen 5:edeac466a3b7 276 /* Gesture methods */
Willheisen 5:edeac466a3b7 277 bool isGestureAvailable();
Willheisen 5:edeac466a3b7 278 int readGesture();
Willheisen 5:edeac466a3b7 279
Willheisen 5:edeac466a3b7 280 private:
Willheisen 5:edeac466a3b7 281 /* Gesture processing */
Willheisen 5:edeac466a3b7 282 void resetGestureParameters();
Willheisen 5:edeac466a3b7 283 bool processGestureData();
Willheisen 5:edeac466a3b7 284 bool decodeGesture();
Willheisen 5:edeac466a3b7 285
Willheisen 5:edeac466a3b7 286 /* Proximity Interrupt Threshold */
Willheisen 5:edeac466a3b7 287 uint8_t getProxIntLowThresh();
Willheisen 5:edeac466a3b7 288 bool setProxIntLowThresh(uint8_t threshold);
Willheisen 5:edeac466a3b7 289 uint8_t getProxIntHighThresh();
Willheisen 5:edeac466a3b7 290 bool setProxIntHighThresh(uint8_t threshold);
Willheisen 5:edeac466a3b7 291
Willheisen 5:edeac466a3b7 292 /* LED Boost Control */
Willheisen 5:edeac466a3b7 293 uint8_t getLEDBoost();
Willheisen 5:edeac466a3b7 294 bool setLEDBoost(uint8_t boost);
Willheisen 5:edeac466a3b7 295
Willheisen 5:edeac466a3b7 296 /* Proximity photodiode select */
Willheisen 5:edeac466a3b7 297 uint8_t getProxGainCompEnable();
Willheisen 5:edeac466a3b7 298 bool setProxGainCompEnable(uint8_t enable);
Willheisen 5:edeac466a3b7 299 uint8_t getProxPhotoMask();
Willheisen 5:edeac466a3b7 300 bool setProxPhotoMask(uint8_t mask);
Willheisen 5:edeac466a3b7 301
Willheisen 5:edeac466a3b7 302 /* Gesture threshold control */
Willheisen 5:edeac466a3b7 303 uint8_t getGestureEnterThresh();
Willheisen 5:edeac466a3b7 304 bool setGestureEnterThresh(uint8_t threshold);
Willheisen 5:edeac466a3b7 305 uint8_t getGestureExitThresh();
Willheisen 5:edeac466a3b7 306 bool setGestureExitThresh(uint8_t threshold);
Willheisen 5:edeac466a3b7 307
Willheisen 5:edeac466a3b7 308 /* Gesture LED, gain, and time control */
Willheisen 5:edeac466a3b7 309 uint8_t getGestureWaitTime();
Willheisen 5:edeac466a3b7 310 bool setGestureWaitTime(uint8_t time);
Willheisen 5:edeac466a3b7 311
Willheisen 5:edeac466a3b7 312 /* Gesture mode */
Willheisen 5:edeac466a3b7 313 uint8_t getGestureMode();
Willheisen 5:edeac466a3b7 314 bool setGestureMode(uint8_t mode);
Willheisen 5:edeac466a3b7 315
Willheisen 5:edeac466a3b7 316 /* Members */
Willheisen 5:edeac466a3b7 317 gesture_data_type gesture_data_; //instanciation from struct
Willheisen 5:edeac466a3b7 318 int gesture_ud_delta_;
Willheisen 5:edeac466a3b7 319 int gesture_lr_delta_;
Willheisen 5:edeac466a3b7 320 int gesture_ud_count_;
Willheisen 5:edeac466a3b7 321 int gesture_lr_count_;
Willheisen 5:edeac466a3b7 322 int gesture_near_count_;
Willheisen 5:edeac466a3b7 323 int gesture_far_count_;
Willheisen 5:edeac466a3b7 324 int gesture_state_;
Willheisen 5:edeac466a3b7 325 int gesture_motion_;
Willheisen 5:edeac466a3b7 326
Willheisen 5:edeac466a3b7 327
Willheisen 5:edeac466a3b7 328
Willheisen 5:edeac466a3b7 329 uint8_t I2CreadByte(char address, char subAddress);
Willheisen 5:edeac466a3b7 330 int I2CwriteByte(char address, char subAddress, char data); //if return value is 1, then ack not sent
Willheisen 5:edeac466a3b7 331 int I2CReadDataBlock(char address, char subAddress, char *data, unsigned int len); //reads array of bytes
Willheisen 5:edeac466a3b7 332 I2C i2c;
Willheisen 5:edeac466a3b7 333
Willheisen 5:edeac466a3b7 334 };