xref: /aosp_15_r20/hardware/interfaces/media/c2/1.0/IComponent.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 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]::IGraphicBufferProducer;
20*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::IGraphicBufferProducer;
21*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::IGraphicBufferSource;
22*4d7e907cSAndroid Build Coastguard Worker
23*4d7e907cSAndroid Build Coastguard Workerimport IConfigurable;
24*4d7e907cSAndroid Build Coastguard Workerimport IComponentInterface;
25*4d7e907cSAndroid Build Coastguard Workerimport IComponentListener;
26*4d7e907cSAndroid Build Coastguard Workerimport IInputSink;
27*4d7e907cSAndroid Build Coastguard Workerimport IInputSurface;
28*4d7e907cSAndroid Build Coastguard Workerimport IInputSurfaceConnection;
29*4d7e907cSAndroid Build Coastguard Worker
30*4d7e907cSAndroid Build Coastguard Worker/**
31*4d7e907cSAndroid Build Coastguard Worker * Interface for a Codec2 component corresponding to API level 1.0 or below.
32*4d7e907cSAndroid Build Coastguard Worker * Components have two states: stopped and running. The running state has three
33*4d7e907cSAndroid Build Coastguard Worker * sub-states: executing, tripped and error.
34*4d7e907cSAndroid Build Coastguard Worker *
35*4d7e907cSAndroid Build Coastguard Worker * All methods in `IComponent` must not block. If a method call cannot be
36*4d7e907cSAndroid Build Coastguard Worker * completed in a timely manner, it must return `TIMED_OUT` in the return
37*4d7e907cSAndroid Build Coastguard Worker * status.
38*4d7e907cSAndroid Build Coastguard Worker */
39*4d7e907cSAndroid Build Coastguard Workerinterface IComponent {
40*4d7e907cSAndroid Build Coastguard Worker
41*4d7e907cSAndroid Build Coastguard Worker    // METHODS AVAILABLE WHEN RUNNING
42*4d7e907cSAndroid Build Coastguard Worker    // =========================================================================
43*4d7e907cSAndroid Build Coastguard Worker
44*4d7e907cSAndroid Build Coastguard Worker    /**
45*4d7e907cSAndroid Build Coastguard Worker     * Queues up work for the component.
46*4d7e907cSAndroid Build Coastguard Worker     *
47*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in running (including tripped) states.
48*4d7e907cSAndroid Build Coastguard Worker     *
49*4d7e907cSAndroid Build Coastguard Worker     * It is acceptable for this method to return `OK` and return an error value
50*4d7e907cSAndroid Build Coastguard Worker     * using the IComponentListener::onWorkDone() callback.
51*4d7e907cSAndroid Build Coastguard Worker     *
52*4d7e907cSAndroid Build Coastguard Worker     * @param workBundle `WorkBundle` object containing a list of `Work` objects
53*4d7e907cSAndroid Build Coastguard Worker     *     to queue to the component.
54*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
55*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - Works in @p workBundle were successfully queued.
56*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_INDEX` - Some component id in some `Worklet` is not valid.
57*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - The components are not tunneled but some `Work` object
58*4d7e907cSAndroid Build Coastguard Worker     *                   contains tunneling information.
59*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to queue @p workBundle.
60*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
61*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
62*4d7e907cSAndroid Build Coastguard Worker     */
63*4d7e907cSAndroid Build Coastguard Worker    queue(WorkBundle workBundle) generates (Status status);
64*4d7e907cSAndroid Build Coastguard Worker
65*4d7e907cSAndroid Build Coastguard Worker    /**
66*4d7e907cSAndroid Build Coastguard Worker     * Discards and abandons any pending `Work` items for the component.
67*4d7e907cSAndroid Build Coastguard Worker     *
68*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in running (including tripped) states.
69*4d7e907cSAndroid Build Coastguard Worker     *
70*4d7e907cSAndroid Build Coastguard Worker     * `Work` that could be immediately abandoned/discarded must be returned in
71*4d7e907cSAndroid Build Coastguard Worker     * @p flushedWorkBundle. The order in which queued `Work` items are
72*4d7e907cSAndroid Build Coastguard Worker     * discarded can be arbitrary.
73*4d7e907cSAndroid Build Coastguard Worker     *
74*4d7e907cSAndroid Build Coastguard Worker     * `Work` that could not be abandoned or discarded immediately must be
75*4d7e907cSAndroid Build Coastguard Worker     * marked to be discarded at the earliest opportunity, and must be returned
76*4d7e907cSAndroid Build Coastguard Worker     * via IComponentListener::onWorkDone(). This must be completed within
77*4d7e907cSAndroid Build Coastguard Worker     * 500ms.
78*4d7e907cSAndroid Build Coastguard Worker     *
79*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
80*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component has been successfully flushed.
81*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
82*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
83*4d7e907cSAndroid Build Coastguard Worker     * @return flushedWorkBundle `WorkBundle` object containing flushed `Work`
84*4d7e907cSAndroid Build Coastguard Worker     *     items.
85*4d7e907cSAndroid Build Coastguard Worker     */
86*4d7e907cSAndroid Build Coastguard Worker    flush(
87*4d7e907cSAndroid Build Coastguard Worker        ) generates (
88*4d7e907cSAndroid Build Coastguard Worker            Status status,
89*4d7e907cSAndroid Build Coastguard Worker            WorkBundle flushedWorkBundle
90*4d7e907cSAndroid Build Coastguard Worker        );
91*4d7e907cSAndroid Build Coastguard Worker
92*4d7e907cSAndroid Build Coastguard Worker    /**
93*4d7e907cSAndroid Build Coastguard Worker     * Drains the component, and optionally downstream components. This is a
94*4d7e907cSAndroid Build Coastguard Worker     * signalling method; as such it does not wait for any work completion.
95*4d7e907cSAndroid Build Coastguard Worker     *
96*4d7e907cSAndroid Build Coastguard Worker     * The last `Work` item is marked as "drain-till-here", so the component is
97*4d7e907cSAndroid Build Coastguard Worker     * notified not to wait for further `Work` before it processes what is
98*4d7e907cSAndroid Build Coastguard Worker     * already queued. This method can also be used to set the end-of-stream
99*4d7e907cSAndroid Build Coastguard Worker     * flag after `Work` has been queued. Client can continue to queue further
100*4d7e907cSAndroid Build Coastguard Worker     * `Work` immediately after this method returns.
101*4d7e907cSAndroid Build Coastguard Worker     *
102*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in running (including tripped) states.
103*4d7e907cSAndroid Build Coastguard Worker     *
104*4d7e907cSAndroid Build Coastguard Worker     * `Work` that is completed must be returned via
105*4d7e907cSAndroid Build Coastguard Worker     * IComponentListener::onWorkDone().
106*4d7e907cSAndroid Build Coastguard Worker     *
107*4d7e907cSAndroid Build Coastguard Worker     * @param withEos Whether to drain the component with marking end-of-stream.
108*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
109*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The drain request has been successfully recorded.
110*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
111*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
112*4d7e907cSAndroid Build Coastguard Worker     */
113*4d7e907cSAndroid Build Coastguard Worker    drain(bool withEos) generates (Status status);
114*4d7e907cSAndroid Build Coastguard Worker
115*4d7e907cSAndroid Build Coastguard Worker    /**
116*4d7e907cSAndroid Build Coastguard Worker     * Starts using a surface for output.
117*4d7e907cSAndroid Build Coastguard Worker     *
118*4d7e907cSAndroid Build Coastguard Worker     * This method must not block.
119*4d7e907cSAndroid Build Coastguard Worker     *
120*4d7e907cSAndroid Build Coastguard Worker     * @param blockPoolId Id of the `C2BlockPool` to be associated with the
121*4d7e907cSAndroid Build Coastguard Worker     *     output surface.
122*4d7e907cSAndroid Build Coastguard Worker     * @param surface Output surface.
123*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
124*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
125*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - The component does not support an output surface.
126*4d7e907cSAndroid Build Coastguard Worker     *   - `REFUSED`   - The output surface cannot be accessed.
127*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
128*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
129*4d7e907cSAndroid Build Coastguard Worker     */
130*4d7e907cSAndroid Build Coastguard Worker    setOutputSurface(
131*4d7e907cSAndroid Build Coastguard Worker            uint64_t blockPoolId,
132*4d7e907cSAndroid Build Coastguard Worker            @2.0::IGraphicBufferProducer surface
133*4d7e907cSAndroid Build Coastguard Worker        ) generates (
134*4d7e907cSAndroid Build Coastguard Worker            Status status
135*4d7e907cSAndroid Build Coastguard Worker        );
136*4d7e907cSAndroid Build Coastguard Worker
137*4d7e907cSAndroid Build Coastguard Worker    /**
138*4d7e907cSAndroid Build Coastguard Worker     * Starts using an input surface.
139*4d7e907cSAndroid Build Coastguard Worker     *
140*4d7e907cSAndroid Build Coastguard Worker     * The component must be in running state.
141*4d7e907cSAndroid Build Coastguard Worker     *
142*4d7e907cSAndroid Build Coastguard Worker     * @param inputSurface Input surface to connect to.
143*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
144*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
145*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - The component does not support an input surface.
146*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - The component is not in running state.
147*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - The component is already connected to an input surface.
148*4d7e907cSAndroid Build Coastguard Worker     *   - `REFUSED`   - The input surface is already in use.
149*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to start the component.
150*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
151*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
152*4d7e907cSAndroid Build Coastguard Worker     * @return connection `IInputSurfaceConnection` object, which can be used to
153*4d7e907cSAndroid Build Coastguard Worker     *     query and configure properties of the connection. This cannot be
154*4d7e907cSAndroid Build Coastguard Worker     *     null.
155*4d7e907cSAndroid Build Coastguard Worker     */
156*4d7e907cSAndroid Build Coastguard Worker    connectToInputSurface(
157*4d7e907cSAndroid Build Coastguard Worker            IInputSurface inputSurface
158*4d7e907cSAndroid Build Coastguard Worker        ) generates (
159*4d7e907cSAndroid Build Coastguard Worker            Status status,
160*4d7e907cSAndroid Build Coastguard Worker            IInputSurfaceConnection connection
161*4d7e907cSAndroid Build Coastguard Worker        );
162*4d7e907cSAndroid Build Coastguard Worker
163*4d7e907cSAndroid Build Coastguard Worker    /**
164*4d7e907cSAndroid Build Coastguard Worker     * Starts using an OMX input surface.
165*4d7e907cSAndroid Build Coastguard Worker     *
166*4d7e907cSAndroid Build Coastguard Worker     * The component must be in running state.
167*4d7e907cSAndroid Build Coastguard Worker     *
168*4d7e907cSAndroid Build Coastguard Worker     * This method is similar to connectToInputSurface(), but it takes an OMX
169*4d7e907cSAndroid Build Coastguard Worker     * input surface (as a pair of `IGraphicBufferProducer` and
170*4d7e907cSAndroid Build Coastguard Worker     * `IGraphicBufferSource`) instead of Codec2's own `IInputSurface`.
171*4d7e907cSAndroid Build Coastguard Worker     *
172*4d7e907cSAndroid Build Coastguard Worker     * @param producer Producer component of an OMX input surface.
173*4d7e907cSAndroid Build Coastguard Worker     * @param source Source component of an OMX input surface.
174*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
175*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
176*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - The component does not support an OMX input surface.
177*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - The component is not in running state.
178*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - The component is already connected to an input surface.
179*4d7e907cSAndroid Build Coastguard Worker     *   - `REFUSED`   - The input surface is already in use.
180*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to start the component.
181*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
182*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
183*4d7e907cSAndroid Build Coastguard Worker     * @return connection `IInputSurfaceConnection` object, which can be used to
184*4d7e907cSAndroid Build Coastguard Worker     *     query and configure properties of the connection. This cannot be
185*4d7e907cSAndroid Build Coastguard Worker     *     null.
186*4d7e907cSAndroid Build Coastguard Worker     */
187*4d7e907cSAndroid Build Coastguard Worker    connectToOmxInputSurface(
188*4d7e907cSAndroid Build Coastguard Worker            @1.0::IGraphicBufferProducer producer,
189*4d7e907cSAndroid Build Coastguard Worker            IGraphicBufferSource source
190*4d7e907cSAndroid Build Coastguard Worker        ) generates (
191*4d7e907cSAndroid Build Coastguard Worker            Status status,
192*4d7e907cSAndroid Build Coastguard Worker            IInputSurfaceConnection connection
193*4d7e907cSAndroid Build Coastguard Worker        );
194*4d7e907cSAndroid Build Coastguard Worker
195*4d7e907cSAndroid Build Coastguard Worker    /**
196*4d7e907cSAndroid Build Coastguard Worker     * Stops using an input surface.
197*4d7e907cSAndroid Build Coastguard Worker     *
198*4d7e907cSAndroid Build Coastguard Worker     * The component must be in running state.
199*4d7e907cSAndroid Build Coastguard Worker     *
200*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
201*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
202*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - The component does not support an input surface.
203*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - The component is not in running state.
204*4d7e907cSAndroid Build Coastguard Worker     *   - `NOT_FOUND` - The component is not connected to an input surface.
205*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
206*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
207*4d7e907cSAndroid Build Coastguard Worker     */
208*4d7e907cSAndroid Build Coastguard Worker    disconnectFromInputSurface() generates (Status Status);
209*4d7e907cSAndroid Build Coastguard Worker
210*4d7e907cSAndroid Build Coastguard Worker    /**
211*4d7e907cSAndroid Build Coastguard Worker     * Creates a local `C2BlockPool` backed by the given allocator and returns
212*4d7e907cSAndroid Build Coastguard Worker     * its id.
213*4d7e907cSAndroid Build Coastguard Worker     *
214*4d7e907cSAndroid Build Coastguard Worker     * The returned @p blockPoolId is the only way the client can refer to a
215*4d7e907cSAndroid Build Coastguard Worker     * `C2BlockPool` object in the component. The id can be passed to
216*4d7e907cSAndroid Build Coastguard Worker     * setOutputSurface() or used in some C2Param objects later.
217*4d7e907cSAndroid Build Coastguard Worker     *
218*4d7e907cSAndroid Build Coastguard Worker     * The created `C2BlockPool` object can be destroyed by calling
219*4d7e907cSAndroid Build Coastguard Worker     * destroyBlockPool(), reset() or release(). reset() and release() must
220*4d7e907cSAndroid Build Coastguard Worker     * destroy all `C2BlockPool` objects that have been created.
221*4d7e907cSAndroid Build Coastguard Worker     *
222*4d7e907cSAndroid Build Coastguard Worker     * @param allocatorId Id of a `C2Allocator`.
223*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
224*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
225*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to create the pool.
226*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_VALUE` - @p allocatorId is not recognized.
227*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
228*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
229*4d7e907cSAndroid Build Coastguard Worker     * @return blockPoolId Id of the created C2BlockPool object. This may be
230*4d7e907cSAndroid Build Coastguard Worker     *     used in setOutputSurface() if the allocator
231*4d7e907cSAndroid Build Coastguard Worker     * @return configurable Configuration interface for the created pool. This
232*4d7e907cSAndroid Build Coastguard Worker     *     must not be null.
233*4d7e907cSAndroid Build Coastguard Worker     */
234*4d7e907cSAndroid Build Coastguard Worker    createBlockPool(uint32_t allocatorId) generates (
235*4d7e907cSAndroid Build Coastguard Worker        Status status,
236*4d7e907cSAndroid Build Coastguard Worker        uint64_t blockPoolId,
237*4d7e907cSAndroid Build Coastguard Worker        IConfigurable configurable
238*4d7e907cSAndroid Build Coastguard Worker    );
239*4d7e907cSAndroid Build Coastguard Worker
240*4d7e907cSAndroid Build Coastguard Worker    /**
241*4d7e907cSAndroid Build Coastguard Worker     * Destroys a local block pool previously created by createBlockPool().
242*4d7e907cSAndroid Build Coastguard Worker     *
243*4d7e907cSAndroid Build Coastguard Worker     * @param blockPoolId Id of a `C2BlockPool` that was previously returned by
244*4d7e907cSAndroid Build Coastguard Worker     *      createBlockPool().
245*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
246*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
247*4d7e907cSAndroid Build Coastguard Worker     *   - `NOT_FOUND` - The supplied blockPoolId is not valid.
248*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
249*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
250*4d7e907cSAndroid Build Coastguard Worker     */
251*4d7e907cSAndroid Build Coastguard Worker    destroyBlockPool(uint64_t blockPoolId) generates (Status status);
252*4d7e907cSAndroid Build Coastguard Worker
253*4d7e907cSAndroid Build Coastguard Worker    // STATE CHANGE METHODS
254*4d7e907cSAndroid Build Coastguard Worker    // =========================================================================
255*4d7e907cSAndroid Build Coastguard Worker
256*4d7e907cSAndroid Build Coastguard Worker    /**
257*4d7e907cSAndroid Build Coastguard Worker     * Starts the component.
258*4d7e907cSAndroid Build Coastguard Worker     *
259*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in stopped state as well as tripped state.
260*4d7e907cSAndroid Build Coastguard Worker     *
261*4d7e907cSAndroid Build Coastguard Worker     * If the return value is `OK`, the component must be in the running state.
262*4d7e907cSAndroid Build Coastguard Worker     * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is
263*4d7e907cSAndroid Build Coastguard Worker     * expected as a response to this call. Otherwise, the component must be in
264*4d7e907cSAndroid Build Coastguard Worker     * the stopped state.
265*4d7e907cSAndroid Build Coastguard Worker     *
266*4d7e907cSAndroid Build Coastguard Worker     * If a component is in the tripped state and start() is called while the
267*4d7e907cSAndroid Build Coastguard Worker     * component configuration still results in a trip, start() must succeed and
268*4d7e907cSAndroid Build Coastguard Worker     * a new onTripped() callback must be used to communicate the configuration
269*4d7e907cSAndroid Build Coastguard Worker     * conflict that results in the new trip.
270*4d7e907cSAndroid Build Coastguard Worker     *
271*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
272*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component has started successfully.
273*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - Component is not in stopped or tripped state.
274*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - When called during another start call from another
275*4d7e907cSAndroid Build Coastguard Worker     *                   thread.
276*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to start the component.
277*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
278*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
279*4d7e907cSAndroid Build Coastguard Worker     */
280*4d7e907cSAndroid Build Coastguard Worker    start() generates (Status status);
281*4d7e907cSAndroid Build Coastguard Worker
282*4d7e907cSAndroid Build Coastguard Worker    /**
283*4d7e907cSAndroid Build Coastguard Worker     * Stops the component.
284*4d7e907cSAndroid Build Coastguard Worker     *
285*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in running (including tripped) state.
286*4d7e907cSAndroid Build Coastguard Worker     *
287*4d7e907cSAndroid Build Coastguard Worker     * This method must return withing 500ms.
288*4d7e907cSAndroid Build Coastguard Worker     *
289*4d7e907cSAndroid Build Coastguard Worker     * Upon this call, all pending `Work` must be abandoned.
290*4d7e907cSAndroid Build Coastguard Worker     *
291*4d7e907cSAndroid Build Coastguard Worker     * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is
292*4d7e907cSAndroid Build Coastguard Worker     * expected as a response to this call. For all other return values, the
293*4d7e907cSAndroid Build Coastguard Worker     * component must be in the stopped state.
294*4d7e907cSAndroid Build Coastguard Worker     *
295*4d7e907cSAndroid Build Coastguard Worker     * This does not alter any settings and tunings that may have resulted in a
296*4d7e907cSAndroid Build Coastguard Worker     * tripped state.
297*4d7e907cSAndroid Build Coastguard Worker     *
298*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
299*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component has stopped successfully.
300*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - Component is not in running state.
301*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - When called during another stop call from another
302*4d7e907cSAndroid Build Coastguard Worker     *                   thread.
303*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
304*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
305*4d7e907cSAndroid Build Coastguard Worker     */
306*4d7e907cSAndroid Build Coastguard Worker    stop() generates (Status status);
307*4d7e907cSAndroid Build Coastguard Worker
308*4d7e907cSAndroid Build Coastguard Worker    /**
309*4d7e907cSAndroid Build Coastguard Worker     * Resets the component.
310*4d7e907cSAndroid Build Coastguard Worker     *
311*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in all (including tripped) states other
312*4d7e907cSAndroid Build Coastguard Worker     * than released.
313*4d7e907cSAndroid Build Coastguard Worker     *
314*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported during any other blocking call.
315*4d7e907cSAndroid Build Coastguard Worker     *
316*4d7e907cSAndroid Build Coastguard Worker     * This method must return withing 500ms.
317*4d7e907cSAndroid Build Coastguard Worker     *
318*4d7e907cSAndroid Build Coastguard Worker     * When this call returns, if @p status is `OK`, all `Work` items must
319*4d7e907cSAndroid Build Coastguard Worker     * have been abandoned, and all resources (including `C2BlockPool` objects
320*4d7e907cSAndroid Build Coastguard Worker     * previously created by createBlockPool()) must have been released.
321*4d7e907cSAndroid Build Coastguard Worker     *
322*4d7e907cSAndroid Build Coastguard Worker     * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is
323*4d7e907cSAndroid Build Coastguard Worker     * expected as a response to this call. For all other return values, the
324*4d7e907cSAndroid Build Coastguard Worker     * component must be in the stopped state.
325*4d7e907cSAndroid Build Coastguard Worker     *
326*4d7e907cSAndroid Build Coastguard Worker     * This brings settings back to their default, "guaranteeing" no tripped
327*4d7e907cSAndroid Build Coastguard Worker     * state.
328*4d7e907cSAndroid Build Coastguard Worker     *
329*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
330*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component has been reset.
331*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - Component is in released state.
332*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - When called during another reset call from another
333*4d7e907cSAndroid Build Coastguard Worker     *                   thread.
334*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
335*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
336*4d7e907cSAndroid Build Coastguard Worker     */
337*4d7e907cSAndroid Build Coastguard Worker    reset() generates (Status status);
338*4d7e907cSAndroid Build Coastguard Worker
339*4d7e907cSAndroid Build Coastguard Worker    /**
340*4d7e907cSAndroid Build Coastguard Worker     * Releases the component.
341*4d7e907cSAndroid Build Coastguard Worker     *
342*4d7e907cSAndroid Build Coastguard Worker     * This method must be supported in stopped state.
343*4d7e907cSAndroid Build Coastguard Worker     *
344*4d7e907cSAndroid Build Coastguard Worker     * This method destroys the component. Upon return, if @p status is `OK` or
345*4d7e907cSAndroid Build Coastguard Worker     * `DUPLICATE`, all resources must have been released.
346*4d7e907cSAndroid Build Coastguard Worker     *
347*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
348*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component has been released.
349*4d7e907cSAndroid Build Coastguard Worker     *   - `BAD_STATE` - The component is running.
350*4d7e907cSAndroid Build Coastguard Worker     *   - `DUPLICATE` - The component is already released.
351*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
352*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
353*4d7e907cSAndroid Build Coastguard Worker     */
354*4d7e907cSAndroid Build Coastguard Worker    release() generates (Status status);
355*4d7e907cSAndroid Build Coastguard Worker
356*4d7e907cSAndroid Build Coastguard Worker    /**
357*4d7e907cSAndroid Build Coastguard Worker     * Returns the @ref IComponentInterface instance associated to this
358*4d7e907cSAndroid Build Coastguard Worker     * component.
359*4d7e907cSAndroid Build Coastguard Worker     *
360*4d7e907cSAndroid Build Coastguard Worker     * An @ref IConfigurable instance for the component can be obtained by calling
361*4d7e907cSAndroid Build Coastguard Worker     * IComponentInterface::getConfigurable() on the returned @p intf.
362*4d7e907cSAndroid Build Coastguard Worker     *
363*4d7e907cSAndroid Build Coastguard Worker     * @return intf `IComponentInterface` instance. This must not be null.
364*4d7e907cSAndroid Build Coastguard Worker     */
365*4d7e907cSAndroid Build Coastguard Worker    getInterface() generates (IComponentInterface intf);
366*4d7e907cSAndroid Build Coastguard Worker
367*4d7e907cSAndroid Build Coastguard Worker    /**
368*4d7e907cSAndroid Build Coastguard Worker     * Returns an @ref IInputSink instance that has the component as the
369*4d7e907cSAndroid Build Coastguard Worker     * underlying implementation.
370*4d7e907cSAndroid Build Coastguard Worker     *
371*4d7e907cSAndroid Build Coastguard Worker     * @return sink `IInputSink` instance.
372*4d7e907cSAndroid Build Coastguard Worker     */
373*4d7e907cSAndroid Build Coastguard Worker    asInputSink() generates (IInputSink sink);
374*4d7e907cSAndroid Build Coastguard Worker};
375*4d7e907cSAndroid Build Coastguard Worker
376