17a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent/* 27a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * Copyright (C) 2016 The Android Open Source Project 37a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * 47a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 57a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * you may not use this file except in compliance with the License. 67a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * You may obtain a copy of the License at 77a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * 87a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 97a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * 107a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * Unless required by applicable law or agreed to in writing, software 117a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 127a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * See the License for the specific language governing permissions and 147a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent * limitations under the License. 157a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent */ 167a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 177a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent#include <utils/Log.h> 187a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent#include "SoundTriggerHalLegacy.h" 197a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 207a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentnamespace android { 217a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 227a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent/* static */ 237a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentsp<SoundTriggerHalInterface> SoundTriggerHalInterface::connectModule(const char *moduleName) 247a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 257a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return new SoundTriggerHalLegacy(moduleName); 267a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 277a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 287a544b44b7872b300f50e16fef480f76e9145fbbEric LaurentSoundTriggerHalLegacy::SoundTriggerHalLegacy(const char *moduleName) 297a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent : mModuleName(moduleName), mHwDevice(NULL) 307a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 317a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 327a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 337a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentvoid SoundTriggerHalLegacy::onFirstRef() 347a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 357a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent const hw_module_t *mod; 367a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent int rc; 377a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 387a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mModuleName == NULL) { 397a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent mModuleName = "primary"; 407a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 417a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 427a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent rc = hw_get_module_by_class(SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, &mod); 437a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (rc != 0) { 447a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent ALOGE("couldn't load sound trigger module %s.%s (%s)", 457a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, strerror(-rc)); 467a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return; 477a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 487a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent rc = sound_trigger_hw_device_open(mod, &mHwDevice); 497a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (rc != 0) { 507a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent ALOGE("couldn't open sound trigger hw device in %s.%s (%s)", 517a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, strerror(-rc)); 527a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent mHwDevice = NULL; 537a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return; 547a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 557a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice->common.version < SOUND_TRIGGER_DEVICE_API_VERSION_1_0 || 567a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent mHwDevice->common.version > SOUND_TRIGGER_DEVICE_API_VERSION_CURRENT) { 577a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent ALOGE("wrong sound trigger hw device version %04x", mHwDevice->common.version); 587a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return; 597a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 607a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 617a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 627a544b44b7872b300f50e16fef480f76e9145fbbEric LaurentSoundTriggerHalLegacy::~SoundTriggerHalLegacy() 637a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 647a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice != NULL) { 657a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent sound_trigger_hw_device_close(mHwDevice); 667a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 677a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 687a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 697a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::getProperties(struct sound_trigger_properties *properties) 707a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 717a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 727a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 737a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 747a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->get_properties(mHwDevice, properties); 757a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 767a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 777a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::loadSoundModel(struct sound_trigger_sound_model *sound_model, 787a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent sound_model_callback_t callback, 797a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent void *cookie, 807a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent sound_model_handle_t *handle) 817a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 827a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 837a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 847a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 857a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->load_sound_model(mHwDevice, sound_model, callback, cookie, handle); 867a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 877a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 887a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::unloadSoundModel(sound_model_handle_t handle) 897a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 907a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 917a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 927a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 937a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->unload_sound_model(mHwDevice, handle); 947a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 957a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 967a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::startRecognition(sound_model_handle_t handle, 977a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent const struct sound_trigger_recognition_config *config, 987a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent recognition_callback_t callback, 997a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent void *cookie) 1007a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 1017a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 1027a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 1037a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 1047a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->start_recognition(mHwDevice, handle, config, callback, cookie); 1057a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 1067a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 1077a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::stopRecognition(sound_model_handle_t handle) 1087a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 1097a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 1107a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 1117a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 1127a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->stop_recognition(mHwDevice, handle); 1137a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 1147a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 1157a544b44b7872b300f50e16fef480f76e9145fbbEric Laurentint SoundTriggerHalLegacy::stopAllRecognitions() 1167a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent{ 1177a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice == NULL) { 1187a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENODEV; 1197a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 1207a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent if (mHwDevice->common.version >= SOUND_TRIGGER_DEVICE_API_VERSION_1_1 && 1217a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent mHwDevice->stop_all_recognitions) { 1227a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return mHwDevice->stop_all_recognitions(mHwDevice); 1237a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent } 1247a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent return -ENOSYS; 1257a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} 1267a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent 1277a544b44b7872b300f50e16fef480f76e9145fbbEric Laurent} // namespace android 128