12b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov/* 22b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * Copyright (C) 2018 The Android Open Source Project 32b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * 42b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 52b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * you may not use this file except in compliance with the License. 62b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * You may obtain a copy of the License at 72b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * 82b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 92b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * 102b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * Unless required by applicable law or agreed to in writing, software 112b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 122b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * See the License for the specific language governing permissions and 142b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov * limitations under the License. 152b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov */ 162b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 172b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#ifndef ANDROID_HARDWARE_SOUNDTRIGGER_V2_1_SOUNDTRIGGERHW_H 182b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#define ANDROID_HARDWARE_SOUNDTRIGGER_V2_1_SOUNDTRIGGERHW_H 192b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 202b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#include <SoundTriggerHalImpl.h> 212b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#include <android/hardware/soundtrigger/2.1/ISoundTriggerHw.h> 222b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#include <hidl/Status.h> 232b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 242b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovnamespace android { 252b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovnamespace hardware { 262b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovnamespace soundtrigger { 272b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovnamespace V2_1 { 282b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovnamespace implementation { 292b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 302b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovusing ::android::sp; 312b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovusing ::android::hardware::hidl_string; 322b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovusing ::android::hardware::hidl_vec; 332b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovusing ::android::hardware::Return; 342b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovusing ::android::hardware::Void; 352b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 362b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovstruct SoundTriggerHw : public V2_0::implementation::SoundTriggerHalImpl { 372b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov SoundTriggerHw() = default; 382b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov ISoundTriggerHw* getInterface() { return new TrampolineSoundTriggerHw_2_1(this); } 392b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 402b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov protected: 412b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov virtual ~SoundTriggerHw() = default; 422b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 432b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadSoundModel_2_1(const V2_1::ISoundTriggerHw::SoundModel& soundModel, 442b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_1::ISoundTriggerHwCallback>& callback, 452b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t cookie, 462b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov V2_1::ISoundTriggerHw::loadSoundModel_2_1_cb _hidl_cb); 472b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadPhraseSoundModel_2_1( 482b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const V2_1::ISoundTriggerHw::PhraseSoundModel& soundModel, 492b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_1::ISoundTriggerHwCallback>& callback, int32_t cookie, 502b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov V2_1::ISoundTriggerHw::loadPhraseSoundModel_2_1_cb _hidl_cb); 512b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> startRecognition_2_1(int32_t modelHandle, 522b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const V2_1::ISoundTriggerHw::RecognitionConfig& config); 532b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 542b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov private: 552b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov struct TrampolineSoundTriggerHw_2_1 : public ISoundTriggerHw { 562b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov explicit TrampolineSoundTriggerHw_2_1(sp<SoundTriggerHw> impl) : mImpl(impl) {} 572b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 582b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov // Methods from ::android::hardware::soundtrigger::V2_0::ISoundTriggerHw follow. 592b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> getProperties(getProperties_cb _hidl_cb) override { 602b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->getProperties(_hidl_cb); 612b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 622b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadSoundModel(const V2_0::ISoundTriggerHw::SoundModel& soundModel, 632b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_0::ISoundTriggerHwCallback>& callback, 642b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t cookie, loadSoundModel_cb _hidl_cb) override { 652b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->loadSoundModel(soundModel, callback, cookie, _hidl_cb); 662b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 672b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadPhraseSoundModel(const V2_0::ISoundTriggerHw::PhraseSoundModel& soundModel, 682b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_0::ISoundTriggerHwCallback>& callback, 692b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t cookie, 702b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov loadPhraseSoundModel_cb _hidl_cb) override { 712b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->loadPhraseSoundModel(soundModel, callback, cookie, _hidl_cb); 722b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 732b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> unloadSoundModel(V2_0::SoundModelHandle modelHandle) override { 742b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->unloadSoundModel(modelHandle); 752b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 762b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> startRecognition(int32_t modelHandle, 772b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const V2_0::ISoundTriggerHw::RecognitionConfig& config, 782b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_0::ISoundTriggerHwCallback>& /*callback*/, 792b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t /*cookie*/) override { 802b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->startRecognition(modelHandle, config); 812b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 822b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> stopRecognition(V2_0::SoundModelHandle modelHandle) override { 832b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->stopRecognition(modelHandle); 842b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 852b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> stopAllRecognitions() override { return mImpl->stopAllRecognitions(); } 862b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 872b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov // Methods from V2_1::ISoundTriggerHw follow. 882b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadSoundModel_2_1(const V2_1::ISoundTriggerHw::SoundModel& soundModel, 892b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_1::ISoundTriggerHwCallback>& callback, 902b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t cookie, loadSoundModel_2_1_cb _hidl_cb) override { 912b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->loadSoundModel_2_1(soundModel, callback, cookie, _hidl_cb); 922b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 932b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<void> loadPhraseSoundModel_2_1( 942b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const V2_1::ISoundTriggerHw::PhraseSoundModel& soundModel, 952b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_1::ISoundTriggerHwCallback>& callback, int32_t cookie, 962b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov loadPhraseSoundModel_2_1_cb _hidl_cb) override { 972b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->loadPhraseSoundModel_2_1(soundModel, callback, cookie, _hidl_cb); 982b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 992b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov Return<int32_t> startRecognition_2_1(int32_t modelHandle, 1002b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const V2_1::ISoundTriggerHw::RecognitionConfig& config, 1012b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov const sp<V2_1::ISoundTriggerHwCallback>& /*callback*/, 1022b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov int32_t /*cookie*/) override { 1032b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov return mImpl->startRecognition_2_1(modelHandle, config); 1042b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov } 1052b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1062b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov private: 1072b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov sp<SoundTriggerHw> mImpl; 1082b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov }; 1092b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1102b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov class SoundModelClient_2_1 : public SoundModelClient { 1112b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov public: 1122b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov SoundModelClient_2_1(uint32_t id, V2_1::ISoundTriggerHwCallback::CallbackCookie cookie, 1132b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov sp<V2_1::ISoundTriggerHwCallback> callback) 1142b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov : SoundModelClient(id, cookie), mCallback(callback) {} 1152b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1162b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov void recognitionCallback(struct sound_trigger_recognition_event* halEvent) override; 1172b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov void soundModelCallback(struct sound_trigger_model_event* halEvent) override; 1182b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1192b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov private: 1202b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov sp<V2_1::ISoundTriggerHwCallback> mCallback; 1212b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov }; 1222b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov}; 1232b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1242b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganovextern "C" ISoundTriggerHw* HIDL_FETCH_ISoundTriggerHw(const char* name); 1252b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1262b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov} // namespace implementation 1272b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov} // namespace V2_1 1282b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov} // namespace soundtrigger 1292b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov} // namespace hardware 1302b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov} // namespace android 1312b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov 1322b228bb37858a48df1a01754c24fa8a29bb2a6deMikhail Naganov#endif // ANDROID_HARDWARE_SOUNDTRIGGER_V2_1_SOUNDTRIGGERHW_H 133