Add SoundTrigger GenericSoundModel type
BUG: 22860713
Change-Id: I462ba039577511674a08aee42e3f1941ff7005ce
diff --git a/services/soundtrigger/SoundTriggerHwService.cpp b/services/soundtrigger/SoundTriggerHwService.cpp
index 9de6fe2..b3500f6 100644
--- a/services/soundtrigger/SoundTriggerHwService.cpp
+++ b/services/soundtrigger/SoundTriggerHwService.cpp
@@ -241,6 +241,13 @@
event->data_offset);
event->data_offset = sizeof(struct sound_trigger_phrase_recognition_event);
break;
+ case SOUND_MODEL_TYPE_GENERIC:
+ ALOGW_IF(event->data_size != 0 && event->data_offset !=
+ sizeof(struct sound_trigger_generic_recognition_event),
+ "prepareRecognitionEvent_l(): invalid data offset %u for generic event type",
+ event->data_offset);
+ event->data_offset = sizeof(struct sound_trigger_generic_recognition_event);
+ break;
case SOUND_MODEL_TYPE_UNKNOWN:
ALOGW_IF(event->data_size != 0 && event->data_offset !=
sizeof(struct sound_trigger_recognition_event),
@@ -786,26 +793,34 @@
if (model->mState == Model::STATE_ACTIVE) {
mHwDevice->stop_recognition(mHwDevice, model->mHandle);
// keep model in ACTIVE state so that event is processed by onCallbackEvent()
- struct sound_trigger_phrase_recognition_event phraseEvent;
- memset(&phraseEvent, 0, sizeof(struct sound_trigger_phrase_recognition_event));
- switch (model->mType) {
- case SOUND_MODEL_TYPE_KEYPHRASE:
- phraseEvent.num_phrases = model->mConfig.num_phrases;
- for (size_t i = 0; i < phraseEvent.num_phrases; i++) {
- phraseEvent.phrase_extras[i] = model->mConfig.phrases[i];
+ if (model->mType == SOUND_MODEL_TYPE_KEYPHRASE) {
+ struct sound_trigger_phrase_recognition_event event;
+ memset(&event, 0, sizeof(struct sound_trigger_phrase_recognition_event));
+ event.num_phrases = model->mConfig.num_phrases;
+ for (size_t i = 0; i < event.num_phrases; i++) {
+ event.phrase_extras[i] = model->mConfig.phrases[i];
}
- break;
- case SOUND_MODEL_TYPE_UNKNOWN:
- default:
- break;
- }
- phraseEvent.common.status = RECOGNITION_STATUS_ABORT;
- phraseEvent.common.type = model->mType;
- phraseEvent.common.model = model->mHandle;
- phraseEvent.common.data_size = 0;
- sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&phraseEvent.common);
- if (eventMemory != 0) {
- events.add(eventMemory);
+ event.common.status = RECOGNITION_STATUS_ABORT;
+ event.common.type = model->mType;
+ event.common.model = model->mHandle;
+ event.common.data_size = 0;
+ sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&event.common);
+ if (eventMemory != 0) {
+ events.add(eventMemory);
+ }
+ } else if (model->mType == SOUND_MODEL_TYPE_GENERIC) {
+ struct sound_trigger_generic_recognition_event event;
+ memset(&event, 0, sizeof(struct sound_trigger_generic_recognition_event));
+ event.common.status = RECOGNITION_STATUS_ABORT;
+ event.common.type = model->mType;
+ event.common.model = model->mHandle;
+ event.common.data_size = 0;
+ sp<IMemory> eventMemory = service->prepareRecognitionEvent_l(&event.common);
+ if (eventMemory != 0) {
+ events.add(eventMemory);
+ }
+ } else {
+ goto exit;
}
}
}