~aleteoryx/muditaos

4b27ef0763f6fb47815018e0fb3cb820bd362840 — Wojtek Rzepecki 5 years ago 243deec
[EGD-4952] Added battery check at init and if crit level changed
M module-bsp/board/linux/battery-charger/battery_charger.cpp => module-bsp/board/linux/battery-charger/battery_charger.cpp +5 -1
@@ 48,6 48,9 @@ namespace bsp
            return 1;
        }
        Store::Battery::modify().level = battLevel;

        uint8_t notification = static_cast<uint8_t>(bsp::batteryIRQSource::checkCriticalLevel);
        xQueueSend(qHandleIrq, &notification, 100);
        return 0;
    }



@@ 109,7 112,6 @@ namespace bsp
                    if (battLevel >= 1)
                        battLevel--;
                    break;
                }
                xQueueSend(qHandleIrq, &notification, 100);
            }
            vTaskDelay(50);


@@ 119,6 121,8 @@ namespace bsp
    void battery_setCriticalLevel(std::uint8_t level)
    {
        batteryCriticalLevel = level;
        uint8_t notification = static_cast<uint8_t>(bsp::batteryIRQSource::checkCriticalLevel);
        xQueueSend(qHandleIrq, &notification, 100);
    }

    bool battery_isLevelCritical(std::uint8_t level)

M module-bsp/board/rt1051/bsp/battery-charger/battery_charger.cpp => module-bsp/board/rt1051/bsp/battery-charger/battery_charger.cpp +9 -0
@@ 179,6 179,11 @@ namespace bsp

        s_BSP_BatteryChargerIrqPinsInit();

        if (qHandleIrq != NULL) {
            uint8_t val = static_cast<uint8_t>(bsp::batteryIRQSource::checkCriticalLevel);
            xQueueSendFromISR(qHandleIrq, &val, &xHigherPriorityTaskWoken);
        }

        return 0;
    }



@@ 199,6 204,10 @@ namespace bsp
    void battery_setCriticalLevel(std::uint8_t level)
    {
        batteryLevelCritical = level;
        if (qHandleIrq != NULL) {
            uint8_t val = static_cast<uint8_t>(bsp::batteryIRQSource::checkCriticalLevel);
            xQueueSendFromISR(qHandleIrq, &val, &xHigherPriorityTaskWoken);
        }
    }

    bool battery_isLevelCritical(std::uint8_t level)

M module-bsp/bsp/battery-charger/battery_charger.hpp => module-bsp/bsp/battery-charger/battery_charger.hpp +2 -1
@@ 99,7 99,8 @@ namespace bsp{

	enum class batteryIRQSource{
		INTB = 0x01,
		INOKB = 0x02
		INOKB = 0x02,
		checkCriticalLevel
	};

	int battery_Init(xQueueHandle qHandle);

M module-services/service-evtmgr/WorkerEvent.cpp => module-services/service-evtmgr/WorkerEvent.cpp +10 -2
@@ 90,7 90,7 @@ bool WorkerEvent::handleMessage(uint32_t queueID)
        if (!queue->Dequeue(&notification, 0)) {
            return false;
        }
        if (notification & static_cast<uint8_t>(bsp::batteryIRQSource::INTB)) {
        if (notification == static_cast<uint8_t>(bsp::batteryIRQSource::INTB)) {
            uint8_t battLevel = 0;
            bsp::battery_getBatteryLevel(battLevel);
            bsp::battery_ClearAllIRQs();


@@ 103,7 103,7 @@ bool WorkerEvent::handleMessage(uint32_t queueID)
                sys::Bus::SendUnicast(levelCriticalMessage, service::name::system_manager, this->service);
            }
        }
        if (notification & static_cast<uint8_t>(bsp::batteryIRQSource::INOKB)) {
        if (notification == static_cast<uint8_t>(bsp::batteryIRQSource::INOKB)) {
            bool status;
            bsp::battery_getChargeStatus(status);
            bsp::battery_ClearAllIRQs();


@@ 111,6 111,14 @@ bool WorkerEvent::handleMessage(uint32_t queueID)
            message->plugged = status;
            sys::Bus::SendUnicast(message, service::name::evt_manager, this->service);
        }
        if (notification == static_cast<uint8_t>(bsp::batteryIRQSource::checkCriticalLevel)) {
            if (Store::Battery::get().state == Store::Battery::State::Discharging) {
                if (bsp::battery_isLevelCritical(Store::Battery::get().level)) {
                    auto levelCriticalMessage = std::make_shared<sevm::BatteryLevelCriticalMessage>();
                    sys::Bus::SendUnicast(levelCriticalMessage, service::name::system_manager, this->service);
                }
            }
        }
    }

    if (queueID == static_cast<uint32_t>(WorkerEventQueues::queueRTC)) {