• 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 
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