mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-24 01:16:55 +00:00
Update Power.cpp
Take two
This commit is contained in:
parent
fc289198c9
commit
81176de5a7
124
src/Power.cpp
124
src/Power.cpp
@ -72,6 +72,7 @@ static const uint8_t ext_chrg_detect_value = EXT_CHRG_DETECT_VALUE;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(ARCH_PORTDUINO)
|
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(ARCH_PORTDUINO)
|
||||||
|
uint8_t INA_ADDR_LOCAL;
|
||||||
INA219Sensor ina219Sensor;
|
INA219Sensor ina219Sensor;
|
||||||
INA226Sensor ina226Sensor;
|
INA226Sensor ina226Sensor;
|
||||||
INA260Sensor ina260Sensor;
|
INA260Sensor ina260Sensor;
|
||||||
@ -421,7 +422,8 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
if (hasINA()) {
|
if (hasINA()) {
|
||||||
// get current flow from INA sensor - negative value means power flowing into the battery
|
// get current flow from INA sensor - negative value means power flowing into the battery
|
||||||
// default assuming BATTERY+ <--> INA_VIN+ <--> SHUNT RESISTOR <--> INA_VIN- <--> LOAD
|
// default assuming BATTERY+ <--> INA_VIN+ <--> SHUNT RESISTOR <--> INA_VIN- <--> LOAD
|
||||||
// LOG_DEBUG("Using INA on I2C addr 0x%x for charging detection", config.power.device_battery_ina_address);
|
//LOG_DEBUG("Using INA on I2C addr 0x%x for charging detection", config.power.device_battery_ina_address);
|
||||||
|
LOG_DEBUG("Using INA on I2C addr 0x%x for charging detection", INA_ADDR_LOCAL);
|
||||||
#if defined(INA_CHARGING_DETECTION_INVERT)
|
#if defined(INA_CHARGING_DETECTION_INVERT)
|
||||||
return getINACurrent() > 0;
|
return getINACurrent() > 0;
|
||||||
#else
|
#else
|
||||||
@ -462,53 +464,107 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
||||||
|
/*
|
||||||
|
Read Voltage from INA using autodetect of addr first else use addr in config.power.device_battery_ina_address
|
||||||
|
*/
|
||||||
uint16_t getINAVoltage()
|
uint16_t getINAVoltage()
|
||||||
{
|
{
|
||||||
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
if (!config.power.device_battery_ina_address) {
|
||||||
return ina219Sensor.getBusVoltageMv();
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
return ina219Sensor.getBusVoltageMv();
|
||||||
return ina226Sensor.getBusVoltageMv();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first > 0) {
|
return ina226Sensor.getBusVoltageMv();
|
||||||
return ina260Sensor.getBusVoltageMv();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
return ina260Sensor.getBusVoltageMv();
|
||||||
return ina3221Sensor.getBusVoltageMv();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
||||||
|
return ina3221Sensor.getBusVoltageMv();
|
||||||
|
}
|
||||||
|
} else if (config.power.device_battery_ina_address) {
|
||||||
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina219Sensor.getBusVoltageMv();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina226Sensor.getBusVoltageMv();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina260Sensor.getBusVoltageMv();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina3221Sensor.getBusVoltageMv();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t getINACurrent()
|
/*
|
||||||
|
Read Current from INA using autodetect of addr first else use addr in config.power.device_battery_ina_address
|
||||||
|
*/
|
||||||
|
int16_t getINACurrent()
|
||||||
{
|
{
|
||||||
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
if (!config.power.device_battery_ina_address) {
|
||||||
return ina219Sensor.getCurrentMa();
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
return ina219Sensor.getCurrentMa();
|
||||||
return ina226Sensor.getCurrentMa();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
return ina226Sensor.getCurrentMa();
|
||||||
return ina3221Sensor.getCurrentMa();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
||||||
|
return ina3221Sensor.getCurrentMa();
|
||||||
|
}
|
||||||
|
} else if (config.power.device_battery_ina_address) {
|
||||||
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina219Sensor.getCurrentMa();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina226Sensor.getCurrentMa();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first == config.power.device_battery_ina_address) {
|
||||||
|
return ina3221Sensor.getCurrentMa();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasINA()
|
bool hasINA()
|
||||||
|
/*
|
||||||
|
Use autodetect of addr first else use addr in config.power.device_battery_ina_address
|
||||||
|
Store INA addr in local variable for later use.
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
// if (!config.power.device_battery_ina_address) {
|
if (!config.power.device_battery_ina_address) {
|
||||||
// return false;
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
||||||
// }
|
INA_ADDR_LOCAL = nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first;
|
||||||
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first > 0) {
|
if (!ina219Sensor.isInitialized())
|
||||||
if (!ina219Sensor.isInitialized())
|
return ina219Sensor.runOnce() > 0;
|
||||||
return ina219Sensor.runOnce() > 0;
|
return ina219Sensor.isRunning();
|
||||||
return ina219Sensor.isRunning();
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first > 0) {
|
INA_ADDR_LOCAL = nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first;
|
||||||
if (!ina226Sensor.isInitialized())
|
if (!ina226Sensor.isInitialized())
|
||||||
return ina226Sensor.runOnce() > 0;
|
return ina226Sensor.runOnce() > 0;
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first > 0) {
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first > 0) {
|
||||||
if (!ina260Sensor.isInitialized())
|
INA_ADDR_LOCAL = nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first;
|
||||||
return ina260Sensor.runOnce() > 0;
|
if (!ina260Sensor.isInitialized())
|
||||||
return ina260Sensor.isRunning();
|
return ina260Sensor.runOnce() > 0;
|
||||||
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
return ina260Sensor.isRunning();
|
||||||
if (!ina3221Sensor.isInitialized())
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first > 0) {
|
||||||
return ina3221Sensor.runOnce() > 0;
|
INA_ADDR_LOCAL = nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first;
|
||||||
return ina3221Sensor.isRunning();
|
if (!ina3221Sensor.isInitialized())
|
||||||
|
return ina3221Sensor.runOnce() > 0;
|
||||||
|
return ina3221Sensor.isRunning();
|
||||||
|
}
|
||||||
|
} else if (config.power.device_battery_ina_address) {
|
||||||
|
INA_ADDR_LOCAL = config.power.device_battery_ina_address;
|
||||||
|
if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA219].first == config.power.device_battery_ina_address) {
|
||||||
|
if (!ina219Sensor.isInitialized())
|
||||||
|
return ina219Sensor.runOnce() > 0;
|
||||||
|
return ina219Sensor.isRunning();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA226].first == config.power.device_battery_ina_address) {
|
||||||
|
if (!ina226Sensor.isInitialized())
|
||||||
|
return ina226Sensor.runOnce() > 0;
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA260].first == config.power.device_battery_ina_address) {
|
||||||
|
if (!ina260Sensor.isInitialized())
|
||||||
|
return ina260Sensor.runOnce() > 0;
|
||||||
|
return ina260Sensor.isRunning();
|
||||||
|
} else if (nodeTelemetrySensorsMap[meshtastic_TelemetrySensorType_INA3221].first == config.power.device_battery_ina_address) {
|
||||||
|
if (!ina3221Sensor.isInitialized())
|
||||||
|
return ina3221Sensor.runOnce() > 0;
|
||||||
|
return ina3221Sensor.isRunning();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
INA_ADDR_LOCAL = 0;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user