1 /*
2  * Copyright (C) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef TEL_RIL_CALLBACK_H
17 #define TEL_RIL_CALLBACK_H
18 
19 #include <v1_3/iril.h>
20 
21 #include "tel_ril_manager.h"
22 
23 namespace OHOS {
24 namespace Telephony {
25 class TelRilCallback : public HDI::Ril::V1_3::IRilCallback {
26 public:
27     explicit TelRilCallback(std::shared_ptr<TelRilManager> telRilManager);
28     ~TelRilCallback() = default;
29 
30     // Call
31     int32_t CallEmergencyNotice(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
32         const HDI::Ril::V1_1::EmergencyInfoList &emergencyInfoList) override;
33     int32_t CallStateUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
34     int32_t CallRingbackVoiceNotice(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
35         const HDI::Ril::V1_1::RingbackVoice &ringbackVoice) override;
36     int32_t CallSrvccStatusNotice(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
37         const HDI::Ril::V1_1::SrvccStatus &srvccStatus) override;
38     int32_t CallUssdNotice(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
39         const HDI::Ril::V1_1::UssdNoticeInfo &ussdNoticeInfo) override;
40     int32_t CallSsNotice(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
41         const HDI::Ril::V1_1::SsNoticeInfo &ssNoticeInfo) override;
42     int32_t CallRsrvccStatusNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
43 
44     int32_t SetEmergencyCallListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
45     int32_t GetEmergencyCallListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
46         const HDI::Ril::V1_1::EmergencyInfoList &emergencyInfoList) override;
47     int32_t GetCallListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
48         const HDI::Ril::V1_1::CallInfoList &callList) override;
49     int32_t DialResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
50     int32_t HangupResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
51     int32_t RejectResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
52     int32_t AnswerResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
53     int32_t HoldCallResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
54     int32_t UnHoldCallResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
55     int32_t SwitchCallResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
56     int32_t GetClipResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
57         const HDI::Ril::V1_1::GetClipResult &getClipResult) override;
58     int32_t SetClipResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
59     int32_t CombineConferenceResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
60     int32_t SeparateConferenceResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
61     int32_t CallSupplementResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
62     int32_t GetCallWaitingResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
63         const HDI::Ril::V1_1::CallWaitResult &callWaitResult) override;
64     int32_t SetCallWaitingResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
65     int32_t GetCallTransferInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
66         const HDI::Ril::V1_1::CallForwardQueryInfoList &cFQueryList) override;
67     int32_t SetCallTransferInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
68     int32_t GetCallRestrictionResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
69         const HDI::Ril::V1_1::CallRestrictionResult &result) override;
70     int32_t SetCallRestrictionResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
71     int32_t GetClirResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
72         const HDI::Ril::V1_1::GetClirResult &getClirResult) override;
73     int32_t SetClirResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
74     int32_t StartDtmfResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
75     int32_t SendDtmfResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
76     int32_t StopDtmfResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
77     int32_t GetCallPreferenceModeResponse(
78         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t mode) override;
79     int32_t SetCallPreferenceModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
80     int32_t SetUssdResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
81     int32_t GetUssdResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t cusd) override;
82     int32_t SetMuteResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
83     int32_t GetMuteResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t mute) override;
84     int32_t GetCallFailReasonResponse(
85         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t callFail) override;
86     int32_t SetBarringPasswordResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
87     int32_t CloseUnFinishedUssdResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
88     int32_t SetVonrSwitchResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
89 
90     // Data
91     int32_t PdpContextListUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
92         const HDI::Ril::V1_1::DataCallResultList &dataCallResultList) override;
93     int32_t DataLinkCapabilityUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
94         const HDI::Ril::V1_1::DataLinkCapability &dataLinkCapability) override;
95     int32_t ActivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
96         const HDI::Ril::V1_1::SetupDataCallResultInfo &setupDataCallResultInfo) override;
97     int32_t DeactivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
98     int32_t GetPdpContextListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
99         const HDI::Ril::V1_1::DataCallResultList &dataCallResultList) override;
100     int32_t SetInitApnInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
101     int32_t SetLinkBandwidthReportingRuleResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
102     int32_t GetLinkBandwidthInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
103         const HDI::Ril::V1_1::DataLinkBandwidthInfo &dataLinkBandwidthInfo) override;
104     int32_t SetDataPermittedResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
105     int32_t GetLinkCapabilityResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
106         const HDI::Ril::V1_1::DataLinkCapability &dataLinkCapability) override;
107     int32_t CleanAllConnectionsResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
108 
109     // Modem
110     int32_t RadioStateUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t state) override;
111     int32_t VoiceRadioTechUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
112         const HDI::Ril::V1_1::VoiceRadioTechnology &voiceRadioTechnology) override;
113     int32_t DsdsModeUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t mode) override;
114     int32_t ShutDownResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
115     int32_t SetRadioStateResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
116     int32_t GetRadioStateResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t state) override;
117     int32_t GetImeiResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &imei) override;
118     int32_t GetImeiSvResponse(
119         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &imeiSv) override;
120     int32_t GetMeidResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &meid) override;
121     int32_t GetVoiceRadioTechnologyResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
122         const HDI::Ril::V1_1::VoiceRadioTechnology &voiceRadioTechnology) override;
123     int32_t GetBasebandVersionResponse(
124         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &basebandVersion) override;
125 
126     // sim notice
127     int32_t SimStateUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
128     int32_t SimStkSessionEndNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
129     int32_t SimStkProactiveNotify(
130         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &response) override;
131     int32_t SimStkAlphaNotify(
132         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &response) override;
133     int32_t SimStkEventNotify(
134         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &response) override;
135     int32_t SimStkCallSetupNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
136     int32_t SimRefreshNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
137     int32_t SimRadioProtocolUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
138         const HDI::Ril::V1_1::RadioProtocol &radioProtocol) override;
139 
140     // sim response
141     int32_t GetSimIOResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
142         const HDI::Ril::V1_1::IccIoResultInfo &result) override;
143     int32_t GetSimStatusResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
144         const HDI::Ril::V1_1::CardStatusInfo &result) override;
145     int32_t GetSimCardStatusResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
146         const HDI::Ril::V1_3::SimCardStatusInfo &result) override;
147     int32_t GetImsiResponse(
148         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &response) override;
149     int32_t GetSimLockStatusResponse(
150         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t simLockStatus) override;
151     int32_t SetSimLockResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
152         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
153     int32_t ChangeSimPasswordResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
154         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
155     int32_t UnlockPinResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
156         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
157     int32_t UnlockPukResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
158         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
159     int32_t UnlockPin2Response(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
160         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
161     int32_t UnlockPuk2Response(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
162         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
163     int32_t SetActiveSimResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
164     int32_t SimStkSendTerminalResponseResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
165     int32_t SimStkSendEnvelopeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
166     int32_t SimStkSendCallSetupRequestResultResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
167     int32_t SimStkIsReadyResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
168     int32_t GetRadioProtocolResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
169         const HDI::Ril::V1_1::RadioProtocol &radioProtocol) override;
170     int32_t SetRadioProtocolResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
171         const HDI::Ril::V1_1::RadioProtocol &radioProtocol) override;
172     int32_t SimOpenLogicalChannelResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
173         const HDI::Ril::V1_1::OpenLogicalChannelResponse &pOpenLogicalChannelResponse) override;
174     int32_t SimCloseLogicalChannelResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
175     int32_t SimTransmitApduLogicalChannelResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
176         const HDI::Ril::V1_1::IccIoResultInfo &result) override;
177     int32_t SimTransmitApduBasicChannelResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
178         const HDI::Ril::V1_1::IccIoResultInfo &result) override;
179     int32_t SimAuthenticationResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
180         const HDI::Ril::V1_1::IccIoResultInfo &result) override;
181     int32_t UnlockSimLockResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
182         const HDI::Ril::V1_1::LockStatusResp &lockStatus) override;
183     int32_t SendSimMatchedOperatorInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
184 
185     // Network
186     int32_t NetworkCsRegStatusUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
187         const HDI::Ril::V1_1::CsRegStatusInfo &csRegStatusInfo) override;
188     int32_t NetworkPsRegStatusUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
189         const HDI::Ril::V1_1::PsRegStatusInfo &psRegStatusInfo) override;
190     int32_t SignalStrengthUpdated(
191         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const HDI::Ril::V1_1::Rssi &rssi) override;
192     int32_t NetworkTimeZoneUpdated(
193         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &timeZoneStr) override;
194     int32_t NetworkTimeUpdated(
195         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const std::string &timeStr) override;
196     int32_t NetworkPhyChnlCfgUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
197         const HDI::Ril::V1_1::ChannelConfigInfoList &channelConfigInfoList) override;
198     int32_t NetworkCurrentCellUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
199         const HDI::Ril::V1_1::CellListCurrentInfo &cellListCurrentInfo) override;
200     int32_t NetworkCurrentCellUpdated_1_1(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
201         const HDI::Ril::V1_1::CellListCurrentInfo_1_1 &cellListCurrentInfo) override;
202     int32_t NetworkCurrentCellUpdated_1_2(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
203         const HDI::Ril::V1_2::CellListCurrentInfo_1_2 &cellListCurrentInfo) override;
204     int32_t ResidentNetworkUpdated(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
205         const std::string &plmn) override;
206     int32_t GetSignalStrengthResponse(
207         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, const HDI::Ril::V1_1::Rssi &rssi) override;
208     int32_t GetCsRegStatusResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
209         const HDI::Ril::V1_1::CsRegStatusInfo &csRegStatusInfo) override;
210     int32_t GetPsRegStatusResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
211         const HDI::Ril::V1_1::PsRegStatusInfo &psRegStatusInfo) override;
212     int32_t GetOperatorInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
213         const HDI::Ril::V1_1::OperatorInfo &operatorInfo) override;
214     int32_t GetNetworkSearchInformationResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
215         const HDI::Ril::V1_1::AvailableNetworkList &availableNetworkList) override;
216     int32_t GetNetworkSelectionModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
217         const HDI::Ril::V1_1::SetNetworkModeInfo &setNetworkModeInfo) override;
218     int32_t SetNetworkSelectionModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
219     int32_t GetNeighboringCellInfoListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
220         const HDI::Ril::V1_1::CellListNearbyInfo &cellInfoList) override;
221     int32_t GetNeighboringCellInfoListResponse_1_2(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
222         const HDI::Ril::V1_2::CellListNearbyInfo_1_2 &cellInfoList) override;
223     int32_t GetCurrentCellInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
224         const HDI::Ril::V1_1::CellListCurrentInfo &cellInfoList) override;
225     int32_t GetCurrentCellInfoResponse_1_1(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
226         const HDI::Ril::V1_1::CellListCurrentInfo_1_1 &cellListCurrentInfo) override;
227     int32_t GetCurrentCellInfoResponse_1_2(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
228         const HDI::Ril::V1_2::CellListCurrentInfo_1_2 &cellListCurrentInfo) override;
229     int32_t SetPreferredNetworkResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
230     int32_t GetPreferredNetworkResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
231         const HDI::Ril::V1_1::PreferredNetworkTypeInfo &preferredNetworkTypeInfo) override;
232     int32_t GetPhysicalChannelConfigResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
233         const HDI::Ril::V1_1::ChannelConfigInfoList &channelConfigInfoList) override;
234     int32_t SetLocateUpdatesResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
235     int32_t SetNotificationFilterResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
236     int32_t SetDeviceStateResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
237     int32_t SetNrOptionModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
238     int32_t GetNrOptionModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t mode) override;
239     int32_t GetRrcConnectionStateResponse(
240         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t rrcConnectionState) override;
241     int32_t GetRrcConnectionStateUpdated(
242         const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t state) override;
243     int32_t GetNrSsbIdResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
244         const HDI::Ril::V1_2::NrCellSsbIds &nrCellSsbIds) override;
245 
246     // Sms
247     int32_t NewSmsNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
248         const HDI::Ril::V1_1::SmsMessageInfo &smsMessageInfo) override;
249     int32_t NewCdmaSmsNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
250         const HDI::Ril::V1_1::SmsMessageInfo &smsMessageInfo) override;
251     int32_t SmsStatusReportNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
252         const HDI::Ril::V1_1::SmsMessageInfo &smsMessageInfo) override;
253     int32_t NewSmsStoredOnSimNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo, int32_t recordNumber,
254         int32_t indicationType) override;
255     int32_t CBConfigNotify(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
256         const HDI::Ril::V1_1::CBConfigReportInfo &cellBroadConfigReportInfo) override;
257     int32_t SendGsmSmsResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
258         const HDI::Ril::V1_1::SendSmsResultInfo &sendSmsResultInfo) override;
259     int32_t SendCdmaSmsResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
260         const HDI::Ril::V1_1::SendSmsResultInfo &sendSmsResultInfo) override;
261     int32_t AddSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
262     int32_t DelSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
263     int32_t UpdateSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
264     int32_t AddCdmaSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
265     int32_t DelCdmaSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
266     int32_t UpdateCdmaSimMessageResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
267     int32_t SetSmscAddrResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
268     int32_t GetSmscAddrResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
269         const HDI::Ril::V1_1::ServiceCenterAddress &serviceCenterAddress) override;
270     int32_t SetCBConfigResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
271     int32_t GetCBConfigResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
272         const HDI::Ril::V1_1::CBConfigInfo &cellBroadcastInfo) override;
273     int32_t SetCdmaCBConfigResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
274     int32_t GetCdmaCBConfigResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
275         const HDI::Ril::V1_1::CdmaCBConfigInfo &cdmaCBConfigInfo) override;
276     int32_t SendSmsMoreModeResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
277         const HDI::Ril::V1_1::SendSmsResultInfo &sendSmsResultInfo) override;
278     int32_t SendSmsAckResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
279 
280     int32_t CommonErrorResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo) override;
281 
282 private:
283     template<typename FuncType, typename ModuleFuncType, typename... ParamTypes>
Response(const HDI::Ril::V1_1::RilRadioResponseInfo responseInfo,FuncType && _func,ModuleFuncType _moduleFunc,ParamTypes &&..._args)284     inline int32_t Response(const HDI::Ril::V1_1::RilRadioResponseInfo responseInfo, FuncType &&_func,
285         ModuleFuncType _moduleFunc, ParamTypes &&... _args) const
286     {
287         if (telRilManager_ == nullptr) {
288             TELEPHONY_LOGE("telRilManager_ is nullptr");
289             return TELEPHONY_ERR_LOCAL_PTR_NULL;
290         }
291         if (responseInfo.type == HDI::Ril::V1_1::RilResponseTypes::RIL_RESPONSE_REQUEST_MUST_ACK) {
292             telRilManager_->SendAckAndLock();
293         }
294         return TaskSchedule(responseInfo.slotId, _func, _moduleFunc, responseInfo, std::forward<ParamTypes>(_args)...);
295     }
296 
297     template<typename FuncType, typename ModuleFuncType, typename... ParamTypes>
Notify(const HDI::Ril::V1_1::RilRadioResponseInfo responseInfo,FuncType && _func,ModuleFuncType _moduleFunc,ParamTypes &&..._args)298     inline int32_t Notify(const HDI::Ril::V1_1::RilRadioResponseInfo responseInfo, FuncType &&_func,
299         ModuleFuncType _moduleFunc, ParamTypes &&... _args) const
300     {
301         if (telRilManager_ == nullptr) {
302             TELEPHONY_LOGE("telRilManager_ is nullptr");
303             return TELEPHONY_ERR_LOCAL_PTR_NULL;
304         }
305         if (responseInfo.type == HDI::Ril::V1_1::RilResponseTypes::RIL_RESPONSE_NOTICE_MUST_ACK) {
306             telRilManager_->SendAckAndLock();
307         }
308         return TaskSchedule(responseInfo.slotId, _func, _moduleFunc, std::forward<ParamTypes>(_args)...);
309     }
310 
GetMaxSimSlot()311     inline int32_t GetMaxSimSlot() const
312     {
313         auto maxSimCount = SIM_SLOT_COUNT;
314 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_VSIM
315         if (SIM_SLOT_COUNT == DUAL_SLOT_COUNT) {
316             maxSimCount = MAX_SLOT_COUNT;
317         }
318 #endif
319         return maxSimCount;
320     }
321 
322     template<typename FuncType, typename ModuleFuncType, typename... ParamTypes>
TaskSchedule(int32_t slotId,FuncType && _func,ModuleFuncType _moduleFunc,ParamTypes &&..._args)323     inline int32_t TaskSchedule(
324         int32_t slotId, FuncType &&_func, ModuleFuncType _moduleFunc, ParamTypes &&... _args) const
325     {
326         auto maxSimCount = GetMaxSimSlot();
327         if (slotId < SIM_SLOT_0 || slotId >= maxSimCount) {
328             TELEPHONY_LOGE("slotId:%{public}d is inValid ", slotId);
329             return TELEPHONY_ERR_ARGUMENT_INVALID;
330         }
331         if (telRilManager_ == nullptr || _func == nullptr || _moduleFunc == nullptr) {
332             TELEPHONY_LOGE("telRilManager_ or _func or _moduleFunc is nullptr");
333             return TELEPHONY_ERR_LOCAL_PTR_NULL;
334         }
335         return Execute(slotId, _func, _moduleFunc, std::forward<ParamTypes>(_args)...);
336     }
337 
338     template<typename FuncType, typename ModuleFuncType, typename... ParamTypes>
Execute(int32_t slotId,FuncType && _func,ModuleFuncType _moduleFunc,ParamTypes &&..._args)339     inline int32_t Execute(int32_t slotId, FuncType &&_func, ModuleFuncType _moduleFunc, ParamTypes &&... _args) const
340     {
341         auto modulePtr = (telRilManager_.get()->*(_func))(slotId);
342         if (modulePtr == nullptr) {
343             TELEPHONY_LOGE("modulePtr is nullptr");
344             return TELEPHONY_ERR_LOCAL_PTR_NULL;
345         }
346         return (modulePtr.get()->*(_moduleFunc))(std::forward<ParamTypes>(_args)...);
347     }
348 
349 private:
350     std::shared_ptr<TelRilManager> telRilManager_;
351 };
352 } // namespace Telephony
353 } // namespace OHOS
354 #endif // TEL_RIL_CALLBACK_H
355