blob: 9088f01f3d1bdac7704f65b4168e30f489d485eb [file] [log] [blame]
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -07001/*
2 * Copyright (C) 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <libradiocompat/RadioVoice.h>
18
19#include "commonStructs.h"
20#include "debug.h"
21#include "structs.h"
22
23#include "collections.h"
24
25#define RADIO_MODULE "Voice"
26
27namespace android::hardware::radio::compat {
28
29using ::ndk::ScopedAStatus;
30namespace aidl = ::aidl::android::hardware::radio::voice;
31constexpr auto ok = &ScopedAStatus::ok;
32
Tomasz Wasilczyk60638572021-12-13 17:13:48 -080033std::shared_ptr<aidl::IRadioVoiceResponse> RadioVoice::respond() {
Tomasz Wasilczyk963a56f2021-12-16 12:19:09 -080034 return mCallbackManager->response().voiceCb();
Tomasz Wasilczyk60638572021-12-13 17:13:48 -080035}
36
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -070037ScopedAStatus RadioVoice::acceptCall(int32_t serial) {
38 LOG_CALL << serial;
39 mHal1_5->acceptCall(serial);
40 return ok();
41}
42
Sarah Chinf746a912022-01-28 15:54:36 -080043ScopedAStatus RadioVoice::cancelPendingUssd(int32_t serial) {
44 LOG_CALL << serial;
45 mHal1_5->cancelPendingUssd(serial);
46 return ok();
47}
48
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -070049ScopedAStatus RadioVoice::conference(int32_t serial) {
50 LOG_CALL << serial;
51 mHal1_5->conference(serial);
52 return ok();
53}
54
55ScopedAStatus RadioVoice::dial(int32_t serial, const aidl::Dial& dialInfo) {
56 LOG_CALL << serial;
57 mHal1_5->dial(serial, toHidl(dialInfo));
58 return ok();
59}
60
61ScopedAStatus RadioVoice::emergencyDial( //
Sarah Chinc9d3b7b2021-12-23 16:41:58 -080062 int32_t serial, const aidl::Dial& info, int32_t categories,
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -070063 const std::vector<std::string>& urns, aidl::EmergencyCallRouting routing,
Tomasz Wasilczyk571542b2021-12-15 16:15:45 -080064 bool knownUserIntentEmerg, bool isTesting) {
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -070065 LOG_CALL << serial;
Tomasz Wasilczyk571542b2021-12-15 16:15:45 -080066 if (mHal1_6) {
67 mHal1_6->emergencyDial_1_6( //
68 serial, toHidl(info), toHidlBitfield<V1_4::EmergencyServiceCategory>(categories),
69 toHidl(urns), V1_4::EmergencyCallRouting(routing), knownUserIntentEmerg, isTesting);
70 } else {
71 mHal1_5->emergencyDial( //
72 serial, toHidl(info), toHidlBitfield<V1_4::EmergencyServiceCategory>(categories),
73 toHidl(urns), V1_4::EmergencyCallRouting(routing), knownUserIntentEmerg, isTesting);
74 }
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -070075 return ok();
76}
77
78ScopedAStatus RadioVoice::exitEmergencyCallbackMode(int32_t serial) {
79 LOG_CALL << serial;
80 mHal1_5->exitEmergencyCallbackMode(serial);
81 return ok();
82}
83
84ScopedAStatus RadioVoice::explicitCallTransfer(int32_t serial) {
85 LOG_CALL << serial;
86 mHal1_5->explicitCallTransfer(serial);
87 return ok();
88}
89
90ScopedAStatus RadioVoice::getCallForwardStatus(int32_t serial,
91 const aidl::CallForwardInfo& callInfo) {
92 LOG_CALL << serial;
93 mHal1_5->getCallForwardStatus(serial, toHidl(callInfo));
94 return ok();
95}
96
97ScopedAStatus RadioVoice::getCallWaiting(int32_t serial, int32_t serviceClass) {
98 LOG_CALL << serial;
99 mHal1_5->getCallWaiting(serial, serviceClass);
100 return ok();
101}
102
103ScopedAStatus RadioVoice::getClip(int32_t serial) {
104 LOG_CALL << serial;
105 mHal1_5->getClip(serial);
106 return ok();
107}
108
109ScopedAStatus RadioVoice::getClir(int32_t serial) {
110 LOG_CALL << serial;
111 mHal1_5->getClir(serial);
112 return ok();
113}
114
115ScopedAStatus RadioVoice::getCurrentCalls(int32_t serial) {
116 LOG_CALL << serial;
Tomasz Wasilczyk571542b2021-12-15 16:15:45 -0800117 if (mHal1_6) {
118 mHal1_6->getCurrentCalls_1_6(serial);
119 } else {
120 mHal1_5->getCurrentCalls(serial);
121 }
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -0700122 return ok();
123}
124
125ScopedAStatus RadioVoice::getLastCallFailCause(int32_t serial) {
126 LOG_CALL << serial;
127 mHal1_5->getLastCallFailCause(serial);
128 return ok();
129}
130
131ScopedAStatus RadioVoice::getMute(int32_t serial) {
132 LOG_CALL << serial;
133 mHal1_5->getMute(serial);
134 return ok();
135}
136
137ScopedAStatus RadioVoice::getPreferredVoicePrivacy(int32_t serial) {
138 LOG_CALL << serial;
139 mHal1_5->getPreferredVoicePrivacy(serial);
140 return ok();
141}
142
143ScopedAStatus RadioVoice::getTtyMode(int32_t serial) {
144 LOG_CALL << serial;
145 mHal1_5->getTTYMode(serial);
146 return ok();
147}
148
149ScopedAStatus RadioVoice::handleStkCallSetupRequestFromSim(int32_t serial, bool accept) {
150 LOG_CALL << serial;
151 mHal1_5->handleStkCallSetupRequestFromSim(serial, accept);
152 return ok();
153}
154
155ScopedAStatus RadioVoice::hangup(int32_t serial, int32_t gsmIndex) {
156 LOG_CALL << serial;
157 mHal1_5->hangup(serial, gsmIndex);
158 return ok();
159}
160
161ScopedAStatus RadioVoice::hangupForegroundResumeBackground(int32_t serial) {
162 LOG_CALL << serial;
163 mHal1_5->hangupForegroundResumeBackground(serial);
164 return ok();
165}
166
167ScopedAStatus RadioVoice::hangupWaitingOrBackground(int32_t serial) {
168 LOG_CALL << serial;
169 mHal1_5->hangupWaitingOrBackground(serial);
170 return ok();
171}
172
173ScopedAStatus RadioVoice::isVoNrEnabled(int32_t serial) {
174 LOG_CALL << serial;
Tomasz Wasilczyk60638572021-12-13 17:13:48 -0800175 respond()->isVoNrEnabledResponse(notSupported(serial), false);
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -0700176 return ok();
177}
178
179ScopedAStatus RadioVoice::rejectCall(int32_t serial) {
180 LOG_CALL << serial;
181 mHal1_5->rejectCall(serial);
182 return ok();
183}
184
185ScopedAStatus RadioVoice::responseAcknowledgement() {
186 LOG_CALL;
187 mHal1_5->responseAcknowledgement();
188 return ok();
189}
190
191ScopedAStatus RadioVoice::sendBurstDtmf(int32_t serial, const std::string& dtmf, int32_t on,
192 int32_t off) {
193 LOG_CALL << serial;
194 mHal1_5->sendBurstDtmf(serial, dtmf, on, off);
195 return ok();
196}
197
198ScopedAStatus RadioVoice::sendCdmaFeatureCode(int32_t serial, const std::string& featureCode) {
199 LOG_CALL << serial;
200 mHal1_5->sendCDMAFeatureCode(serial, featureCode);
201 return ok();
202}
203
204ScopedAStatus RadioVoice::sendDtmf(int32_t serial, const std::string& s) {
205 LOG_CALL << serial;
206 mHal1_5->sendDtmf(serial, s);
207 return ok();
208}
209
Sarah Chinf746a912022-01-28 15:54:36 -0800210ScopedAStatus RadioVoice::sendUssd(int32_t serial, const std::string& ussd) {
211 LOG_CALL << serial << ' ' << ussd;
212 mHal1_5->sendUssd(serial, ussd);
213 return ok();
214}
215
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -0700216ScopedAStatus RadioVoice::separateConnection(int32_t serial, int32_t gsmIndex) {
217 LOG_CALL << serial;
218 mHal1_5->separateConnection(serial, gsmIndex);
219 return ok();
220}
221
222ScopedAStatus RadioVoice::setCallForward(int32_t serial, const aidl::CallForwardInfo& callInfo) {
223 LOG_CALL << serial;
224 mHal1_5->setCallForward(serial, toHidl(callInfo));
225 return ok();
226}
227
228ScopedAStatus RadioVoice::setCallWaiting(int32_t serial, bool enable, int32_t serviceClass) {
229 LOG_CALL << serial;
230 mHal1_5->setCallWaiting(serial, enable, serviceClass);
231 return ok();
232}
233
234ScopedAStatus RadioVoice::setClir(int32_t serial, int32_t status) {
235 LOG_CALL << serial;
236 mHal1_5->setClir(serial, status);
237 return ok();
238}
239
240ScopedAStatus RadioVoice::setMute(int32_t serial, bool enable) {
241 LOG_CALL << serial;
242 mHal1_5->setMute(serial, enable);
243 return ok();
244}
245
246ScopedAStatus RadioVoice::setPreferredVoicePrivacy(int32_t serial, bool enable) {
247 LOG_CALL << serial;
248 mHal1_5->setPreferredVoicePrivacy(serial, enable);
249 return ok();
250}
251
252ScopedAStatus RadioVoice::setResponseFunctions(
Tomasz Wasilczyk963a56f2021-12-16 12:19:09 -0800253 const std::shared_ptr<aidl::IRadioVoiceResponse>& response,
254 const std::shared_ptr<aidl::IRadioVoiceIndication>& indication) {
255 LOG_CALL << response << ' ' << indication;
256 mCallbackManager->setResponseFunctions(response, indication);
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -0700257 return ok();
258}
259
260ScopedAStatus RadioVoice::setTtyMode(int32_t serial, aidl::TtyMode mode) {
261 LOG_CALL << serial;
262 mHal1_5->setTTYMode(serial, V1_0::TtyMode(mode));
263 return ok();
264}
265
266ndk::ScopedAStatus RadioVoice::setVoNrEnabled(int32_t serial, [[maybe_unused]] bool enable) {
267 LOG_CALL << serial;
Tomasz Wasilczyk60638572021-12-13 17:13:48 -0800268 // Note: a workaround for older HALs could also be setting persist.radio.is_vonr_enabled_
269 respond()->setVoNrEnabledResponse(notSupported(serial));
Tomasz Wasilczyk6e084182021-11-05 10:53:55 -0700270 return ok();
271}
272
273ScopedAStatus RadioVoice::startDtmf(int32_t serial, const std::string& s) {
274 LOG_CALL << serial;
275 mHal1_5->startDtmf(serial, s);
276 return ok();
277}
278
279ScopedAStatus RadioVoice::stopDtmf(int32_t serial) {
280 LOG_CALL << serial;
281 mHal1_5->stopDtmf(serial);
282 return ok();
283}
284
285ScopedAStatus RadioVoice::switchWaitingOrHoldingAndActive(int32_t serial) {
286 LOG_CALL << serial;
287 mHal1_5->switchWaitingOrHoldingAndActive(serial);
288 return ok();
289}
290
291} // namespace android::hardware::radio::compat