LibDriver UVIS25
Loading...
Searching...
No Matches
driver_uvis25_interrupt_test.c
Go to the documentation of this file.
1
37
39
40static uvis25_handle_t gs_handle;
41
50{
51 if (uvis25_irq_handler(&gs_handle) != 0)
52 {
53 return 1;
54 }
55 else
56 {
57 return 0;
58 }
59}
60
71uint8_t uvis25_interrupt_test(uvis25_interface_t interface, float threshold, uint32_t times)
72{
73 uint8_t res, reg;
74 uint32_t i;
75 uvis25_info_t info;
76
77 /* link functions */
90
91 /* get information */
92 res = uvis25_info(&info);
93 if (res != 0)
94 {
95 uvis25_interface_debug_print("uvis25: get info failed.\n");
96
97 return 1;
98 }
99 else
100 {
101 /* print chip information */
102 uvis25_interface_debug_print("uvis25: chip is %s.\n", info.chip_name);
103 uvis25_interface_debug_print("uvis25: manufacturer is %s.\n", info.manufacturer_name);
104 uvis25_interface_debug_print("uvis25: interface is %s.\n", info.interface);
105 uvis25_interface_debug_print("uvis25: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
106 uvis25_interface_debug_print("uvis25: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
107 uvis25_interface_debug_print("uvis25: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
108 uvis25_interface_debug_print("uvis25: max current is %0.2fmA.\n", info.max_current_ma);
109 uvis25_interface_debug_print("uvis25: max temperature is %0.1fC.\n", info.temperature_max);
110 uvis25_interface_debug_print("uvis25: min temperature is %0.1fC.\n", info.temperature_min);
111 }
112
113 /* set interface */
114 res = uvis25_set_interface(&gs_handle, interface);
115 if (res != 0)
116 {
117 uvis25_interface_debug_print("uvis25: set interface failed.\n");
118
119 return 1;
120 }
121
122 /* uvis25 init */
123 res = uvis25_init(&gs_handle);
124 if (res != 0)
125 {
126 uvis25_interface_debug_print("uvis25: init failed.\n");
127
128 return 1;
129 }
130
131 /* start interrupt test */
132 uvis25_interface_debug_print("uvis25: start interrupt test.\n");
133 res = uvis25_set_iic(&gs_handle, UVIS25_BOOL_TRUE);
134 if (res != 0)
135 {
136 uvis25_interface_debug_print("uvis25: set iic failed.\n");
137 (void)uvis25_deinit(&gs_handle);
138
139 return 1;
140 }
141
142 /* set spi wire 4 */
143 res = uvis25_set_spi_wire(&gs_handle, UVIS25_SPI_WIRE_4);
144 if (res != 0)
145 {
146 uvis25_interface_debug_print("uvis25: set spi wire failed.\n");
147 (void)uvis25_deinit(&gs_handle);
148
149 return 1;
150 }
151
152 /* set normal mode */
153 res = uvis25_set_boot(&gs_handle, UVIS25_BOOT_NORMAL_MODE);
154 if (res != 0)
155 {
156 uvis25_interface_debug_print("uvis25: set boot failed.\n");
157 (void)uvis25_deinit(&gs_handle);
158
159 return 1;
160 }
161
162 /* disable block data update */
164 if (res != 0)
165 {
166 uvis25_interface_debug_print("uvis25: set block data update failed.\n");
167 (void)uvis25_deinit(&gs_handle);
168
169 return 1;
170 }
171
172 /* set interrupt active level lower */
174 if (res != 0)
175 {
176 uvis25_interface_debug_print("uvis25: set interrupt active level failed.\n");
177 (void)uvis25_deinit(&gs_handle);
178
179 return 1;
180 }
181
182 /* set push-pull type */
184 if (res != 0)
185 {
186 uvis25_interface_debug_print("uvis25: set interrupt pin type failed.\n");
187 (void)uvis25_deinit(&gs_handle);
188
189 return 1;
190 }
191
192 /* set uv index low */
194 if (res != 0)
195 {
196 uvis25_interface_debug_print("uvis25: set interrupt type failed.\n");
197 (void)uvis25_deinit(&gs_handle);
198
199 return 1;
200 }
201
202 /* enable interrupt */
203 res = uvis25_set_interrupt(&gs_handle, UVIS25_BOOL_TRUE);
204 if (res != 0)
205 {
206 uvis25_interface_debug_print("uvis25: set interrupt failed.\n");
207 (void)uvis25_deinit(&gs_handle);
208
209 return 1;
210 }
211
212 /* enable latch interrupt */
214 if (res != 0)
215 {
216 uvis25_interface_debug_print("uvis25: set latch interrupt failed.\n");
217 (void)uvis25_deinit(&gs_handle);
218
219 return 1;
220 }
221
222 /* enable interrupt low threshold */
224 if (res != 0)
225 {
226 uvis25_interface_debug_print("uvis25: set interrupt low threshold failed.\n");
227 (void)uvis25_deinit(&gs_handle);
228
229 return 1;
230 }
231
232 /* enable interrupt high threshold */
234 if (res != 0)
235 {
236 uvis25_interface_debug_print("uvis25: set interrupt high threshold failed.\n");
237 (void)uvis25_deinit(&gs_handle);
238
239 return 1;
240 }
241
242 /* threshold convert to register */
243 res = uvis25_threshold_convert_to_register(&gs_handle, threshold, (uint8_t *)&reg);
244 if (res != 0)
245 {
246 uvis25_interface_debug_print("uvis25: threshold convert to register failed.\n");
247 (void)uvis25_deinit(&gs_handle);
248
249 return 1;
250 }
251
252 /* set threshold */
253 res = uvis25_set_threshold(&gs_handle, reg);
254 if (res != 0)
255 {
256 uvis25_interface_debug_print("uvis25: set threshold failed.\n");
257 (void)uvis25_deinit(&gs_handle);
258
259 return 1;
260 }
261
262 /* start continuous read */
263 res = uvis25_start_continuous_read(&gs_handle);
264 if (res != 0)
265 {
266 uvis25_interface_debug_print("uvis25: start continuous read failed.\n");
267 (void)uvis25_deinit(&gs_handle);
268
269 return 1;
270 }
271 for (i = 0; i < times; i++)
272 {
273 uint8_t raw;
274 float uv;
275
277
278 /* continuous read */
279 res = uvis25_continuous_read(&gs_handle, (uint8_t *)&raw, (float *)&uv);
280 if (res != 0)
281 {
282 uvis25_interface_debug_print("uvis25: read failed.\n");
283 (void)uvis25_deinit(&gs_handle);
284
285 return 1;
286 }
287 uvis25_interface_debug_print("uvis25: uv %0.4f is %s than threshold.\n", uv, uv>threshold ? "higher": "lower");
288 }
289
290 /* stop continuous read */
291 res = uvis25_stop_continuous_read(&gs_handle);
292 if (res != 0)
293 {
294 uvis25_interface_debug_print("uvis25: stop continuous read failed.\n");
295 (void)uvis25_deinit(&gs_handle);
296
297 return 1;
298 }
299
300 /* finish interrupt test */
301 uvis25_interface_debug_print("uvis25: finish interrupt test.\n");
302 (void)uvis25_deinit(&gs_handle);
303
304 return 0;
305}
driver uvis25 interrupt test header file
uvis25_interface_t
uvis25 interface enumeration definition
uint8_t uvis25_set_boot(uvis25_handle_t *handle, uvis25_boot_mode_t mode)
set the boot mode
uint8_t uvis25_set_spi_wire(uvis25_handle_t *handle, uvis25_spi_wire_t wire)
set the spi wire
uint8_t uvis25_init(uvis25_handle_t *handle)
initialize the chip
uint8_t uvis25_set_iic(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable the chip iic
uint8_t uvis25_continuous_read(uvis25_handle_t *handle, uint8_t *raw, float *uv)
read data continuously
uint8_t uvis25_deinit(uvis25_handle_t *handle)
close the chip
uint8_t uvis25_irq_handler(uvis25_handle_t *handle)
irq handler
uint8_t uvis25_set_interface(uvis25_handle_t *handle, uvis25_interface_t interface)
set the chip interface
struct uvis25_info_s uvis25_info_t
uvis25 information structure definition
struct uvis25_handle_s uvis25_handle_t
uvis25 handle structure definition
uint8_t uvis25_info(uvis25_info_t *info)
get chip's information
uint8_t uvis25_set_block_data_update(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable blocking data update
uint8_t uvis25_start_continuous_read(uvis25_handle_t *handle)
start reading
uint8_t uvis25_stop_continuous_read(uvis25_handle_t *handle)
stop reading
@ UVIS25_BOOT_NORMAL_MODE
@ UVIS25_SPI_WIRE_4
@ UVIS25_BOOL_TRUE
@ UVIS25_BOOL_FALSE
uint8_t uvis25_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void uvis25_interface_debug_print(const char *const fmt,...)
interface print format data
void uvis25_interface_receive_callback(uint8_t type)
interface receive callback
uint8_t uvis25_interface_iic_init(void)
interface iic bus init
uint8_t uvis25_interface_iic_deinit(void)
interface iic bus deinit
uint8_t uvis25_interface_spi_init(void)
interface spi bus init
uint8_t uvis25_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t uvis25_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t uvis25_interface_spi_deinit(void)
interface spi bus deinit
uint8_t uvis25_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void uvis25_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t uvis25_set_interrupt_low_threshold(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable the low threshold interrupt
uint8_t uvis25_set_interrupt_high_threshold(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable the high threshold interrupt
uint8_t uvis25_set_interrupt_pin_type(uvis25_handle_t *handle, uvis25_interrupt_pin_type_t pin_type)
set the interrupt pin type
uint8_t uvis25_set_threshold(uvis25_handle_t *handle, uint8_t threshold)
set the interrupt threshold
uint8_t uvis25_set_interrupt_active_level(uvis25_handle_t *handle, uvis25_interrupt_active_level_t level)
set the interrupt active level
uint8_t uvis25_threshold_convert_to_register(uvis25_handle_t *handle, float uv, uint8_t *reg)
convert a uv index to a raw register data
uint8_t uvis25_set_latch_interrupt(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable latching interrupt
uint8_t uvis25_set_interrupt_type(uvis25_handle_t *handle, uvis25_interrupt_type_t type)
set the interrupt type
uint8_t uvis25_set_interrupt(uvis25_handle_t *handle, uvis25_bool_t enable)
enable or disable the chip interrupt
@ UVIS25_INTERRUPT_PIN_TYPE_PUSH_PULL
@ UVIS25_INTERRUPT_ACTIVE_LEVEL_LOWER
@ UVIS25_INTERRUPT_TYPE_UV_INDEX_LOW
uint8_t uvis25_interrupt_test_irq_handler(void)
interrupt test irq handler
uint8_t uvis25_interrupt_test(uvis25_interface_t interface, float threshold, uint32_t times)
interrupt test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]