1+ # APDS9960 i2c address
2+ APDS9960_I2C_ADDR = 0x39
3+
4+ # APDS9960 gesture parameters
5+ APDS9960_GESTURE_THRESHOLD_OUT = 10
6+ APDS9960_GESTURE_SENSITIVITY_1 = 50
7+ APDS9960_GESTURE_SENSITIVITY_2 = 20
8+
9+ # APDS9960 device IDs
10+ APDS9960_DEV_ID = [0xab , 0x9c , 0xa8 , - 0x55 ]
11+
12+ # APDS9960 times
13+ APDS9960_TIME_FIFO_PAUSE = 0.03
14+
15+ # APDS9960 register addresses
16+ APDS9960_REG_ENABLE = 0x80
17+ APDS9960_REG_ATIME = 0x81
18+ APDS9960_REG_WTIME = 0x83
19+ APDS9960_REG_AILTL = 0x84
20+ APDS9960_REG_AILTH = 0x85
21+ APDS9960_REG_AIHTL = 0x86
22+ APDS9960_REG_AIHTH = 0x87
23+ APDS9960_REG_PILT = 0x89
24+ APDS9960_REG_PIHT = 0x8b
25+ APDS9960_REG_PERS = 0x8c
26+ APDS9960_REG_CONFIG1 = 0x8d
27+ APDS9960_REG_PPULSE = 0x8e
28+ APDS9960_REG_CONTROL = 0x8f
29+ APDS9960_REG_CONFIG2 = 0x90
30+ APDS9960_REG_ID = 0x92
31+ APDS9960_REG_STATUS = 0x93
32+ APDS9960_REG_CDATAL = 0x94
33+ APDS9960_REG_CDATAH = 0x95
34+ APDS9960_REG_RDATAL = 0x96
35+ APDS9960_REG_RDATAH = 0x97
36+ APDS9960_REG_GDATAL = 0x98
37+ APDS9960_REG_GDATAH = 0x99
38+ APDS9960_REG_BDATAL = 0x9a
39+ APDS9960_REG_BDATAH = 0x9b
40+ APDS9960_REG_PDATA = 0x9c
41+ APDS9960_REG_POFFSET_UR = 0x9d
42+ APDS9960_REG_POFFSET_DL = 0x9e
43+ APDS9960_REG_CONFIG3 = 0x9f
44+ APDS9960_REG_GPENTH = 0xa0
45+ APDS9960_REG_GEXTH = 0xa1
46+ APDS9960_REG_GCONF1 = 0xa2
47+ APDS9960_REG_GCONF2 = 0xa3
48+ APDS9960_REG_GOFFSET_U = 0xa4
49+ APDS9960_REG_GOFFSET_D = 0xa5
50+ APDS9960_REG_GOFFSET_L = 0xa7
51+ APDS9960_REG_GOFFSET_R = 0xa9
52+ APDS9960_REG_GPULSE = 0xa6
53+ APDS9960_REG_GCONF3 = 0xaA
54+ APDS9960_REG_GCONF4 = 0xaB
55+ APDS9960_REG_GFLVL = 0xae
56+ APDS9960_REG_GSTATUS = 0xaf
57+ APDS9960_REG_IFORCE = 0xe4
58+ APDS9960_REG_PICLEAR = 0xe5
59+ APDS9960_REG_CICLEAR = 0xe6
60+ APDS9960_REG_AICLEAR = 0xe7
61+ APDS9960_REG_GFIFO_U = 0xfc
62+ APDS9960_REG_GFIFO_D = 0xfd
63+ APDS9960_REG_GFIFO_L = 0xfe
64+ APDS9960_REG_GFIFO_R = 0xff
65+
66+ # APDS9960 bit fields
67+ APDS9960_BIT_PON = 0b00000001
68+ APDS9960_BIT_AEN = 0b00000010
69+ APDS9960_BIT_PEN = 0b00000100
70+ APDS9960_BIT_WEN = 0b00001000
71+ APSD9960_BIT_AIEN = 0b00010000
72+ APDS9960_BIT_PIEN = 0b00100000
73+ APDS9960_BIT_GEN = 0b01000000
74+ APDS9960_BIT_GVALID = 0b00000001
75+ APDS9960_BIT_AVALID = 0b00000001
76+ APDS9960_BIT_PVALID = 0b00000010
77+ APDS9960_BIT_GINT = 0b00000100
78+ APDS9960_BIT_AINT = 0b00010000
79+ APDS9960_BIT_PINT = 0b00100000
80+ APDS9960_BIT_PGSAT = 0b01000000
81+ APDS9960_BIT_CPSAT = 0b10000000
82+
83+ # APDS9960 modes
84+ APDS9960_MODE_POWER = 0
85+ APDS9960_MODE_AMBIENT_LIGHT = 1
86+ APDS9960_MODE_PROXIMITY = 2
87+ APDS9960_MODE_WAIT = 3
88+ APDS9960_MODE_AMBIENT_LIGHT_INT = 4
89+ APDS9960_MODE_PROXIMITY_INT = 5
90+ APDS9960_MODE_GESTURE = 6
91+ APDS9960_MODE_ALL = 7
92+
93+ # LED Drive values
94+ APDS9960_LED_DRIVE_100MA = 0
95+ APDS9960_LED_DRIVE_50MA = 1
96+ APDS9960_LED_DRIVE_25MA = 2
97+ APDS9960_LED_DRIVE_12_5MA = 3
98+
99+ # Proximity Gain (PGAIN) values
100+ APDS9960_PGAIN_1X = 0
101+ APDS9960_PGAIN_2X = 1
102+ APDS9960_PGAIN_4X = 2
103+ APDS9960_PGAIN_8X = 3
104+
105+ # ALS Gain (AGAIN) values
106+ APDS9960_AGAIN_1X = 0
107+ APDS9960_AGAIN_4X = 1
108+ APDS9960_AGAIN_16X = 2
109+ APDS9960_AGAIN_64X = 3
110+
111+ # Gesture Gain (GGAIN) values
112+ APDS9960_GGAIN_1X = 0
113+ APDS9960_GGAIN_2X = 1
114+ APDS9960_GGAIN_4X = 2
115+ APDS9960_GGAIN_8X = 3
116+
117+ # LED Boost values
118+ APDS9960_LED_BOOST_100 = 0
119+ APDS9960_LED_BOOST_150 = 1
120+ APDS9960_LED_BOOST_200 = 2
121+ APDS9960_LED_BOOST_300 = 3
122+
123+ # Gesture wait time values
124+ APDS9960_GWTIME_0MS = 0
125+ APDS9960_GWTIME_2_8MS = 1
126+ APDS9960_GWTIME_5_6MS = 2
127+ APDS9960_GWTIME_8_4MS = 3
128+ APDS9960_GWTIME_14_0MS = 4
129+ APDS9960_GWTIME_22_4MS = 5
130+ APDS9960_GWTIME_30_8MS = 6
131+ APDS9960_GWTIME_39_2MS = 7
132+
133+ # Default values
134+ APDS9960_DEFAULT_ATIME = 219 # 103ms
135+ APDS9960_DEFAULT_WTIME = 246 # 27ms
136+ APDS9960_DEFAULT_PROX_PPULSE = 0x87 # 16us, 8 pulses
137+ APDS9960_DEFAULT_GESTURE_PPULSE = 0x89 # 16us, 10 pulses
138+ APDS9960_DEFAULT_POFFSET_UR = 0 # 0 offset
139+ APDS9960_DEFAULT_POFFSET_DL = 0 # 0 offset
140+ APDS9960_DEFAULT_CONFIG1 = 0x60 # No 12x wait (WTIME) factor
141+ APDS9960_DEFAULT_LDRIVE = APDS9960_LED_DRIVE_100MA
142+ APDS9960_DEFAULT_PGAIN = APDS9960_PGAIN_4X
143+ APDS9960_DEFAULT_AGAIN = APDS9960_AGAIN_4X
144+ APDS9960_DEFAULT_PILT = 0 # Low proximity threshold
145+ APDS9960_DEFAULT_PIHT = 50 # High proximity threshold
146+ APDS9960_DEFAULT_AILT = 0xffff # Force interrupt for calibration
147+ APDS9960_DEFAULT_AIHT = 0
148+ APDS9960_DEFAULT_PERS = 0x11 # 2 consecutive prox or ALS for int.
149+ APDS9960_DEFAULT_CONFIG2 = 0x01 # No saturation interrupts or LED boost
150+ APDS9960_DEFAULT_CONFIG3 = 0 # Enable all photodiodes, no SAI
151+ APDS9960_DEFAULT_GPENTH = 40 # Threshold for entering gesture mode
152+ APDS9960_DEFAULT_GEXTH = 30 # Threshold for exiting gesture mode
153+ APDS9960_DEFAULT_GCONF1 = 0x40 # 4 gesture events for int., 1 for exit
154+ APDS9960_DEFAULT_GGAIN = APDS9960_GGAIN_4X
155+ APDS9960_DEFAULT_GLDRIVE = APDS9960_LED_DRIVE_100MA
156+ APDS9960_DEFAULT_GWTIME = APDS9960_GWTIME_2_8MS
157+ APDS9960_DEFAULT_GOFFSET = 0 # No offset scaling for gesture mode
158+ APDS9960_DEFAULT_GPULSE = 0xc9 # 32us, 10 pulses
159+ APDS9960_DEFAULT_GCONF3 = 0 # All photodiodes active during gesture
160+ APDS9960_DEFAULT_GIEN = 0 # Disable gesture interrupts
161+
162+ # gesture directions
163+ APDS9960_DIR_NONE = 0
164+ APDS9960_DIR_LEFT = 1
165+ APDS9960_DIR_RIGHT = 2
166+ APDS9960_DIR_UP = 3
167+ APDS9960_DIR_DOWN = 4
168+ APDS9960_DIR_NEAR = 5
169+ APDS9960_DIR_FAR = 6
170+ APDS9960_DIR_ALL = 7
171+
172+ # state definitions
173+ APDS9960_STATE_NA = 0
174+ APDS9960_STATE_NEAR = 1
175+ APDS9960_STATE_FAR = 2
176+ APDS9960_STATE_ALL = 3
0 commit comments