• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <utils/Log.h>
18 #include "SoundTriggerHalLegacy.h"
19 
20 namespace android {
21 
22 /* static */
connectModule(const char * moduleName)23 sp<SoundTriggerHalInterface> SoundTriggerHalInterface::connectModule(const char *moduleName)
24 {
25     return new SoundTriggerHalLegacy(moduleName);
26 }
27 
SoundTriggerHalLegacy(const char * moduleName)28 SoundTriggerHalLegacy::SoundTriggerHalLegacy(const char *moduleName)
29     : mModuleName(moduleName), mHwDevice(NULL)
30 {
31 }
32 
onFirstRef()33 void SoundTriggerHalLegacy::onFirstRef()
34 {
35     const hw_module_t *mod;
36     int rc;
37 
38     if (mModuleName == NULL) {
39         mModuleName = "primary";
40     }
41 
42     rc = hw_get_module_by_class(SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, &mod);
43     if (rc != 0) {
44         ALOGE("couldn't load sound trigger module %s.%s (%s)",
45               SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, strerror(-rc));
46         return;
47     }
48     rc = sound_trigger_hw_device_open(mod, &mHwDevice);
49     if (rc != 0) {
50         ALOGE("couldn't open sound trigger hw device in %s.%s (%s)",
51               SOUND_TRIGGER_HARDWARE_MODULE_ID, mModuleName, strerror(-rc));
52         mHwDevice = NULL;
53         return;
54     }
55     if (mHwDevice->common.version < SOUND_TRIGGER_DEVICE_API_VERSION_1_0 ||
56             mHwDevice->common.version > SOUND_TRIGGER_DEVICE_API_VERSION_CURRENT) {
57         ALOGE("wrong sound trigger hw device version %04x", mHwDevice->common.version);
58         return;
59     }
60 }
61 
~SoundTriggerHalLegacy()62 SoundTriggerHalLegacy::~SoundTriggerHalLegacy()
63 {
64     if (mHwDevice != NULL) {
65         sound_trigger_hw_device_close(mHwDevice);
66     }
67 }
68 
getProperties(struct sound_trigger_properties * properties)69 int SoundTriggerHalLegacy::getProperties(struct sound_trigger_properties *properties)
70 {
71     if (mHwDevice == NULL) {
72         return -ENODEV;
73     }
74     return mHwDevice->get_properties(mHwDevice, properties);
75 }
76 
loadSoundModel(struct sound_trigger_sound_model * sound_model,sound_model_callback_t callback,void * cookie,sound_model_handle_t * handle)77 int SoundTriggerHalLegacy::loadSoundModel(struct sound_trigger_sound_model *sound_model,
78                         sound_model_callback_t callback,
79                         void *cookie,
80                         sound_model_handle_t *handle)
81 {
82     if (mHwDevice == NULL) {
83         return -ENODEV;
84     }
85     return mHwDevice->load_sound_model(mHwDevice, sound_model, callback, cookie, handle);
86 }
87 
unloadSoundModel(sound_model_handle_t handle)88 int SoundTriggerHalLegacy::unloadSoundModel(sound_model_handle_t handle)
89 {
90     if (mHwDevice == NULL) {
91         return -ENODEV;
92     }
93     return mHwDevice->unload_sound_model(mHwDevice, handle);
94 }
95 
startRecognition(sound_model_handle_t handle,const struct sound_trigger_recognition_config * config,recognition_callback_t callback,void * cookie)96 int SoundTriggerHalLegacy::startRecognition(sound_model_handle_t handle,
97                          const struct sound_trigger_recognition_config *config,
98                          recognition_callback_t callback,
99                          void *cookie)
100 {
101     if (mHwDevice == NULL) {
102         return -ENODEV;
103     }
104     return mHwDevice->start_recognition(mHwDevice, handle, config, callback, cookie);
105 }
106 
stopRecognition(sound_model_handle_t handle)107 int SoundTriggerHalLegacy::stopRecognition(sound_model_handle_t handle)
108 {
109     if (mHwDevice == NULL) {
110         return -ENODEV;
111     }
112     return mHwDevice->stop_recognition(mHwDevice, handle);
113 }
114 
stopAllRecognitions()115 int SoundTriggerHalLegacy::stopAllRecognitions()
116 {
117     if (mHwDevice == NULL) {
118         return -ENODEV;
119     }
120     if (mHwDevice->common.version >= SOUND_TRIGGER_DEVICE_API_VERSION_1_1 &&
121      mHwDevice->stop_all_recognitions) {
122         return mHwDevice->stop_all_recognitions(mHwDevice);
123     }
124     return -ENOSYS;
125 }
126 
127 } // namespace android
128