blob: 01428f10abafba3722bbe95f20523d2f704d9321 [file] [log] [blame]
/*
* Copyright (c) 2023 Alvaro Garcia Gomez <maxpowel@gmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/fuel_gauge.h>
int main(void)
{
const struct device *const dev = DEVICE_DT_GET_ANY(maxim_max17048);
int ret = 0;
if (dev == NULL) {
printk("\nError: no device found.\n");
return 0;
}
if (!device_is_ready(dev)) {
printk("\nError: Device \"%s\" is not ready; "
"check the driver initialization logs for errors.\n",
dev->name);
return 0;
}
printk("Found device \"%s\", getting fuel gauge data\n", dev->name);
if (dev == NULL) {
return 0;
}
while (1) {
struct fuel_gauge_get_property props[] = {
{
.property_type = FUEL_GAUGE_RUNTIME_TO_EMPTY,
},
{
.property_type = FUEL_GAUGE_RUNTIME_TO_FULL,
},
{
.property_type = FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE,
},
{
.property_type = FUEL_GAUGE_VOLTAGE,
}
};
ret = fuel_gauge_get_prop(dev, props, ARRAY_SIZE(props));
if (ret < 0) {
printk("Error: cannot get properties\n");
} else {
if (ret != 0) {
printk("Warning: Some properties failed\n");
}
if (props[0].status == 0) {
printk("Time to empty %d\n", props[0].value.runtime_to_empty);
} else {
printk(
"Property FUEL_GAUGE_RUNTIME_TO_EMPTY failed with error %d\n",
props[0].status
);
}
if (props[1].status == 0) {
printk("Time to full %d\n", props[1].value.runtime_to_full);
} else {
printk(
"Property FUEL_GAUGE_RUNTIME_TO_FULL failed with error %d\n",
props[1].status
);
}
if (props[2].status == 0) {
printk("Charge %d%%\n", props[2].value.relative_state_of_charge);
} else {
printk(
"Property FUEL_GAUGE_STATE_OF_CHARGE failed with error %d\n",
props[2].status
);
}
if (props[3].status == 0) {
printk("Voltage %d\n", props[3].value.voltage);
} else {
printk(
"Property FUEL_GAUGE_VOLTAGE failed with error %d\n",
props[3].status
);
}
}
k_sleep(K_MSEC(5000));
}
return 0;
}