LibDriver INA226
Loading...
Searching...
No Matches
driver_ina226_alert.c
Go to the documentation of this file.
1
36
37#include "driver_ina226_alert.h"
38
39static ina226_handle_t gs_handle;
40
49{
50 if (ina226_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54
55 return 0;
56}
57
70uint8_t ina226_alert_init(ina226_address_t addr_pin, double r, ina226_mask_t mask, float threshold, void (*callback)(uint8_t type))
71{
72 uint8_t res;
73 uint16_t reg;
74 uint16_t calibration;
75
76 /* link interface function */
84 DRIVER_INA226_LINK_RECEIVE_CALLBACK(&gs_handle, callback);
85
86 /* set addr pin */
87 res = ina226_set_addr_pin(&gs_handle, addr_pin);
88 if (res != 0)
89 {
90 ina226_interface_debug_print("ina226: set addr pin failed.\n");
91
92 return 1;
93 }
94
95 /* set the r */
96 res = ina226_set_resistance(&gs_handle, r);
97 if (res != 0)
98 {
99 ina226_interface_debug_print("ina226: set resistance failed.\n");
100
101 return 1;
102 }
103
104 /* init */
105 res = ina226_init(&gs_handle);
106 if (res != 0)
107 {
108 ina226_interface_debug_print("ina226: init failed.\n");
109
110 return 1;
111 }
112
113 /* set default average mode */
115 if (res != 0)
116 {
117 ina226_interface_debug_print("ina226: set average mode failed.\n");
118 (void)ina226_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* set default bus voltage conversion time */
125 if (res != 0)
126 {
127 ina226_interface_debug_print("ina226: set bus voltage conversion time failed.\n");
128 (void)ina226_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* set default shunt voltage conversion time */
135 if (res != 0)
136 {
137 ina226_interface_debug_print("ina226: set shunt voltage conversion time failed.\n");
138 (void)ina226_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* calculate calibration */
144 res = ina226_calculate_calibration(&gs_handle, (uint16_t *)&calibration);
145 if (res != 0)
146 {
147 ina226_interface_debug_print("ina226: calculate calibration failed.\n");
148 (void)ina226_deinit(&gs_handle);
149
150 return 1;
151 }
152 res = ina226_set_calibration(&gs_handle, calibration);
153 if (res != 0)
154 {
155 ina226_interface_debug_print("ina226: set calibration failed.\n");
156 (void)ina226_deinit(&gs_handle);
157
158 return 1;
159 }
160
161 /* set default conversion ready alert pin */
163 if (res != 0)
164 {
165 ina226_interface_debug_print("ina226: set conversion ready alert pin failed.\n");
166 (void)ina226_deinit(&gs_handle);
167
168 return 1;
169 }
170
171 /* set default alert polarity pin */
173 if (res != 0)
174 {
175 ina226_interface_debug_print("ina226: set alert polarity pin failed.\n");
176 (void)ina226_deinit(&gs_handle);
177
178 return 1;
179 }
180
181 /* set default alert latch */
183 if (res != 0)
184 {
185 ina226_interface_debug_print("ina226: set alert latch failed.\n");
186 (void)ina226_deinit(&gs_handle);
187
188 return 1;
189 }
190
191 /* set shunt bus voltage continuous */
193 if (res != 0)
194 {
195 ina226_interface_debug_print("ina226: set mode failed.\n");
196 (void)ina226_deinit(&gs_handle);
197
198 return 1;
199 }
200
201 /* set mask */
203 {
204 /* shunt voltage convert to register */
205 res = ina226_shunt_voltage_convert_to_register(&gs_handle, threshold, &reg);
206 if (res != 0)
207 {
208 ina226_interface_debug_print("ina226: shunt voltage convert to register failed.\n");
209 (void)ina226_deinit(&gs_handle);
210
211 return 1;
212 }
213
214 /* set alert limit */
215 res = ina226_set_alert_limit(&gs_handle, reg);
216 if (res != 0)
217 {
218 ina226_interface_debug_print("ina226: set alert limit failed.\n");
219 (void)ina226_deinit(&gs_handle);
220
221 return 1;
222 }
223
224 /* enable */
226 if (res != 0)
227 {
228 ina226_interface_debug_print("ina226: set mask failed.\n");
229 (void)ina226_deinit(&gs_handle);
230
231 return 1;
232 }
233
234 /* disable */
236 if (res != 0)
237 {
238 ina226_interface_debug_print("ina226: set mask failed.\n");
239 (void)ina226_deinit(&gs_handle);
240
241 return 1;
242 }
243
244 /* disable */
246 if (res != 0)
247 {
248 ina226_interface_debug_print("ina226: set mask failed.\n");
249 (void)ina226_deinit(&gs_handle);
250
251 return 1;
252 }
253
254 /* disable */
256 if (res != 0)
257 {
258 ina226_interface_debug_print("ina226: set mask failed.\n");
259 (void)ina226_deinit(&gs_handle);
260
261 return 1;
262 }
263
264 /* disable */
266 if (res != 0)
267 {
268 ina226_interface_debug_print("ina226: set mask failed.\n");
269 (void)ina226_deinit(&gs_handle);
270
271 return 1;
272 }
273 }
275 {
276 /* shunt voltage convert to register */
277 res = ina226_shunt_voltage_convert_to_register(&gs_handle, threshold, &reg);
278 if (res != 0)
279 {
280 ina226_interface_debug_print("ina226: shunt voltage convert to register failed.\n");
281 (void)ina226_deinit(&gs_handle);
282
283 return 1;
284 }
285
286 /* set alert limit */
287 res = ina226_set_alert_limit(&gs_handle, reg);
288 if (res != 0)
289 {
290 ina226_interface_debug_print("ina226: set alert limit failed.\n");
291 (void)ina226_deinit(&gs_handle);
292
293 return 1;
294 }
295
296 /* disable */
298 if (res != 0)
299 {
300 ina226_interface_debug_print("ina226: set mask failed.\n");
301 (void)ina226_deinit(&gs_handle);
302
303 return 1;
304 }
305
306 /* enable */
308 if (res != 0)
309 {
310 ina226_interface_debug_print("ina226: set mask failed.\n");
311 (void)ina226_deinit(&gs_handle);
312
313 return 1;
314 }
315
316 /* disable */
318 if (res != 0)
319 {
320 ina226_interface_debug_print("ina226: set mask failed.\n");
321 (void)ina226_deinit(&gs_handle);
322
323 return 1;
324 }
325
326 /* disable */
328 if (res != 0)
329 {
330 ina226_interface_debug_print("ina226: set mask failed.\n");
331 (void)ina226_deinit(&gs_handle);
332
333 return 1;
334 }
335
336 /* disable */
338 if (res != 0)
339 {
340 ina226_interface_debug_print("ina226: set mask failed.\n");
341 (void)ina226_deinit(&gs_handle);
342
343 return 1;
344 }
345 }
347 {
348 /* bus voltage convert to register */
349 res = ina226_bus_voltage_convert_to_register(&gs_handle, threshold, &reg);
350 if (res != 0)
351 {
352 ina226_interface_debug_print("ina226: shunt voltage convert to register failed.\n");
353 (void)ina226_deinit(&gs_handle);
354
355 return 1;
356 }
357
358 /* set alert limit */
359 res = ina226_set_alert_limit(&gs_handle, reg);
360 if (res != 0)
361 {
362 ina226_interface_debug_print("ina226: set alert limit failed.\n");
363 (void)ina226_deinit(&gs_handle);
364
365 return 1;
366 }
367
368 /* disable */
370 if (res != 0)
371 {
372 ina226_interface_debug_print("ina226: set mask failed.\n");
373 (void)ina226_deinit(&gs_handle);
374
375 return 1;
376 }
377
378 /* disable */
380 if (res != 0)
381 {
382 ina226_interface_debug_print("ina226: set mask failed.\n");
383 (void)ina226_deinit(&gs_handle);
384
385 return 1;
386 }
387
388 /* enable */
390 if (res != 0)
391 {
392 ina226_interface_debug_print("ina226: set mask failed.\n");
393 (void)ina226_deinit(&gs_handle);
394
395 return 1;
396 }
397
398 /* disable */
400 if (res != 0)
401 {
402 ina226_interface_debug_print("ina226: set mask failed.\n");
403 (void)ina226_deinit(&gs_handle);
404
405 return 1;
406 }
407
408 /* disable */
410 if (res != 0)
411 {
412 ina226_interface_debug_print("ina226: set mask failed.\n");
413 (void)ina226_deinit(&gs_handle);
414
415 return 1;
416 }
417 }
419 {
420 /* bus voltage convert to register */
421 res = ina226_bus_voltage_convert_to_register(&gs_handle, threshold, &reg);
422 if (res != 0)
423 {
424 ina226_interface_debug_print("ina226: shunt voltage convert to register failed.\n");
425 (void)ina226_deinit(&gs_handle);
426
427 return 1;
428 }
429
430 /* set alert limit */
431 res = ina226_set_alert_limit(&gs_handle, reg);
432 if (res != 0)
433 {
434 ina226_interface_debug_print("ina226: set alert limit failed.\n");
435 (void)ina226_deinit(&gs_handle);
436
437 return 1;
438 }
439
440 /* disable */
442 if (res != 0)
443 {
444 ina226_interface_debug_print("ina226: set mask failed.\n");
445 (void)ina226_deinit(&gs_handle);
446
447 return 1;
448 }
449
450 /* disable */
452 if (res != 0)
453 {
454 ina226_interface_debug_print("ina226: set mask failed.\n");
455 (void)ina226_deinit(&gs_handle);
456
457 return 1;
458 }
459
460 /* disable */
462 if (res != 0)
463 {
464 ina226_interface_debug_print("ina226: set mask failed.\n");
465 (void)ina226_deinit(&gs_handle);
466
467 return 1;
468 }
469
470 /* enable */
472 if (res != 0)
473 {
474 ina226_interface_debug_print("ina226: set mask failed.\n");
475 (void)ina226_deinit(&gs_handle);
476
477 return 1;
478 }
479
480 /* disable */
482 if (res != 0)
483 {
484 ina226_interface_debug_print("ina226: set mask failed.\n");
485 (void)ina226_deinit(&gs_handle);
486
487 return 1;
488 }
489 }
490 else
491 {
492 /* power convert to register */
493 res = ina226_power_convert_to_register(&gs_handle, threshold, &reg);
494 if (res != 0)
495 {
496 ina226_interface_debug_print("ina226: shunt voltage convert to register failed.\n");
497 (void)ina226_deinit(&gs_handle);
498
499 return 1;
500 }
501
502 /* set alert limit */
503 res = ina226_set_alert_limit(&gs_handle, reg);
504 if (res != 0)
505 {
506 ina226_interface_debug_print("ina226: set alert limit failed.\n");
507 (void)ina226_deinit(&gs_handle);
508
509 return 1;
510 }
511
512 /* disable */
514 if (res != 0)
515 {
516 ina226_interface_debug_print("ina226: set mask failed.\n");
517 (void)ina226_deinit(&gs_handle);
518
519 return 1;
520 }
521
522 /* disable */
524 if (res != 0)
525 {
526 ina226_interface_debug_print("ina226: set mask failed.\n");
527 (void)ina226_deinit(&gs_handle);
528
529 return 1;
530 }
531
532 /* disable */
534 if (res != 0)
535 {
536 ina226_interface_debug_print("ina226: set mask failed.\n");
537 (void)ina226_deinit(&gs_handle);
538
539 return 1;
540 }
541
542 /* disable */
544 if (res != 0)
545 {
546 ina226_interface_debug_print("ina226: set mask failed.\n");
547 (void)ina226_deinit(&gs_handle);
548
549 return 1;
550 }
551
552 /* enable */
554 if (res != 0)
555 {
556 ina226_interface_debug_print("ina226: set mask failed.\n");
557 (void)ina226_deinit(&gs_handle);
558
559 return 1;
560 }
561 }
562
563 return 0;
564}
565
576uint8_t ina226_alert_read(float *mV, float *mA, float *mW)
577{
578 uint8_t res;
579 int16_t s_raw;
580 uint16_t u_raw;
581
582 /* read bus voltage */
583 res = ina226_read_bus_voltage(&gs_handle, (uint16_t *)&u_raw, mV);
584 if (res != 0)
585 {
586 return 1;
587 }
588
589 /* read current */
590 res = ina226_read_current(&gs_handle, (int16_t *)&s_raw, mA);
591 if (res != 0)
592 {
593 return 1;
594 }
595
596 /* read power */
597 res = ina226_read_power(&gs_handle, (uint16_t *)&u_raw, mW);
598 if (res != 0)
599 {
600 return 1;
601 }
602
603 return 0;
604}
605
614{
615 uint8_t res;
616
617 res = ina226_deinit(&gs_handle);
618 if (res != 0)
619 {
620 return 1;
621 }
622
623 return 0;
624}
uint8_t ina226_calculate_calibration(ina226_handle_t *handle, uint16_t *calibration)
calculate the calibration
uint8_t ina226_set_bus_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t t)
set bus voltage conversion time
ina226_mask_t
ina226 mask enumeration definition
uint8_t ina226_bus_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg)
convert the bus voltage to the register raw data
uint8_t ina226_read_current(ina226_handle_t *handle, int16_t *raw, float *mA)
read the current
uint8_t ina226_deinit(ina226_handle_t *handle)
close the chip
uint8_t ina226_set_conversion_ready_alert_pin(ina226_handle_t *handle, ina226_bool_t enable)
enable or disable conversion ready alert pin
uint8_t ina226_set_mode(ina226_handle_t *handle, ina226_mode_t mode)
set the mode
uint8_t ina226_set_alert_polarity_pin(ina226_handle_t *handle, ina226_alert_polarity_t pin)
set alert polarity pin
uint8_t ina226_shunt_voltage_convert_to_register(ina226_handle_t *handle, float mV, uint16_t *reg)
convert the shunt voltage to the register raw data
uint8_t ina226_set_mask(ina226_handle_t *handle, ina226_mask_t mask, ina226_bool_t enable)
enable or disable mask
uint8_t ina226_set_addr_pin(ina226_handle_t *handle, ina226_address_t addr_pin)
set the iic address pin
uint8_t ina226_set_alert_latch(ina226_handle_t *handle, ina226_bool_t enable)
enable or disable alert latch
uint8_t ina226_read_power(ina226_handle_t *handle, uint16_t *raw, float *mW)
read the power
uint8_t ina226_set_average_mode(ina226_handle_t *handle, ina226_avg_t mode)
set average mode
ina226_address_t
ina226 address enumeration definition
struct ina226_handle_s ina226_handle_t
ina226 handle structure definition
uint8_t ina226_irq_handler(ina226_handle_t *handle)
irq handler
uint8_t ina226_init(ina226_handle_t *handle)
initialize the chip
uint8_t ina226_set_shunt_voltage_conversion_time(ina226_handle_t *handle, ina226_conversion_time_t t)
set shunt voltage conversion time
uint8_t ina226_set_alert_limit(ina226_handle_t *handle, uint16_t reg)
set alert limit
uint8_t ina226_set_calibration(ina226_handle_t *handle, uint16_t data)
set the calibration
uint8_t ina226_set_resistance(ina226_handle_t *handle, double resistance)
set the resistance
uint8_t ina226_power_convert_to_register(ina226_handle_t *handle, float mW, uint16_t *reg)
convert the power to the register raw data
uint8_t ina226_read_bus_voltage(ina226_handle_t *handle, uint16_t *raw, float *mV)
read the bus voltage
@ INA226_MASK_POWER_OVER_LIMIT
@ INA226_MASK_SHUNT_VOLTAGE_UNDER_VOLTAGE
@ INA226_MASK_SHUNT_VOLTAGE_OVER_VOLTAGE
@ INA226_MASK_BUS_VOLTAGE_OVER_VOLTAGE
@ INA226_MASK_BUS_VOLTAGE_UNDER_VOLTAGE
@ INA226_MODE_SHUNT_BUS_VOLTAGE_CONTINUOUS
@ INA226_BOOL_TRUE
@ INA226_BOOL_FALSE
uint8_t ina226_alert_init(ina226_address_t addr_pin, double r, ina226_mask_t mask, float threshold, void(*callback)(uint8_t type))
alert example init
uint8_t ina226_alert_deinit(void)
alert example deinit
#define INA226_ALERT_DEFAULT_ALERT_POLARITY_NORMAL
uint8_t ina226_alert_irq_handler(void)
alert irq handler
#define INA226_ALERT_DEFAULT_SHUNT_VOLTAGE_CONVERSION_TIME
#define INA226_ALERT_DEFAULT_READY_ALERT_PIN
#define INA226_ALERT_DEFAULT_BUS_VOLTAGE_CONVERSION_TIME
uint8_t ina226_alert_read(float *mV, float *mA, float *mW)
alert example read
#define INA226_ALERT_DEFAULT_AVG_MODE
ina226 alert example default definition
#define INA226_ALERT_DEFAULT_ALERT_LATCH
uint8_t ina226_interface_iic_deinit(void)
interface iic bus deinit
uint8_t ina226_interface_iic_init(void)
interface iic bus init
void ina226_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ina226_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void ina226_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ina226_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read