From 1ab93e04d5a308ba5d28feac30d77cb4512a0f79 Mon Sep 17 00:00:00 2001 From: nebman Date: Thu, 7 Nov 2024 17:03:12 +0100 Subject: [PATCH] add INA3221 charging detection --- src/Power.cpp | 3 +++ src/modules/Telemetry/Sensor/INA3221Sensor.cpp | 5 +++++ src/modules/Telemetry/Sensor/INA3221Sensor.h | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Power.cpp b/src/Power.cpp index 91767a025..bdb361432 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -476,6 +476,9 @@ class AnalogBatteryLevel : public HasBatteryLevel int16_t getINACurrent() { if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first == config.power.device_battery_ina_address) { return ina219Sensor.getCurrentMa(); + } else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first == + config.power.device_battery_ina_address) { + return ina3221Sensor.getCurrentMa(); } return 0; } diff --git a/src/modules/Telemetry/Sensor/INA3221Sensor.cpp b/src/modules/Telemetry/Sensor/INA3221Sensor.cpp index ed09856e2..7ac11dfde 100644 --- a/src/modules/Telemetry/Sensor/INA3221Sensor.cpp +++ b/src/modules/Telemetry/Sensor/INA3221Sensor.cpp @@ -102,4 +102,9 @@ uint16_t INA3221Sensor::getBusVoltageMv() return lround(ina3221.getVoltage(BAT_CH) * 1000); } +int16_t INA3221Sensor::getCurrentMa() +{ + return lround(ina3221.getCurrent(BAT_CH)); +} + #endif \ No newline at end of file diff --git a/src/modules/Telemetry/Sensor/INA3221Sensor.h b/src/modules/Telemetry/Sensor/INA3221Sensor.h index d5121aab6..2f40f091f 100644 --- a/src/modules/Telemetry/Sensor/INA3221Sensor.h +++ b/src/modules/Telemetry/Sensor/INA3221Sensor.h @@ -5,9 +5,10 @@ #include "../mesh/generated/meshtastic/telemetry.pb.h" #include "TelemetrySensor.h" #include "VoltageSensor.h" +#include "CurrentSensor.h" #include -class INA3221Sensor : public TelemetrySensor, VoltageSensor +class INA3221Sensor : public TelemetrySensor, VoltageSensor, CurrentSensor { private: INA3221 ina3221 = INA3221(INA3221_ADDR42_SDA); @@ -35,6 +36,7 @@ class INA3221Sensor : public TelemetrySensor, VoltageSensor int32_t runOnce() override; bool getMetrics(meshtastic_Telemetry *measurement) override; virtual uint16_t getBusVoltageMv() override; + virtual int16_t getCurrentMa() override; }; struct _INA3221Measurement {