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
SetRadioState(struct HdfSBuf * data)28 int32_t HRilModem::SetRadioState(struct HdfSBuf *data)
29 {
30 int32_t fun = -1;
31 int32_t rst = -1;
32 return RequestVendor(data, HREQ_MODEM_SET_RADIO_STATUS, modemFuncs_, &HRilModemReq::SetRadioState, fun, rst);
33 }
34
GetRadioState(struct HdfSBuf * data)35 int32_t HRilModem::GetRadioState(struct HdfSBuf *data)
36 {
37 return RequestVendor(data, HREQ_MODEM_GET_RADIO_STATUS, modemFuncs_, &HRilModemReq::GetRadioState);
38 }
39
GetImei(struct HdfSBuf * data)40 int32_t HRilModem::GetImei(struct HdfSBuf *data)
41 {
42 return RequestVendor(data, HREQ_MODEM_GET_IMEI, modemFuncs_, &HRilModemReq::GetImei);
43 }
44
GetMeid(struct HdfSBuf * data)45 int32_t HRilModem::GetMeid(struct HdfSBuf *data)
46 {
47 return RequestVendor(data, HREQ_MODEM_GET_MEID, modemFuncs_, &HRilModemReq::GetMeid);
48 }
49
GetVoiceRadioTechnology(struct HdfSBuf * data)50 int32_t HRilModem::GetVoiceRadioTechnology(struct HdfSBuf *data)
51 {
52 return RequestVendor(data, HREQ_MODEM_GET_VOICE_RADIO, modemFuncs_, &HRilModemReq::GetVoiceRadioTechnology);
53 }
54
RadioStateUpdated(const int32_t indType,const HRilErrNumber e,const void * response,size_t responselen)55 int32_t HRilModem::RadioStateUpdated(
56 const int32_t indType, const HRilErrNumber e, const void *response, size_t responselen)
57 {
58 return Notify<int32_t, HRilInt32Parcel>((const int32_t *)response, responselen, HNOTI_MODEM_RADIO_STATE_UPDATED);
59 }
60
VoiceRadioTechUpdated(const int32_t indType,const HRilErrNumber e,const void * response,size_t responselen)61 int32_t HRilModem::VoiceRadioTechUpdated(
62 const int32_t indType, const HRilErrNumber e, const void *response, size_t responselen)
63 {
64 return Notify<HRilVoiceRadioInfo, VoiceRadioTechnology>(
65 (const HRilVoiceRadioInfo *)response, responselen, HNOTI_MODEM_VOICE_TECH_UPDATED);
66 }
67
SetRadioStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)68 int32_t HRilModem::SetRadioStateResponse(
69 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
70 {
71 return Response(responseInfo, HrilEmptyParcel(), requestNum);
72 }
73
GetRadioStateResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)74 int32_t HRilModem::GetRadioStateResponse(
75 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
76 {
77 return Response(responseInfo, HRilInt32Parcel((const uint8_t *)response, responseLen), requestNum);
78 }
79
GetImeiResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)80 int32_t HRilModem::GetImeiResponse(
81 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
82 {
83 return Response(responseInfo, HRilStringParcel((const char *)response), requestNum);
84 }
85
GetMeidResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)86 int32_t HRilModem::GetMeidResponse(
87 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
88 {
89 return Response(responseInfo, HRilStringParcel((const char *)response), requestNum);
90 }
91
GetVoiceRadioTechnologyResponse(int32_t requestNum,HRilRadioResponseInfo & responseInfo,const void * response,size_t responseLen)92 int32_t HRilModem::GetVoiceRadioTechnologyResponse(
93 int32_t requestNum, HRilRadioResponseInfo &responseInfo, const void *response, size_t responseLen)
94 {
95 VoiceRadioTechnology voiceRadioTech = {};
96 if (response == nullptr) {
97 TELEPHONY_LOGE("GetVoiceRadioTechnologyResponse Invalid response: nullptr");
98 if (responseInfo.error == HRilErrType::NONE) {
99 responseInfo.error = HRilErrType::HRIL_ERR_INVALID_RESPONSE;
100 }
101 } else {
102 voiceRadioTech = *static_cast<const HRilVoiceRadioInfo *>(response);
103 }
104 return Response(responseInfo, voiceRadioTech, requestNum);
105 }
106
IsModemResponse(uint32_t code)107 bool HRilModem::IsModemResponse(uint32_t code)
108 {
109 return ((code >= HREQ_COMMON_BASE) && (code <= HREQ_MODEM_GET_VOICE_RADIO));
110 }
111
IsModemNotification(uint32_t code)112 bool HRilModem::IsModemNotification(uint32_t code)
113 {
114 return ((code >= HNOTI_COMMON_BASE) && (code <= HNOTI_MODEM_VOICE_TECH_UPDATED));
115 }
116
IsModemRespOrNotify(uint32_t code)117 bool HRilModem::IsModemRespOrNotify(uint32_t code)
118 {
119 return IsModemResponse(code) || IsModemNotification(code);
120 }
121
AddHandlerToMap()122 void HRilModem::AddHandlerToMap()
123 {
124 // indication
125 notiMemberFuncMap_[HNOTI_MODEM_RADIO_STATE_UPDATED] = &HRilModem::RadioStateUpdated;
126 notiMemberFuncMap_[HNOTI_MODEM_VOICE_TECH_UPDATED] = &HRilModem::VoiceRadioTechUpdated;
127 // response
128 respMemberFuncMap_[HREQ_MODEM_SET_RADIO_STATUS] = &HRilModem::SetRadioStateResponse;
129 respMemberFuncMap_[HREQ_MODEM_GET_RADIO_STATUS] = &HRilModem::GetRadioStateResponse;
130 respMemberFuncMap_[HREQ_MODEM_GET_IMEI] = &HRilModem::GetImeiResponse;
131 respMemberFuncMap_[HREQ_MODEM_GET_MEID] = &HRilModem::GetMeidResponse;
132 respMemberFuncMap_[HREQ_MODEM_GET_VOICE_RADIO] = &HRilModem::GetVoiceRadioTechnologyResponse;
133 // request
134 reqMemberFuncMap_[HREQ_MODEM_SET_RADIO_STATUS] = &HRilModem::SetRadioState;
135 reqMemberFuncMap_[HREQ_MODEM_GET_RADIO_STATUS] = &HRilModem::GetRadioState;
136 reqMemberFuncMap_[HREQ_MODEM_GET_IMEI] = &HRilModem::GetImei;
137 reqMemberFuncMap_[HREQ_MODEM_GET_MEID] = &HRilModem::GetMeid;
138 reqMemberFuncMap_[HREQ_MODEM_GET_VOICE_RADIO] = &HRilModem::GetVoiceRadioTechnology;
139 }
140
RegisterModemFuncs(const HRilModemReq * modemFuncs)141 void HRilModem::RegisterModemFuncs(const HRilModemReq *modemFuncs)
142 {
143 modemFuncs_ = modemFuncs;
144 }
145 } // namespace Telephony
146 } // namespace OHOS