APDS-9960 Light, RGB, Proximity, and Gesture Sensor https://www.sparkfun.com/products/12787 This library interfaces the APDS-9960 to Mbed over I2C. The library relies on the I2C library. To use the library, instantiate a glibr object, call ginit(), and call the appropriate functions.

Dependents:   Gesture_User_Interface car_test_v1 Capt_couleur_CAN Capt_couleur_smart

Fork of APDS_9960 by Krishan Bhagat

Committer:
kbhagat6
Date:
Mon Apr 27 02:05:49 2015 +0000
Revision:
2:ba051af6731a
Parent:
0:1aac12a5f1e0
gesture control

Who changed what in which revision?

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