samples: charger: Creates a generic sample application for chargers
Creates a generic sample application that executes a simple charging task loop capable of completing a basic charge cycle. Signed-off-by: Ricardo Rivera-Matos <ricardo.rivera-matos@cirrus.com>
This commit is contained in:
parent
fd06cd7c97
commit
2107c9109f
4 changed files with 117 additions and 0 deletions
9
samples/charger/CMakeLists.txt
Normal file
9
samples/charger/CMakeLists.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.20.0)
|
||||||
|
|
||||||
|
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||||
|
project(charger)
|
||||||
|
|
||||||
|
FILE(GLOB app_sources src/*.c)
|
||||||
|
target_sources(app PRIVATE ${app_sources})
|
1
samples/charger/prj.conf
Normal file
1
samples/charger/prj.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
CONFIG_CHARGER=y
|
6
samples/charger/sample.yaml
Normal file
6
samples/charger/sample.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
sample:
|
||||||
|
name: Generic charger
|
||||||
|
tests:
|
||||||
|
sample.drivers.charger:
|
||||||
|
tags: charger
|
||||||
|
depends_on: charger
|
101
samples/charger/src/main.c
Normal file
101
samples/charger/src/main.c
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Cirrus Logic, Inc.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "zephyr/sys/printk.h"
|
||||||
|
#include <zephyr/kernel.h>
|
||||||
|
#include <zephyr/device.h>
|
||||||
|
#include <zephyr/devicetree.h>
|
||||||
|
#include <zephyr/drivers/charger.h>
|
||||||
|
#include <sys/errno.h>
|
||||||
|
|
||||||
|
static const struct device *chgdev = DEVICE_DT_GET(DT_NODELABEL(charger));
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
union charger_propval val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (chgdev == NULL) {
|
||||||
|
printk("Error: no charger device found.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!device_is_ready(chgdev)) {
|
||||||
|
printk("Error: Device \"%s\" is not ready; "
|
||||||
|
"check the driver initialization logs for errors.\n",
|
||||||
|
chgdev->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk("Found device \"%s\", getting charger data\n", chgdev->name);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
/* Poll until external power is presented to the charger */
|
||||||
|
do {
|
||||||
|
ret = charger_get_prop(chgdev, CHARGER_PROP_ONLINE, &val);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
k_msleep(100);
|
||||||
|
} while (val.online == CHARGER_ONLINE_OFFLINE);
|
||||||
|
|
||||||
|
val.status = CHARGER_STATUS_CHARGING;
|
||||||
|
|
||||||
|
ret = charger_set_prop(chgdev, CHARGER_PROP_STATUS, &val);
|
||||||
|
if (ret == -ENOTSUP) {
|
||||||
|
printk("Enabling charge not supported, assuming auto charge enable\n");
|
||||||
|
continue;
|
||||||
|
} else if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
k_msleep(500);
|
||||||
|
|
||||||
|
ret = charger_get_prop(chgdev, CHARGER_PROP_STATUS, &val);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (val.status) {
|
||||||
|
case CHARGER_STATUS_CHARGING:
|
||||||
|
printk("Charging in progress...\n");
|
||||||
|
|
||||||
|
ret = charger_get_prop(chgdev, CHARGER_PROP_CHARGE_TYPE, &val);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk("Device \"%s\" charge type is %d\n", chgdev->name, val.charge_type);
|
||||||
|
break;
|
||||||
|
case CHARGER_STATUS_NOT_CHARGING:
|
||||||
|
printk("Charging halted...\n");
|
||||||
|
|
||||||
|
ret = charger_get_prop(chgdev, CHARGER_PROP_HEALTH, &val);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk("Device \"%s\" health is %d\n", chgdev->name, val.health);
|
||||||
|
break;
|
||||||
|
case CHARGER_STATUS_FULL:
|
||||||
|
printk("Charging complete!");
|
||||||
|
return 0;
|
||||||
|
case CHARGER_STATUS_DISCHARGING:
|
||||||
|
printk("External power removed, discharging\n");
|
||||||
|
|
||||||
|
ret = charger_get_prop(chgdev, CHARGER_PROP_ONLINE, &val);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
k_msleep(500);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue