Revert "Revert "Adding getModelState API to sound trigger""
This reverts commit 6dd21efefed9d570d5ce07f602686d01321795eb.
Reason for revert: rolling forward with fix
Change-Id: I07d6c471681abffeb596817dfb00de40c853560c
diff --git a/services/soundtrigger/SoundTriggerHwService.cpp b/services/soundtrigger/SoundTriggerHwService.cpp
index eb9cd1d..79e9e88 100644
--- a/services/soundtrigger/SoundTriggerHwService.cpp
+++ b/services/soundtrigger/SoundTriggerHwService.cpp
@@ -717,6 +717,40 @@
return NO_ERROR;
}
+status_t SoundTriggerHwService::Module::getModelState(sound_model_handle_t handle,
+ sp<IMemory>& eventMemory)
+{
+ ALOGV("getModelState() model handle %d", handle);
+ if (mHalInterface == 0) {
+ return NO_INIT;
+ }
+ AutoMutex lock(mLock);
+ sp<Model> model = getModel(handle);
+ if (model == 0) {
+ return BAD_VALUE;
+ }
+
+ if (model->mState != Model::STATE_ACTIVE) {
+ return INVALID_OPERATION;
+ }
+
+ if (model->mType != SOUND_MODEL_TYPE_GENERIC) {
+ return BAD_VALUE;
+ }
+
+ struct sound_trigger_recognition_event* event = nullptr;
+ status_t status = mHalInterface->getModelState(handle, &event);
+ if (status == NO_ERROR) {
+ sp<SoundTriggerHwService> service;
+ service = mService.promote();
+ if (service != 0) {
+ eventMemory = service->prepareRecognitionEvent(event);
+ }
+ free(event);
+ }
+ return status;
+}
+
void SoundTriggerHwService::Module::onCallbackEvent(const sp<CallbackEvent>& event)
{
ALOGV("onCallbackEvent type %d", event->mType);
@@ -1018,6 +1052,22 @@
return module->stopRecognition(handle);
}
+status_t SoundTriggerHwService::ModuleClient::getModelState(sound_model_handle_t handle,
+ sp<IMemory>& eventMemory)
+{
+ ALOGV("getModelState() model handle %d", handle);
+ if (!captureHotwordAllowed(IPCThreadState::self()->getCallingPid(),
+ IPCThreadState::self()->getCallingUid())) {
+ return PERMISSION_DENIED;
+ }
+
+ sp<Module> module = mModule.promote();
+ if (module == 0) {
+ return NO_INIT;
+ }
+ return module->getModelState(handle, eventMemory);
+}
+
void SoundTriggerHwService::ModuleClient::setCaptureState_l(bool active)
{
ALOGV("ModuleClient::setCaptureState_l %d", active);