Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half

Dependencies:   mbed

Committer:
Grimmkey
Date:
Thu Apr 30 20:46:27 2015 +0000
Revision:
0:b8221deeaa87
Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Grimmkey 0:b8221deeaa87 1 /**
Grimmkey 0:b8221deeaa87 2 * @author Abraham Marsen & Allison Ashlock
Grimmkey 0:b8221deeaa87 3 * Georgia Institute of Technology
Grimmkey 0:b8221deeaa87 4 * ECE 4180 Embedded Systems Design
Grimmkey 0:b8221deeaa87 5 * Professor Hamblen
Grimmkey 0:b8221deeaa87 6 * Spring 2015
Grimmkey 0:b8221deeaa87 7 *
Grimmkey 0:b8221deeaa87 8 * @section LICENSE
Grimmkey 0:b8221deeaa87 9 * ----------------------------------------------------------------------------
Grimmkey 0:b8221deeaa87 10 * "THE BEER-WARE LICENSE" (Revision 42):
Grimmkey 0:b8221deeaa87 11 * <amarsen3@gmail.com> wrote this file. As long as you retain this notice you
Grimmkey 0:b8221deeaa87 12 * can do whatever you want with this stuff. If we meet some day, and you think
Grimmkey 0:b8221deeaa87 13 * this stuff is worth it, you can buy me a beer in return.
Grimmkey 0:b8221deeaa87 14 * ----------------------------------------------------------------------------
Grimmkey 0:b8221deeaa87 15 *
Grimmkey 0:b8221deeaa87 16 *
Grimmkey 0:b8221deeaa87 17 * @section DESCRIPTION
Grimmkey 0:b8221deeaa87 18 *
Grimmkey 0:b8221deeaa87 19 * Avago Digital Proximity, Ambient Light, RGB and Gesture Sensor APDS-9960
Grimmkey 0:b8221deeaa87 20 *
Grimmkey 0:b8221deeaa87 21 * Datasheet, specs, and information:
Grimmkey 0:b8221deeaa87 22 *
Grimmkey 0:b8221deeaa87 23 * https://www.sparkfun.com/products/12787
Grimmkey 0:b8221deeaa87 24 */
Grimmkey 0:b8221deeaa87 25
Grimmkey 0:b8221deeaa87 26
Grimmkey 0:b8221deeaa87 27
Grimmkey 0:b8221deeaa87 28 #ifndef APDS9960_H
Grimmkey 0:b8221deeaa87 29 #define APDS9960_H
Grimmkey 0:b8221deeaa87 30
Grimmkey 0:b8221deeaa87 31 #include "mbed.h"
Grimmkey 0:b8221deeaa87 32
Grimmkey 0:b8221deeaa87 33 //Location of I2C slave
Grimmkey 0:b8221deeaa87 34 #define APDS9960_I2C_ADDR 0x72
Grimmkey 0:b8221deeaa87 35
Grimmkey 0:b8221deeaa87 36 /* Error code for returned values */
Grimmkey 0:b8221deeaa87 37 #define ERROR 0xFF
Grimmkey 0:b8221deeaa87 38
Grimmkey 0:b8221deeaa87 39 /* Acceptable device IDs */
Grimmkey 0:b8221deeaa87 40 #define APDS9960_ID_1 0xAB
Grimmkey 0:b8221deeaa87 41 #define APDS9960_ID_2 0x9C
Grimmkey 0:b8221deeaa87 42
Grimmkey 0:b8221deeaa87 43 //reused wait time
Grimmkey 0:b8221deeaa87 44 #define FIFO_TIME 0.30
Grimmkey 0:b8221deeaa87 45
Grimmkey 0:b8221deeaa87 46 //Gest param
Grimmkey 0:b8221deeaa87 47 #define GEST_THRESHOLD_OUT 5
Grimmkey 0:b8221deeaa87 48 #define GEST_SENSITIVITY_1 50
Grimmkey 0:b8221deeaa87 49 #define GEST_SENSITIVITY_2 20
Grimmkey 0:b8221deeaa87 50
Grimmkey 0:b8221deeaa87 51 //LOOK AT ALL MY ADDRESSES
Grimmkey 0:b8221deeaa87 52 #define APDS9960_ENABLE 0x80
Grimmkey 0:b8221deeaa87 53 #define APDS9960_ATIME 0x81
Grimmkey 0:b8221deeaa87 54 #define APDS9960_WTIME 0x83
Grimmkey 0:b8221deeaa87 55 #define APDS9960_AILTL 0x84
Grimmkey 0:b8221deeaa87 56 #define APDS9960_AILTH 0x85
Grimmkey 0:b8221deeaa87 57 #define APDS9960_AIHTL 0x86
Grimmkey 0:b8221deeaa87 58 #define APDS9960_AIHTH 0x87
Grimmkey 0:b8221deeaa87 59 #define APDS9960_PILT 0x89
Grimmkey 0:b8221deeaa87 60 #define APDS9960_PIHT 0x8B
Grimmkey 0:b8221deeaa87 61 #define APDS9960_PERS 0x8C
Grimmkey 0:b8221deeaa87 62 #define APDS9960_CONFIG1 0x8D
Grimmkey 0:b8221deeaa87 63 #define APDS9960_PPULSE 0x8E
Grimmkey 0:b8221deeaa87 64 #define APDS9960_CONTROL 0x8F
Grimmkey 0:b8221deeaa87 65 #define APDS9960_CONFIG2 0x90
Grimmkey 0:b8221deeaa87 66 #define APDS9960_ID 0x92
Grimmkey 0:b8221deeaa87 67 #define APDS9960_STATUS 0x93
Grimmkey 0:b8221deeaa87 68 #define APDS9960_CDATAL 0x94
Grimmkey 0:b8221deeaa87 69 #define APDS9960_CDATAH 0x95
Grimmkey 0:b8221deeaa87 70 #define APDS9960_RDATAL 0x96
Grimmkey 0:b8221deeaa87 71 #define APDS9960_RDATAH 0x97
Grimmkey 0:b8221deeaa87 72 #define APDS9960_GDATAL 0x98
Grimmkey 0:b8221deeaa87 73 #define APDS9960_GDATAH 0x99
Grimmkey 0:b8221deeaa87 74 #define APDS9960_BDATAL 0x9A
Grimmkey 0:b8221deeaa87 75 #define APDS9960_BDATAH 0x9B
Grimmkey 0:b8221deeaa87 76 #define APDS9960_PDATA 0x9C
Grimmkey 0:b8221deeaa87 77 #define APDS9960_POFFSET_UR 0x9D
Grimmkey 0:b8221deeaa87 78 #define APDS9960_POFFSET_DL 0x9E
Grimmkey 0:b8221deeaa87 79 #define APDS9960_CONFIG3 0x9F
Grimmkey 0:b8221deeaa87 80 #define APDS9960_GPENTH 0xA0
Grimmkey 0:b8221deeaa87 81 #define APDS9960_GEXTH 0xA1
Grimmkey 0:b8221deeaa87 82 #define APDS9960_GCONF1 0xA2
Grimmkey 0:b8221deeaa87 83 #define APDS9960_GCONF2 0xA3
Grimmkey 0:b8221deeaa87 84 #define APDS9960_GOFFSET_U 0xA4
Grimmkey 0:b8221deeaa87 85 #define APDS9960_GOFFSET_D 0xA5
Grimmkey 0:b8221deeaa87 86 #define APDS9960_GOFFSET_L 0xA7
Grimmkey 0:b8221deeaa87 87 #define APDS9960_GOFFSET_R 0xA9
Grimmkey 0:b8221deeaa87 88 #define APDS9960_GPULSE 0xA6
Grimmkey 0:b8221deeaa87 89 #define APDS9960_GCONF3 0xAA
Grimmkey 0:b8221deeaa87 90 #define APDS9960_GCONF4 0xAB
Grimmkey 0:b8221deeaa87 91 #define APDS9960_GFLVL 0xAE
Grimmkey 0:b8221deeaa87 92 #define APDS9960_GSTATUS 0xAF
Grimmkey 0:b8221deeaa87 93 #define APDS9960_IFORCE 0xE4
Grimmkey 0:b8221deeaa87 94 #define APDS9960_PICLEAR 0xE5
Grimmkey 0:b8221deeaa87 95 #define APDS9960_CICLEAR 0xE6
Grimmkey 0:b8221deeaa87 96 #define APDS9960_AICLEAR 0xE7
Grimmkey 0:b8221deeaa87 97 #define APDS9960_GFIFO_U 0xFC
Grimmkey 0:b8221deeaa87 98 #define APDS9960_GFIFO_D 0xFD
Grimmkey 0:b8221deeaa87 99 #define APDS9960_GFIFO_L 0xFE
Grimmkey 0:b8221deeaa87 100 #define APDS9960_GFIFO_R 0xFF
Grimmkey 0:b8221deeaa87 101
Grimmkey 0:b8221deeaa87 102 //bitmasks
Grimmkey 0:b8221deeaa87 103 #define APDS9960_PON 0x01
Grimmkey 0:b8221deeaa87 104 #define APDS9960_AEN 0x02
Grimmkey 0:b8221deeaa87 105 #define APDS9960_PEN 0x04
Grimmkey 0:b8221deeaa87 106 #define APDS9960_WEN 0x08
Grimmkey 0:b8221deeaa87 107 #define APSD9960_AIEN 0x10
Grimmkey 0:b8221deeaa87 108 #define APDS9960_PIEN 0x20
Grimmkey 0:b8221deeaa87 109 #define APDS9960_GEN 0x40
Grimmkey 0:b8221deeaa87 110 #define APDS9960_GVALID 0x01
Grimmkey 0:b8221deeaa87 111
Grimmkey 0:b8221deeaa87 112 /* On/Off definitions */
Grimmkey 0:b8221deeaa87 113 #define OFF 0
Grimmkey 0:b8221deeaa87 114 #define ON 1
Grimmkey 0:b8221deeaa87 115
Grimmkey 0:b8221deeaa87 116 // Acceptable parameters for setMode
Grimmkey 0:b8221deeaa87 117 enum {
Grimmkey 0:b8221deeaa87 118 POWER,
Grimmkey 0:b8221deeaa87 119 AMBIENT_LIGHT,
Grimmkey 0:b8221deeaa87 120 PROXIMITY,
Grimmkey 0:b8221deeaa87 121 WAIT,
Grimmkey 0:b8221deeaa87 122 AMBIENT_LIGHT_INT,
Grimmkey 0:b8221deeaa87 123 PROXIMITY_INT,
Grimmkey 0:b8221deeaa87 124 GESTURE,
Grimmkey 0:b8221deeaa87 125 ALL
Grimmkey 0:b8221deeaa87 126 };
Grimmkey 0:b8221deeaa87 127
Grimmkey 0:b8221deeaa87 128 /* LED Drive values */
Grimmkey 0:b8221deeaa87 129 enum {
Grimmkey 0:b8221deeaa87 130 LED_DRIVE_100MA,
Grimmkey 0:b8221deeaa87 131 LED_DRIVE_50MA,
Grimmkey 0:b8221deeaa87 132 LED_DRIVE_25MA,
Grimmkey 0:b8221deeaa87 133 LED_DRIVE_12_5MA
Grimmkey 0:b8221deeaa87 134 };
Grimmkey 0:b8221deeaa87 135
Grimmkey 0:b8221deeaa87 136 /* Proximity Gain (PGAIN) values */
Grimmkey 0:b8221deeaa87 137 enum {
Grimmkey 0:b8221deeaa87 138 PGAIN_1X,
Grimmkey 0:b8221deeaa87 139 PGAIN_2X,
Grimmkey 0:b8221deeaa87 140 PGAIN_4X,
Grimmkey 0:b8221deeaa87 141 PGAIN_8X
Grimmkey 0:b8221deeaa87 142 };
Grimmkey 0:b8221deeaa87 143
Grimmkey 0:b8221deeaa87 144 /* ALS Gain (AGAIN) values */
Grimmkey 0:b8221deeaa87 145 enum {
Grimmkey 0:b8221deeaa87 146 AGAIN_1X,
Grimmkey 0:b8221deeaa87 147 AGAIN_4X,
Grimmkey 0:b8221deeaa87 148 AGAIN_16X,
Grimmkey 0:b8221deeaa87 149 AGAIN_64X
Grimmkey 0:b8221deeaa87 150 };
Grimmkey 0:b8221deeaa87 151
Grimmkey 0:b8221deeaa87 152 /* Gesture Gain (GGAIN) values */
Grimmkey 0:b8221deeaa87 153 enum {
Grimmkey 0:b8221deeaa87 154 GGAIN_1X,
Grimmkey 0:b8221deeaa87 155 GGAIN_2X,
Grimmkey 0:b8221deeaa87 156 GGAIN_4X,
Grimmkey 0:b8221deeaa87 157 GGAIN_8X
Grimmkey 0:b8221deeaa87 158 };
Grimmkey 0:b8221deeaa87 159 /* LED Boost values */
Grimmkey 0:b8221deeaa87 160 enum {
Grimmkey 0:b8221deeaa87 161 LED_BOOST_100,
Grimmkey 0:b8221deeaa87 162 LED_BOOST_150,
Grimmkey 0:b8221deeaa87 163 LED_BOOST_200,
Grimmkey 0:b8221deeaa87 164 LED_BOOST_300
Grimmkey 0:b8221deeaa87 165 };
Grimmkey 0:b8221deeaa87 166
Grimmkey 0:b8221deeaa87 167 /* Gesture wait time values */
Grimmkey 0:b8221deeaa87 168 enum {
Grimmkey 0:b8221deeaa87 169 GWTIME_0MS,
Grimmkey 0:b8221deeaa87 170 GWTIME_2_8MS,
Grimmkey 0:b8221deeaa87 171 GWTIME_5_6MS,
Grimmkey 0:b8221deeaa87 172 GWTIME_8_4MS,
Grimmkey 0:b8221deeaa87 173 GWTIME_14_0MS,
Grimmkey 0:b8221deeaa87 174 GWTIME_22_4MS,
Grimmkey 0:b8221deeaa87 175 GWTIME_30_8MS,
Grimmkey 0:b8221deeaa87 176 GWTIME_39_2MS
Grimmkey 0:b8221deeaa87 177 };
Grimmkey 0:b8221deeaa87 178
Grimmkey 0:b8221deeaa87 179 /* Default values */
Grimmkey 0:b8221deeaa87 180 #define DEFAULT_ATIME 219 // 103ms
Grimmkey 0:b8221deeaa87 181 #define DEFAULT_WTIME 246 // 27ms
Grimmkey 0:b8221deeaa87 182 #define DEFAULT_PROX_PPULSE 0x87 // 16us, 8 pulses
Grimmkey 0:b8221deeaa87 183 #define DEFAULT_GEST_PPULSE 0x89 // 16us, 10 pulses
Grimmkey 0:b8221deeaa87 184 #define DEFAULT_POFFSET_UR 0 // 0 offset
Grimmkey 0:b8221deeaa87 185 #define DEFAULT_POFFSET_DL 0 // 0 offset
Grimmkey 0:b8221deeaa87 186 #define DEFAULT_CONFIG1 0x60 // No 12x wait (WTIME) factor
Grimmkey 0:b8221deeaa87 187 #define DEFAULT_LDRIVE LED_DRIVE_100MA
Grimmkey 0:b8221deeaa87 188 #define DEFAULT_PGAIN PGAIN_4X
Grimmkey 0:b8221deeaa87 189 #define DEFAULT_AGAIN AGAIN_4X
Grimmkey 0:b8221deeaa87 190 #define DEFAULT_PILT 0 // Low proximity threshold
Grimmkey 0:b8221deeaa87 191 #define DEFAULT_PIHT 50 // High proximity threshold
Grimmkey 0:b8221deeaa87 192 #define DEFAULT_AILT 0xFFFF // Force interrupt for calibration
Grimmkey 0:b8221deeaa87 193 #define DEFAULT_AIHT 0
Grimmkey 0:b8221deeaa87 194 #define DEFAULT_PERS 0x11 // 2 consecutive prox or ALS for int.
Grimmkey 0:b8221deeaa87 195 #define DEFAULT_CONFIG2 0x01 // No saturation interrupts or LED boost
Grimmkey 0:b8221deeaa87 196 #define DEFAULT_CONFIG3 0 // Enable all photodiodes, no SAI
Grimmkey 0:b8221deeaa87 197 #define DEFAULT_GPENTH 40 // Threshold for entering gesture mode
Grimmkey 0:b8221deeaa87 198 #define DEFAULT_GEXTH 30 // Threshold for exiting gesture mode
Grimmkey 0:b8221deeaa87 199 #define DEFAULT_GCONF1 0x40 // 4 gesture events for int., 1 for exit
Grimmkey 0:b8221deeaa87 200 #define DEFAULT_GGAIN GGAIN_4X
Grimmkey 0:b8221deeaa87 201 #define DEFAULT_GLDRIVE LED_DRIVE_100MA
Grimmkey 0:b8221deeaa87 202 #define DEFAULT_GWTIME GWTIME_2_8MS
Grimmkey 0:b8221deeaa87 203 #define DEFAULT_GOFFSET 0 // No offset scaling for gesture mode
Grimmkey 0:b8221deeaa87 204 #define DEFAULT_GPULSE 0xC9 // 32us, 10 pulses
Grimmkey 0:b8221deeaa87 205 #define DEFAULT_GCONF3 0 // All photodiodes active during gesture
Grimmkey 0:b8221deeaa87 206 #define DEFAULT_GIEN 0 // Disable gesture interrupts
Grimmkey 0:b8221deeaa87 207
Grimmkey 0:b8221deeaa87 208 //Directions X, Y, Z
Grimmkey 0:b8221deeaa87 209 enum {
Grimmkey 0:b8221deeaa87 210 DIR_NA,
Grimmkey 0:b8221deeaa87 211 DIR_W,
Grimmkey 0:b8221deeaa87 212 DIR_E,
Grimmkey 0:b8221deeaa87 213 DIR_N,
Grimmkey 0:b8221deeaa87 214 DIR_S,
Grimmkey 0:b8221deeaa87 215 DIR_I,
Grimmkey 0:b8221deeaa87 216 DIR_O,
Grimmkey 0:b8221deeaa87 217 DIR_NW,
Grimmkey 0:b8221deeaa87 218 DIR_SW,
Grimmkey 0:b8221deeaa87 219 DIR_IW,
Grimmkey 0:b8221deeaa87 220 DIR_OW,
Grimmkey 0:b8221deeaa87 221 DIR_NE,
Grimmkey 0:b8221deeaa87 222 DIR_SE,
Grimmkey 0:b8221deeaa87 223 DIR_IE,
Grimmkey 0:b8221deeaa87 224 DIR_OE,
Grimmkey 0:b8221deeaa87 225 DIR_NI,
Grimmkey 0:b8221deeaa87 226 DIR_NO,
Grimmkey 0:b8221deeaa87 227 DIR_SI,
Grimmkey 0:b8221deeaa87 228 DIR_SO,
Grimmkey 0:b8221deeaa87 229 DIR_AN
Grimmkey 0:b8221deeaa87 230 };
Grimmkey 0:b8221deeaa87 231
Grimmkey 0:b8221deeaa87 232 /* State definitions */
Grimmkey 0:b8221deeaa87 233 enum {
Grimmkey 0:b8221deeaa87 234 NA_STATE,
Grimmkey 0:b8221deeaa87 235 NEAR_STATE,
Grimmkey 0:b8221deeaa87 236 FAR_STATE,
Grimmkey 0:b8221deeaa87 237 ALL_STATE
Grimmkey 0:b8221deeaa87 238 };
Grimmkey 0:b8221deeaa87 239
Grimmkey 0:b8221deeaa87 240 /* Container for gesture data */
Grimmkey 0:b8221deeaa87 241 typedef struct gesture_data_type {
Grimmkey 0:b8221deeaa87 242 uint8_t u_data[32];
Grimmkey 0:b8221deeaa87 243 uint8_t d_data[32];
Grimmkey 0:b8221deeaa87 244 uint8_t l_data[32];
Grimmkey 0:b8221deeaa87 245 uint8_t r_data[32];
Grimmkey 0:b8221deeaa87 246 uint8_t index_gest;
Grimmkey 0:b8221deeaa87 247 uint8_t total_gests;
Grimmkey 0:b8221deeaa87 248 uint8_t in_threshold;
Grimmkey 0:b8221deeaa87 249 uint8_t out_threshold;
Grimmkey 0:b8221deeaa87 250 } gest_data_type;
Grimmkey 0:b8221deeaa87 251
Grimmkey 0:b8221deeaa87 252 /* APDS9960 Class */
Grimmkey 0:b8221deeaa87 253 class APDS9960 {
Grimmkey 0:b8221deeaa87 254 public:
Grimmkey 0:b8221deeaa87 255 /* Initialization methods */
Grimmkey 0:b8221deeaa87 256 APDS9960(PinName sda, PinName scl);
Grimmkey 0:b8221deeaa87 257 bool init();
Grimmkey 0:b8221deeaa87 258 uint8_t getMode();
Grimmkey 0:b8221deeaa87 259 bool setMode(uint8_t mode, uint8_t enable);
Grimmkey 0:b8221deeaa87 260 /* Turn the APDS-9960 on and off */
Grimmkey 0:b8221deeaa87 261 bool enPower();
Grimmkey 0:b8221deeaa87 262 bool disPower();
Grimmkey 0:b8221deeaa87 263 /* Enable or disable specific sensors */
Grimmkey 0:b8221deeaa87 264 bool enLightSens(bool interrupts = false);
Grimmkey 0:b8221deeaa87 265 bool disLightSens();
Grimmkey 0:b8221deeaa87 266 bool enProxSens(bool interrupts = false);
Grimmkey 0:b8221deeaa87 267 bool disProxSens();
Grimmkey 0:b8221deeaa87 268 bool enGestSens(bool interrupts = true);
Grimmkey 0:b8221deeaa87 269 bool disGestSens();
Grimmkey 0:b8221deeaa87 270 /* LED drive strength control */
Grimmkey 0:b8221deeaa87 271 uint8_t getLEDDrive();
Grimmkey 0:b8221deeaa87 272 bool setLEDDrive(uint8_t drive);
Grimmkey 0:b8221deeaa87 273 uint8_t getGestLEDDrive();
Grimmkey 0:b8221deeaa87 274 bool setGestLEDDrive(uint8_t drive);
Grimmkey 0:b8221deeaa87 275 /* Gain control */
Grimmkey 0:b8221deeaa87 276 uint8_t getAmbientLightGain();
Grimmkey 0:b8221deeaa87 277 bool setAmbientLightGain(uint8_t gain);
Grimmkey 0:b8221deeaa87 278 uint8_t getProxGain();
Grimmkey 0:b8221deeaa87 279 bool setProxGain(uint8_t gain);
Grimmkey 0:b8221deeaa87 280 uint8_t getGestGain();
Grimmkey 0:b8221deeaa87 281 bool setGestGain(uint8_t gain);
Grimmkey 0:b8221deeaa87 282 /* Get and set light interrupt thresholds */
Grimmkey 0:b8221deeaa87 283 bool getLightIntLowThreshold(uint16_t &threshold);
Grimmkey 0:b8221deeaa87 284 bool setLightIntLowThreshold(uint16_t threshold);
Grimmkey 0:b8221deeaa87 285 bool getLightIntHighThreshold(uint16_t &threshold);
Grimmkey 0:b8221deeaa87 286 bool setLightIntHighThreshold(uint16_t threshold);
Grimmkey 0:b8221deeaa87 287 /* Get and set proximity interrupt thresholds */
Grimmkey 0:b8221deeaa87 288 bool getProxIntLowThreshold(uint8_t &threshold);
Grimmkey 0:b8221deeaa87 289 bool setProxIntLowThreshold(uint8_t threshold);
Grimmkey 0:b8221deeaa87 290 bool getProxIntHighThreshold(uint8_t &threshold);
Grimmkey 0:b8221deeaa87 291 bool setProxIntHighThreshold(uint8_t threshold);
Grimmkey 0:b8221deeaa87 292 /* Get and set interrupt enables */
Grimmkey 0:b8221deeaa87 293 uint8_t getAmbientLightIntEnable();
Grimmkey 0:b8221deeaa87 294 bool setAmbientLightIntEnable(uint8_t enable);
Grimmkey 0:b8221deeaa87 295 uint8_t getProxIntEnable();
Grimmkey 0:b8221deeaa87 296 bool setProxIntEnable(uint8_t enable);
Grimmkey 0:b8221deeaa87 297 uint8_t getGestIntEnable();
Grimmkey 0:b8221deeaa87 298 bool setGestIntEnable(uint8_t enable);
Grimmkey 0:b8221deeaa87 299 /* Clear interrupts */
Grimmkey 0:b8221deeaa87 300 bool clrAmbientLightInt();
Grimmkey 0:b8221deeaa87 301 bool clrProxInt();
Grimmkey 0:b8221deeaa87 302 /* Ambient light methods */
Grimmkey 0:b8221deeaa87 303 bool readAmbientLight(uint16_t &val);
Grimmkey 0:b8221deeaa87 304 bool readRedLight(uint16_t &val);
Grimmkey 0:b8221deeaa87 305 bool readGreenLight(uint16_t &val);
Grimmkey 0:b8221deeaa87 306 bool readBlueLight(uint16_t &val);
Grimmkey 0:b8221deeaa87 307 /* Prox methods */
Grimmkey 0:b8221deeaa87 308 bool readProx(uint8_t &val);
Grimmkey 0:b8221deeaa87 309 /* Gesture methods */
Grimmkey 0:b8221deeaa87 310 bool isGestAvailable();
Grimmkey 0:b8221deeaa87 311 int readGest();
Grimmkey 0:b8221deeaa87 312 /*Destructor*/
Grimmkey 0:b8221deeaa87 313 ~APDS9960();
Grimmkey 0:b8221deeaa87 314
Grimmkey 0:b8221deeaa87 315
Grimmkey 0:b8221deeaa87 316 private:
Grimmkey 0:b8221deeaa87 317 /* Gesture processing */
Grimmkey 0:b8221deeaa87 318 I2C i2c_;
Grimmkey 0:b8221deeaa87 319 void rstGestParameters();
Grimmkey 0:b8221deeaa87 320 bool procGestData();
Grimmkey 0:b8221deeaa87 321 bool decodeGest();
Grimmkey 0:b8221deeaa87 322 /* Proximity Interrupt Threshold */
Grimmkey 0:b8221deeaa87 323 uint8_t getProxIntLowThresh();
Grimmkey 0:b8221deeaa87 324 bool setProxIntLowThresh(uint8_t threshold);
Grimmkey 0:b8221deeaa87 325 uint8_t getProxIntHighThresh();
Grimmkey 0:b8221deeaa87 326 bool setProxIntHighThresh(uint8_t threshold);
Grimmkey 0:b8221deeaa87 327 /* LED Boost Control */
Grimmkey 0:b8221deeaa87 328 uint8_t getLEDBoost();
Grimmkey 0:b8221deeaa87 329 bool setLEDBoost(uint8_t boost);
Grimmkey 0:b8221deeaa87 330 /* Proximity photodiode select */
Grimmkey 0:b8221deeaa87 331 uint8_t getProxGainCompEnable();
Grimmkey 0:b8221deeaa87 332 bool setProxGainCompEnable(uint8_t enable);
Grimmkey 0:b8221deeaa87 333 uint8_t getProxPhotoMask();
Grimmkey 0:b8221deeaa87 334 bool setProxPhotoMask(uint8_t mask);
Grimmkey 0:b8221deeaa87 335 /* Gesture threshold control */
Grimmkey 0:b8221deeaa87 336 uint8_t getGestEnterThresh();
Grimmkey 0:b8221deeaa87 337 bool setGestEnterThresh(uint8_t threshold);
Grimmkey 0:b8221deeaa87 338 uint8_t getGestExitThresh();
Grimmkey 0:b8221deeaa87 339 bool setGestExitThresh(uint8_t threshold);
Grimmkey 0:b8221deeaa87 340 /* Gesture LED, gain, and time control */
Grimmkey 0:b8221deeaa87 341 uint8_t getGestWaitTime();
Grimmkey 0:b8221deeaa87 342 bool setGestWaitTime(uint8_t time);
Grimmkey 0:b8221deeaa87 343 /* Gesture mode */
Grimmkey 0:b8221deeaa87 344 uint8_t getGestMode();
Grimmkey 0:b8221deeaa87 345 bool setGestMode(uint8_t mode);
Grimmkey 0:b8221deeaa87 346 /* Raw I2C Commands */
Grimmkey 0:b8221deeaa87 347 bool WriteByte(uint8_t val);
Grimmkey 0:b8221deeaa87 348 int WriteDataByte(char reg, char val);
Grimmkey 0:b8221deeaa87 349 bool WriteDataBlock(uint8_t reg, uint8_t *val, unsigned int len);
Grimmkey 0:b8221deeaa87 350 uint8_t ReadDataByte(char reg);
Grimmkey 0:b8221deeaa87 351 int ReadDataBlock(uint8_t reg, uint8_t *val, unsigned int len);
Grimmkey 0:b8221deeaa87 352 /* Members */
Grimmkey 0:b8221deeaa87 353 gest_data_type gest_data_;
Grimmkey 0:b8221deeaa87 354 int gest_ud_delta_;
Grimmkey 0:b8221deeaa87 355 int gest_lr_delta_;
Grimmkey 0:b8221deeaa87 356 int gest_ud_count_;
Grimmkey 0:b8221deeaa87 357 int gest_lr_count_;
Grimmkey 0:b8221deeaa87 358 int gest_near_count_;
Grimmkey 0:b8221deeaa87 359 int gest_far_count_;
Grimmkey 0:b8221deeaa87 360 int gest_state_;
Grimmkey 0:b8221deeaa87 361 int gest_motion_;
Grimmkey 0:b8221deeaa87 362 };
Grimmkey 0:b8221deeaa87 363
Grimmkey 0:b8221deeaa87 364 #endif