Skip to content

Commit 955babb

Browse files
committed
Initial commit.
0 parents  commit 955babb

7 files changed

Lines changed: 1379 additions & 0 deletions

File tree

rpi_apds9960/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from rpi_apds9960.device import APDS9960
2+
3+
__all__ = [ 'APDS9960' ]

rpi_apds9960/const.py

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
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]
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+
76+
# APDS9960 modes
77+
APDS9960_MODE_POWER = 0
78+
APDS9960_MODE_AMBIENT_LIGHT = 1
79+
APDS9960_MODE_PROXIMITY = 2
80+
APDS9960_MODE_WAIT = 3
81+
APDS9960_MODE_AMBIENT_LIGHT_INT = 4
82+
APDS9960_MODE_PROXIMITY_INT = 5
83+
APDS9960_MODE_GESTURE = 6
84+
APDS9960_MODE_ALL = 7
85+
86+
# LED Drive values
87+
APDS9960_LED_DRIVE_100MA = 0
88+
APDS9960_LED_DRIVE_50MA = 1
89+
APDS9960_LED_DRIVE_25MA = 2
90+
APDS9960_LED_DRIVE_12_5MA = 3
91+
92+
# Proximity Gain (PGAIN) values
93+
APDS9960_PGAIN_1X = 0
94+
APDS9960_PGAIN_2X = 1
95+
APDS9960_PGAIN_4X = 2
96+
APDS9960_PGAIN_8X = 3
97+
98+
# ALS Gain (AGAIN) values
99+
APDS9960_AGAIN_1X = 0
100+
APDS9960_AGAIN_4X = 1
101+
APDS9960_AGAIN_16X = 2
102+
APDS9960_AGAIN_64X = 3
103+
104+
# Gesture Gain (GGAIN) values
105+
APDS9960_GGAIN_1X = 0
106+
APDS9960_GGAIN_2X = 1
107+
APDS9960_GGAIN_4X = 2
108+
APDS9960_GGAIN_8X = 3
109+
110+
# LED Boost values
111+
APDS9960_LED_BOOST_100 = 0
112+
APDS9960_LED_BOOST_150 = 1
113+
APDS9960_LED_BOOST_200 = 2
114+
APDS9960_LED_BOOST_300 = 3
115+
116+
# Gesture wait time values
117+
APDS9960_GWTIME_0MS = 0
118+
APDS9960_GWTIME_2_8MS = 1
119+
APDS9960_GWTIME_5_6MS = 2
120+
APDS9960_GWTIME_8_4MS = 3
121+
APDS9960_GWTIME_14_0MS = 4
122+
APDS9960_GWTIME_22_4MS = 5
123+
APDS9960_GWTIME_30_8MS = 6
124+
APDS9960_GWTIME_39_2MS = 7
125+
126+
# Default values
127+
APDS9960_DEFAULT_ATIME = 219 # 103ms
128+
APDS9960_DEFAULT_WTIME = 246 # 27ms
129+
APDS9960_DEFAULT_PROX_PPULSE = 0x87 # 16us, 8 pulses
130+
APDS9960_DEFAULT_GESTURE_PPULSE = 0x89 # 16us, 10 pulses
131+
APDS9960_DEFAULT_POFFSET_UR = 0 # 0 offset
132+
APDS9960_DEFAULT_POFFSET_DL = 0 # 0 offset
133+
APDS9960_DEFAULT_CONFIG1 = 0x60 # No 12x wait (WTIME) factor
134+
APDS9960_DEFAULT_LDRIVE = APDS9960_LED_DRIVE_100MA
135+
APDS9960_DEFAULT_PGAIN = APDS9960_PGAIN_4X
136+
APDS9960_DEFAULT_AGAIN = APDS9960_AGAIN_4X
137+
APDS9960_DEFAULT_PILT = 0 # Low proximity threshold
138+
APDS9960_DEFAULT_PIHT = 50 # High proximity threshold
139+
APDS9960_DEFAULT_AILT = 0xffff # Force interrupt for calibration
140+
APDS9960_DEFAULT_AIHT = 0
141+
APDS9960_DEFAULT_PERS = 0x11 # 2 consecutive prox or ALS for int.
142+
APDS9960_DEFAULT_CONFIG2 = 0x01 # No saturation interrupts or LED boost
143+
APDS9960_DEFAULT_CONFIG3 = 0 # Enable all photodiodes, no SAI
144+
APDS9960_DEFAULT_GPENTH = 40 # Threshold for entering gesture mode
145+
APDS9960_DEFAULT_GEXTH = 30 # Threshold for exiting gesture mode
146+
APDS9960_DEFAULT_GCONF1 = 0x40 # 4 gesture events for int., 1 for exit
147+
APDS9960_DEFAULT_GGAIN = APDS9960_GGAIN_4X
148+
APDS9960_DEFAULT_GLDRIVE = APDS9960_LED_DRIVE_100MA
149+
APDS9960_DEFAULT_GWTIME = APDS9960_GWTIME_2_8MS
150+
APDS9960_DEFAULT_GOFFSET = 0 # No offset scaling for gesture mode
151+
APDS9960_DEFAULT_GPULSE = 0xc9 # 32us, 10 pulses
152+
APDS9960_DEFAULT_GCONF3 = 0 # All photodiodes active during gesture
153+
APDS9960_DEFAULT_GIEN = 0 # Disable gesture interrupts
154+
155+
# gesture directions
156+
APDS9960_DIR_NONE = 0
157+
APDS9960_DIR_LEFT = 1
158+
APDS9960_DIR_RIGHT = 2
159+
APDS9960_DIR_UP = 3
160+
APDS9960_DIR_DOWN = 4
161+
APDS9960_DIR_NEAR = 5
162+
APDS9960_DIR_FAR = 6
163+
APDS9960_DIR_ALL = 7
164+
165+
# state definitions
166+
APDS9960_STATE_NA = 0
167+
APDS9960_STATE_NEAR = 1
168+
APDS9960_STATE_FAR = 2
169+
APDS9960_STATE_ALL = 3

0 commit comments

Comments
 (0)