~aleteoryx/muditaos

ca3b0a0d026b61576eec52960ed5cfd199978590 — Lefucjusz 2 years ago b006a01 pure_1.8.0 pure_1.8.0-rc.3
[MOS-1038] Fix CPU frequency hanging after SMS received

Fix of the issue that in some cases (e.g. after
text message was received) ServiceAudio would
not release CPU sentinel, what resulted in
quick battery discharge.
M module-services/service-audio/ServiceAudio.cpp => module-services/service-audio/ServiceAudio.cpp +17 -7
@@ 623,14 623,23 @@ void ServiceAudio::MuteCurrentOperation()
    }
}

Operation::State ServiceAudio::GetOperationState()
ServiceAudio::InternalOperationState ServiceAudio::GetOperationState()
{
    for (const auto &input : audioMux.GetAllInputs()) {
        if (input.audio->GetCurrentState() != Audio::State::Idle) {
            return input.audio->GetCurrentOperation().GetState();
            switch (input.audio->GetCurrentOperation().GetState()) {
            case audio::Operation::State::Idle:
                return ServiceAudio::InternalOperationState::OperationIdle;
            case audio::Operation::State::Paused:
                return ServiceAudio::InternalOperationState::Paused;
            case audio::Operation::State::Active:
                return ServiceAudio::InternalOperationState::Active;
            default:
                break;
            }
        }
    }
    return Operation::State::Idle;
    return ServiceAudio::InternalOperationState::AudioIdle;
}

sys::MessagePointer ServiceAudio::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)


@@ 918,17 927,18 @@ void ServiceAudio::notifyAboutNewRoutingIfRouterAvailable()
    }
}

void ServiceAudio::updateMinimumCpuFrequency(Operation::State operationState)
void ServiceAudio::updateMinimumCpuFrequency(ServiceAudio::InternalOperationState operationState)
{
    switch (operationState) {
    case audio::Operation::State::Idle:
    case ServiceAudio::InternalOperationState::AudioIdle:
        cpuSentinel->ReleaseMinimumFrequency();
        break;
    case audio::Operation::State::Paused:
    case ServiceAudio::InternalOperationState::OperationIdle:
    case ServiceAudio::InternalOperationState::Paused:
        cpuSentinel->HoldMinimumFrequency(bsp::CpuFrequencyMHz::Level_2); // Required to keep PLL2 running, so that
                                                                          // bandgap used also by PLL4 remains turned on
        break;
    case audio::Operation::State::Active:
    case ServiceAudio::InternalOperationState::Active:
        cpuSentinel->HoldMinimumFrequency(bsp::CpuFrequencyMHz::Level_5);
        break;
    }

M module-services/service-audio/include/service-audio/ServiceAudio.hpp => module-services/service-audio/include/service-audio/ServiceAudio.hpp +10 -2
@@ 39,6 39,14 @@ class ServiceAudio : public sys::Service
        Continuous
    };

    enum class InternalOperationState
    {
        AudioIdle,
        OperationIdle,
        Paused,
        Active
    };

    audio::AudioMux audioMux;
    std::shared_ptr<sys::CpuSentinel> cpuSentinel;
    audio::AudioMux::VibrationStatus vibrationMotorStatus = audio::AudioMux::VibrationStatus::Off;


@@ 96,7 104,7 @@ class ServiceAudio : public sys::Service
    std::string GetSound(const audio::PlaybackType &plType);
    constexpr auto IsResumable(const audio::PlaybackType &type) const -> bool;
    constexpr auto ShouldLoop(const std::optional<audio::PlaybackType> &type) const -> bool;
    auto GetOperationState() -> audio::Operation::State;
    auto GetOperationState() -> InternalOperationState;
    auto IsSystemSound(const audio::PlaybackType &type) -> bool;
    audio::PlaybackType generatePlayback(const audio::PlaybackType &type,
                                         const audio::Setting &setting = audio::Setting::Volume);


@@ 128,7 136,7 @@ class ServiceAudio : public sys::Service
    auto handleSingleVibrationStart() -> sys::MessagePointer;

    void notifyAboutNewRoutingIfRouterAvailable();
    void updateMinimumCpuFrequency(audio::Operation::State operationState);
    void updateMinimumCpuFrequency(ServiceAudio::InternalOperationState operationState);
};

namespace sys