~aleteoryx/muditaos

ref: 2a53becd2524fc0dba7260632d3ec409eb3a61fd muditaos/module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp -rw-r--r-- 2.1 KiB
2a53becd — Maciej Janicki [BH-1136] Fix bootloop after low power 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "BatteryCharger.hpp"

#include <hal/GenericFactory.hpp>
#include <EventStore.hpp>
#include <bsp/battery-charger/battery-charger.cpp>
#include <bsp/fuel_gauge/fuel_gauge.hpp>

namespace hal::battery
{
    BatteryCharger::BatteryCharger(AbstractBatteryCharger::BatteryChargerEvents &eventsHandler)
        : eventsHandler(eventsHandler)
    {}

    void BatteryCharger::init(xQueueHandle queueBatteryHandle, xQueueHandle)
    {
        bsp::fuel_gauge::init(queueBatteryHandle);
        bsp::battery_charger::init(queueBatteryHandle);

        Store::Battery::modify().state = Store::Battery::State::Discharging;
        Store::Battery::modify().level = static_cast<unsigned int>(bsp::fuel_gauge::getBatteryLevel());
    }

    int BatteryCharger::getBatteryVoltage()
    {
        constexpr auto dummyBatteryLevel = 100;
        return dummyBatteryLevel;
    }

    void BatteryCharger::BatteryCharger::deinit()
    {}

    void BatteryCharger::processStateChangeNotification(std::uint8_t notification)
    {
        bsp::battery_charger::getChargeStatus();

        if (notification == bsp::fuel_gauge::FuelGaugeAlert) {
            Store::Battery::modify().levelState = Store::Battery::LevelState::CriticalNotCharging;
        }

        if (notification == bsp::fuel_gauge::FuelGaugeUpdate) {
            Store::Battery::modify().level = bsp::fuel_gauge::getBatteryLevel();
        }
        eventsHandler.onStatusChanged();
    }

    void BatteryCharger::setChargingCurrentLimit(std::uint8_t)
    {}

    BaseType_t IRQHandler(AbstractBatteryCharger::IRQSource source)
    {
        if (source == AbstractBatteryCharger::IRQSource::Charger) {
            return bsp::battery_charger::CHG_IRQHandler();
        }
        if (source == AbstractBatteryCharger::IRQSource::FuelGauge) {
            return bsp::fuel_gauge::ALRT_IRQHandler();
        }

        return 0;
    }

    extern "C"
    {
        void USB_ChargerDetectedCB(std::uint8_t)
        {
            bsp::battery_charger::enableCharging();
        }
    }

} // namespace hal::battery