mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-11 02:43:43 +02:00
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#ifndef CURRENT_MONITOR_HPP
|
|
#define CURRENT_MONITOR_HPP
|
|
#pragma once
|
|
/**
|
|
* @file CurrentMonitor.hpp
|
|
* @brief Business Logic Layer - Current monitoring (power, instantaneous current)
|
|
*
|
|
* Architecture:
|
|
* +-----------------------+
|
|
* | MonitoringManager | ← High-level coordinator
|
|
* +-----------------------+
|
|
* | BatteryMonitor | ← Battery logic
|
|
* | CurrentMonitor | ← Current logic (this file)
|
|
* +-----------------------+
|
|
* | AdcSampler | ← BSP: Unified ADC sampling interface
|
|
* +-----------------------+
|
|
*/
|
|
|
|
#include <cstdint>
|
|
#include "sdkconfig.h"
|
|
#include "AdcSampler.hpp"
|
|
|
|
/**
|
|
* @class CurrentMonitor
|
|
* @brief Monitors LED current through a shunt resistor
|
|
*
|
|
* Uses AdcSampler (BSP layer) for hardware abstraction.
|
|
* Configuration is done via Kconfig options:
|
|
* - CONFIG_MONITORING_LED_CURRENT
|
|
* - CONFIG_MONITORING_LED_ADC_GPIO
|
|
* - CONFIG_MONITORING_LED_SHUNT_MILLIOHM
|
|
* - CONFIG_MONITORING_LED_GAIN
|
|
* - CONFIG_MONITORING_LED_SAMPLES
|
|
*/
|
|
class CurrentMonitor
|
|
{
|
|
public:
|
|
CurrentMonitor() = default;
|
|
~CurrentMonitor() = default;
|
|
|
|
// Initialize current monitoring hardware
|
|
void setup();
|
|
|
|
// convenience: combined sampling and compute; returns mA
|
|
float getCurrentMilliAmps() const;
|
|
|
|
// Whether monitoring is enabled by Kconfig and supported by BSP
|
|
static constexpr bool isEnabled()
|
|
{
|
|
#if CONFIG_MONITORING_LED_CURRENT
|
|
return AdcSampler::isSupported();
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
private:
|
|
mutable AdcSampler adc_; // ADC sampler instance (BSP layer)
|
|
};
|
|
|
|
#endif
|