1b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent/* 2b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * Copyright (C) 2014 The Android Open Source Project 3b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * 4b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * you may not use this file except in compliance with the License. 6b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * You may obtain a copy of the License at 7b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * 8b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * 10b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * Unless required by applicable law or agreed to in writing, software 11b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * See the License for the specific language governing permissions and 14b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent * limitations under the License. 15b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent */ 16b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 17b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#ifndef ANDROID_HARDWARE_SOUNDTRIGGER_H 18b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#define ANDROID_HARDWARE_SOUNDTRIGGER_H 19b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 20b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <binder/IBinder.h> 21df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent#include <utils/threads.h> 22b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <soundtrigger/SoundTriggerCallback.h> 23b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <soundtrigger/ISoundTrigger.h> 24b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <soundtrigger/ISoundTriggerHwService.h> 25b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <soundtrigger/ISoundTriggerClient.h> 26b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <system/sound_trigger.h> 27b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 28b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentnamespace android { 29b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 30b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentclass MemoryDealer; 31b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 32b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentclass SoundTrigger : public BnSoundTriggerClient, 33b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent public IBinder::DeathRecipient 34b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent{ 35b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentpublic: 36df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent 37df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent virtual ~SoundTrigger(); 38df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent 39b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent static status_t listModules(struct sound_trigger_module_descriptor *modules, 40b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent uint32_t *numModules); 41b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent static sp<SoundTrigger> attach(const sound_trigger_module_handle_t module, 42b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent const sp<SoundTriggerCallback>& callback); 43b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 44df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent static status_t setCaptureState(bool active); 45b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 46b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent void detach(); 47b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 48b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent status_t loadSoundModel(const sp<IMemory>& modelMemory, 49b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent sound_model_handle_t *handle); 50b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 51b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent status_t unloadSoundModel(sound_model_handle_t handle); 52b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 53b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent status_t startRecognition(sound_model_handle_t handle, const sp<IMemory>& dataMemory); 54b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent status_t stopRecognition(sound_model_handle_t handle); 55b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 56b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent // BpSoundTriggerClient 57b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent virtual void onRecognitionEvent(const sp<IMemory>& eventMemory); 58df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent virtual void onSoundModelEvent(const sp<IMemory>& eventMemory); 59df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent virtual void onServiceStateChange(const sp<IMemory>& eventMemory); 60b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 61b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent //IBinder::DeathRecipient 62b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent virtual void binderDied(const wp<IBinder>& who); 63b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 64b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent static status_t stringToGuid(const char *str, sound_trigger_uuid_t *guid); 65b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent static status_t guidToString(const sound_trigger_uuid_t *guid, 66b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent char *str, size_t maxLen); 67b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 68b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentprivate: 69b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent SoundTrigger(sound_trigger_module_handle_t module, 70b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent const sp<SoundTriggerCallback>&); 713769871b5998f4bbe6d8fe7c124ee97daa6e7fabEric Laurent static const sp<ISoundTriggerHwService> getSoundTriggerHwService(); 72b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 73b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent Mutex mLock; 74b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent sp<ISoundTrigger> mISoundTrigger; 75b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent const sound_trigger_module_handle_t mModule; 76b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent sp<SoundTriggerCallback> mCallback; 77b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent}; 78b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 79b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent}; // namespace android 80b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 81b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#endif //ANDROID_HARDWARE_SOUNDTRIGGER_H 82