summaryrefslogtreecommitdiff
path: root/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerInternal.java
blob: 7071e23a5ebb85b3bfb095c1c45e4a9d424d9e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**
 * Copyright (C) 2014 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 com.android.server.soundtrigger;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.soundtrigger.IRecognitionStatusCallback;
import android.hardware.soundtrigger.ModelParams;
import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.Keyphrase;
import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
import android.hardware.soundtrigger.SoundTrigger.ModelParamRange;
import android.hardware.soundtrigger.SoundTrigger.ModuleProperties;
import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig;
import android.os.IBinder;

import com.android.server.voiceinteraction.VoiceInteractionManagerService;

import java.io.FileDescriptor;
import java.io.PrintWriter;

/**
 * Provides a local service for managing voice-related recoginition models. This is primarily used
 * by the {@link VoiceInteractionManagerService}.
 */
public interface SoundTriggerInternal {
    /**
     * Return codes for {@link Session#startRecognition(int, KeyphraseSoundModel,
     *      IRecognitionStatusCallback, RecognitionConfig)},
     * {@link Session#stopRecognition(int, IRecognitionStatusCallback)}
     */
    int STATUS_ERROR = SoundTrigger.STATUS_ERROR;
    int STATUS_OK = SoundTrigger.STATUS_OK;

    Session attach(@NonNull IBinder client);

    /**
     * Dumps service-wide information.
     */
    void dump(FileDescriptor fd, PrintWriter pw, String[] args);

    interface Session {
        /**
         * Starts recognition for the given keyphraseId.
         *
         * @param keyphraseId The identifier of the keyphrase for which
         *                    the recognition is to be started.
         * @param soundModel  The sound model to use for recognition.
         * @param listener    The listener for the recognition events related to the given
         *                    keyphrase.
         * @param runInBatterySaverMode flag that indicates whether the recognition should continue
         *                              after battery saver mode is enabled.
         * @return One of {@link #STATUS_ERROR} or {@link #STATUS_OK}.
         */
        int startRecognition(int keyphraseId, KeyphraseSoundModel soundModel,
                IRecognitionStatusCallback listener, RecognitionConfig recognitionConfig,
                boolean runInBatterySaverMode);

        /**
         * Stops recognition for the given {@link Keyphrase} if a recognition is
         * currently active.
         *
         * @param keyphraseId The identifier of the keyphrase for which
         *                    the recognition is to be stopped.
         * @param listener    The listener for the recognition events related to the given
         *                    keyphrase.
         * @return One of {@link #STATUS_ERROR} or {@link #STATUS_OK}.
         */
        int stopRecognition(int keyphraseId, IRecognitionStatusCallback listener);

        ModuleProperties getModuleProperties();

        /**
         * Set a model specific {@link ModelParams} with the given value. This
         * parameter will keep its value for the duration the model is loaded regardless of starting
         * and
         * stopping recognition. Once the model is unloaded, the value will be lost.
         * {@link #queryParameter} should be checked first before calling this
         * method.
         *
         * @param keyphraseId The identifier of the keyphrase for which
         *                    to modify model parameters
         * @param modelParam  {@link ModelParams}
         * @param value       Value to set
         * @return - {@link SoundTrigger#STATUS_OK} in case of success
         * - {@link SoundTrigger#STATUS_NO_INIT} if the native service cannot be reached
         * - {@link SoundTrigger#STATUS_BAD_VALUE} invalid input parameter
         * - {@link SoundTrigger#STATUS_INVALID_OPERATION} if the call is out of sequence or
         * if API is not supported by HAL
         */
        int setParameter(int keyphraseId, @ModelParams int modelParam, int value);

        /**
         * Get a model specific {@link ModelParams}. This parameter will keep its value
         * for the duration the model is loaded regardless of starting and stopping recognition.
         * Once the model is unloaded, the value will be lost. If the value is not set, a default
         * value is returned. See ModelParams for parameter default values.
         * {{@link #queryParameter}} should be checked first before calling this
         * method.
         *
         * @param keyphraseId The identifier of the keyphrase for which
         *                    to modify model parameters
         * @param modelParam  {@link ModelParams}
         * @return value of parameter
         * @throws UnsupportedOperationException if hal or model do not support this API.
         *                                       queryParameter should be checked first.
         * @throws IllegalArgumentException      if invalid model handle or parameter is passed.
         *                                       queryParameter should be checked first.
         */
        int getParameter(int keyphraseId, @ModelParams int modelParam);

        /**
         * Determine if parameter control is supported for the given model handle.
         * This method should be checked prior to calling {@link #setParameter}
         * or {@link #getParameter}.
         *
         * @param keyphraseId The identifier of the keyphrase for which
         *                    to modify model parameters
         * @param modelParam  {@link ModelParams}
         * @return supported range of parameter, null if not supported
         */
        @Nullable
        ModelParamRange queryParameter(int keyphraseId,
                @ModelParams int modelParam);

        /**
         * Unloads (and stops if running) the given keyphraseId
         */
        int unloadKeyphraseModel(int keyphaseId);

        /**
         * Dumps session-wide information.
         */
        void dump(FileDescriptor fd, PrintWriter pw, String[] args);
    }
}