/*
 * Copyright 2017 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.
 */

package android.hardware.soundtrigger@2.1;

import @2.0::ISoundTriggerHwCallback;
import @2.0::PhraseRecognitionExtra;

/**
 * SoundTrigger HAL Callback interface. Obtained during SoundTrigger setup.
 */
interface ISoundTriggerHwCallback extends @2.0::ISoundTriggerHwCallback {

    /**
     * Generic recognition event sent via recognition callback.
     */
    struct RecognitionEvent {
        /** Event header. Any data contained in the 'header.data' field
         * is ignored */
        @2.0::ISoundTriggerHwCallback.RecognitionEvent header;
        /** Opaque event data */
        memory data;
    };

    /**
     * Specialized recognition event for key phrase recognitions.
     */
    struct PhraseRecognitionEvent {
        /** Common part of the recognition event */
        RecognitionEvent common;
        /** List of descriptors for each recognized key phrase */
        vec<PhraseRecognitionExtra> phraseExtras;
    };

    /**
     * Event sent via load sound model callback.
     */
    struct ModelEvent {
        /** Event header. Any data contained in the 'header.data' field
         * is ignored */
        @2.0::ISoundTriggerHwCallback.ModelEvent header;
        /** Opaque event data, passed transparently by the framework */
        memory data;
    };

    /**
     * Callback method called by the HAL when the sound recognition triggers.
     *
     * @param event A RecognitionEvent structure containing detailed results
     *     of the recognition triggered
     * @param cookie The cookie passed by the framework when recognition was
     *     started (see ISoundtriggerHw.startRecognition*())
     */
    recognitionCallback_2_1(RecognitionEvent event, CallbackCookie cookie);

    /**
     * Callback method called by the HAL when the sound recognition triggers
     * for a key phrase sound model.
     *
     * @param event A RecognitionEvent structure containing detailed results
     *     of the recognition triggered
     * @param cookie The cookie passed by the framework when recognition was
     *     started (see ISoundtriggerHw.startRecognition*())
     */
    phraseRecognitionCallback_2_1(PhraseRecognitionEvent event,
                                  CallbackCookie cookie);

    /**
     * Callback method called by the HAL when the sound model loading completes.
     *
     * @param event A ModelEvent structure containing detailed results of the
     *     model loading operation
     * @param cookie The cookie passed by the framework when loading was
     *     initiated (see ISoundtriggerHw.loadSoundModel*())
     */
    soundModelCallback_2_1(ModelEvent event, CallbackCookie cookie);
};
