LCOV - code coverage report
Current view: top level - zephyr/drivers/sensor - battery.h Hit Total Coverage
Test: new.info Lines: 3 6 50.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright 2024 Embeint Inc
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_DRIVERS_SENSOR_BATTERY_H_
       8             : #define ZEPHYR_INCLUDE_DRIVERS_SENSOR_BATTERY_H_
       9             : 
      10             : #include <stdint.h>
      11             : #include <errno.h>
      12             : 
      13             : #include <zephyr/devicetree.h>
      14             : #include <zephyr/math/interpolation.h>
      15             : #include <zephyr/sys/util_macro.h>
      16             : 
      17             : #ifdef __cplusplus
      18             : extern "C" {
      19             : #endif
      20             : 
      21             : /**
      22             :  * @brief battery API
      23             :  * @defgroup battery_apis battery APIs
      24             :  * @{
      25             :  */
      26             : 
      27             : /* Battery chemistry enumeration.
      28             :  * Value names must match those from dts/bindings/battery.yaml
      29             :  */
      30           0 : enum battery_chemistry {
      31             :         BATTERY_CHEMISTRY_UNKNOWN = 0,
      32             :         BATTERY_CHEMISTRY_NICKEL_CADMIUM,
      33             :         BATTERY_CHEMISTRY_NICKEL_METAL_HYDRIDE,
      34             :         BATTERY_CHEMISTRY_LITHIUM_ION,
      35             :         BATTERY_CHEMISTRY_LITHIUM_ION_POLYMER,
      36             :         BATTERY_CHEMISTRY_LITHIUM_ION_IRON_PHOSPHATE,
      37             :         BATTERY_CHEMISTRY_LITHIUM_ION_MANGANESE_OXIDE,
      38             : };
      39             : 
      40             : /* Length of open circuit voltage table */
      41           0 : #define BATTERY_OCV_TABLE_LEN 11
      42             : 
      43             : /**
      44             :  * @brief Get the battery chemistry enum value
      45             :  *
      46             :  * @param node_id node identifier
      47             :  */
      48           1 : #define BATTERY_CHEMISTRY_DT_GET(node_id)                                                          \
      49             :         UTIL_CAT(BATTERY_CHEMISTRY_, DT_STRING_UPPER_TOKEN_OR(node_id, device_chemistry, UNKNOWN))
      50             : 
      51             : /**
      52             :  * @brief Get the OCV curve for a given table
      53             :  *
      54             :  * @param node_id node identifier
      55             :  * @param table table to retrieve
      56             :  */
      57           1 : #define BATTERY_OCV_TABLE_DT_GET(node_id, table)                                                   \
      58             :         COND_CODE_1(DT_NODE_HAS_PROP(node_id, table),                                              \
      59             :                     ({DT_FOREACH_PROP_ELEM_SEP(node_id, table, DT_PROP_BY_IDX, (,))}), ({-1}))
      60             : 
      61             : /**
      62             :  * @brief Convert an OCV table and battery voltage to a charge percentage
      63             :  *
      64             :  * @param ocv_table Open circuit voltage curve
      65             :  * @param voltage_uv Battery voltage in microVolts
      66             :  *
      67             :  * @returns Battery state of charge in milliPercent
      68             :  */
      69           1 : static inline int32_t battery_soc_lookup(const int32_t ocv_table[BATTERY_OCV_TABLE_LEN],
      70             :                                          uint32_t voltage_uv)
      71             : {
      72             :         static const int32_t soc_axis[BATTERY_OCV_TABLE_LEN] = {
      73             :                 0, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000};
      74             : 
      75             :         /* Convert voltage to SoC */
      76             :         return linear_interpolate(ocv_table, soc_axis, BATTERY_OCV_TABLE_LEN, voltage_uv);
      77             : }
      78             : 
      79             : /**
      80             :  * @}
      81             :  */
      82             : 
      83             : #ifdef __cplusplus
      84             : }
      85             : #endif
      86             : 
      87             : #endif /* ZEPHYR_INCLUDE_DRIVERS_SENSOR_BATTERY_H_ */

Generated by: LCOV version 1.14