/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include namespace android { namespace hardware { namespace soundtrigger { namespace V2_2 { namespace implementation { using ::android::hardware::soundtrigger::V2_0::SoundModelHandle; using ::android::hardware::soundtrigger::V2_0::ISoundTriggerHwCallback; using ::android::hardware::soundtrigger::V2_0::RecognitionMode; using ::android::hardware::audio::common::V2_0::Uuid; struct SoundTriggerHw : public ISoundTriggerHw { // Methods from V2_0::ISoundTriggerHw follow. Return getProperties(getProperties_cb _hidl_cb) override { V2_0::ISoundTriggerHw::Properties props; props.implementor = "The Android Open Source Project"; props.description = "The Andtoid Studio Emulator Soundtrigger no-op implementation"; props.version = 0; props.uuid = (Uuid){ .timeLow = 0x04030201, .timeMid = 0x0605, .versionAndTimeHigh = 0x0807, .variantAndClockSeqHigh = 0x0A09, .node = hidl_array({ 'r', 'a', 'n', 'c', 'h', 'u' }), }; props.maxSoundModels = 42; props.maxKeyPhrases = 4242; props.maxUsers = 7; props.recognitionModes = RecognitionMode::VOICE_TRIGGER | RecognitionMode::GENERIC_TRIGGER; props.captureTransition = false; props.maxBufferMs = 0; props.concurrentCapture = false; props.triggerInEvent = true; props.powerConsumptionMw = 42; _hidl_cb(0, props); return Void(); } Return loadSoundModel(const V2_0::ISoundTriggerHw::SoundModel& soundModel, const sp& callback, int32_t cookie, loadSoundModel_cb _hidl_cb) override { (void)soundModel; (void)callback; (void)cookie; _hidl_cb(0, genHandle()); return Void(); } Return loadPhraseSoundModel(const V2_0::ISoundTriggerHw::PhraseSoundModel& soundModel, const sp& callback, int32_t cookie, loadPhraseSoundModel_cb _hidl_cb) override { (void)soundModel; (void)callback; (void)cookie; _hidl_cb(0, genHandle()); return Void(); } Return unloadSoundModel(int32_t modelHandle) override { (void)modelHandle; return 0; } Return startRecognition(int32_t modelHandle, const V2_0::ISoundTriggerHw::RecognitionConfig& config, const sp& callback, int32_t cookie) override { (void)modelHandle; (void)config; (void)callback; (void)cookie; return 0; } Return stopRecognition(int32_t modelHandle) override { (void)modelHandle; return 0; } Return stopAllRecognitions() override { return 0; } // Methods from V2_1::ISoundTriggerHw follow. Return loadSoundModel_2_1(const V2_1::ISoundTriggerHw::SoundModel& soundModel, const sp& callback, int32_t cookie, loadSoundModel_2_1_cb _hidl_cb) override { (void)soundModel; (void)callback; (void)cookie; _hidl_cb(0, genHandle()); return Void(); } Return loadPhraseSoundModel_2_1(const V2_1::ISoundTriggerHw::PhraseSoundModel& soundModel, const sp& callback, int32_t cookie, loadPhraseSoundModel_2_1_cb _hidl_cb) override { (void)soundModel; (void)callback; (void)cookie; _hidl_cb(0, genHandle()); return Void(); } Return startRecognition_2_1(int32_t modelHandle, const V2_1::ISoundTriggerHw::RecognitionConfig& config, const sp& callback, int32_t cookie) override { (void)modelHandle; (void)config; (void)callback; (void)cookie; return 0; } // Methods from V2_2::ISoundTriggerHw follow. Return getModelState(int32_t modelHandle) override { (void)modelHandle; return 0; } SoundModelHandle genHandle() { mHandle = std::max(0, mHandle + 1); return mHandle; } SoundModelHandle mHandle = 0; }; extern "C" ISoundTriggerHw* HIDL_FETCH_ISoundTriggerHw(const char* /* name */) { return new SoundTriggerHw(); } } // namespace implementation } // namespace V2_2 } // namespace soundtrigger } // namespace hardware } // namespace android