1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/tests/drivers/ina2xx/main.c

105 lines
2.7 KiB
C

/*
* Copyright (C) 2015 Eistec AB
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup tests
* @{
*
* @file
* @brief Test application for the INA2XX sensor driver
*
* @author Joakim Nohlgård <joakim.nohlgard@eistec.se>
* @author Marian Buschsieweke <marian.buschsieweke@ovgu.de>
*
* @}
*/
#include <errno.h>
#include <stdlib.h>
#include "fmt.h"
#include "fmt_table.h"
#include "ina2xx.h"
#include "ina2xx_params.h"
int main(void)
{
ina2xx_t dev;
print_str("INA2XX sensor driver test application\n\n");
print_str("Initializing INA2XX sensor at I2C_");
print_s32_dec(ina2xx_params[0].i2c);
print_str(", address 0x");
print_u32_hex(ina2xx_params[0].addr);
print_str("\n");
if (ina2xx_init(&dev, &ina2xx_params[0]) == 0) {
print_str("[OK]\n");
} else {
print_str("[Failed]\n");
return EXIT_FAILURE;
}
const char *line = "+------------+--------------+----------+--------+\n";
print_str(line);
print_str("| U_Bus [mV] | U_Shunt [µV] | I [µA] | P [µW] |\n");
print_str(line);
while (1) {
uint16_t u_bus;
int16_t u_shunt;
int32_t i_shunt;
uint32_t p;
/* Read bus voltage until flag indicates new value is present */
switch (ina2xx_read_bus(&dev, &u_bus)){
case 0:
/* No measurement available yet */
continue;
case 1:
/* New measurement available, continue */
break;
case -EDOM:
print_str("[WARNING]: INA2xx detected math overflow ==> data "
"will be incorrect\n");
break;
default:
/* Error */
print_str("Error while reading bus voltage\n");
return EXIT_FAILURE;
}
if (ina2xx_read_shunt(&dev, &u_shunt) < 0) {
print_str("Error while reading shunt voltage\n");
return EXIT_FAILURE;
}
if (ina2xx_read_current(&dev, &i_shunt) < 0) {
print_str("Error while reading current\n");
return EXIT_FAILURE;
}
if (ina2xx_read_power(&dev, &p) < 0) {
print_str("Error while reading power\n");
return EXIT_FAILURE;
}
print_str("| ");
print_col_u32_dec(u_bus, 10);
print_str(" | ");
print_col_s32_dec(10 * (int32_t)u_shunt, 12);
print_str(" | ");
print_col_s32_dec(10 * i_shunt, 8);
print_str(" | ");
print_col_u32_dec(100 * p, 6);
print_str(" |\n");
}
return 0;
}