LibDriver AMG8833
Loading...
Searching...
No Matches
driver_amg8833_interrupt.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,
77 void (*callback)(uint8_t type)
78 )
79{
80 uint8_t res;
81 int16_t level;
82
83 /* link interface function */
91 DRIVER_AMG8833_LINK_RECEIVE_CALLBACK(&gs_handle, callback);
92
93 /* set the address */
94 res = amg8833_set_addr_pin(&gs_handle, addr_pin);
95 if (res != 0)
96 {
97 amg8833_interface_debug_print("amg8833: set addr pin failed.\n");
98
99 return 1;
100 }
101
102 /* init */
103 res = amg8833_init(&gs_handle);
104 if (res != 0)
105 {
106 amg8833_interface_debug_print("amg8833: init failed.\n");
107
108 return 1;
109 }
110
111 /* set normal mode */
112 res = amg8833_set_mode(&gs_handle, AMG8833_MODE_NORMAL);
113 if (res != 0)
114 {
115 amg8833_interface_debug_print("amg8833: set mode failed.\n");
116 (void)amg8833_deinit(&gs_handle);
117
118 return 1;
119 }
120
121 /* set frame rate */
123 if (res != 0)
124 {
125 amg8833_interface_debug_print("amg8833: set frame rate failed.\n");
126 (void)amg8833_deinit(&gs_handle);
127
128 return 1;
129 }
130
131 /* set average mode */
133 if (res != 0)
134 {
135 amg8833_interface_debug_print("amg8833: set average mode failed.\n");
136 (void)amg8833_deinit(&gs_handle);
137
138 return 1;
139 }
140
141
142 /* convert */
143 res = amg8833_interrupt_level_convert_to_register(&gs_handle, high_level, (int16_t *)&level);
144 if (res != 0)
145 {
146 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
147 (void)amg8833_deinit(&gs_handle);
148
149 return 1;
150 }
151
152 /* high level */
153 res = amg8833_set_interrupt_high_level(&gs_handle, level);
154 if (res != 0)
155 {
156 amg8833_interface_debug_print("amg8833: set interrupt high level failed.\n");
157 (void)amg8833_deinit(&gs_handle);
158
159 return 1;
160 }
161
162 /* convert */
163 res = amg8833_interrupt_level_convert_to_register(&gs_handle, low_level, (int16_t *)&level);
164 if (res != 0)
165 {
166 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
167 (void)amg8833_deinit(&gs_handle);
168
169 return 1;
170 }
171
172 /* low level */
173 res = amg8833_set_interrupt_low_level(&gs_handle, level);
174 if (res != 0)
175 {
176 amg8833_interface_debug_print("amg8833: set interrupt low level failed.\n");
177 (void)amg8833_deinit(&gs_handle);
178
179 return 1;
180 }
181
182 /* convert */
183 res = amg8833_interrupt_level_convert_to_register(&gs_handle, hysteresis_level, (int16_t *)&level);
184 if (res != 0)
185 {
186 amg8833_interface_debug_print("amg8833: interrupt level convert to register failed.\n");
187 (void)amg8833_deinit(&gs_handle);
188
189 return 1;
190 }
191
192 /* hysteresis level */
193 res = amg8833_set_interrupt_hysteresis_level(&gs_handle, level);
194 if (res != 0)
195 {
196 amg8833_interface_debug_print("amg8833: set interrupt hysteresis level failed.\n");
197 (void)amg8833_deinit(&gs_handle);
198
199 return 1;
200 }
201
202 /* set mode */
203 res = amg8833_set_interrupt_mode(&gs_handle, mode);
204 if (res != 0)
205 {
206 amg8833_interface_debug_print("amg8833: set interrupt mode failed.\n");
207 (void)amg8833_deinit(&gs_handle);
208
209 return 1;
210 }
211
212 /* flag reset */
213 res = amg8833_reset(&gs_handle, AMG8833_RESET_TYPE_FLAG);
214 if (res != 0)
215 {
216 amg8833_interface_debug_print("amg8833: reset failed.\n");
217 (void)amg8833_deinit(&gs_handle);
218
219 return 1;
220 }
221
222 /* enable */
223 res = amg8833_set_interrupt(&gs_handle, AMG8833_BOOL_TRUE);
224 if (res != 0)
225 {
226 amg8833_interface_debug_print("amg8833: set interrupt failed.\n");
227 (void)amg8833_deinit(&gs_handle);
228
229 return 1;
230 }
231
232 return 0;
233}
234
243{
244 if (amg8833_deinit(&gs_handle) != 0)
245 {
246 return 1;
247 }
248 else
249 {
250 return 0;
251 }
252}
253
262uint8_t amg8833_interrupt_get_table(uint8_t table[8][1])
263{
264 /* get interrupt table */
265 if (amg8833_get_interrupt_table(&gs_handle, table) != 0)
266 {
267 return 1;
268 }
269 else
270 {
271 return 0;
272 }
273}
274
284{
285 int16_t raw[8][8];
286
287 /* read temperature array */
288 if (amg8833_read_temperature_array(&gs_handle, (int16_t (*)[8])raw, temp) != 0)
289 {
290 return 1;
291 }
292 else
293 {
294 return 0;
295 }
296}
297
307{
308 int16_t raw;
309
310 /* read temperature */
311 if (amg8833_read_temperature(&gs_handle, (int16_t *)&raw, (float *)temp) != 0)
312 {
313 return 1;
314 }
315 else
316 {
317 return 0;
318 }
319}
driver amg8833 interrupt 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_get_interrupt_table(amg8833_handle_t *handle, uint8_t table[8][1])
get the interrupt table
uint8_t amg8833_deinit(amg8833_handle_t *handle)
close the chip
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_set_interrupt_mode(amg8833_handle_t *handle, amg8833_interrupt_mode_t mode)
set the interrupt mode
uint8_t amg8833_read_temperature_array(amg8833_handle_t *handle, int16_t raw[8][8], float temp[8][8])
read the temperature array
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_BOOL_TRUE
@ AMG8833_MODE_NORMAL
@ AMG8833_RESET_TYPE_FLAG
uint8_t amg8833_interrupt_get_table(uint8_t table[8][1])
interrupt example get interrupt table
uint8_t amg8833_interrupt_irq_handler(void)
interrupt irq callback
uint8_t amg8833_interrupt_read_temperature(float *temp)
interrupt example read temperature
uint8_t amg8833_interrupt_init(amg8833_address_t addr_pin, amg8833_interrupt_mode_t mode, float high_level, float low_level, float hysteresis_level, void(*callback)(uint8_t type))
interrupt example init
#define AMG8833_INTERRUPT_DEFAULT_AVERAGE_MODE
uint8_t amg8833_interrupt_deinit(void)
interrupt example deinit
#define AMG8833_INTERRUPT_DEFAULT_FRAME_RATE
amg8833 interrupt example default definition
uint8_t amg8833_interrupt_read_temperature_array(float temp[8][8])
interrupt example read temperature array
uint8_t amg8833_interface_iic_deinit(void)
interface iic bus deinit
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