1e1c44949Sopenharmony_ci/*
2e1c44949Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License.
5e1c44949Sopenharmony_ci * You may obtain a copy of the License at
6e1c44949Sopenharmony_ci *
7e1c44949Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e1c44949Sopenharmony_ci *
9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and
13e1c44949Sopenharmony_ci * limitations under the License.
14e1c44949Sopenharmony_ci */
15e1c44949Sopenharmony_ci
16e1c44949Sopenharmony_ci#ifndef BLUETOOTH_CALL_CLIENT_H
17e1c44949Sopenharmony_ci#define BLUETOOTH_CALL_CLIENT_H
18e1c44949Sopenharmony_ci
19e1c44949Sopenharmony_ci#include "singleton.h"
20e1c44949Sopenharmony_ci#include "pac_map.h"
21e1c44949Sopenharmony_ci
22e1c44949Sopenharmony_ci#include "call_manager_callback.h"
23e1c44949Sopenharmony_ci
24e1c44949Sopenharmony_cinamespace OHOS {
25e1c44949Sopenharmony_cinamespace Telephony {
26e1c44949Sopenharmony_ciclass BluetoothCallClient : public DelayedRefSingleton<BluetoothCallClient> {
27e1c44949Sopenharmony_ci    DECLARE_DELAYED_REF_SINGLETON(BluetoothCallClient)
28e1c44949Sopenharmony_cipublic:
29e1c44949Sopenharmony_ci    void Init();
30e1c44949Sopenharmony_ci    void UnInit();
31e1c44949Sopenharmony_ci
32e1c44949Sopenharmony_ci    /**
33e1c44949Sopenharmony_ci     * @brief Register callback
34e1c44949Sopenharmony_ci     *
35e1c44949Sopenharmony_ci     * @param callback[in], callback function pointer
36e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
37e1c44949Sopenharmony_ci     */
38e1c44949Sopenharmony_ci    int32_t RegisterCallBack(std::unique_ptr<CallManagerCallback> callback);
39e1c44949Sopenharmony_ci
40e1c44949Sopenharmony_ci    /**
41e1c44949Sopenharmony_ci     * @brief unregister callback
42e1c44949Sopenharmony_ci     *
43e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
44e1c44949Sopenharmony_ci     */
45e1c44949Sopenharmony_ci    int32_t UnRegisterCallBack();
46e1c44949Sopenharmony_ci
47e1c44949Sopenharmony_ci    /**
48e1c44949Sopenharmony_ci     * @brief Make a phone call
49e1c44949Sopenharmony_ci     *
50e1c44949Sopenharmony_ci     * @param number[in], dial param.
51e1c44949Sopenharmony_ci     * @param extras[in], extras date.
52e1c44949Sopenharmony_ci     * @return Returns callId when the value is greater than zero, others on failure.
53e1c44949Sopenharmony_ci     */
54e1c44949Sopenharmony_ci    int32_t DialCall(std::u16string number, AppExecFwk::PacMap &extras);
55e1c44949Sopenharmony_ci
56e1c44949Sopenharmony_ci    /**
57e1c44949Sopenharmony_ci     * @brief Answer a phone call
58e1c44949Sopenharmony_ci     *
59e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
60e1c44949Sopenharmony_ci     */
61e1c44949Sopenharmony_ci    int32_t AnswerCall();
62e1c44949Sopenharmony_ci
63e1c44949Sopenharmony_ci    /**
64e1c44949Sopenharmony_ci     * @brief Reject a phone call
65e1c44949Sopenharmony_ci     *
66e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
67e1c44949Sopenharmony_ci     */
68e1c44949Sopenharmony_ci    int32_t RejectCall();
69e1c44949Sopenharmony_ci
70e1c44949Sopenharmony_ci    /**
71e1c44949Sopenharmony_ci     * @brief Hang up the phone
72e1c44949Sopenharmony_ci     *
73e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
74e1c44949Sopenharmony_ci     */
75e1c44949Sopenharmony_ci    int32_t HangUpCall();
76e1c44949Sopenharmony_ci
77e1c44949Sopenharmony_ci    /**
78e1c44949Sopenharmony_ci     * @brief Obtain the call status of the device
79e1c44949Sopenharmony_ci     *
80e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
81e1c44949Sopenharmony_ci     */
82e1c44949Sopenharmony_ci    int32_t GetCallState();
83e1c44949Sopenharmony_ci
84e1c44949Sopenharmony_ci    /**
85e1c44949Sopenharmony_ci     * @brief Park a phone call
86e1c44949Sopenharmony_ci     *
87e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
88e1c44949Sopenharmony_ci     */
89e1c44949Sopenharmony_ci    int32_t HoldCall();
90e1c44949Sopenharmony_ci
91e1c44949Sopenharmony_ci    /**
92e1c44949Sopenharmony_ci     * @brief Activate a phone call
93e1c44949Sopenharmony_ci     *
94e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
95e1c44949Sopenharmony_ci     */
96e1c44949Sopenharmony_ci    int32_t UnHoldCall();
97e1c44949Sopenharmony_ci
98e1c44949Sopenharmony_ci    /**
99e1c44949Sopenharmony_ci     * @brief Switch the phone
100e1c44949Sopenharmony_ci     *
101e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
102e1c44949Sopenharmony_ci     */
103e1c44949Sopenharmony_ci    int32_t SwitchCall();
104e1c44949Sopenharmony_ci
105e1c44949Sopenharmony_ci    /**
106e1c44949Sopenharmony_ci     * @brief Merge calls to form a conference
107e1c44949Sopenharmony_ci     *
108e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
109e1c44949Sopenharmony_ci     */
110e1c44949Sopenharmony_ci    int32_t CombineConference();
111e1c44949Sopenharmony_ci
112e1c44949Sopenharmony_ci    /**
113e1c44949Sopenharmony_ci     * @brief Separates a specified call from a conference call
114e1c44949Sopenharmony_ci     *
115e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
116e1c44949Sopenharmony_ci     */
117e1c44949Sopenharmony_ci    int32_t SeparateConference();
118e1c44949Sopenharmony_ci
119e1c44949Sopenharmony_ci    /**
120e1c44949Sopenharmony_ci     * @brief Kick out a specified call from a conference call
121e1c44949Sopenharmony_ci     *
122e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
123e1c44949Sopenharmony_ci     */
124e1c44949Sopenharmony_ci    int32_t KickOutFromConference();
125e1c44949Sopenharmony_ci
126e1c44949Sopenharmony_ci    /**
127e1c44949Sopenharmony_ci     * @brief Enable and send DTMF
128e1c44949Sopenharmony_ci     *
129e1c44949Sopenharmony_ci     * @param str[in], Characters sent
130e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
131e1c44949Sopenharmony_ci     */
132e1c44949Sopenharmony_ci    int32_t StartDtmf(char str);
133e1c44949Sopenharmony_ci
134e1c44949Sopenharmony_ci    /**
135e1c44949Sopenharmony_ci     * @brief Stop the DTMF
136e1c44949Sopenharmony_ci     *
137e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
138e1c44949Sopenharmony_ci     */
139e1c44949Sopenharmony_ci    int32_t StopDtmf();
140e1c44949Sopenharmony_ci
141e1c44949Sopenharmony_ci    /**
142e1c44949Sopenharmony_ci     * @brief Whether the ringing
143e1c44949Sopenharmony_ci     *
144e1c44949Sopenharmony_ci     * @param enabled[out], true on ringing, false on there is no ringing
145e1c44949Sopenharmony_ci     * @return Returns interface processing results.
146e1c44949Sopenharmony_ci     */
147e1c44949Sopenharmony_ci    int32_t IsRinging(bool &enabled);
148e1c44949Sopenharmony_ci
149e1c44949Sopenharmony_ci    /**
150e1c44949Sopenharmony_ci     * @brief Is there Call
151e1c44949Sopenharmony_ci     *
152e1c44949Sopenharmony_ci     * @return Returns true on has call, others on there is no call.
153e1c44949Sopenharmony_ci     */
154e1c44949Sopenharmony_ci    bool HasCall();
155e1c44949Sopenharmony_ci
156e1c44949Sopenharmony_ci    /**
157e1c44949Sopenharmony_ci     * @brief Checks whether a new call is allowed.
158e1c44949Sopenharmony_ci     *
159e1c44949Sopenharmony_ci     * @param enabled[out], whether allow new calls
160e1c44949Sopenharmony_ci     * @return Returns interface processing results.
161e1c44949Sopenharmony_ci     */
162e1c44949Sopenharmony_ci    int32_t IsNewCallAllowed(bool &enabled);
163e1c44949Sopenharmony_ci
164e1c44949Sopenharmony_ci    /**
165e1c44949Sopenharmony_ci     * @brief Is there an emergency call
166e1c44949Sopenharmony_ci     *
167e1c44949Sopenharmony_ci     * @param enabled[out], true on emergency call, false on no emergency call
168e1c44949Sopenharmony_ci     * @return Returns interface processing results.
169e1c44949Sopenharmony_ci     */
170e1c44949Sopenharmony_ci    int32_t IsInEmergencyCall(bool &enabled);
171e1c44949Sopenharmony_ci
172e1c44949Sopenharmony_ci    /**
173e1c44949Sopenharmony_ci     * @brief Mute the Microphone
174e1c44949Sopenharmony_ci     *
175e1c44949Sopenharmony_ci     * @param isMute[in], mute state
176e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
177e1c44949Sopenharmony_ci     */
178e1c44949Sopenharmony_ci    int32_t SetMuted(bool isMute);
179e1c44949Sopenharmony_ci
180e1c44949Sopenharmony_ci    /**
181e1c44949Sopenharmony_ci     * @brief Call mute
182e1c44949Sopenharmony_ci     *
183e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
184e1c44949Sopenharmony_ci     */
185e1c44949Sopenharmony_ci    int32_t MuteRinger();
186e1c44949Sopenharmony_ci
187e1c44949Sopenharmony_ci    /**
188e1c44949Sopenharmony_ci     * @brief Setting the Audio Channel
189e1c44949Sopenharmony_ci     *
190e1c44949Sopenharmony_ci     * @param deviceType[in], audioDeviceType
191e1c44949Sopenharmony_ci     * @param bluetoothAddress[in], audio device address
192e1c44949Sopenharmony_ci     * @return Returns 0 on success, others on failure.
193e1c44949Sopenharmony_ci     */
194e1c44949Sopenharmony_ci    int32_t SetAudioDevice(AudioDeviceType deviceType, const std::string &bluetoothAddress);
195e1c44949Sopenharmony_ci
196e1c44949Sopenharmony_ci    /**
197e1c44949Sopenharmony_ci     * @brief Get current call list
198e1c44949Sopenharmony_ci     *
199e1c44949Sopenharmony_ci     * @param slotId[in], The slot id
200e1c44949Sopenharmony_ci     * @return Returns call info list.
201e1c44949Sopenharmony_ci     */
202e1c44949Sopenharmony_ci    std::vector<CallAttributeInfo> GetCurrentCallList(int32_t slotId);
203e1c44949Sopenharmony_ciprivate:
204e1c44949Sopenharmony_ci    std::mutex mutex_;
205e1c44949Sopenharmony_ci};
206e1c44949Sopenharmony_ci} // namespace Telephony
207e1c44949Sopenharmony_ci} // namespace OHOS
208e1c44949Sopenharmony_ci
209e1c44949Sopenharmony_ci#endif