mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Converting sound trigger v2.2 getModelState to be asynchronous
Test: built android with checkbuild flag Change-Id: I68bebde980d2c3a76765cee4c70e213f4430dec1 Bug-Id: 70206501
This commit is contained in:
@@ -16,25 +16,27 @@
|
||||
|
||||
package android.hardware.soundtrigger@2.2;
|
||||
|
||||
import @2.0::ISoundTriggerHwCallback.RecognitionEvent;
|
||||
import @2.0::SoundModelHandle;
|
||||
import @2.1::ISoundTriggerHw;
|
||||
|
||||
/**
|
||||
* SoundTrigger HAL interface. Used for hardware recognition of hotwords.
|
||||
* SoundTrigger HAL interface. Used for hardware recognition of hotwords
|
||||
* and other sounds.
|
||||
*/
|
||||
interface ISoundTriggerHw extends @2.1::ISoundTriggerHw {
|
||||
|
||||
/**
|
||||
* Get the state of a given model.
|
||||
* The model state is returned as a RecognitionEvent.
|
||||
* @param modelHandle The handle of the sound model to use for recognition
|
||||
* The model state is returned asynchronously as a RecognitionEvent via
|
||||
* the callback that was registered in StartRecognition().
|
||||
* @param modelHandle The handle of the sound model whose state is being
|
||||
* queried.
|
||||
* @return retval Operation completion status: 0 in case of success,
|
||||
* -ENOSYS in case of invalid model handle,
|
||||
* -ENOMEM in case of memory allocation failure,
|
||||
* -ENODEV in case of initialization error.
|
||||
* @return state RecognitionEvent in case of success
|
||||
* -ENODEV in case of initialization error,
|
||||
* -EINVAL in case where a recognition event is already
|
||||
* being processed.
|
||||
*/
|
||||
getModelState(SoundModelHandle modelHandle)
|
||||
generates (int32_t retval, @2.0::ISoundTriggerHwCallback.RecognitionEvent state);
|
||||
getModelState(SoundModelHandle modelHandle) generates (int32_t retval);
|
||||
};
|
||||
|
||||
@@ -690,45 +690,26 @@ void SoundTriggerHw::SoundModelClient_2_1::soundModelCallback(
|
||||
|
||||
// Begin V2_2 implementation
|
||||
|
||||
Return<void> SoundTriggerHw::getModelState(int32_t modelHandle, getModelState_cb hidl_cb) {
|
||||
int ret = 0;
|
||||
V2_0::ISoundTriggerHwCallback::RecognitionEvent event;
|
||||
struct sound_trigger_recognition_event* halEvent = NULL;
|
||||
Return<int32_t> SoundTriggerHw::getModelState(int32_t modelHandle) {
|
||||
sp<SoundModelClient> client;
|
||||
if (mHwDevice == NULL) {
|
||||
ret = -ENODEV;
|
||||
goto exit;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
{
|
||||
AutoMutex lock(mLock);
|
||||
client = mClients.valueFor(modelHandle);
|
||||
if (client == 0) {
|
||||
ret = -ENOSYS;
|
||||
goto exit;
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
||||
if (mHwDevice->get_model_state == NULL) {
|
||||
ALOGE("Failed to get model state from device, no such method");
|
||||
ret = -ENODEV;
|
||||
goto exit;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
// Get the state from the device (as a recognition event)
|
||||
halEvent = mHwDevice->get_model_state(mHwDevice, client->getHalHandle());
|
||||
if (halEvent == NULL) {
|
||||
ALOGE("Failed to get model state from device");
|
||||
ret = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
convertRecognitionEventFromHal(&event, halEvent);
|
||||
|
||||
exit:
|
||||
hidl_cb(ret, event);
|
||||
free(halEvent);
|
||||
return Void();
|
||||
return mHwDevice->get_model_state(mHwDevice, client->getHalHandle());
|
||||
}
|
||||
|
||||
// Methods from ::android::hidl::base::V1_0::IBase follow.
|
||||
|
||||
@@ -82,7 +82,7 @@ struct SoundTriggerHw : public ISoundTriggerHw {
|
||||
int32_t cookie) override;
|
||||
|
||||
// Methods from V2_2::ISoundTriggerHw follow.
|
||||
Return<void> getModelState(int32_t modelHandle, getModelState_cb _hidl_cb) override;
|
||||
Return<int32_t> getModelState(int32_t modelHandle) override;
|
||||
|
||||
SoundTriggerHw();
|
||||
|
||||
|
||||
@@ -74,21 +74,14 @@ class SoundTriggerHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
* Test ISoundTriggerHw::getModelState() method
|
||||
*
|
||||
* Verifies that:
|
||||
* - the implementation returns -EINVAL with invalid model handle
|
||||
* - the implementation returns -ENOSYS with invalid model handle
|
||||
*
|
||||
*/
|
||||
TEST_F(SoundTriggerHidlTest, GetModelStateInvalidModel) {
|
||||
int ret = android::OK;
|
||||
::android::hardware::soundtrigger::V2_0::ISoundTriggerHwCallback::RecognitionEvent event;
|
||||
SoundModelHandle handle = 0;
|
||||
Return<void> hidlReturn =
|
||||
mSoundTriggerHal->getModelState(handle, [&](int32_t retval, auto res) {
|
||||
ret = retval;
|
||||
event = res;
|
||||
});
|
||||
|
||||
Return<int32_t> hidlReturn = mSoundTriggerHal->getModelState(handle);
|
||||
EXPECT_TRUE(hidlReturn.isOk());
|
||||
EXPECT_EQ(-ENOSYS, ret);
|
||||
EXPECT_EQ(-ENOSYS, hidlReturn);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
Reference in New Issue
Block a user