AAudioEndpointManager.h revision 87c9f646a94259d7c321c3b3d5947fa1778f5ac2
1c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk/*
2c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Copyright (C) 2017 The Android Open Source Project
3c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk *
4c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * you may not use this file except in compliance with the License.
6c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * You may obtain a copy of the License at
7c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk *
8c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk *
10c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Unless required by applicable law or agreed to in writing, software
11c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * See the License for the specific language governing permissions and
14c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * limitations under the License.
15c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */
16c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
17c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#ifndef AAUDIO_AAUDIO_ENDPOINT_MANAGER_H
18c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define AAUDIO_AAUDIO_ENDPOINT_MANAGER_H
19c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
20c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <map>
21c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <mutex>
22c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <utils/Singleton.h>
23c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
24c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioServiceMessage.h"
25c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "AAudioServiceEndpoint.h"
2687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "AAudioServiceEndpointCapture.h"
2787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "AAudioServiceEndpointPlay.h"
28c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
29c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burknamespace aaudio {
30c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
31c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkclass AAudioEndpointManager : public android::Singleton<AAudioEndpointManager>{
32c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkpublic:
33c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    AAudioEndpointManager();
34c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ~AAudioEndpointManager() = default;
35c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
36c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    /**
37c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     * Find a service endpoint for the given deviceId and direction.
38c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     * If an endpoint does not already exist then it will try to create one.
39c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     *
40c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     * @param deviceId
41c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     * @param direction
42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     * @return endpoint or nullptr
43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk     */
4471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    AAudioServiceEndpoint *openEndpoint(android::AAudioService &audioService,
45c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk                                        int32_t deviceId,
46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk                                        aaudio_direction_t direction);
47c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
4871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk    void closeEndpoint(AAudioServiceEndpoint *serviceEndpoint);
49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
50c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkprivate:
51c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    std::mutex    mLock;
53c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
5487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk    std::map<int32_t, AAudioServiceEndpointCapture *> mInputs;
5587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk    std::map<int32_t, AAudioServiceEndpointPlay *> mOutputs;
56c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
57c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk};
58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk} /* namespace aaudio */
60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk
61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#endif //AAUDIO_AAUDIO_ENDPOINT_MANAGER_H
62