~aleteoryx/muditaos

ff393d34ec672029eedb62b427e2015ebc758543 — Kuba 3 years ago 25b1b48
[MOS-451] Drop invalid SoC

Invalid state of charge is now dropped. Invalid SoC was interpreted
as 0% battery.
M module-bsp/board/linux/hal/battery_charger/BatteryCharger.cpp => module-bsp/board/linux/hal/battery_charger/BatteryCharger.cpp +2 -2
@@ 37,7 37,7 @@ namespace hal::battery
        ~BatteryCharger();

        Voltage getBatteryVoltage() const final;
        SOC getSOC() const final;
        std::optional<SOC> getSOC() const final;
        ChargingStatus getChargingStatus() const final;

      private:


@@ 78,7 78,7 @@ namespace hal::battery
        return dummyBatteryVoltageLevel;
    }

    AbstractBatteryCharger::SOC BatteryCharger::getSOC() const
    std::optional<AbstractBatteryCharger::SOC> BatteryCharger::getSOC() const
    {
        return batteryLevel;
    }

M module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp => module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp +6 -6
@@ 56,14 56,14 @@ namespace hal::battery
        ~BellBatteryCharger();

        Voltage getBatteryVoltage() const final;
        SOC getSOC() const final;
        std::optional<SOC> getSOC() const final;
        ChargingStatus getChargingStatus() const final;

        static BatteryWorkerQueue &getWorkerQueueHandle();

      private:
        void sendNotification(Events event);
        SOC fetchBatterySOC() const;
        std::optional<SOC> fetchBatterySOC() const;
        void pollFuelGauge();
        bool tryEnableCharging();



@@ 144,7 144,7 @@ namespace hal::battery
        }
    }

    AbstractBatteryCharger::SOC BellBatteryCharger::getSOC() const
    std::optional<AbstractBatteryCharger::SOC> BellBatteryCharger::getSOC() const
    {
        return fetchBatterySOC();
    }


@@ 178,14 178,14 @@ namespace hal::battery
            return ChargingStatus::PluggedNotCharging;
        }
    }
    AbstractBatteryCharger::SOC BellBatteryCharger::fetchBatterySOC() const
    std::optional<AbstractBatteryCharger::SOC> BellBatteryCharger::fetchBatterySOC() const
    {
        if (const auto soc = fuel_gauge.get_battery_soc(); const auto scaled_soc = scale_soc(*soc)) {
            return *scaled_soc;
            return scaled_soc;
        }
        else {
            LOG_ERROR("Error during fetching battery level");
            return 0;
            return std::nullopt;
        }
    }
    BellBatteryCharger::BatteryWorkerQueue &BellBatteryCharger::getWorkerQueueHandle()

M module-bsp/board/rt1051/puretx/hal/battery_charger/BatteryCharger.cpp => module-bsp/board/rt1051/puretx/hal/battery_charger/BatteryCharger.cpp +5 -5
@@ 83,7 83,7 @@ namespace hal::battery
        ~PureBatteryCharger();

        Voltage getBatteryVoltage() const final;
        SOC getSOC() const final;
        std::optional<SOC> getSOC() const final;
        ChargingStatus getChargingStatus() const final;

        static BatteryWorkerQueue &getWorkerQueueHandle();


@@ 154,15 154,15 @@ namespace hal::battery
    {
        return bsp::battery_charger::getVoltageFilteredMeasurement();
    }
    AbstractBatteryCharger::SOC PureBatteryCharger::getSOC() const
    std::optional<AbstractBatteryCharger::SOC> PureBatteryCharger::getSOC() const
    {
        const auto soc        = bsp::battery_charger::getBatteryLevel();
        const auto scaled_soc = scale_soc(soc);
        if (not scaled_soc) {
            LOG_ERROR("SOC is out of valid range.");
            return 0;
            LOG_ERROR("SOC is out of valid range. SoC: %d", soc);
            return std::nullopt;
        }
        return *scaled_soc;
        return scaled_soc;
    }
    AbstractBatteryCharger::ChargingStatus PureBatteryCharger::getChargingStatus() const
    {

M module-bsp/hal/include/hal/battery_charger/AbstractBatteryCharger.hpp => module-bsp/hal/include/hal/battery_charger/AbstractBatteryCharger.hpp +2 -1
@@ 7,6 7,7 @@
#include <FreeRTOS.h>
#include <queue.h>

#include <optional>
#include <memory>
#include <cstdint>



@@ 40,7 41,7 @@ namespace hal::battery
        virtual ~AbstractBatteryCharger() = default;

        virtual Voltage getBatteryVoltage() const        = 0;
        virtual SOC getSOC() const                       = 0;
        virtual std::optional<SOC> getSOC() const        = 0;
        virtual ChargingStatus getChargingStatus() const = 0;

        static_assert(sizeof(Events) == sizeof(std::uint8_t),

M module-services/service-evtmgr/battery/BatteryController.cpp => module-services/service-evtmgr/battery/BatteryController.cpp +10 -2
@@ 83,7 83,7 @@ BatteryController::BatteryController(sys::Service *service, xQueueHandle notific
                       this->service->bus.sendUnicast(std::move(stateChangeMessage), service::name::system_manager);
                   }}
{
    Store::Battery::modify().level = charger->getSOC();
    updateSoC();
    Store::Battery::modify().state = transformChargingState(charger->getChargingStatus());
    batteryState.check(transformChargingState(Store::Battery::modify().state), Store::Battery::modify().level);



@@ 124,7 124,7 @@ void sevm::battery::BatteryController::update()
    const auto soc           = Store::Battery::get().level;
    const auto chargingState = Store::Battery::get().state;

    Store::Battery::modify().level = charger->getSOC();
    updateSoC();
    Store::Battery::modify().state = transformChargingState(charger->getChargingStatus());

    /// Send BatteryStatusChangeMessage only when battery SOC or charger state has changed


@@ 137,3 137,11 @@ void sevm::battery::BatteryController::update()

    printCurrentState();
}

void sevm::battery::BatteryController::updateSoC()
{
    auto batteryLevel = charger->getSOC();
    if (batteryLevel.has_value()) {
        Store::Battery::modify().level = batteryLevel.value();
    }
}

M module-services/service-evtmgr/battery/BatteryController.hpp => module-services/service-evtmgr/battery/BatteryController.hpp +1 -0
@@ 28,6 28,7 @@ namespace sevm::battery

      private:
        void update();
        void updateSoC();
        void printCurrentState();
        sys::Service *service{nullptr};
        std::unique_ptr<hal::battery::AbstractBatteryCharger> charger;