aboutsummaryrefslogtreecommitdiff
path: root/host/common/include/chre_host/st_hal_lpma_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'host/common/include/chre_host/st_hal_lpma_handler.h')
-rw-r--r--host/common/include/chre_host/st_hal_lpma_handler.h167
1 files changed, 0 insertions, 167 deletions
diff --git a/host/common/include/chre_host/st_hal_lpma_handler.h b/host/common/include/chre_host/st_hal_lpma_handler.h
deleted file mode 100644
index 4210802f..00000000
--- a/host/common/include/chre_host/st_hal_lpma_handler.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ST_HAL_LPMA_HANDLER_H_
-#define ST_HAL_LPMA_HANDLER_H_
-
-#include <condition_variable>
-#include <cstdio>
-#include <functional>
-#include <mutex>
-#include <thread>
-
-#include "chre_host/log.h"
-
-#include <android/hardware/soundtrigger/2.0/ISoundTriggerHw.h>
-#include <hardware_legacy/power.h>
-
-using android::hardware::hidl_death_recipient;
-using android::hardware::Return;
-using android::hardware::soundtrigger::V2_0::ISoundTriggerHw;
-using android::hardware::soundtrigger::V2_0::SoundModelHandle;
-using android::hardware::soundtrigger::V2_0::SoundModelType;
-using android::hidl::base::V1_0::IBase;
-
-namespace android {
-namespace chre {
-
-/**
- * Handles interactions with the SoundTrigger (ST) HAL, to issue configuration
- * requests for the always-on audio hardware to enable Low Power Microphone
- * Access (LPMA) in CHRE. Typically, this class is used when the CHRE audio
- * implementation for a given system requires notifying the ST HAL when audio
- * is requested/released within CHRE
- */
-class StHalLpmaHandler {
- public:
- //! Class to handle when a connected ST HAL service dies
- class StHalDeathRecipient : public hidl_death_recipient {
- public:
- StHalDeathRecipient() = delete;
- explicit StHalDeathRecipient(std::function<void()> cb) : mCallback(cb) {}
-
- /**
- * Callback that is called when a connected service dies. It mainly
- * resets the LPMA Enabled flag, and unblocks the LPMA processing thread.
- * It is to be used in conjunction with linkToDeath(), which we do
- * in checkConnectionToStHalServiceLocked().
- */
- virtual void serviceDied(uint64_t /* cookie */,
- const wp<IBase> & /* who */) override {
- mCallback();
- }
-
- private:
- std::function<void()> mCallback;
- };
-
- StHalLpmaHandler() = delete;
-
- explicit StHalLpmaHandler(bool allowed);
-
- ~StHalLpmaHandler() {
- if (mThread.has_value()) {
- // TODO: Change this to join after adding proper handler
- mThread->detach();
- }
- }
-
- /**
- * If LPMA is enabled, starts a worker thread to load/unload models.
- */
- void init();
-
- /**
- * Sets the target state for LPMA to be enabled. This triggers another thread
- * to perform the async operation of enabling or disabling the LPMA use case.
- *
- * @param enabled Whether LPMA is to be enabled or disabled.
- */
- void enable(bool enabled);
-
- /**
- * Loads the LPMA use case via the SoundTrigger HAL HIDL service.
- *
- * @return true if LPMA was enabled successfully, false otherwise.
- */
- bool load();
-
- /**
- * Unloads the LPMA use case via the SoundTrigger HAL HIDL service. This
- * function does not indicate success/failure as it is expected that even in
- * the event of a failure to unload, the use case will be unloaded. As long as
- * the sound trigger HAL received the request we can be assured that the use
- * case will be unloaded (even if it means reseting the codec or otherwise).
- */
- void unload();
-
- /**
- * Entry point for the thread that loads/unloads sound models from the
- * ST HAL
- */
- void StHalLpmaHandlerThreadEntry();
-
- private:
- const bool mIsLpmaAllowed;
- bool mCurrentLpmaEnabled;
- bool mTargetLpmaEnabled;
- bool mCondVarPredicate;
- SoundModelHandle mLpmaHandle = 0;
-
- int mRetryCount;
- useconds_t mRetryDelay;
-
- std::optional<std::thread> mThread;
- std::mutex mMutex;
- std::condition_variable mCondVar;
-
- sp<StHalDeathRecipient> mDeathRecipient;
- sp<ISoundTriggerHw> mStHalService;
-
- /**
- * Checks for a valid connection to the ST HAL service, reconnects if not
- * already connected. This method should only be invoked after acquiring the
- * class mutex has been locked.
- */
- void checkConnectionToStHalServiceLocked();
-
- /**
- * Invoked by the HAL service death callback. see
- * StHalDeathRecipient::ServiceDied()
- */
- void onStHalServiceDeath();
-
- /**
- * This function blocks on a condition variable and when notified, based
- * on its current state and as notified by enable(), performs a load or
- * unload. The function also resets the delay and retry counts if the current
- * and next states match
- *
- * @return true if the state update succeeded, and we don't need to retry with
- * a delay
- */
- bool waitOnStHalRequestAndProcess();
-
- /**
- * Delay retrying a load if a state update failed
- */
- void delay();
-};
-
-} // namespace chre
-} // namespace android
-
-#endif // ST_HAL_LPMA_HANDLER_H_