~aleteoryx/muditaos

9ab4fb1518ea9f7b6f94e923218e05cfe011c10a — Maciej Gibowicz 4 years ago 8a040a5
[EGD-6308] Add block CPU frequency decreasing for connected USB

While the USB cable is connected, the battery charging works,
so in this case energy saving is not critical
and for a more stable transmission, we block decreasing
the CPU frequency below 132 MHz.
M module-services/service-desktop/WorkerDesktop.cpp => module-services/service-desktop/WorkerDesktop.cpp +7 -0
@@ 15,6 15,7 @@
#include <map>
#include <vector>
#include <module-services/service-desktop/service-desktop/DesktopMessages.hpp>
#include "SystemManager/messages/SentinelRegistrationMessage.hpp"

inline constexpr auto uploadFailedMessage = "file upload terminated before all data transferred";



@@ 31,6 32,10 @@ bool WorkerDesktop::init(std::list<sys::WorkerQueueInfo> queues)
    receiveQueue = Worker::getQueueHandleByName(sdesktop::RECEIVE_QUEUE_BUFFER_NAME);
    parserFSM::MessageHandler::setSendQueueHandle(Worker::getQueueHandleByName(sdesktop::SEND_QUEUE_BUFFER_NAME));

    cpuSentinel                  = std::make_shared<sys::CpuSentinel>("WorkerDesktop", ownerService);
    auto sentinelRegistrationMsg = std::make_shared<sys::SentinelRegistrationMessage>(cpuSentinel);
    ownerService->bus.sendUnicast(sentinelRegistrationMsg, service::name::system_manager);

    return (bsp::usbInit(receiveQueue, irqQueue, this) < 0) ? false : true;
}



@@ 122,10 127,12 @@ bool WorkerDesktop::handleMessage(uint32_t queueID)
                                          service::name::service_desktop);
        }
        else if (notification == bsp::USBDeviceStatus::Configured) {
            cpuSentinel->HoldMinimumFrequency(bsp::CpuFrequencyHz::Level_4);
            ownerService->bus.sendUnicast(std::make_shared<sdesktop::usb::USBConfigured>(),
                                          service::name::service_desktop);
        }
        else if (notification == bsp::USBDeviceStatus::Disconnected) {
            cpuSentinel->ReleaseMinimumFrequency();
            ownerService->bus.sendUnicast(std::make_shared<sdesktop::usb::USBDisconnected>(),
                                          service::name::service_desktop);
        }

M module-services/service-desktop/service-desktop/WorkerDesktop.hpp => module-services/service-desktop/service-desktop/WorkerDesktop.hpp +3 -0
@@ 8,6 8,7 @@
#include "Service/Message.hpp"
#include "Service/Service.hpp"
#include "Service/Worker.hpp"
#include "Service/CpuSentinel.hpp"
#include "parser/ParserFSM.hpp"
#include "endpoints/EndpointFactory.hpp"
#include "bsp/usb/usb.hpp"


@@ 68,4 69,6 @@ class WorkerDesktop : public sys::Worker, public bsp::USBDeviceListener
    const sdesktop::USBSecurityModel &securityModel;
    sys::Service *ownerService = nullptr;
    parserFSM::StateMachine parser;

    std::shared_ptr<sys::CpuSentinel> cpuSentinel;
};