1d5a2a63bSopenharmony_ci/*
2d5a2a63bSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3d5a2a63bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d5a2a63bSopenharmony_ci * you may not use this file except in compliance with the License.
5d5a2a63bSopenharmony_ci * You may obtain a copy of the License at
6d5a2a63bSopenharmony_ci *
7d5a2a63bSopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
8d5a2a63bSopenharmony_ci *
9d5a2a63bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d5a2a63bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d5a2a63bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d5a2a63bSopenharmony_ci * See the License for the specific language governing permissions and
13d5a2a63bSopenharmony_ci * limitations under the License.
14d5a2a63bSopenharmony_ci */
15d5a2a63bSopenharmony_ci#include <ohos_errno.h>
16d5a2a63bSopenharmony_ci#include <ohos_init.h>
17d5a2a63bSopenharmony_ci#include "audio_capturer_server.h"
18d5a2a63bSopenharmony_ci#include "feature.h"
19d5a2a63bSopenharmony_ci#include "iproxy_server.h"
20d5a2a63bSopenharmony_ci#include "media_log.h"
21d5a2a63bSopenharmony_ci#include "samgr_lite.h"
22d5a2a63bSopenharmony_ci#include "service.h"
23d5a2a63bSopenharmony_ci
24d5a2a63bSopenharmony_cinamespace OHOS {
25d5a2a63bSopenharmony_cinamespace Audio {
26d5a2a63bSopenharmony_cistruct DefaultFeatureApi {
27d5a2a63bSopenharmony_ci    INHERIT_SERVER_IPROXY;
28d5a2a63bSopenharmony_ci};
29d5a2a63bSopenharmony_ci
30d5a2a63bSopenharmony_cistruct AudioCapturerService {
31d5a2a63bSopenharmony_ci    INHERIT_SERVICE;
32d5a2a63bSopenharmony_ci    INHERIT_IUNKNOWNENTRY(DefaultFeatureApi);
33d5a2a63bSopenharmony_ci    Identity identity;
34d5a2a63bSopenharmony_ci};
35d5a2a63bSopenharmony_ci
36d5a2a63bSopenharmony_cistatic const char *GetName(Service *service)
37d5a2a63bSopenharmony_ci{
38d5a2a63bSopenharmony_ci    (void)service;
39d5a2a63bSopenharmony_ci    return AUDIO_CAPTURER_SERVICE_NAME;
40d5a2a63bSopenharmony_ci}
41d5a2a63bSopenharmony_ci
42d5a2a63bSopenharmony_cistatic BOOL Initialize(Service *service, Identity identity)
43d5a2a63bSopenharmony_ci{
44d5a2a63bSopenharmony_ci    if (service == nullptr) {
45d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("Initialize: service is nullptr");
46d5a2a63bSopenharmony_ci        return FALSE;
47d5a2a63bSopenharmony_ci    }
48d5a2a63bSopenharmony_ci
49d5a2a63bSopenharmony_ci    AudioCapturerService *capturerSvc = reinterpret_cast<AudioCapturerService*>(service);
50d5a2a63bSopenharmony_ci    capturerSvc->identity = identity;
51d5a2a63bSopenharmony_ci    MEDIA_DEBUG_LOG("Initialize(%s)! Identity<%d, %d>",
52d5a2a63bSopenharmony_ci                    AUDIO_CAPTURER_SERVICE_NAME, identity.serviceId,
53d5a2a63bSopenharmony_ci                    identity.featureId);
54d5a2a63bSopenharmony_ci    return TRUE;
55d5a2a63bSopenharmony_ci}
56d5a2a63bSopenharmony_ci
57d5a2a63bSopenharmony_cistatic BOOL MessageHandle(Service *service, Request *msg)
58d5a2a63bSopenharmony_ci{
59d5a2a63bSopenharmony_ci    if (service == nullptr || msg == nullptr) {
60d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("MessageHandle: service or msg is nullptr");
61d5a2a63bSopenharmony_ci        return FALSE;
62d5a2a63bSopenharmony_ci    }
63d5a2a63bSopenharmony_ci
64d5a2a63bSopenharmony_ci    MEDIA_DEBUG_LOG("MessageHandle(%s)! Request<%d, %d>", service->GetName(service),
65d5a2a63bSopenharmony_ci                    msg->msgId, msg->msgValue);
66d5a2a63bSopenharmony_ci    return FALSE;
67d5a2a63bSopenharmony_ci}
68d5a2a63bSopenharmony_ci
69d5a2a63bSopenharmony_cistatic TaskConfig GetTaskConfig(Service *service)
70d5a2a63bSopenharmony_ci{
71d5a2a63bSopenharmony_ci    (void)service;
72d5a2a63bSopenharmony_ci    TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, 0x800, 20, SHARED_TASK};
73d5a2a63bSopenharmony_ci    return config;
74d5a2a63bSopenharmony_ci}
75d5a2a63bSopenharmony_ci
76d5a2a63bSopenharmony_cistatic int32 Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply)
77d5a2a63bSopenharmony_ci{
78d5a2a63bSopenharmony_ci    if (origin == nullptr) {
79d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("Invoke: origin is nullptr");
80d5a2a63bSopenharmony_ci        return FALSE;
81d5a2a63bSopenharmony_ci    }
82d5a2a63bSopenharmony_ci
83d5a2a63bSopenharmony_ci    pid_t pid = GetCallingPid();
84d5a2a63bSopenharmony_ci    AudioCapturerServer *mng = AudioCapturerServer::GetInstance();
85d5a2a63bSopenharmony_ci    if (mng == nullptr) {
86d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("Invoke failed, mng is nullptr");
87d5a2a63bSopenharmony_ci        return FALSE;
88d5a2a63bSopenharmony_ci    }
89d5a2a63bSopenharmony_ci
90d5a2a63bSopenharmony_ci    mng->Dispatch(funcId, pid, req, reply);
91d5a2a63bSopenharmony_ci    return EC_SUCCESS;
92d5a2a63bSopenharmony_ci}
93d5a2a63bSopenharmony_ci
94d5a2a63bSopenharmony_civoid AudioCapturerServiceReg()
95d5a2a63bSopenharmony_ci{
96d5a2a63bSopenharmony_ci    static AudioCapturerService audioCapturerSvc = {
97d5a2a63bSopenharmony_ci        .GetName = GetName,
98d5a2a63bSopenharmony_ci        .Initialize = Initialize,
99d5a2a63bSopenharmony_ci        .MessageHandle = MessageHandle,
100d5a2a63bSopenharmony_ci        .GetTaskConfig = GetTaskConfig,
101d5a2a63bSopenharmony_ci        SERVER_IPROXY_IMPL_BEGIN,
102d5a2a63bSopenharmony_ci        .Invoke = Invoke,
103d5a2a63bSopenharmony_ci        IPROXY_END,
104d5a2a63bSopenharmony_ci    };
105d5a2a63bSopenharmony_ci    MEDIA_INFO_LOG("Input AudioCapturerServiceReg");
106d5a2a63bSopenharmony_ci    bool ret = SAMGR_GetInstance()->RegisterService(reinterpret_cast<Service*>(&audioCapturerSvc));
107d5a2a63bSopenharmony_ci    if (!ret) {
108d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("AudioCapturer register service failed.");
109d5a2a63bSopenharmony_ci        return;
110d5a2a63bSopenharmony_ci    }
111d5a2a63bSopenharmony_ci    ret = SAMGR_GetInstance()->RegisterDefaultFeatureApi(AUDIO_CAPTURER_SERVICE_NAME, GET_IUNKNOWN(audioCapturerSvc));
112d5a2a63bSopenharmony_ci    if (!ret) {
113d5a2a63bSopenharmony_ci        MEDIA_ERR_LOG("AudioCapturer register feature failed.");
114d5a2a63bSopenharmony_ci        return;
115d5a2a63bSopenharmony_ci    }
116d5a2a63bSopenharmony_ci}
117d5a2a63bSopenharmony_ci}  // namespace Audio
118d5a2a63bSopenharmony_ci}  // namespace OHOS
119