xref: /aosp_15_r20/hardware/interfaces/soundtrigger/2.0/ISoundTriggerHwCallback.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright 2016 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected];
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Workerimport [email protected];
20*4d7e907cSAndroid Build Coastguard Worker
21*4d7e907cSAndroid Build Coastguard Workerinterface ISoundTriggerHwCallback {
22*4d7e907cSAndroid Build Coastguard Worker    enum RecognitionStatus : uint32_t {
23*4d7e907cSAndroid Build Coastguard Worker        SUCCESS  = 0,
24*4d7e907cSAndroid Build Coastguard Worker        ABORT    = 1,
25*4d7e907cSAndroid Build Coastguard Worker        FAILURE  = 2,
26*4d7e907cSAndroid Build Coastguard Worker    };
27*4d7e907cSAndroid Build Coastguard Worker
28*4d7e907cSAndroid Build Coastguard Worker    enum SoundModelStatus : uint32_t {
29*4d7e907cSAndroid Build Coastguard Worker        UPDATED  = 0,
30*4d7e907cSAndroid Build Coastguard Worker    };
31*4d7e907cSAndroid Build Coastguard Worker
32*4d7e907cSAndroid Build Coastguard Worker    /**
33*4d7e907cSAndroid Build Coastguard Worker     * Generic recognition event sent via recognition callback
34*4d7e907cSAndroid Build Coastguard Worker     */
35*4d7e907cSAndroid Build Coastguard Worker    struct RecognitionEvent {
36*4d7e907cSAndroid Build Coastguard Worker        /** Recognition status e.g. SUCCESS */
37*4d7e907cSAndroid Build Coastguard Worker        RecognitionStatus status;
38*4d7e907cSAndroid Build Coastguard Worker        /** Sound model type for this event. e.g SoundModelType.TYPE_KEYPHRASE */
39*4d7e907cSAndroid Build Coastguard Worker        SoundModelType    type;
40*4d7e907cSAndroid Build Coastguard Worker        /** Handle of loaded sound model which triggered the event */
41*4d7e907cSAndroid Build Coastguard Worker        SoundModelHandle  model;
42*4d7e907cSAndroid Build Coastguard Worker        /** It is possible to capture audio from this */
43*4d7e907cSAndroid Build Coastguard Worker        /** utterance buffered by the implementation */
44*4d7e907cSAndroid Build Coastguard Worker        bool              captureAvailable;
45*4d7e907cSAndroid Build Coastguard Worker        /** Audio session ID. framework use */
46*4d7e907cSAndroid Build Coastguard Worker        int32_t           captureSession;
47*4d7e907cSAndroid Build Coastguard Worker        /**
48*4d7e907cSAndroid Build Coastguard Worker         * Delay in ms between end of model detection and start of audio
49*4d7e907cSAndroid Build Coastguard Worker         * available for capture. A negative value is possible
50*4d7e907cSAndroid Build Coastguard Worker         * (e.g. if key phrase is also available for capture */
51*4d7e907cSAndroid Build Coastguard Worker        int32_t           captureDelayMs;
52*4d7e907cSAndroid Build Coastguard Worker        /**
53*4d7e907cSAndroid Build Coastguard Worker         * Duration in ms of audio captured before the start of the trigger.
54*4d7e907cSAndroid Build Coastguard Worker         * 0 if none. */
55*4d7e907cSAndroid Build Coastguard Worker        int32_t           capturePreambleMs;
56*4d7e907cSAndroid Build Coastguard Worker        /** The opaque data is the capture of the trigger sound */
57*4d7e907cSAndroid Build Coastguard Worker        bool              triggerInData;
58*4d7e907cSAndroid Build Coastguard Worker        /**
59*4d7e907cSAndroid Build Coastguard Worker         * Audio format of either the trigger in event data or to use for
60*4d7e907cSAndroid Build Coastguard Worker         * capture of the rest of the utterance */
61*4d7e907cSAndroid Build Coastguard Worker        AudioConfig       audioConfig;
62*4d7e907cSAndroid Build Coastguard Worker        /** Opaque event data */
63*4d7e907cSAndroid Build Coastguard Worker        vec<uint8_t>      data;
64*4d7e907cSAndroid Build Coastguard Worker    };
65*4d7e907cSAndroid Build Coastguard Worker
66*4d7e907cSAndroid Build Coastguard Worker    /**
67*4d7e907cSAndroid Build Coastguard Worker     * Specialized recognition event for key phrase recognitions
68*4d7e907cSAndroid Build Coastguard Worker     */
69*4d7e907cSAndroid Build Coastguard Worker    struct PhraseRecognitionEvent {
70*4d7e907cSAndroid Build Coastguard Worker        /** Common part of the recognition event */
71*4d7e907cSAndroid Build Coastguard Worker        RecognitionEvent common;
72*4d7e907cSAndroid Build Coastguard Worker        /** List of descriptors for each recognized key phrase */
73*4d7e907cSAndroid Build Coastguard Worker        vec<PhraseRecognitionExtra> phraseExtras;
74*4d7e907cSAndroid Build Coastguard Worker    };
75*4d7e907cSAndroid Build Coastguard Worker
76*4d7e907cSAndroid Build Coastguard Worker    /**
77*4d7e907cSAndroid Build Coastguard Worker     * Event sent via load sound model callback
78*4d7e907cSAndroid Build Coastguard Worker     */
79*4d7e907cSAndroid Build Coastguard Worker    struct ModelEvent {
80*4d7e907cSAndroid Build Coastguard Worker         /** Sound model status e.g. SoundModelStatus.UPDATED */
81*4d7e907cSAndroid Build Coastguard Worker        SoundModelStatus status;
82*4d7e907cSAndroid Build Coastguard Worker        /** Loaded sound model that triggered the event */
83*4d7e907cSAndroid Build Coastguard Worker        SoundModelHandle model;
84*4d7e907cSAndroid Build Coastguard Worker        /** Opaque event data, passed transparently by the framework */
85*4d7e907cSAndroid Build Coastguard Worker        vec<uint8_t>     data;
86*4d7e907cSAndroid Build Coastguard Worker    };
87*4d7e907cSAndroid Build Coastguard Worker
88*4d7e907cSAndroid Build Coastguard Worker    typedef int32_t CallbackCookie;
89*4d7e907cSAndroid Build Coastguard Worker
90*4d7e907cSAndroid Build Coastguard Worker    /**
91*4d7e907cSAndroid Build Coastguard Worker     * Callback method called by the HAL when the sound recognition triggers
92*4d7e907cSAndroid Build Coastguard Worker     * @param event A RecognitionEvent structure containing detailed results
93*4d7e907cSAndroid Build Coastguard Worker     *              of the recognition triggered
94*4d7e907cSAndroid Build Coastguard Worker     * @param cookie The cookie passed by the framework when recognition was
95*4d7e907cSAndroid Build Coastguard Worker     *               started (see ISoundtriggerHw.startRecognition()
96*4d7e907cSAndroid Build Coastguard Worker     */
97*4d7e907cSAndroid Build Coastguard Worker    recognitionCallback(RecognitionEvent event, CallbackCookie cookie);
98*4d7e907cSAndroid Build Coastguard Worker
99*4d7e907cSAndroid Build Coastguard Worker    /**
100*4d7e907cSAndroid Build Coastguard Worker     * Callback method called by the HAL when the sound recognition triggers
101*4d7e907cSAndroid Build Coastguard Worker     * for a key phrase sound model.
102*4d7e907cSAndroid Build Coastguard Worker     * @param event A RecognitionEvent structure containing detailed results
103*4d7e907cSAndroid Build Coastguard Worker     *              of the recognition triggered
104*4d7e907cSAndroid Build Coastguard Worker     * @param cookie The cookie passed by the framework when recognition was
105*4d7e907cSAndroid Build Coastguard Worker     *               started (see ISoundtriggerHw.startRecognition()
106*4d7e907cSAndroid Build Coastguard Worker     */
107*4d7e907cSAndroid Build Coastguard Worker    phraseRecognitionCallback(PhraseRecognitionEvent event,
108*4d7e907cSAndroid Build Coastguard Worker                              CallbackCookie cookie);
109*4d7e907cSAndroid Build Coastguard Worker    /**
110*4d7e907cSAndroid Build Coastguard Worker     * Callback method called by the HAL when the sound model loading completes
111*4d7e907cSAndroid Build Coastguard Worker     * @param event A ModelEvent structure containing detailed results of the
112*4d7e907cSAndroid Build Coastguard Worker     *              model loading operation
113*4d7e907cSAndroid Build Coastguard Worker     * @param cookie The cookie passed by the framework when loading was
114*4d7e907cSAndroid Build Coastguard Worker     *               initiated (see ISoundtriggerHw.loadSoundModel()
115*4d7e907cSAndroid Build Coastguard Worker     */
116*4d7e907cSAndroid Build Coastguard Worker    soundModelCallback(ModelEvent event, CallbackCookie cookie);
117*4d7e907cSAndroid Build Coastguard Worker};
118