From acc7acf108c2c5bede686f52bcbb25bd2d87eaa0 Mon Sep 17 00:00:00 2001 From: SP2FET Date: Tue, 23 Mar 2021 10:53:58 +0100 Subject: [PATCH] [EGD-6168] Lock CPU frequency only while BT is working Due to fixed BT transmission, the CPU frequency can be lower. To be more power-friendly, minimal working freq is being set while working with Bluetooth --- .../service-bluetooth/ServiceBluetooth.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/module-services/service-bluetooth/ServiceBluetooth.cpp b/module-services/service-bluetooth/ServiceBluetooth.cpp index 85187019f961a7048c9d5da0c8d98dc21f227cba..4005c499335dd9db5ff665661a8fe47af34c8164 100644 --- a/module-services/service-bluetooth/ServiceBluetooth.cpp +++ b/module-services/service-bluetooth/ServiceBluetooth.cpp @@ -18,9 +18,9 @@ #include "service-bluetooth/messages/Unpair.hpp" #include "service-bluetooth/messages/SetDeviceName.hpp" -#include #include "SystemManager/messages/SentinelRegistrationMessage.hpp" +#include #include #include #include @@ -54,17 +54,13 @@ ServiceBluetooth::~ServiceBluetooth() // this means it is an init point of bluetooth feature handling sys::ReturnCodes ServiceBluetooth::InitHandler() { + worker = std::make_unique(this); + worker->run(); + cpuSentinel = std::make_shared(service::name::bluetooth, this); auto sentinelRegistrationMsg = std::make_shared(cpuSentinel); - bus.sendUnicast(std::move(sentinelRegistrationMsg), service::name::system_manager); - - // temporarily limit the minimum CPU frequency - // due to problems with the UART of the BT module - cpuSentinel->HoldMinimumFrequency(bsp::CpuFrequencyHz::Level_6); - - worker = std::make_unique(this); - worker->run(); + bus.sendUnicast(sentinelRegistrationMsg, service::name::system_manager); connect(message::bluetooth::RequestBondedDevices(), [&](sys::Message *msg) { auto request = static_cast(msg); @@ -195,10 +191,12 @@ auto ServiceBluetooth::handle(message::bluetooth::SetStatus *msg) -> std::shared switch (newBtStatus.state) { case BluetoothStatus::State::On: + cpuSentinel->HoldMinimumFrequency(bsp::CpuFrequencyHz::Level_3); sendWorkerCommand(bluetooth::Command(bluetooth::Command::Type::PowerOn)); break; case BluetoothStatus::State::Off: sendWorkerCommand(bluetooth::Command(bluetooth::Command::Type::PowerOff)); + cpuSentinel->ReleaseMinimumFrequency(); break; default: break;