• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "hril_modem.h"
17 
18 #include "hril_notification.h"
19 #include "hril_request.h"
20 
21 namespace OHOS {
22 namespace Telephony {
HRilModem(int32_t slotId,IHRilReporter & hrilReporter)23 HRilModem::HRilModem(int32_t slotId, IHRilReporter &hrilReporter) : HRilBase(slotId, hrilReporter)
24 {
25     AddHandlerToMap();
26 }
27 
ShutDown(int32_t serialId)28 int32_t HRilModem::ShutDown(int32_t serialId)
29 {
30     return RequestVendor(serialId, HREQ_MODEM_SHUT_DOWN, modemFuncs_, &HRilModemReq::ShutDown);
31 }
32 
SetRadioState(int32_t serialId,int32_t fun,int32_t rst)33 int32_t HRilModem::SetRadioState(int32_t serialId, int32_t fun, int32_t rst)
34 {
35     return RequestVendor(serialId, HREQ_MODEM_SET_RADIO_STATUS, modemFuncs_, &HRilModemReq::SetRadioState, fun, rst);
36 }
37 
GetRadioState(int32_t serialId)38 int32_t HRilModem::GetRadioState(int32_t serialId)
39 {
40     return RequestVendor(serialId, HREQ_MODEM_GET_RADIO_STATUS, modemFuncs_, &HRilModemReq::GetRadioState);
41 }
42 
GetImei(int32_t serialId)43 int32_t HRilModem::GetImei(int32_t serialId)
44 {
45     return RequestVendor(serialId, HREQ_MODEM_GET_IMEI, modemFuncs_, &HRilModemReq::GetImei);
46 }
47 
GetMeid(int32_t serialId)48 int32_t HRilModem::GetMeid(int32_t serialId)
49 {
50     return RequestVendor(serialId, HREQ_MODEM_GET_MEID, modemFuncs_, &HRilModemReq::GetMeid);
51 }
52 
GetVoiceRadioTechnology(int32_t serialId)53 int32_t HRilModem::GetVoiceRadioTechnology(int32_t serialId)
54 {
55     return RequestVendor(serialId, HREQ_MODEM_GET_VOICE_RADIO, modemFuncs_, &HRilModemReq::GetVoiceRadioTechnology);
56 }
57 
GetBasebandVersion(int32_t serialId)58 int32_t HRilModem::GetBasebandVersion(int32_t serialId)
59 {
60     return RequestVendor(serialId, HREQ_MODEM_GET_BASEBAND_VERSION, modemFuncs_, &HRilModemReq::GetBasebandVersion);
61 }
62 
RadioStateUpdated(const int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)63 int32_t HRilModem::RadioStateUpdated(
64     const int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
65 {
66     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) {
67         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
68         return HRIL_ERR_INVALID_PARAMETER;
69     }
70     if (response == nullptr) {
71         TELEPHONY_LOGE("response is null");
72         return HRIL_ERR_NULL_POINT;
73     }
74     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::RadioStateUpdated, *(const int32_t *)response);
75 }
76 
VoiceRadioTechUpdated(const int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)77 int32_t HRilModem::VoiceRadioTechUpdated(
78     const int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
79 {
80     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(HRilVoiceRadioInfo)) != 0) {
81         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
82         return HRIL_ERR_INVALID_PARAMETER;
83     }
84     if (response == nullptr) {
85         TELEPHONY_LOGE("response is null");
86         return HRIL_ERR_NULL_POINT;
87     }
88     HDI::Ril::V1_1::VoiceRadioTechnology voiceRadioTech = {};
89     BuildIVoiceRadioTechnology(voiceRadioTech, *(const HRilVoiceRadioInfo *)response);
90     return Notify(indType, error, &HDI::Ril::V1_1::IRilCallback::VoiceRadioTechUpdated, voiceRadioTech);
91 }
92 
DsdsModeUpdated(const int32_t indType,const HRilErrNumber error,const void * response,size_t responseLen)93 int32_t HRilModem::DsdsModeUpdated(
94     const int32_t indType, const HRilErrNumber error, const void *response, size_t responseLen)
95 {
96     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) {
97         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
98         return HRIL_ERR_INVALID_PARAMETER;
99     }
100     if (response == nullptr) {
101         TELEPHONY_LOGE("response is null");
102         return HRIL_ERR_NULL_POINT;
103     }
104     return Notify(
105         indType, error, &HDI::Ril::V1_1::IRilCallback::DsdsModeUpdated, *(static_cast<const int32_t *>(response)));
106 }
107 
ShutDownResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)108 int32_t HRilModem::ShutDownResponse(
109     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
110 {
111     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::ShutDownResponse);
112 }
113 
SetRadioStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)114 int32_t HRilModem::SetRadioStateResponse(
115     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
116 {
117     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::SetRadioStateResponse);
118 }
119 
GetRadioStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)120 int32_t HRilModem::GetRadioStateResponse(
121     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
122 {
123     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(int32_t)) != 0) {
124         TELEPHONY_LOGE("Invalid parameter, responseLen:%{public}zu", responseLen);
125         return HRIL_ERR_INVALID_PARAMETER;
126     }
127     if (response == nullptr) {
128         TELEPHONY_LOGE("response is null");
129         return HRIL_ERR_NULL_POINT;
130     }
131     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetRadioStateResponse, *(const int32_t *)response);
132 }
133 
GetImeiResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)134 int32_t HRilModem::GetImeiResponse(
135     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
136 {
137     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(char)) != 0) {
138         TELEPHONY_LOGE("GetImeiResponse:Invalid parameter, responseLen:%{public}zu", responseLen);
139         return HRIL_ERR_INVALID_PARAMETER;
140     }
141     if (response == nullptr) {
142         TELEPHONY_LOGE("response is null");
143         return HRIL_ERR_NULL_POINT;
144     }
145     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetImeiResponse, std::string((const char *)response));
146 }
147 
GetMeidResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)148 int32_t HRilModem::GetMeidResponse(
149     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
150 {
151     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(char)) != 0) {
152         TELEPHONY_LOGE("GetMeidResponse:Invalid parameter, responseLen:%{public}zu", responseLen);
153         return HRIL_ERR_INVALID_PARAMETER;
154     }
155     if (response == nullptr) {
156         TELEPHONY_LOGE("response is null");
157         return HRIL_ERR_NULL_POINT;
158     }
159     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetMeidResponse, std::string((const char *)response));
160 }
161 
GetVoiceRadioTechnologyResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)162 int32_t HRilModem::GetVoiceRadioTechnologyResponse(
163     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
164 {
165     HDI::Ril::V1_1::VoiceRadioTechnology voiceRadioTech = {};
166     if (response == nullptr) {
167         TELEPHONY_LOGE("GetVoiceRadioTechnologyResponse Invalid response: nullptr");
168         if (responseInfo.error == HRilErrType::NONE) {
169             responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
170         }
171     } else {
172         BuildIVoiceRadioTechnology(voiceRadioTech, *(const HRilVoiceRadioInfo *)response);
173     }
174     return Response(responseInfo, &HDI::Ril::V1_1::IRilCallback::GetVoiceRadioTechnologyResponse, voiceRadioTech);
175 }
176 
BuildIVoiceRadioTechnology(HDI::Ril::V1_1::VoiceRadioTechnology & voiceRadioTech,const HRilVoiceRadioInfo & hRiadioInfo)177 void HRilModem::BuildIVoiceRadioTechnology(
178     HDI::Ril::V1_1::VoiceRadioTechnology &voiceRadioTech, const HRilVoiceRadioInfo &hRiadioInfo)
179 {
180     voiceRadioTech.srvStatus = static_cast<OHOS::HDI::Ril::V1_1::RilSrvStatus>(hRiadioInfo.srvStatus);
181     voiceRadioTech.srvDomain = static_cast<OHOS::HDI::Ril::V1_1::RilSrvDomain>(hRiadioInfo.srvDomain);
182     voiceRadioTech.roamStatus = static_cast<OHOS::HDI::Ril::V1_1::RilRoamStatus>(hRiadioInfo.roamStatus);
183     voiceRadioTech.simStatus = static_cast<OHOS::HDI::Ril::V1_1::RilSimStatus>(hRiadioInfo.simStatus);
184     voiceRadioTech.lockStatus = static_cast<OHOS::HDI::Ril::V1_1::RilSimLockStatus>(hRiadioInfo.lockStatus);
185     voiceRadioTech.sysMode = static_cast<OHOS::HDI::Ril::V1_1::RilSysMode>(hRiadioInfo.sysMode);
186     voiceRadioTech.sysModeName = (hRiadioInfo.sysModeName == nullptr) ? "" : hRiadioInfo.sysModeName;
187     voiceRadioTech.actType = static_cast<OHOS::HDI::Ril::V1_1::RilRadioTech>(hRiadioInfo.actType);
188     voiceRadioTech.actName = (hRiadioInfo.actName == nullptr) ? "" : hRiadioInfo.actName;
189 }
190 
GetBasebandVersionResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)191 int32_t HRilModem::GetBasebandVersionResponse(
192     int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
193 {
194     if ((response == nullptr && responseLen != 0) || (responseLen % sizeof(char)) != 0) {
195         TELEPHONY_LOGE("GetBasebandVersionResponse:Invalid parameter, responseLen:%{public}zu", responseLen);
196         return HRIL_ERR_INVALID_PARAMETER;
197     }
198     if (response == nullptr) {
199         TELEPHONY_LOGE("response is null");
200         return HRIL_ERR_NULL_POINT;
201     }
202     return Response(
203         responseInfo, &HDI::Ril::V1_1::IRilCallback::GetBasebandVersionResponse, std::string((const char *)response));
204 }
205 
IsModemResponse(uint32_t code)206 bool HRilModem::IsModemResponse(uint32_t code)
207 {
208     return ((code >= HREQ_COMMON_BASE) && (code <= HREQ_MODEM_GET_VOICE_RADIO));
209 }
210 
IsModemNotification(uint32_t code)211 bool HRilModem::IsModemNotification(uint32_t code)
212 {
213     return ((code >= HNOTI_COMMON_BASE) && (code <= HNOTI_COMMON_END));
214 }
215 
IsModemRespOrNotify(uint32_t code)216 bool HRilModem::IsModemRespOrNotify(uint32_t code)
217 {
218     return IsModemResponse(code) || IsModemNotification(code);
219 }
220 
AddHandlerToMap()221 void HRilModem::AddHandlerToMap()
222 {
223     // indication
224     notiMemberFuncMap_[HNOTI_MODEM_RADIO_STATE_UPDATED] = &HRilModem::RadioStateUpdated;
225     notiMemberFuncMap_[HNOTI_MODEM_VOICE_TECH_UPDATED] = &HRilModem::VoiceRadioTechUpdated;
226     notiMemberFuncMap_[HNOTI_MODEM_DSDS_MODE_UPDATED] = &HRilModem::DsdsModeUpdated;
227     // response
228     respMemberFuncMap_[HREQ_MODEM_SHUT_DOWN] = &HRilModem::ShutDownResponse;
229     respMemberFuncMap_[HREQ_MODEM_SET_RADIO_STATUS] = &HRilModem::SetRadioStateResponse;
230     respMemberFuncMap_[HREQ_MODEM_GET_RADIO_STATUS] = &HRilModem::GetRadioStateResponse;
231     respMemberFuncMap_[HREQ_MODEM_GET_IMEI] = &HRilModem::GetImeiResponse;
232     respMemberFuncMap_[HREQ_MODEM_GET_MEID] = &HRilModem::GetMeidResponse;
233     respMemberFuncMap_[HREQ_MODEM_GET_VOICE_RADIO] = &HRilModem::GetVoiceRadioTechnologyResponse;
234     respMemberFuncMap_[HREQ_MODEM_GET_BASEBAND_VERSION] = &HRilModem::GetBasebandVersionResponse;
235 }
236 
RegisterModemFuncs(const HRilModemReq * modemFuncs)237 void HRilModem::RegisterModemFuncs(const HRilModemReq *modemFuncs)
238 {
239     modemFuncs_ = modemFuncs;
240 }
241 } // namespace Telephony
242 } // namespace OHOS