Library for SparkFun APDS9960 Only gesture sensor checked for now.

Dependents:   SparkFun_APDS9960_Sample IoT-Polytech-Upmc

Fork of SparkFun_APDS9960 by devsar devsar

Ported SparkFun APDS9960 breakout board Arduino Library to mbed platform. Tested for gesture sensor using HRM1017.

SparkFun APDS9960: https://www.sparkfun.com/products/12787

Distributor (Japan): https://www.switch-science.com/catalog/2085/

Credits: Shawn Hymel (SparkFun Electronics) for original Arduino Library.

PS. I'm not affiliated with any of the above company.

Committer:
devsar
Date:
Sun Apr 05 13:48:45 2015 +0000
Revision:
0:830ac1db5bf7
Initial Release.; Use Interrupt to detect.; Only check gesture sensor. (will test other sensor later)

Who changed what in which revision?

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