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