blob: 2b78818a2ba8824f619b7c648202412c9fc768e5 [file] [log] [blame]
Eric Laurent7a544b42016-08-05 19:01:13 -07001/*
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
20namespace android {
21
22/* static */
23sp<SoundTriggerHalInterface> SoundTriggerHalInterface::connectModule(const char *moduleName)
24{
25 return new SoundTriggerHalLegacy(moduleName);
26}
27
28SoundTriggerHalLegacy::SoundTriggerHalLegacy(const char *moduleName)
29 : mModuleName(moduleName), mHwDevice(NULL)
30{
31}
32
33void 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
62SoundTriggerHalLegacy::~SoundTriggerHalLegacy()
63{
64 if (mHwDevice != NULL) {
65 sound_trigger_hw_device_close(mHwDevice);
66 }
67}
68
69int 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
77int 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
88int 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
96int 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
107int 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
115int 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