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