1 /*
2 * Copyright (C) 2021 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 #include "tel_ril_data.h"
17
18 #include "core_service_hisysevent.h"
19 #include "radio_event.h"
20 #include "tel_ril_modem_parcel.h"
21
22 namespace OHOS {
23 namespace Telephony {
TelRilData(int32_t slotId,sptr<HDI::Ril::V1_3::IRil> rilInterface,std::shared_ptr<ObserverHandler> observerHandler,std::shared_ptr<TelRilHandler> handler)24 TelRilData::TelRilData(int32_t slotId, sptr<HDI::Ril::V1_3::IRil> rilInterface,
25 std::shared_ptr<ObserverHandler> observerHandler, std::shared_ptr<TelRilHandler> handler)
26 : TelRilBase(slotId, rilInterface, observerHandler, handler)
27 {}
28
ChangeDPToHalDataProfile(DataProfile dataProfile)29 HDI::Ril::V1_1::DataProfileDataInfo TelRilData::ChangeDPToHalDataProfile(DataProfile dataProfile)
30 {
31 HDI::Ril::V1_1::DataProfileDataInfo dataProfileInfo;
32 dataProfileInfo.profileId = dataProfile.profileId;
33 dataProfileInfo.password = dataProfile.password;
34 dataProfileInfo.authenticationType = dataProfile.verType;
35 dataProfileInfo.userName = dataProfile.userName;
36 dataProfileInfo.apn = dataProfile.apn;
37 dataProfileInfo.protocol = dataProfile.protocol;
38 dataProfileInfo.roamingProtocol = dataProfile.roamingProtocol;
39 return dataProfileInfo;
40 }
41
DeactivatePdpContext(int32_t cid,int32_t reason,const AppExecFwk::InnerEvent::Pointer & response)42 int32_t TelRilData::DeactivatePdpContext(int32_t cid, int32_t reason, const AppExecFwk::InnerEvent::Pointer &response)
43 {
44 HDI::Ril::V1_1::UniInfo uniInfo;
45 uniInfo.gsmIndex = cid;
46 uniInfo.arg1 = reason;
47 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::DeactivatePdpContext, uniInfo);
48 }
49
DeactivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo)50 int32_t TelRilData::DeactivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo)
51 {
52 return Response(TELEPHONY_LOG_FUNC_NAME, responseInfo);
53 }
54
ActivatePdpContext(int32_t radioTechnology,DataProfile dataProfile,bool isRoaming,bool allowRoaming,const AppExecFwk::InnerEvent::Pointer & response)55 int32_t TelRilData::ActivatePdpContext(int32_t radioTechnology, DataProfile dataProfile, bool isRoaming,
56 bool allowRoaming, const AppExecFwk::InnerEvent::Pointer &response)
57 {
58 HDI::Ril::V1_1::DataCallInfo dataCallInfo;
59 dataCallInfo.radioTechnology = radioTechnology;
60 dataCallInfo.dataProfileInfo = ChangeDPToHalDataProfile(dataProfile);
61 dataCallInfo.roamingAllowed = allowRoaming;
62 dataCallInfo.isRoaming = isRoaming;
63 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::ActivatePdpContext, dataCallInfo);
64 }
65
ActivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const HDI::Ril::V1_1::SetupDataCallResultInfo & iSetupDataCallResultInfo)66 int32_t TelRilData::ActivatePdpContextResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
67 const HDI::Ril::V1_1::SetupDataCallResultInfo &iSetupDataCallResultInfo)
68 {
69 auto getDataFunc = [&iSetupDataCallResultInfo, this](std::shared_ptr<TelRilRequest> telRilRequest) {
70 std::shared_ptr<SetupDataCallResultInfo> setupDataCallResultInfo = std::make_shared<SetupDataCallResultInfo>();
71 this->BuildDataCallResultInfo(setupDataCallResultInfo, iSetupDataCallResultInfo);
72 setupDataCallResultInfo->flag = telRilRequest->pointer_->GetParam();
73 return setupDataCallResultInfo;
74 };
75 return Response<SetupDataCallResultInfo>(TELEPHONY_LOG_FUNC_NAME, responseInfo, getDataFunc);
76 }
77
GetPdpContextList(const AppExecFwk::InnerEvent::Pointer & response)78 int32_t TelRilData::GetPdpContextList(const AppExecFwk::InnerEvent::Pointer &response)
79 {
80 HDI::Ril::V1_1::UniInfo uniInfo;
81 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::GetPdpContextList, uniInfo);
82 }
83
GetPdpContextListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const HDI::Ril::V1_1::DataCallResultList & iDataCallResultList)84 int32_t TelRilData::GetPdpContextListResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
85 const HDI::Ril::V1_1::DataCallResultList &iDataCallResultList)
86 {
87 if (iDataCallResultList.size != (int32_t)iDataCallResultList.dcList.size()) {
88 TELEPHONY_LOGE("Slot%{public}d iDataCallResultList.size is invalid", slotId_);
89 return TELEPHONY_ERR_ARGUMENT_INVALID;
90 }
91 auto getDataFunc = [&iDataCallResultList, this](std::shared_ptr<TelRilRequest> telRilRequest) {
92 std::shared_ptr<DataCallResultList> dataCallResultList = std::make_shared<DataCallResultList>();
93 this->BuildDataCallResultList(dataCallResultList, iDataCallResultList);
94 int32_t param = telRilRequest->pointer_->GetParam();
95 for (auto &setupDataCallResultInfo : dataCallResultList->dcList) {
96 setupDataCallResultInfo.flag = param;
97 }
98 return dataCallResultList;
99 };
100 return Response<DataCallResultList>(TELEPHONY_LOG_FUNC_NAME, responseInfo, getDataFunc);
101 }
102
SetInitApnInfo(const DataProfile & dataProfile,const AppExecFwk::InnerEvent::Pointer & response)103 int32_t TelRilData::SetInitApnInfo(const DataProfile &dataProfile, const AppExecFwk::InnerEvent::Pointer &response)
104 {
105 HDI::Ril::V1_1::DataProfileDataInfo dataProfileInfo = ChangeDPToHalDataProfile(dataProfile);
106 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::SetInitApnInfo, dataProfileInfo);
107 }
108
SetInitApnInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo)109 int32_t TelRilData::SetInitApnInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo)
110 {
111 return Response(TELEPHONY_LOG_FUNC_NAME, responseInfo);
112 }
113
PdpContextListUpdated(const HDI::Ril::V1_1::DataCallResultList & iDataCallResultList)114 int32_t TelRilData::PdpContextListUpdated(const HDI::Ril::V1_1::DataCallResultList &iDataCallResultList)
115 {
116 std::shared_ptr<DataCallResultList> dataCallResultList = std::make_shared<DataCallResultList>();
117 if (dataCallResultList == nullptr) {
118 TELEPHONY_LOGE("Slot%{public}d dataCallResultList is nullptr", slotId_);
119 return TELEPHONY_ERR_LOCAL_PTR_NULL;
120 }
121 if (iDataCallResultList.size != (int32_t)iDataCallResultList.dcList.size()) {
122 TELEPHONY_LOGE("Slot%{public}d iDataCallResultList.size is invalid", slotId_);
123 return TELEPHONY_ERR_ARGUMENT_INVALID;
124 }
125 BuildDataCallResultList(dataCallResultList, iDataCallResultList);
126 return Notify<DataCallResultList>(
127 TELEPHONY_LOG_FUNC_NAME, dataCallResultList, RadioEvent::RADIO_DATA_CALL_LIST_CHANGED);
128 }
129
DataLinkCapabilityUpdated(const HDI::Ril::V1_1::DataLinkCapability & dataLinkCapability)130 int32_t TelRilData::DataLinkCapabilityUpdated(const HDI::Ril::V1_1::DataLinkCapability &dataLinkCapability)
131 {
132 std::shared_ptr<DataLinkCapability> linkCapability = std::make_shared<DataLinkCapability>();
133 if (linkCapability == nullptr) {
134 TELEPHONY_LOGE("Slot%{public}d linkCapability is nullptr", slotId_);
135 return TELEPHONY_ERR_LOCAL_PTR_NULL;
136 }
137 linkCapability->primaryDownlinkKbps = dataLinkCapability.primaryDownlinkKbps;
138 linkCapability->primaryUplinkKbps = dataLinkCapability.primaryUplinkKbps;
139 linkCapability->secondaryDownlinkKbps = dataLinkCapability.secondaryDownlinkKbps;
140 linkCapability->secondaryUplinkKbps = dataLinkCapability.secondaryUplinkKbps;
141 return Notify<DataLinkCapability>(
142 TELEPHONY_LOG_FUNC_NAME, linkCapability, RadioEvent::RADIO_LINK_CAPABILITY_CHANGED);
143 }
144
GetLinkCapability(const AppExecFwk::InnerEvent::Pointer & response)145 int32_t TelRilData::GetLinkCapability(const AppExecFwk::InnerEvent::Pointer &response)
146 {
147 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::GetLinkCapability);
148 }
149
GetLinkCapabilityResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const HDI::Ril::V1_1::DataLinkCapability & dataLinkCapability)150 int32_t TelRilData::GetLinkCapabilityResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
151 const HDI::Ril::V1_1::DataLinkCapability &dataLinkCapability)
152 {
153 std::shared_ptr<DataLinkCapability> linkCapability = std::make_shared<DataLinkCapability>();
154 if (linkCapability == nullptr) {
155 TELEPHONY_LOGE("ERROR : linkCapability == nullptr !!!");
156 return TELEPHONY_ERR_LOCAL_PTR_NULL;
157 }
158 linkCapability->primaryDownlinkKbps = dataLinkCapability.primaryDownlinkKbps;
159 linkCapability->primaryUplinkKbps = dataLinkCapability.primaryUplinkKbps;
160 linkCapability->secondaryDownlinkKbps = dataLinkCapability.secondaryDownlinkKbps;
161 linkCapability->secondaryUplinkKbps = dataLinkCapability.secondaryUplinkKbps;
162 return Response<DataLinkCapability>(TELEPHONY_LOG_FUNC_NAME, responseInfo, linkCapability);
163 }
164
GetLinkBandwidthInfo(const int32_t cid,const AppExecFwk::InnerEvent::Pointer & response)165 int32_t TelRilData::GetLinkBandwidthInfo(const int32_t cid, const AppExecFwk::InnerEvent::Pointer &response)
166 {
167 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::GetLinkBandwidthInfo, cid);
168 }
169
GetLinkBandwidthInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo,const HDI::Ril::V1_1::DataLinkBandwidthInfo & iDataLinkBandwidthInfo)170 int32_t TelRilData::GetLinkBandwidthInfoResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
171 const HDI::Ril::V1_1::DataLinkBandwidthInfo &iDataLinkBandwidthInfo)
172 {
173 std::shared_ptr<DataLinkBandwidthInfo> dataLinkBandwidthInfo = std::make_shared<DataLinkBandwidthInfo>();
174 if (dataLinkBandwidthInfo == nullptr) {
175 TELEPHONY_LOGE("ERROR : dataLinkBandwidthInfo == nullptr !!!");
176 return TELEPHONY_ERR_LOCAL_PTR_NULL;
177 }
178 BuildDataLinkBandwidthInfo(dataLinkBandwidthInfo, iDataLinkBandwidthInfo);
179 return Response<DataLinkBandwidthInfo>(TELEPHONY_LOG_FUNC_NAME, responseInfo, dataLinkBandwidthInfo);
180 }
181
SetLinkBandwidthReportingRule(LinkBandwidthRule linkBandwidth,const AppExecFwk::InnerEvent::Pointer & response)182 int32_t TelRilData::SetLinkBandwidthReportingRule(
183 LinkBandwidthRule linkBandwidth, const AppExecFwk::InnerEvent::Pointer &response)
184 {
185 HDI::Ril::V1_1::DataLinkBandwidthReportingRule dLinkBandwidth;
186 dLinkBandwidth.rat = linkBandwidth.rat;
187 dLinkBandwidth.delayMs = linkBandwidth.delayMs;
188 dLinkBandwidth.delayUplinkKbps = linkBandwidth.delayUplinkKbps;
189 dLinkBandwidth.delayDownlinkKbps = linkBandwidth.delayDownlinkKbps;
190 dLinkBandwidth.maximumUplinkKbpsSize = static_cast<int32_t>(linkBandwidth.maximumUplinkKbps.size());
191 dLinkBandwidth.maximumDownlinkKbpsSize = static_cast<int32_t>(linkBandwidth.maximumDownlinkKbps.size());
192 dLinkBandwidth.maximumUplinkKbps = linkBandwidth.maximumUplinkKbps;
193 dLinkBandwidth.maximumDownlinkKbps = linkBandwidth.maximumDownlinkKbps;
194 TELEPHONY_LOGD("maximumUplinkKbpsSize:%{public}d, maximumDownlinkKbpsSize:%{public}d",
195 dLinkBandwidth.maximumUplinkKbpsSize, dLinkBandwidth.maximumDownlinkKbpsSize);
196 return Request(
197 TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::SetLinkBandwidthReportingRule, dLinkBandwidth);
198 }
199
SetLinkBandwidthReportingRuleResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo)200 int32_t TelRilData::SetLinkBandwidthReportingRuleResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo)
201 {
202 return Response(TELEPHONY_LOG_FUNC_NAME, responseInfo);
203 }
204
SetDataPermitted(const int32_t dataPermitted,const AppExecFwk::InnerEvent::Pointer & response)205 int32_t TelRilData::SetDataPermitted(const int32_t dataPermitted, const AppExecFwk::InnerEvent::Pointer &response)
206 {
207 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_1::IRil::SetDataPermitted, dataPermitted);
208 }
209
SetDataPermittedResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo)210 int32_t TelRilData::SetDataPermittedResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo)
211 {
212 return Response(TELEPHONY_LOG_FUNC_NAME, responseInfo);
213 }
214
CleanAllConnections(const AppExecFwk::InnerEvent::Pointer & response)215 int32_t TelRilData::CleanAllConnections(const AppExecFwk::InnerEvent::Pointer &response)
216 {
217 return Request(TELEPHONY_LOG_FUNC_NAME, response, &HDI::Ril::V1_2::IRil::CleanAllConnections);
218 }
219
CleanAllConnectionsResponse(const HDI::Ril::V1_1::RilRadioResponseInfo & responseInfo)220 int32_t TelRilData::CleanAllConnectionsResponse(const HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo)
221 {
222 return Response(TELEPHONY_LOG_FUNC_NAME, responseInfo);
223 }
224
BuildDataCallResultList(std::shared_ptr<DataCallResultList> dataCallResultList,const HDI::Ril::V1_1::DataCallResultList & iDataCallResultList)225 void TelRilData::BuildDataCallResultList(std::shared_ptr<DataCallResultList> dataCallResultList,
226 const HDI::Ril::V1_1::DataCallResultList &iDataCallResultList)
227 {
228 dataCallResultList->size = iDataCallResultList.size;
229 for (auto dc : iDataCallResultList.dcList) {
230 SetupDataCallResultInfo dataCallResultInfo;
231 dataCallResultInfo.flag = dc.flag;
232 dataCallResultInfo.reason = dc.reason;
233 dataCallResultInfo.retryTime = dc.retryTime;
234 dataCallResultInfo.cid = dc.cid;
235 dataCallResultInfo.active = dc.active;
236 dataCallResultInfo.type = dc.type;
237 dataCallResultInfo.netPortName = dc.netPortName;
238 dataCallResultInfo.address = dc.address;
239 dataCallResultInfo.dns = dc.dns;
240 dataCallResultInfo.dnsSec = dc.dnsSec;
241 dataCallResultInfo.gateway = dc.gateway;
242 dataCallResultInfo.maxTransferUnit = dc.maxTransferUnit;
243 dataCallResultInfo.pCscfPrimAddr = dc.pCscfPrimAddr;
244 dataCallResultInfo.pCscfSecAddr = dc.pCscfSecAddr;
245 dataCallResultInfo.pduSessionId = dc.pduSessionId;
246 dataCallResultList->dcList.push_back(dataCallResultInfo);
247 }
248 }
249
BuildDataCallResultInfo(std::shared_ptr<SetupDataCallResultInfo> dataCallResult,const HDI::Ril::V1_1::SetupDataCallResultInfo & iSetupDataCallResultInfo)250 void TelRilData::BuildDataCallResultInfo(std::shared_ptr<SetupDataCallResultInfo> dataCallResult,
251 const HDI::Ril::V1_1::SetupDataCallResultInfo &iSetupDataCallResultInfo)
252 {
253 dataCallResult->flag = iSetupDataCallResultInfo.flag;
254 dataCallResult->reason = iSetupDataCallResultInfo.reason;
255 dataCallResult->retryTime = iSetupDataCallResultInfo.retryTime;
256 dataCallResult->cid = iSetupDataCallResultInfo.cid;
257 dataCallResult->active = iSetupDataCallResultInfo.active;
258 dataCallResult->type = iSetupDataCallResultInfo.type;
259 dataCallResult->netPortName = iSetupDataCallResultInfo.netPortName;
260 dataCallResult->address = iSetupDataCallResultInfo.address;
261 dataCallResult->dns = iSetupDataCallResultInfo.dns;
262 dataCallResult->dnsSec = iSetupDataCallResultInfo.dnsSec;
263 dataCallResult->gateway = iSetupDataCallResultInfo.gateway;
264 dataCallResult->maxTransferUnit = iSetupDataCallResultInfo.maxTransferUnit;
265 dataCallResult->pCscfPrimAddr = iSetupDataCallResultInfo.pCscfPrimAddr;
266 dataCallResult->pCscfSecAddr = iSetupDataCallResultInfo.pCscfSecAddr;
267 dataCallResult->pduSessionId = iSetupDataCallResultInfo.pduSessionId;
268 }
269
BuildDataLinkBandwidthInfo(std::shared_ptr<DataLinkBandwidthInfo> dataLinkBandwidthInfo,const HDI::Ril::V1_1::DataLinkBandwidthInfo & iDataLinkBandwidthInfo)270 void TelRilData::BuildDataLinkBandwidthInfo(std::shared_ptr<DataLinkBandwidthInfo> dataLinkBandwidthInfo,
271 const HDI::Ril::V1_1::DataLinkBandwidthInfo &iDataLinkBandwidthInfo)
272 {
273 dataLinkBandwidthInfo->serial = iDataLinkBandwidthInfo.serial;
274 dataLinkBandwidthInfo->cid = iDataLinkBandwidthInfo.cid;
275 dataLinkBandwidthInfo->qi = iDataLinkBandwidthInfo.qi;
276 dataLinkBandwidthInfo->dlGfbr = iDataLinkBandwidthInfo.dlGfbr;
277 dataLinkBandwidthInfo->ulGfbr = iDataLinkBandwidthInfo.ulGfbr;
278 dataLinkBandwidthInfo->dlMfbr = iDataLinkBandwidthInfo.dlMfbr;
279 dataLinkBandwidthInfo->ulMfbr = iDataLinkBandwidthInfo.ulMfbr;
280 dataLinkBandwidthInfo->ulSambr = iDataLinkBandwidthInfo.ulSambr;
281 dataLinkBandwidthInfo->dlSambr = iDataLinkBandwidthInfo.dlSambr;
282 dataLinkBandwidthInfo->averagingWindow = iDataLinkBandwidthInfo.averagingWindow;
283 }
284 } // namespace Telephony
285 } // namespace OHOS
286