LCOV - code coverage report
Current view: top level - zephyr/drivers/adc - current_sense_shunt.h Hit Total Coverage
Test: new.info Lines: 2 6 33.3 %
Date: 2025-01-02 12:14:04

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2023 The ChromiumOS Authors
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_DRIVERS_ADC_CURRENT_SENSE_SHUNT_H_
       8             : #define ZEPHYR_INCLUDE_DRIVERS_ADC_CURRENT_SENSE_SHUNT_H_
       9             : 
      10             : #include <zephyr/drivers/adc.h>
      11             : 
      12           0 : struct current_sense_shunt_dt_spec {
      13           0 :         const struct adc_dt_spec port;
      14           0 :         uint32_t shunt_micro_ohms;
      15             : };
      16             : 
      17             : /**
      18             :  * @brief Get current sensor information from devicetree.
      19             :  *
      20             :  * This returns a static initializer for a @p current_sense_shunt_dt_spec structure
      21             :  * given a devicetree node.
      22             :  *
      23             :  * @param node_id Devicetree node identifier.
      24             :  *
      25             :  * @return Static initializer for an current_sense_shunt_dt_spec structure.
      26             :  */
      27           1 : #define CURRENT_SENSE_SHUNT_DT_SPEC_GET(node_id)                                                   \
      28             :         {                                                                                          \
      29             :                 .port = ADC_DT_SPEC_GET(node_id),                                                  \
      30             :                 .shunt_micro_ohms = DT_PROP(node_id, shunt_resistor_micro_ohms),                   \
      31             :         }
      32             : 
      33             : /**
      34             :  * @brief Calculates the actual amperage from the measured voltage
      35             :  *
      36             :  * @param[in] spec current sensor specification from Devicetree.
      37             :  * @param[in,out] v_to_i Pointer to the measured voltage in millivolts on input, and the
      38             :  * corresponding scaled current value in milliamps on output.
      39             :  */
      40           1 : static inline void current_sense_shunt_scale_dt(const struct current_sense_shunt_dt_spec *spec,
      41             :                                           int32_t *v_to_i)
      42             : {
      43             :         /* store in a temporary 64 bit variable to prevent overflow during calculation */
      44             :         int64_t tmp = *v_to_i;
      45             : 
      46             :         /* multiplies by 1,000,000 before dividing by shunt resistance in micro-ohms. */
      47             :         tmp = tmp * 1000000 / spec->shunt_micro_ohms;
      48             : 
      49             :         *v_to_i = (int32_t)tmp;
      50             : }
      51             : 
      52             : #endif /* ZEPHYR_INCLUDE_DRIVERS_ADC_CURRENT_SENSE_SHUNT_H_ */

Generated by: LCOV version 1.14