LibDriver AMG8833
Loading...
Searching...
No Matches
driver_amg8833_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static amg8833_handle_t gs_handle;
40
49{
50 if (amg8833_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54 else
55 {
56 return 0;
57 }
58}
59
75 float high_level, float low_level,
76 float hysteresis_level, uint32_t times)
77{
78 uint32_t i;
79 uint8_t res;
80 int16_t level;
81 amg8833_info_t info;
82
83 /* link interface function */
92
93 /* get information */
94 res = amg8833_info(&info);
95 if (res != 0)
96 {
97 amg8833_interface_debug_print("amg8833: get info failed.\n");
98
99 return 1;
100 }
101 else
102 {
103 /* print chip info */
104 amg8833_interface_debug_print("amg8833: chip is %s.\n", info.chip_name);
105 amg8833_interface_debug_print("amg8833: manufacturer is %s.\n", info.manufacturer_name);
106 amg8833_interface_debug_print("amg8833: interface is %s.\n", info.interface);
107 amg8833_interface_debug_print("amg8833: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000 ) / 100);
108 amg8833_interface_debug_print("amg8833: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
109 amg8833_interface_debug_print("amg8833: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
110 amg8833_interface_debug_print("amg8833: max current is %0.2fmA.\n", info.max_current_ma);
111 amg8833_interface_debug_print("amg8833: max temperature is %0.1fC.\n", info.temperature_max);
112 amg8833_interface_debug_print("amg8833: min temperature is %0.1fC.\n", info.temperature_min);
113 }
114
115 /* start interrupt test */
116 amg8833_interface_debug_print("amg8833: start interrupt test.\n");
117
118 /* set the address */
119 res = amg8833_set_addr_pin(&gs_handle, addr_pin);
120 if (res != 0)
121 {
122 amg8833_interface_debug_print("amg8833: set addr pin failed.\n");
123
124 return 1;
125 }
126
127 /* init */
128 res = amg8833_init(&gs_handle);
129 if (res != 0)
130 {
131 amg8833_interface_debug_print("amg8833: init failed.\n");
132
133 return 1;
134 }
135
136 /* set normal mode */
137 res = amg8833_set_mode(&gs_handle, AMG8833_MODE_NORMAL);
138 if (res != 0)
139 {
140 amg8833_interface_debug_print("amg8833: set mode failed.\n");
141 (void)amg8833_deinit(&gs_handle);
142
143 return 1;
144 }
145
146 /* 1 fps */
148 if (res != 0)
149 {
150 amg8833_interface_debug_print("amg8833: set frame rate failed.\n");
151 (void)amg8833_deinit(&gs_handle);
152
153 return 1;
154 }
155
156 /* twice mode */
158 if (res != 0)
159 {
160 amg8833_interface_debug_print("amg8833: set average mode failed.\n");
161 (void)amg8833_deinit(&gs_handle);
162
163 return 1;
164 }
165
166 /* convert */
167 res = amg8833_interrupt_level_convert_to_register(&gs_handle, high_level, (int16_t *)&level);
168 if (res != 0)
169 {
170 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
171 (void)amg8833_deinit(&gs_handle);
172
173 return 1;
174 }
175
176 /* high level */
177 res = amg8833_set_interrupt_high_level(&gs_handle, level);
178 if (res != 0)
179 {
180 amg8833_interface_debug_print("amg8833: set interrupt high level failed.\n");
181 (void)amg8833_deinit(&gs_handle);
182
183 return 1;
184 }
185
186 /* convert */
187 res = amg8833_interrupt_level_convert_to_register(&gs_handle, low_level, (int16_t *)&level);
188 if (res != 0)
189 {
190 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
191 (void)amg8833_deinit(&gs_handle);
192
193 return 1;
194 }
195
196 /* low level */
197 res = amg8833_set_interrupt_low_level(&gs_handle, level);
198 if (res != 0)
199 {
200 amg8833_interface_debug_print("amg8833: set interrupt low level failed.\n");
201 (void)amg8833_deinit(&gs_handle);
202
203 return 1;
204 }
205
206 /* convert */
207 res = amg8833_interrupt_level_convert_to_register(&gs_handle, hysteresis_level, (int16_t *)&level);
208 if (res != 0)
209 {
210 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
211 (void)amg8833_deinit(&gs_handle);
212
213 return 1;
214 }
215
216 /* hysteresis level */
217 res = amg8833_set_interrupt_hysteresis_level(&gs_handle, level);
218 if (res != 0)
219 {
220 amg8833_interface_debug_print("amg8833: set interrupt hysteresis level failed.\n");
221 (void)amg8833_deinit(&gs_handle);
222
223 return 1;
224 }
225
226 /* set mode */
227 res = amg8833_set_interrupt_mode(&gs_handle, mode);
228 if (res != 0)
229 {
230 amg8833_interface_debug_print("amg8833: set interrupt mode failed.\n");
231 (void)amg8833_deinit(&gs_handle);
232
233 return 1;
234 }
235
236 /* flag reset */
237 res = amg8833_reset(&gs_handle, AMG8833_RESET_TYPE_FLAG);
238 if (res != 0)
239 {
240 amg8833_interface_debug_print("amg8833: reset failed.\n");
241 (void)amg8833_deinit(&gs_handle);
242
243 return 1;
244 }
245
246 /* enable */
247 res = amg8833_set_interrupt(&gs_handle, AMG8833_BOOL_TRUE);
248 if (res != 0)
249 {
250 amg8833_interface_debug_print("amg8833: set interrupt failed.\n");
251 (void)amg8833_deinit(&gs_handle);
252
253 return 1;
254 }
255
256 /* delay 1000 ms */
258
259 for (i = 0; i < times; i++)
260 {
261 int16_t raw;
262 float temp;
263
264 /* read temperature */
265 res = amg8833_read_temperature(&gs_handle, (int16_t *)&raw, (float *)&temp);
266 if (res != 0)
267 {
268 amg8833_interface_debug_print("amg8833: read temperature failed.\n");
269 (void)amg8833_deinit(&gs_handle);
270
271 return 1;
272 }
273 else
274 {
275 amg8833_interface_debug_print("amg8833: temperature is %0.3fC.\n", temp);
276 }
277
278 /* delay 1000 ms */
280 }
281
282 /* finish interrupt test */
283 amg8833_interface_debug_print("amg8833: finish interrupt test.\n");
284 (void)amg8833_deinit(&gs_handle);
285
286 return 0;
287}
driver amg8833 interrupt test header file
amg8833_address_t
amg8833 address enumeration definition
uint8_t amg8833_set_interrupt(amg8833_handle_t *handle, amg8833_bool_t enable)
enable or disable the interrupt
struct amg8833_handle_s amg8833_handle_t
amg8833 handle structure definition
uint8_t amg8833_set_addr_pin(amg8833_handle_t *handle, amg8833_address_t addr_pin)
set the iic address pin
uint8_t amg8833_deinit(amg8833_handle_t *handle)
close the chip
struct amg8833_info_s amg8833_info_t
amg8833 information structure definition
uint8_t amg8833_reset(amg8833_handle_t *handle, amg8833_reset_type_t type)
reset the chip
uint8_t amg8833_set_interrupt_low_level(amg8833_handle_t *handle, int16_t level)
set the interrupt low level
uint8_t amg8833_info(amg8833_info_t *info)
get chip's information
uint8_t amg8833_set_interrupt_mode(amg8833_handle_t *handle, amg8833_interrupt_mode_t mode)
set the interrupt mode
uint8_t amg8833_set_mode(amg8833_handle_t *handle, amg8833_mode_t mode)
set the mode
amg8833_interrupt_mode_t
amg8833 interrupt mode enumeration definition
uint8_t amg8833_set_average_mode(amg8833_handle_t *handle, amg8833_average_mode_t mode)
set the average_mode
uint8_t amg8833_set_interrupt_high_level(amg8833_handle_t *handle, int16_t level)
set the interrupt high level
uint8_t amg8833_read_temperature(amg8833_handle_t *handle, int16_t *raw, float *temp)
read the temperature
uint8_t amg8833_irq_handler(amg8833_handle_t *handle)
irq handler
uint8_t amg8833_set_frame_rate(amg8833_handle_t *handle, amg8833_frame_rate_t rate)
set the frame rate
uint8_t amg8833_interrupt_level_convert_to_register(amg8833_handle_t *handle, float temp, int16_t *reg)
convert the interrupt level to the register raw data
uint8_t amg8833_set_interrupt_hysteresis_level(amg8833_handle_t *handle, int16_t level)
set the interrupt hysteresis level
uint8_t amg8833_init(amg8833_handle_t *handle)
initialize the chip
@ AMG8833_FRAME_RATE_1_FPS
@ AMG8833_BOOL_TRUE
@ AMG8833_AVERAGE_MODE_TWICE
@ AMG8833_MODE_NORMAL
@ AMG8833_RESET_TYPE_FLAG
uint8_t amg8833_interface_iic_deinit(void)
interface iic bus deinit
void amg8833_interface_receive_callback(uint8_t type)
interface receive callback
void amg8833_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t amg8833_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void amg8833_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t amg8833_interface_iic_init(void)
interface iic bus init
uint8_t amg8833_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t amg8833_interrupt_test(amg8833_address_t addr_pin, amg8833_interrupt_mode_t mode, float high_level, float low_level, float hysteresis_level, uint32_t times)
interrupt test
uint8_t amg8833_interrupt_test_irq_handler(void)
interrupt test irq callback
uint32_t driver_version
char manufacturer_name[32]