LibDriver VEML7700
Loading...
Searching...
No Matches
driver_veml7700_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static veml7700_handle_t gs_handle;
40
51uint8_t veml7700_interrupt_test(uint16_t low_threshold, uint16_t high_threshold, uint32_t times)
52{
53 uint8_t res;
54 uint16_t raw;
55 uint16_t raw2;
56 uint32_t i;
57 double lux;
58 veml7700_info_t info;
59
60 /* link interface function */
68
69 /* get information */
70 res = veml7700_info(&info);
71 if (res != 0)
72 {
73 veml7700_interface_debug_print("veml7700: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print chip info */
80 veml7700_interface_debug_print("veml7700: chip is %s.\n", info.chip_name);
81 veml7700_interface_debug_print("veml7700: manufacturer is %s.\n", info.manufacturer_name);
82 veml7700_interface_debug_print("veml7700: interface is %s.\n", info.interface);
83 veml7700_interface_debug_print("veml7700: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 veml7700_interface_debug_print("veml7700: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 veml7700_interface_debug_print("veml7700: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 veml7700_interface_debug_print("veml7700: max current is %0.2fmA.\n", info.max_current_ma);
87 veml7700_interface_debug_print("veml7700: max temperature is %0.1fC.\n", info.temperature_max);
88 veml7700_interface_debug_print("veml7700: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* start interrupt test */
92 veml7700_interface_debug_print("veml7700: start interrupt test.\n");
93
94 /* init */
95 res = veml7700_init(&gs_handle);
96 if (res != 0)
97 {
98 veml7700_interface_debug_print("veml7700: init failed.\n");
99
100 return 1;
101 }
102
103 /* set als gain1 */
105 if (res != 0)
106 {
107 veml7700_interface_debug_print("veml7700: set als gain failed.\n");
108 (void)veml7700_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* set als integration time 400ms */
115 if (res != 0)
116 {
117 veml7700_interface_debug_print("veml7700: set als integration time failed.\n");
118 (void)veml7700_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* set als persistence 1 */
125 if (res != 0)
126 {
127 veml7700_interface_debug_print("veml7700: set als persistence failed.\n");
128 (void)veml7700_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* set power saving mode1 */
135 if (res != 0)
136 {
137 veml7700_interface_debug_print("veml7700: set power saving mode failed.\n");
138 (void)veml7700_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* disable power saving */
145 if (res != 0)
146 {
147 veml7700_interface_debug_print("veml7700: set power saving failed.\n");
148 (void)veml7700_deinit(&gs_handle);
149
150 return 1;
151 }
152
153 /* set als low threshold */
154 res = veml7700_set_als_low_threshold(&gs_handle, low_threshold);
155 if (res != 0)
156 {
157 veml7700_interface_debug_print("veml7700: set als low threshold failed.\n");
158 (void)veml7700_deinit(&gs_handle);
159
160 return 1;
161 }
162
163 /* set als high threshold */
164 res = veml7700_set_als_high_threshold(&gs_handle, high_threshold);
165 if (res != 0)
166 {
167 veml7700_interface_debug_print("veml7700: set als high threshold failed.\n");
168 (void)veml7700_deinit(&gs_handle);
169
170 return 1;
171 }
172
173 /* enable als interrupt */
175 if (res != 0)
176 {
177 veml7700_interface_debug_print("veml7700: set als interrupt failed.\n");
178 (void)veml7700_deinit(&gs_handle);
179
180 return 1;
181 }
182
183 /* power on */
185 if (res != 0)
186 {
187 veml7700_interface_debug_print("veml7700: set als mode failed.\n");
188 (void)veml7700_deinit(&gs_handle);
189
190 return 1;
191 }
192
193 /* disable auto range */
195 if (res != 0)
196 {
197 veml7700_interface_debug_print("veml7700: set auto range failed.\n");
198 (void)veml7700_deinit(&gs_handle);
199
200 return 1;
201 }
202
203 /* 1000ms */
205
206 /* loop */
207 for (i = 0; i < times; i++)
208 {
209 veml7700_bool_t low_bool;
210 veml7700_bool_t high_bool;
211
212 /* get interrupt status */
213 res = veml7700_get_interrupt_status(&gs_handle, &low_bool, &high_bool);
214 if (res != 0)
215 {
216 veml7700_interface_debug_print("veml7700: get interrupt status failed.\n");
217 (void)veml7700_deinit(&gs_handle);
218
219 return 1;
220 }
221 if (low_bool == VEML7700_BOOL_ENABLE)
222 {
223 veml7700_interface_debug_print("veml7700: find low threshold interrupt.\n");
224 }
225 if (high_bool == VEML7700_BOOL_ENABLE)
226 {
227 veml7700_interface_debug_print("veml7700: find high threshold interrupt.\n");
228 }
229
230 /* read als */
231 res = veml7700_read_als(&gs_handle, &raw, &lux);
232 if (res != 0)
233 {
234 veml7700_interface_debug_print("veml7700: read als failed.\n");
235 (void)veml7700_deinit(&gs_handle);
236
237 return 1;
238 }
239
240 /* output */
241 veml7700_interface_debug_print("veml7700: als is %0.2flux.\n", lux);
242
243 /* read white */
244 res = veml7700_read_white(&gs_handle, &raw2);
245 if (res != 0)
246 {
247 veml7700_interface_debug_print("veml7700: read white failed.\n");
248 (void)veml7700_deinit(&gs_handle);
249
250 return 1;
251 }
252
253 /* output */
254 veml7700_interface_debug_print("veml7700: white is %d.\n", raw2);
255
256 /* 1000ms */
258 }
259
260 /* finish interrupt test */
261 veml7700_interface_debug_print("veml7700: finish interrupt test.\n");
262 (void)veml7700_deinit(&gs_handle);
263
264 return 0;
265}
driver veml7700 interrupt test header file
uint8_t veml7700_get_interrupt_status(veml7700_handle_t *handle, veml7700_bool_t *low_threshold, veml7700_bool_t *high_threshold)
get interrupt status
uint8_t veml7700_set_als_integration_time(veml7700_handle_t *handle, veml7700_als_integration_time_t t)
set als integration time
veml7700_bool_t
veml7700 bool enumeration definition
uint8_t veml7700_deinit(veml7700_handle_t *handle)
close the chip
uint8_t veml7700_set_als_interrupt(veml7700_handle_t *handle, veml7700_bool_t enable)
enable or disable als interrupt
uint8_t veml7700_read_white(veml7700_handle_t *handle, uint16_t *raw)
read white channel
uint8_t veml7700_info(veml7700_info_t *info)
get chip's information
struct veml7700_info_s veml7700_info_t
veml7700 information structure definition
uint8_t veml7700_init(veml7700_handle_t *handle)
initialize the chip
uint8_t veml7700_read_als(veml7700_handle_t *handle, uint16_t *raw, double *lux)
read als channel
uint8_t veml7700_set_als_mode(veml7700_handle_t *handle, veml7700_als_mode_t mode)
set als mode
uint8_t veml7700_set_als_gain(veml7700_handle_t *handle, veml7700_als_gain_t gain)
set als gain
struct veml7700_handle_s veml7700_handle_t
veml7700 handle structure definition
uint8_t veml7700_set_als_persistence(veml7700_handle_t *handle, veml7700_als_persistence_t persistence)
set als persistence
uint8_t veml7700_set_als_low_threshold(veml7700_handle_t *handle, uint16_t threshold)
set als low threshold
uint8_t veml7700_set_als_high_threshold(veml7700_handle_t *handle, uint16_t threshold)
set als high threshold
uint8_t veml7700_set_auto_range(veml7700_handle_t *handle, veml7700_bool_t enable)
set auto range
uint8_t veml7700_set_power_saving(veml7700_handle_t *handle, veml7700_bool_t enable)
enable or disable power saving
uint8_t veml7700_set_power_saving_mode(veml7700_handle_t *handle, veml7700_power_saving_mode_t mode)
set power saving mode
@ VEML7700_BOOL_DISABLE
@ VEML7700_BOOL_ENABLE
@ VEML7700_POWER_SAVING_MODE1
@ VEML7700_ALS_INTEGRATION_TIME_400MS
@ VEML7700_ALS_GAIN_1
@ VEML7700_ALS_PERSISTENCE_1
@ VEML7700_ALS_MODE_POWER_ON
uint8_t veml7700_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void veml7700_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t veml7700_interface_iic_init(void)
interface iic bus init
void veml7700_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t veml7700_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t veml7700_interface_iic_deinit(void)
interface iic bus deinit
uint8_t veml7700_interrupt_test(uint16_t low_threshold, uint16_t high_threshold, uint32_t times)
interrupt test
char manufacturer_name[32]