38#include "drv_digital_out.h"
39#include "drv_digital_in.h"
40#include "drv_i2c_master.h"
53#define SPECTROMETER_MAP_MIKROBUS( cfg, mikrobus ) \
54 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
55 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
56 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
63#define SPECTROMETER_RETVAL uint8_t
65#define SPECTROMETER_OK 0x00
66#define SPECTROMETER_INIT_ERROR 0xFF
73#define SPECTROMETER_I2C_DEV_ADR 0x39
80#define SPECTROMETER_ASTAT 0x60
81#define SPECTROMETER_CH0_DATA_L 0x61
82#define SPECTROMETER_CH0_DATA_H 0x62
83#define SPECTROMETER_ITIME_L 0x63
84#define SPECTROMETER_ITIME_M 0x64
85#define SPECTROMETER_ITIME_H 0x65
86#define SPECTROMETER_CH1_DATA_L 0x66
87#define SPECTROMETER_CH1_DATA_H 0x67
88#define SPECTROMETER_CH2_DATA_L 0x68
89#define SPECTROMETER_CH2_DATA_H 0x69
90#define SPECTROMETER_CH3_DATA_L 0x6A
91#define SPECTROMETER_CH3_DATA_H 0x6B
92#define SPECTROMETER_CH4_DATA_L 0x6C
93#define SPECTROMETER_CH4_DATA_H 0x6D
94#define SPECTROMETER_CH5_DATA_L 0x6E
95#define SPECTROMETER_CH5_DATA_H 0x6F
96#define SPECTROMETER_CFG 0x70
97#define SPECTROMETER_STAT 0x71
98#define SPECTROMETER_SYNC_EDGE 0x72
99#define SPECTROMETER_GPIO 0x73
100#define SPECTROMETER_LED 0x74
101#define SPECTROMETER_ENABLE 0x80
102#define SPECTROMETER_ATIME 0x81
103#define SPECTROMETER_WTIME 0x83
104#define SPECTROMETER_SP_TH_L_LSB 0x84
105#define SPECTROMETER_SP_TH_L_MSB 0x85
106#define SPECTROMETER_SP_TH_H_LSB 0x86
107#define SPECTROMETER_SP_TH_H_MSB 0x87
108#define SPECTROMETER_AUXID 0x90
109#define SPECTROMETER_REVID 0x91
110#define SPECTROMETER_ID 0x92
111#define SPECTROMETER_STATUS 0x93
112#define SPECTROMETER_ASTATUS 0x94
113#define SPECTROMETER_CH0_ADC_DATA_L 0x95
114#define SPECTROMETER_CH0_ADC_DATA_H 0x96
115#define SPECTROMETER_CH1_ADC_DATA_L 0x97
116#define SPECTROMETER_CH1_ADC_DATA_H 0x98
117#define SPECTROMETER_CH2_ADC_DATA_L 0x99
118#define SPECTROMETER_CH2_ADC_DATA_H 0x9A
119#define SPECTROMETER_CH3_ADC_DATA_L 0x9B
120#define SPECTROMETER_CH3_ADC_DATA_H 0x9C
121#define SPECTROMETER_CH4_ADC_DATA_L 0x9D
122#define SPECTROMETER_CH4_ADC_DATA_H 0x9E
123#define SPECTROMETER_CH5_ADC_DATA_L 0x9F
124#define SPECTROMETER_CH5_ADC_DATA_H 0xA0
125#define SPECTROMETER_STAT_2 0xA3
126#define SPECTROMETER_STAT_3 0xA4
127#define SPECTROMETER_STAT_5 0xA6
128#define SPECTROMETER_STAT_6 0xA7
129#define SPECTROMETER_CFG_0 0xA9
130#define SPECTROMETER_CFG_1 0xAA
131#define SPECTROMETER_CFG_3 0xAC
132#define SPECTROMETER_CFG_6 0xAF
133#define SPECTROMETER_CFG_8 0xB1
134#define SPECTROMETER_CFG_9 0xB2
135#define SPECTROMETER_CFG_10 0xB3
136#define SPECTROMETER_CFG_12 0xB5
137#define SPECTROMETER_PERS 0xBD
138#define SPECTROMETER_GPIO_2 0xBE
139#define SPECTROMETER_ASTEP_L 0xCA
140#define SPECTROMETER_ASTEP_H 0xCB
141#define SPECTROMETER_AGC_GAIN_MAX 0xCF
142#define SPECTROMETER_AZ_CFG 0xD6
143#define SPECTROMETER_FD_TIME_1 0xD8
144#define SPECTROMETER_FD_TIME_2 0xDA
145#define SPECTROMETER_FD_CFG0 0xD7
146#define SPECTROMETER_FD_STAT 0xDB
147#define SPECTROMETER_INTENAB 0xF9
148#define SPECTROMETER_CTL 0xFA
149#define SPECTROMETER_FIFO_MAP 0xFC
150#define SPECTROMETER_FIFO_LVL 0xFD
151#define SPECTROMETER_FDATA_L 0xFE
152#define SPECTROMETER_FDATA_H 0xFF
159#define SPECTROMETER_CFG_LED_SEL 0x08
160#define SPECTROMETER_CFG_INT_SEL 0x04
161#define SPECTROMETER_CFG_INT_MODE_SYND 0x03
162#define SPECTROMETER_CFG_INT_MODE_SYNS 0x01
163#define SPECTROMETER_CFG_INT_MODE_SPM 0x00
170#define SPECTROMETER_STAT_WAIT_SYNC 0x02
171#define SPECTROMETER_STAT_READY 0x01
178#define SPECTROMETER_GPIO_PD_GPIO 0x02
179#define SPECTROMETER_GPIO_PD_INT 0x01
186#define SPECTROMETER_LED_LED_ACT 0x80
187#define SPECTROMETER_LED_LED_DRV_4MA 0x00
188#define SPECTROMETER_LED_LED_DRV_6MA 0x01
189#define SPECTROMETER_LED_LED_DRV_8MA 0x02
190#define SPECTROMETER_LED_LED_DRV_10MA 0x03
191#define SPECTROMETER_LED_LED_DRV_12MA 0x04
192#define SPECTROMETER_LED_LED_DRV_256MA 0x7E
193#define SPECTROMETER_LED_LED_DRV_258MA 0x7F
200#define SPECTROMETER_EN_FDEN 0x40
201#define SPECTROMETER_EN_SMUXEN 0x10
202#define SPECTROMETER_EN_WEN 0x08
203#define SPECTROMETER_EN_SP_EN 0x02
204#define SPECTROMETER_EN_PON 0x01
211#define SPECTROMETER_STATUS_ASAT 0x80
212#define SPECTROMETER_STATUS_AINT 0x08
213#define SPECTROMETER_STATUS_FINT 0x04
214#define SPECTROMETER_STATUS_CINT 0x02
215#define SPECTROMETER_STATUS_SINT 0x01
222#define SPECTROMETER_STAT_2_AVALID 0x40
223#define SPECTROMETER_STAT_2_ASAT_DIG 0x10
224#define SPECTROMETER_STAT_2_ASAT_ANA 0x08
225#define SPECTROMETER_STAT_2_FDSAT_ANA 0x02
226#define SPECTROMETER_STAT_2_FDSAT_DIG 0x01
233#define SPECTROMETER_STAT_3_INT_SP_H 0x20
234#define SPECTROMETER_STAT_3_INT_SP_L 0x10
241#define SPECTROMETER_STAT_5_SINT_FD 0x08
242#define SPECTROMETER_STAT_5_SINT_SMUX 0x04
249#define SPECTROMETER_STAT_6_FIFO_OV 0x80
250#define SPECTROMETER_STAT_6_OVTEMP 0x20
251#define SPECTROMETER_STAT_6_FD_TRIG 0x10
252#define SPECTROMETER_STAT_6_SP_TRIG 0x04
253#define SPECTROMETER_STAT_6_SAI_ACT 0x02
254#define SPECTROMETER_STAT_6_INT_BUSY 0x01
261#define SPECTROMETER_CFG_0_LOW_POW 0x20
262#define SPECTROMETER_CFG_0_REG_BANK_1 0x10
263#define SPECTROMETER_CFG_0_REG_BANK_0 0x00
264#define SPECTROMETER_CFG_0_WLONG 0x04
271#define SPECTROMETER_CFG_1_AGAIN_512 0x0A
272#define SPECTROMETER_CFG_1_AGAIN_256 0x09
273#define SPECTROMETER_CFG_1_AGAIN_128 0x08
274#define SPECTROMETER_CFG_1_AGAIN_64 0x07
275#define SPECTROMETER_CFG_1_AGAIN_32 0x06
276#define SPECTROMETER_CFG_1_AGAIN_16 0x05
277#define SPECTROMETER_CFG_1_AGAIN_8 0x04
278#define SPECTROMETER_CFG_1_AGAIN_4 0x03
279#define SPECTROMETER_CFG_1_AGAIN_2 0x02
280#define SPECTROMETER_CFG_1_AGAIN_1 0x01
281#define SPECTROMETER_CFG_1_AGAIN_05 0x00
288#define SPECTROMETER_CFG_3_SAI 0x10
295#define SPECTROMETER_CFG_6_SMUX_CMD_2 0x10
296#define SPECTROMETER_CFG_6_SMUX_CMD_1 0x08
297#define SPECTROMETER_CFG_6_SMUX_CMD_0 0x00
304#define SPECTROMETER_CFG_8_FIFO_TH_16 0xC0
305#define SPECTROMETER_CFG_8_FIFO_TH_8 0x80
306#define SPECTROMETER_CFG_8_FIFO_TH_4 0x40
307#define SPECTROMETER_CFG_8_FIFO_TH_1 0x00
308#define SPECTROMETER_CFG_8_FD_AGC 0x08
309#define SPECTROMETER_CFG_8_SP_AGC 0x04
316#define SPECTROMETER_CFG_9_SIEN_FD 0x40
317#define SPECTROMETER_CFG_9_SIEN_SMUX 0x10
324#define SPECTROMETER_CFG_10_AGC_H_3 0xC0
325#define SPECTROMETER_CFG_10_AGC_H_2 0x80
326#define SPECTROMETER_CFG_10_AGC_H_1 0x40
327#define SPECTROMETER_CFG_10_AGC_H_0 0x00
328#define SPECTROMETER_CFG_10_AGC_L_3 0x60
329#define SPECTROMETER_CFG_10_AGC_L_2 0x20
330#define SPECTROMETER_CFG_10_AGC_L_1 0x10
331#define SPECTROMETER_CFG_10_AGC_L_0 0x00
332#define SPECTROMETER_CFG_10_FD_PERS_DEF 0x02
339#define SPECTROMETER_CFG_12_SP_TH_CH_4 0x04
340#define SPECTROMETER_CFG_12_SP_TH_CH_3 0x03
341#define SPECTROMETER_CFG_12_SP_TH_CH_2 0x02
342#define SPECTROMETER_CFG_12_SP_TH_CH_1 0x01
343#define SPECTROMETER_CFG_12_SP_TH_CH_0 0x00
350#define SPECTROMETER_PERS_APERS_60 0x0F
351#define SPECTROMETER_PERS_APERS_55 0x0E
352#define SPECTROMETER_PERS_APERS_50 0x0D
353#define SPECTROMETER_PERS_APERS_45 0x0C
354#define SPECTROMETER_PERS_APERS_40 0x0B
355#define SPECTROMETER_PERS_APERS_35 0x0A
356#define SPECTROMETER_PERS_APERS_30 0x09
357#define SPECTROMETER_PERS_APERS_25 0x08
358#define SPECTROMETER_PERS_APERS_20 0x07
359#define SPECTROMETER_PERS_APERS_15 0x06
360#define SPECTROMETER_PERS_APERS_10 0x05
361#define SPECTROMETER_PERS_APERS_5 0x04
362#define SPECTROMETER_PERS_APERS_3 0x03
363#define SPECTROMETER_PERS_APERS_2 0x02
364#define SPECTROMETER_PERS_APERS_1 0x01
365#define SPECTROMETER_PERS_APERS 0x00
372#define SPECTROMETER_GPIO_2_GPIO_INV 0x08
373#define SPECTROMETER_GPIO_2_GPIO_IN 0x04
374#define SPECTROMETER_GPIO_2_GPIO_OUT 0x02
381#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_512 0xA0
382#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_256 0x90
383#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_128 0x80
384#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_64 0x70
385#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_32 0x60
386#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_16 0x50
387#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_8 0x40
388#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_4 0x30
389#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_2 0x20
390#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_1 0x10
391#define SPECTROMETER_AGC_GAIN_MAX_AGC_FD_GAIN_MAX_05 0x00
392#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_512 0x0A
393#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_256 0x09
394#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_128 0x08
395#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_64 0x07
396#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_32 0x06
397#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_16 0x05
398#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_8 0x04
399#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_4 0x03
400#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_2 0x02
401#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_1 0x01
402#define SPECTROMETER_AGC_GAIN_MAX_AGC_AGAIN_MAX_05 0x00
409#define SPECTROMETER_FD_CFG0_FD_FIFO 0x80
416#define SPECTROMETER_FD_STAT_FD_VALID 0x20
417#define SPECTROMETER_FD_STAT_FD_SAT 0x10
418#define SPECTROMETER_FD_STAT_FD_120HZ_VALID 0x08
419#define SPECTROMETER_FD_STAT_FD_100HZ_VALID 0x04
420#define SPECTROMETER_FD_STAT_FD_120HZ 0x02
421#define SPECTROMETER_FD_STAT_FD_100HZ 0x01
428#define SPECTROMETER_INTENAB_ASIEN 0x80
429#define SPECTROMETER_INTENAB_SP_IEN 0x08
430#define SPECTROMETER_INTENAB_F_IEN 0x04
431#define SPECTROMETER_INTENAB_SIEN 0x01
438#define SPECTROMETER_CTL_AZ_SP_MAN 0x04
439#define SPECTROMETER_CTL_FIFO_CLR 0x02
440#define SPECTROMETER_CTL_CLR_SAI_ACT 0x01
447#define SPECTROMETER_FIFO_MAP_WR_DATA_CH6 0x40
448#define SPECTROMETER_FIFO_MAP_WR_DATA_CH5 0x20
449#define SPECTROMETER_FIFO_MAP_WR_DATA_CH3 0x10
450#define SPECTROMETER_FIFO_MAP_WR_DATA_CH2 0x08
451#define SPECTROMETER_FIFO_MAP_WR_DATA_CH1 0x04
452#define SPECTROMETER_FIFO_MAP_WR_DATA_CH0 0x02
453#define SPECTROMETER_FIFO_MAP_WR_ASTAT 0x01
460#define SPECTROMETER_FD_TIME_2_FD_GAIN_05 0x00
461#define SPECTROMETER_FD_TIME_2_FD_GAIN_1 0x08
462#define SPECTROMETER_FD_TIME_2_FD_GAIN_2 0x10
463#define SPECTROMETER_FD_TIME_2_FD_GAIN_4 0x18
464#define SPECTROMETER_FD_TIME_2_FD_GAIN_8 0x20
465#define SPECTROMETER_FD_TIME_2_FD_GAIN_16 0x28
466#define SPECTROMETER_FD_TIME_2_FD_GAIN_32 0x30
467#define SPECTROMETER_FD_TIME_2_FD_GAIN_64 0x38
468#define SPECTROMETER_FD_TIME_2_FD_GAIN_128 0x40
469#define SPECTROMETER_FD_TIME_2_FD_GAIN_256 0x48
470#define SPECTROMETER_FD_TIME_2_FD_GAIN_512 0x50
477#define SPECTROMETER_UNKNOWN_FREQ 0x01
478#define SPECTROMETER_DETECTED_100_HZ 0x02
479#define SPECTROMETER_DETECTED_120_HZ 0x03
480#define SPECTROMETER_READING_ERROR 0x00
487#define SPECTROMETER_ID_VALUE 0x24
#define SPECTROMETER_RETVAL
Definition: spectrometer.h:63
void spectrometer_f1f4_clr_nir(spectrometer_t *ctx)
SMUX Configuration for F1,F2,F3,F4,NIR,Clear function.
uint8_t spectrometer_flicker_detection(spectrometer_t *ctx)
name function
void spectrometer_smux_en(spectrometer_t *ctx)
Starting the SMUX function.
void spectrometer_pon(spectrometer_t *ctx)
Set the power on bit function.
void spectrometer_raw_rd_val_mode_1(spectrometer_t *ctx, uint8_t *adc_data)
Raw Read Mode 1 function.
void spectrometer_generic_read(spectrometer_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
void spectrometer_reg_bank_cfg(spectrometer_t *ctx, uint8_t reg_bank)
Select Register bank function.
void spectrometer_cfg_setup(spectrometer_cfg_t *cfg)
Config Object Initialization function.
void spectrometer_sp_en(spectrometer_t *ctx, uint8_t state)
Set the spectral measurement enabled bit function.
SPECTROMETER_RETVAL spectrometer_init(spectrometer_t *ctx, spectrometer_cfg_t *cfg)
Initialization function.
uint8_t spectrometer_get_data_ready(spectrometer_t *ctx)
Reading and Polling the the AVALID bit function.
uint8_t spectrometer_get_int(spectrometer_t *ctx)
Get Interrupt state function.
void spectrometer_raw_rd_val_mode_2(spectrometer_t *ctx, uint8_t *adc_data)
Raw Read Mode 2 function.
uint8_t spectrometer_get_smux_en(spectrometer_t *ctx)
Reading and Polling the the SMUX Enable bit function.
void spectrometer_f5f8_clr_nir(spectrometer_t *ctx)
SMUX Configuration for F5,F6,F7,F8,NIR,Clear function.
void spectrometer_def_cfg(spectrometer_t *ctx)
Default configuration function.
void spectrometer_generic_write(spectrometer_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
void spectrometer_fd_cfg(spectrometer_t *ctx)
Flicker Detect Configuration function.
Click configuration structure definition.
Definition: spectrometer.h:520
uint32_t i2c_speed
Definition: spectrometer.h:532
pin_name_t scl
Definition: spectrometer.h:523
pin_name_t int_pin
Definition: spectrometer.h:528
pin_name_t sda
Definition: spectrometer.h:524
uint8_t i2c_address
Definition: spectrometer.h:533
Click ctx object definition.
Definition: spectrometer.h:501
digital_in_t int_pin
Definition: spectrometer.h:504
i2c_master_t i2c
Definition: spectrometer.h:508
uint8_t slave_address
Definition: spectrometer.h:512