• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.internal.telephony;
18 
19 import android.hardware.radio.RadioResponseInfo;
20 import android.os.RemoteException;
21 import android.telephony.PhoneCapability;
22 
23 import com.android.internal.telephony.uicc.IccSlotStatus;
24 import com.android.internal.telephony.uicc.SimTypeInfo;
25 import com.android.telephony.Rlog;
26 
27 import java.util.ArrayList;
28 import java.util.Set;
29 
30 /**
31  * This class is the AIDL implementation of IRadioConfigResponse interface.
32  */
33 public class RadioConfigResponseAidl extends
34         android.hardware.radio.config.IRadioConfigResponse.Stub {
35     private static final String TAG = "RadioConfigResponseAidl";
36 
37     private final RadioConfig mRadioConfig;
38     private final HalVersion mHalVersion;
39 
RadioConfigResponseAidl(RadioConfig radioConfig, HalVersion halVersion)40     public RadioConfigResponseAidl(RadioConfig radioConfig, HalVersion halVersion) {
41         mRadioConfig = radioConfig;
42         mHalVersion = halVersion;
43     }
44 
45     /**
46      * Response function IRadioConfig.getHalDeviceCapabilities()
47      */
48     @Override
getHalDeviceCapabilitiesResponse( RadioResponseInfo info, boolean modemReducedFeatureSet1)49     public void getHalDeviceCapabilitiesResponse(
50             RadioResponseInfo info, boolean modemReducedFeatureSet1) throws RemoteException {
51         // convert hal device capabilities to RadioInterfaceCapabilities
52         RILRequest rr = mRadioConfig.processResponse(info);
53         if (rr != null) {
54             final Set<String> ret = RILUtils.getCaps(mHalVersion, modemReducedFeatureSet1);
55             if (info.error == android.hardware.radio.RadioError.NONE) {
56                 // send response
57                 RadioResponse.sendMessageResponse(rr.mResult, ret);
58                 logd(rr, RILUtils.requestToString(rr.mRequest));
59             } else {
60                 rr.onError(info.error, ret);
61                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
62             }
63         } else {
64             loge("getHalDeviceCapabilities: Error " + info.toString());
65         }
66     }
67 
68     /**
69      * Response function for IRadioConfig.getNumOfLiveModemsResponse()
70      */
71     @Override
getNumOfLiveModemsResponse( RadioResponseInfo info, byte numOfLiveModems)72     public void getNumOfLiveModemsResponse(
73             RadioResponseInfo info, byte numOfLiveModems) throws RemoteException {
74         RILRequest rr = mRadioConfig.processResponse(info);
75         if (rr != null) {
76             if (info.error == android.hardware.radio.RadioError.NONE) {
77                 // send response
78                 RadioResponse.sendMessageResponse(rr.mResult, numOfLiveModems);
79                 logd(rr, RILUtils.requestToString(rr.mRequest));
80             } else {
81                 rr.onError(info.error, numOfLiveModems);
82                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
83             }
84         } else {
85             loge("getNumOfLiveModemsResponse: Error " + info.toString());
86         }
87     }
88 
89     /**
90      * Response function for IRadioConfig.getPhoneCapability().
91      */
92     @Override
getPhoneCapabilityResponse( RadioResponseInfo info, android.hardware.radio.config.PhoneCapability phoneCapability)93     public void getPhoneCapabilityResponse(
94             RadioResponseInfo info,
95             android.hardware.radio.config.PhoneCapability phoneCapability) throws RemoteException {
96         RILRequest rr = mRadioConfig.processResponse(info);
97         if (rr != null) {
98             PhoneCapability ret = RILUtils.convertHalPhoneCapability(
99                     mRadioConfig.getDeviceNrCapabilities(), phoneCapability);
100             if (info.error == android.hardware.radio.RadioError.NONE) {
101                 // send response
102                 RadioResponse.sendMessageResponse(rr.mResult, ret);
103                 logd(rr, RILUtils.requestToString(rr.mRequest) + " " + ret.toString());
104             } else {
105                 rr.onError(info.error, ret);
106                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
107             }
108         } else {
109             loge("getPhoneCapabilityResponse: Error " + info.toString());
110         }
111     }
112 
113     /**
114      * Response function for IRadioConfig.getSimultaneousCallingSupport().
115      */
116     @Override
getSimultaneousCallingSupportResponse( RadioResponseInfo info, int[] enabledLogicalSlots)117     public void getSimultaneousCallingSupportResponse(
118             RadioResponseInfo info, int[] enabledLogicalSlots) throws RemoteException {
119         RILRequest rr = mRadioConfig.processResponse(info);
120         if (rr != null) {
121             ArrayList<Integer> ret = RILUtils.primitiveArrayToArrayList(enabledLogicalSlots);
122             if (info.error == android.hardware.radio.RadioError.NONE) {
123                 // send response
124                 RadioResponse.sendMessageResponse(rr.mResult, ret);
125                 logd(rr, RILUtils.requestToString(rr.mRequest) + " " + ret);
126             } else {
127                 rr.onError(info.error, enabledLogicalSlots);
128                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
129             }
130         } else {
131             loge("getSimultaneousCallingSupportResponse: Error " + info.toString());
132         }
133     }
134 
135     /**
136      * Response function for IRadioConfig.getSimSlotsStatus().
137      */
138     @Override
getSimSlotsStatusResponse( RadioResponseInfo info, android.hardware.radio.config.SimSlotStatus[] slotStatus)139     public void getSimSlotsStatusResponse(
140             RadioResponseInfo info,
141             android.hardware.radio.config.SimSlotStatus[] slotStatus)
142             throws RemoteException {
143         RILRequest rr = mRadioConfig.processResponse(info);
144         if (rr != null) {
145             ArrayList<IccSlotStatus> ret = RILUtils.convertHalSlotStatus(slotStatus);
146             if (info.error == android.hardware.radio.RadioError.NONE) {
147                 // send response
148                 RadioResponse.sendMessageResponse(rr.mResult, ret);
149                 logd(rr, RILUtils.requestToString(rr.mRequest) + " " + ret.toString());
150             } else {
151                 rr.onError(info.error, ret);
152                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
153             }
154         } else {
155             loge("getSimSlotsStatusResponse: Error " + info.toString());
156         }
157     }
158 
159     /**
160      * Response function for IRadioConfig.setNumOfLiveModemsResponse()
161      * Currently this is being used as the callback for RadioConfig.setNumOfLiveModems() method
162      */
163     @Override
setNumOfLiveModemsResponse(RadioResponseInfo info)164     public void setNumOfLiveModemsResponse(RadioResponseInfo info) throws RemoteException {
165         RILRequest rr = mRadioConfig.processResponse(info);
166         if (rr != null) {
167             if (info.error == android.hardware.radio.RadioError.NONE) {
168                 // send response
169                 RadioResponse.sendMessageResponse(rr.mResult, rr.mRequest);
170                 logd(rr, RILUtils.requestToString(rr.mRequest));
171             } else {
172                 rr.onError(info.error, null);
173                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
174             }
175         } else {
176             loge("setModemsConfigResponse: Error " + info.toString());
177         }
178     }
179 
180     /**
181      * Response function for IRadioConfig.setPreferredDataModem().
182      */
183     @Override
setPreferredDataModemResponse(RadioResponseInfo info)184     public void setPreferredDataModemResponse(RadioResponseInfo info) throws RemoteException {
185         RILRequest rr = mRadioConfig.processResponse(info);
186         if (rr != null) {
187             if (info.error == android.hardware.radio.RadioError.NONE) {
188                 // send response
189                 RadioResponse.sendMessageResponse(rr.mResult, null);
190                 logd(rr, RILUtils.requestToString(rr.mRequest));
191             } else {
192                 rr.onError(info.error, null);
193                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
194             }
195         } else {
196             loge("setPreferredDataModemResponse: Error " + info.toString());
197         }
198     }
199 
200     /**
201      * Response function for IRadioConfig.setSimSlotsMapping().
202      */
203     @Override
setSimSlotsMappingResponse(RadioResponseInfo info)204     public void setSimSlotsMappingResponse(RadioResponseInfo info) throws RemoteException {
205         RILRequest rr = mRadioConfig.processResponse(info);
206         if (rr != null) {
207             if (info.error == android.hardware.radio.RadioError.NONE) {
208                 // send response
209                 RadioResponse.sendMessageResponse(rr.mResult, null);
210                 logd(rr, RILUtils.requestToString(rr.mRequest));
211             } else {
212                 rr.onError(info.error, null);
213                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
214             }
215         } else {
216             loge("setSimSlotsMappingResponse: Error " + info.toString());
217         }
218     }
219 
220     /**
221      * Response function for IRadioConfig.getSimTypeInfo().
222      */
223     @Override
getSimTypeInfoResponse( RadioResponseInfo info, android.hardware.radio.config.SimTypeInfo[] simTypeInfo)224     public void getSimTypeInfoResponse(
225             RadioResponseInfo info,
226             android.hardware.radio.config.SimTypeInfo[] simTypeInfo) throws RemoteException {
227         RILRequest rr = mRadioConfig.processResponse(info);
228         if (rr != null) {
229             ArrayList<SimTypeInfo> ret = RILUtils.convertAidlSimTypeInfo(simTypeInfo);
230             if (info.error == android.hardware.radio.RadioError.NONE) {
231                 // send response
232                 RadioResponse.sendMessageResponse(rr.mResult, ret);
233                 logd(rr, RILUtils.requestToString(rr.mRequest) + " " + ret.toString());
234             } else {
235                 rr.onError(info.error, null);
236                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
237             }
238         } else {
239             loge("getSimTypeInfoResponse: Error " + info.toString());
240         }
241     }
242 
243     /**
244      * Response function for IRadioConfig.setSimTypeResponse().
245      */
246     @Override
setSimTypeResponse(RadioResponseInfo info)247     public void setSimTypeResponse(RadioResponseInfo info) throws RemoteException {
248         RILRequest rr = mRadioConfig.processResponse(info);
249         if (rr != null) {
250             if (info.error == android.hardware.radio.RadioError.NONE) {
251                 // send response
252                 RadioResponse.sendMessageResponse(rr.mResult, null);
253                 logd(rr, RILUtils.requestToString(rr.mRequest));
254             } else {
255                 rr.onError(info.error, null);
256                 loge(rr, RILUtils.requestToString(rr.mRequest) + " error " + info.error);
257             }
258         } else {
259             loge("setSimTypeResponse: Error " + info.toString());
260         }
261     }
logd(String log)262     private static void logd(String log) {
263         Rlog.d(TAG, log);
264     }
265 
loge(String log)266     private static void loge(String log) {
267         Rlog.e(TAG, log);
268     }
269 
logd(RILRequest rr, String log)270     private static void logd(RILRequest rr, String log) {
271         logd(rr.serialString() + "< " + log);
272     }
273 
loge(RILRequest rr, String log)274     private static void loge(RILRequest rr, String log) {
275         loge(rr.serialString() + "< " + log);
276     }
277 
278     @Override
getInterfaceHash()279     public String getInterfaceHash() {
280         return android.hardware.radio.config.IRadioConfigResponse.HASH;
281     }
282 
283     @Override
getInterfaceVersion()284     public int getInterfaceVersion() {
285         return android.hardware.radio.config.IRadioConfigResponse.VERSION;
286     }
287 }
288