Loading src/java/com/android/internal/telephony/CommandsInterface.java +46 −4 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierRestrictionRules; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.NetworkScanRequest; import android.telephony.RadioAccessSpecifier; Loading @@ -41,6 +42,7 @@ import android.telephony.data.TrafficDescriptor; import android.telephony.emergency.EmergencyNumber; import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState; import com.android.internal.telephony.uicc.IccCardStatus; Loading Loading @@ -2821,20 +2823,60 @@ public interface CommandsInterface { default void getUsageSetting(Message result) {} /** * Register for Emergency network scan result. * Sets the emergency mode. * * @param emcMode Defines the radio emergency mode type. * @param result Callback message containing the success or failure status. */ default void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode, @Nullable Message result) {} /** * Triggers an emergency network scan. * * @param accessNetwork Contains the list of access network types to be prioritized * during emergency scan. The 1st entry has the highest priority. * @param scanType Indicates the type of scans to be performed i.e. limited scan, * full service scan or both. * @param result Callback message containing the success or failure status. */ default void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) {} /** * Cancels ongoing emergency network scan. * * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work. * If {@code true}, then the modem shall start the new scan from the beginning, * otherwise the modem shall resume from the last search. * @param result Callback message containing the success or failure status. */ default void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) {} /** * Exits ongoing emergency mode. * * @param result Callback message containing the success or failure status. */ default void exitEmergencyMode(@Nullable Message result) {} /** * Registers for emergency network scan result. * * @param h Handler for notification message. * @param what User-defined message code. * @param obj User object. */ default void registerForEmergencyNetworkScan(Handler h, int what, Object obj) {} default void registerForEmergencyNetworkScan(@NonNull Handler h, int what, @Nullable Object obj) {} /** * Unregister for Emergency network scan result. * Unregisters for emergency network scan result. * * @param h Handler to be removed from the registrant list. */ default void unregisterForEmergencyNetworkScan(Handler h) {} default void unregisterForEmergencyNetworkScan(@NonNull Handler h) {} /** * Provides a list of SRVCC call information to radio Loading src/java/com/android/internal/telephony/NetworkIndication.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.telephony.AnomalyReporter; import android.telephony.BarringInfo; import android.telephony.CellIdentity; import android.telephony.CellInfo; import android.telephony.EmergencyRegResult; import android.telephony.LinkCapacityEstimate; import android.telephony.NetworkRegistrationInfo; import android.telephony.PhysicalChannelConfig; Loading Loading @@ -390,12 +391,14 @@ public class NetworkIndication extends IRadioNetworkIndication.Stub { android.hardware.radio.network.EmergencyRegResult result) { mRil.processIndication(RIL.NETWORK_SERVICE, indicationType); EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(result); if (mRil.isLogOrTrace()) { mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, result); mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, response); } mRil.mEmergencyNetworkScanRegistrants.notifyRegistrants( new AsyncResult(null, result, null)); new AsyncResult(null, response, null)); } @Override Loading src/java/com/android/internal/telephony/NetworkResponse.java +4 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.hardware.radio.network.IRadioNetworkResponse; import android.os.AsyncResult; import android.telephony.BarringInfo; import android.telephony.CellInfo; import android.telephony.EmergencyRegResult; import android.telephony.LinkCapacityEstimate; import android.telephony.RadioAccessSpecifier; import android.telephony.SignalStrength; Loading Loading @@ -445,10 +446,11 @@ public class NetworkResponse extends IRadioNetworkResponse.Stub { RILRequest rr = mRil.processResponse(RIL.NETWORK_SERVICE, responseInfo); if (rr != null) { EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(regState); if (responseInfo.error == RadioError.NONE) { RadioResponse.sendMessageResponse(rr.mResult, regState); RadioResponse.sendMessageResponse(rr.mResult, response); } mRil.processResponseDone(rr, responseInfo, regState); mRil.processResponseDone(rr, responseInfo, response); } } Loading src/java/com/android/internal/telephony/Phone.java +68 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.telephony.CarrierRestrictionRules; import android.telephony.CellIdentity; import android.telephony.CellInfo; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.LinkCapacityEstimate; import android.telephony.NetworkRegistrationInfo; Loading Loading @@ -77,6 +78,7 @@ import com.android.internal.telephony.data.AccessNetworksManager; import com.android.internal.telephony.data.DataNetworkController; import com.android.internal.telephony.data.DataSettingsManager; import com.android.internal.telephony.data.LinkBandwidthEstimator; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.emergency.EmergencyNumberTracker; import com.android.internal.telephony.imsphone.ImsPhone; import com.android.internal.telephony.imsphone.ImsPhoneCall; Loading Loading @@ -4895,6 +4897,72 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mCi.triggerEpsFallback(reason, response); } /** * Sets the emergency mode * * @param emcMode The radio emergency mode type. * @param result Callback message. */ public void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode, @Nullable Message result) { mCi.setEmergencyMode(emcMode, result); } /** * Triggers an emergency network scan. * * @param accessNetwork Contains the list of access network types to be prioritized * during emergency scan. The 1st entry has the highest priority. * @param scanType Indicates the type of scans to be performed i.e. limited scan, * full service scan or any scan. * @param result Callback message. */ public void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) { mCi.triggerEmergencyNetworkScan(accessNetwork, scanType, result); } /** * Cancels ongoing emergency network scan * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work. * If {@code true}, then the modem shall start the new scan from the beginning, * otherwise the modem shall resume from the last search. * @param result Callback message. */ public void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) { mCi.cancelEmergencyNetworkScan(resetScan, result); } /** * Exits ongoing emergency mode * @param result Callback message. */ public void exitEmergencyMode(@Nullable Message result) { mCi.exitEmergencyMode(result); } /** * Registers for emergency network scan result. * * @param h Handler for notification message. * @param what User-defined message code. * @param obj User object. */ public void registerForEmergencyNetworkScan(@NonNull Handler h, int what, @Nullable Object obj) { mCi.registerForEmergencyNetworkScan(h, what, obj); } /** * Unregisters for emergency network scan result. * * @param h Handler to be removed from the registrant list. */ public void unregisterForEmergencyNetworkScan(@NonNull Handler h) { mCi.unregisterForEmergencyNetworkScan(h); } /** * @return Telephony tester instance. */ Loading src/java/com/android/internal/telephony/RIL.java +136 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Trace; import android.os.WorkSource; import android.provider.Settings; import android.sysprop.TelephonyProperties; import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierRestrictionRules; import android.telephony.CellInfo; Loading @@ -55,6 +56,7 @@ import android.telephony.CellSignalStrengthNr; import android.telephony.CellSignalStrengthTdscdma; import android.telephony.CellSignalStrengthWcdma; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.ModemActivityInfo; import android.telephony.NeighboringCellInfo; Loading @@ -78,6 +80,7 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.metrics.ModemRestartStats; import com.android.internal.telephony.metrics.TelephonyMetrics; Loading Loading @@ -5305,6 +5308,139 @@ public class RIL extends BaseCommands implements CommandsInterface { } } /** * {@inheritDoc} */ @Override public void setEmergencyMode(int emcMode, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_SET_EMERGENCY_MODE, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " mode=" + EmergencyConstants.emergencyModeToString(emcMode)); } try { networkProxy.setEmergencyMode(rr.mSerial, emcMode); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "setEmergencyMode", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "setEmergencyMode: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_TRIGGER_EMERGENCY_NETWORK_SCAN, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); } try { networkProxy.triggerEmergencyNetworkScan(rr.mSerial, RILUtils.convertEmergencyNetworkScanTrigger(accessNetwork, scanType)); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "triggerEmergencyNetworkScan", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "triggerEmergencyNetworkScan: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void cancelEmergencyNetworkScan(boolean resetScan, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_EMERGENCY_NETWORK_SCAN, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " resetScan=" + resetScan); } try { networkProxy.cancelEmergencyNetworkScan(rr.mSerial, resetScan); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "cancelEmergencyNetworkScan", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "cancelEmergencyNetworkScan: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void exitEmergencyMode(Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_MODE, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); } try { networkProxy.exitEmergencyMode(rr.mSerial); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "exitEmergencyMode", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "exitEmergencyMode: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } //***** Private Methods /** * This is a helper function to be called when an indication callback is called for any radio Loading Loading
src/java/com/android/internal/telephony/CommandsInterface.java +46 −4 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierRestrictionRules; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.NetworkScanRequest; import android.telephony.RadioAccessSpecifier; Loading @@ -41,6 +42,7 @@ import android.telephony.data.TrafficDescriptor; import android.telephony.emergency.EmergencyNumber; import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState; import com.android.internal.telephony.uicc.IccCardStatus; Loading Loading @@ -2821,20 +2823,60 @@ public interface CommandsInterface { default void getUsageSetting(Message result) {} /** * Register for Emergency network scan result. * Sets the emergency mode. * * @param emcMode Defines the radio emergency mode type. * @param result Callback message containing the success or failure status. */ default void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode, @Nullable Message result) {} /** * Triggers an emergency network scan. * * @param accessNetwork Contains the list of access network types to be prioritized * during emergency scan. The 1st entry has the highest priority. * @param scanType Indicates the type of scans to be performed i.e. limited scan, * full service scan or both. * @param result Callback message containing the success or failure status. */ default void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) {} /** * Cancels ongoing emergency network scan. * * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work. * If {@code true}, then the modem shall start the new scan from the beginning, * otherwise the modem shall resume from the last search. * @param result Callback message containing the success or failure status. */ default void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) {} /** * Exits ongoing emergency mode. * * @param result Callback message containing the success or failure status. */ default void exitEmergencyMode(@Nullable Message result) {} /** * Registers for emergency network scan result. * * @param h Handler for notification message. * @param what User-defined message code. * @param obj User object. */ default void registerForEmergencyNetworkScan(Handler h, int what, Object obj) {} default void registerForEmergencyNetworkScan(@NonNull Handler h, int what, @Nullable Object obj) {} /** * Unregister for Emergency network scan result. * Unregisters for emergency network scan result. * * @param h Handler to be removed from the registrant list. */ default void unregisterForEmergencyNetworkScan(Handler h) {} default void unregisterForEmergencyNetworkScan(@NonNull Handler h) {} /** * Provides a list of SRVCC call information to radio Loading
src/java/com/android/internal/telephony/NetworkIndication.java +5 −2 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.telephony.AnomalyReporter; import android.telephony.BarringInfo; import android.telephony.CellIdentity; import android.telephony.CellInfo; import android.telephony.EmergencyRegResult; import android.telephony.LinkCapacityEstimate; import android.telephony.NetworkRegistrationInfo; import android.telephony.PhysicalChannelConfig; Loading Loading @@ -390,12 +391,14 @@ public class NetworkIndication extends IRadioNetworkIndication.Stub { android.hardware.radio.network.EmergencyRegResult result) { mRil.processIndication(RIL.NETWORK_SERVICE, indicationType); EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(result); if (mRil.isLogOrTrace()) { mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, result); mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT, response); } mRil.mEmergencyNetworkScanRegistrants.notifyRegistrants( new AsyncResult(null, result, null)); new AsyncResult(null, response, null)); } @Override Loading
src/java/com/android/internal/telephony/NetworkResponse.java +4 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.hardware.radio.network.IRadioNetworkResponse; import android.os.AsyncResult; import android.telephony.BarringInfo; import android.telephony.CellInfo; import android.telephony.EmergencyRegResult; import android.telephony.LinkCapacityEstimate; import android.telephony.RadioAccessSpecifier; import android.telephony.SignalStrength; Loading Loading @@ -445,10 +446,11 @@ public class NetworkResponse extends IRadioNetworkResponse.Stub { RILRequest rr = mRil.processResponse(RIL.NETWORK_SERVICE, responseInfo); if (rr != null) { EmergencyRegResult response = RILUtils.convertHalEmergencyRegResult(regState); if (responseInfo.error == RadioError.NONE) { RadioResponse.sendMessageResponse(rr.mResult, regState); RadioResponse.sendMessageResponse(rr.mResult, response); } mRil.processResponseDone(rr, responseInfo, regState); mRil.processResponseDone(rr, responseInfo, response); } } Loading
src/java/com/android/internal/telephony/Phone.java +68 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.telephony.CarrierRestrictionRules; import android.telephony.CellIdentity; import android.telephony.CellInfo; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.LinkCapacityEstimate; import android.telephony.NetworkRegistrationInfo; Loading Loading @@ -77,6 +78,7 @@ import com.android.internal.telephony.data.AccessNetworksManager; import com.android.internal.telephony.data.DataNetworkController; import com.android.internal.telephony.data.DataSettingsManager; import com.android.internal.telephony.data.LinkBandwidthEstimator; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.emergency.EmergencyNumberTracker; import com.android.internal.telephony.imsphone.ImsPhone; import com.android.internal.telephony.imsphone.ImsPhoneCall; Loading Loading @@ -4895,6 +4897,72 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { mCi.triggerEpsFallback(reason, response); } /** * Sets the emergency mode * * @param emcMode The radio emergency mode type. * @param result Callback message. */ public void setEmergencyMode(@EmergencyConstants.EmergencyMode int emcMode, @Nullable Message result) { mCi.setEmergencyMode(emcMode, result); } /** * Triggers an emergency network scan. * * @param accessNetwork Contains the list of access network types to be prioritized * during emergency scan. The 1st entry has the highest priority. * @param scanType Indicates the type of scans to be performed i.e. limited scan, * full service scan or any scan. * @param result Callback message. */ public void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, @Nullable Message result) { mCi.triggerEmergencyNetworkScan(accessNetwork, scanType, result); } /** * Cancels ongoing emergency network scan * @param resetScan Indicates how the next {@link #triggerEmergencyNetworkScan} should work. * If {@code true}, then the modem shall start the new scan from the beginning, * otherwise the modem shall resume from the last search. * @param result Callback message. */ public void cancelEmergencyNetworkScan(boolean resetScan, @Nullable Message result) { mCi.cancelEmergencyNetworkScan(resetScan, result); } /** * Exits ongoing emergency mode * @param result Callback message. */ public void exitEmergencyMode(@Nullable Message result) { mCi.exitEmergencyMode(result); } /** * Registers for emergency network scan result. * * @param h Handler for notification message. * @param what User-defined message code. * @param obj User object. */ public void registerForEmergencyNetworkScan(@NonNull Handler h, int what, @Nullable Object obj) { mCi.registerForEmergencyNetworkScan(h, what, obj); } /** * Unregisters for emergency network scan result. * * @param h Handler to be removed from the registrant list. */ public void unregisterForEmergencyNetworkScan(@NonNull Handler h) { mCi.unregisterForEmergencyNetworkScan(h); } /** * @return Telephony tester instance. */ Loading
src/java/com/android/internal/telephony/RIL.java +136 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import android.os.Trace; import android.os.WorkSource; import android.provider.Settings; import android.sysprop.TelephonyProperties; import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierRestrictionRules; import android.telephony.CellInfo; Loading @@ -55,6 +56,7 @@ import android.telephony.CellSignalStrengthNr; import android.telephony.CellSignalStrengthTdscdma; import android.telephony.CellSignalStrengthWcdma; import android.telephony.ClientRequestStats; import android.telephony.DomainSelectionService; import android.telephony.ImsiEncryptionInfo; import android.telephony.ModemActivityInfo; import android.telephony.NeighboringCellInfo; Loading @@ -78,6 +80,7 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.cdma.CdmaInformationRecords; import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; import com.android.internal.telephony.emergency.EmergencyConstants; import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.metrics.ModemRestartStats; import com.android.internal.telephony.metrics.TelephonyMetrics; Loading Loading @@ -5305,6 +5308,139 @@ public class RIL extends BaseCommands implements CommandsInterface { } } /** * {@inheritDoc} */ @Override public void setEmergencyMode(int emcMode, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_SET_EMERGENCY_MODE, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " mode=" + EmergencyConstants.emergencyModeToString(emcMode)); } try { networkProxy.setEmergencyMode(rr.mSerial, emcMode); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "setEmergencyMode", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "setEmergencyMode: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void triggerEmergencyNetworkScan( @NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetwork, @DomainSelectionService.EmergencyScanType int scanType, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_TRIGGER_EMERGENCY_NETWORK_SCAN, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); } try { networkProxy.triggerEmergencyNetworkScan(rr.mSerial, RILUtils.convertEmergencyNetworkScanTrigger(accessNetwork, scanType)); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "triggerEmergencyNetworkScan", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "triggerEmergencyNetworkScan: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void cancelEmergencyNetworkScan(boolean resetScan, Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_CANCEL_EMERGENCY_NETWORK_SCAN, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " resetScan=" + resetScan); } try { networkProxy.cancelEmergencyNetworkScan(rr.mSerial, resetScan); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "cancelEmergencyNetworkScan", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "cancelEmergencyNetworkScan: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } /** * {@inheritDoc} */ @Override public void exitEmergencyMode(Message result) { RadioNetworkProxy networkProxy = getRadioServiceProxy(RadioNetworkProxy.class, result); if (networkProxy.isEmpty()) return; if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_2_1)) { RILRequest rr = obtainRequest(RIL_REQUEST_EXIT_EMERGENCY_MODE, result, mRILDefaultWorkSource); if (RILJ_LOGD) { riljLog(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest)); } try { networkProxy.exitEmergencyMode(rr.mSerial); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(NETWORK_SERVICE, "exitEmergencyMode", e); } } else { if (RILJ_LOGD) { Rlog.d(RILJ_LOG_TAG, "exitEmergencyMode: REQUEST_NOT_SUPPORTED"); } if (result != null) { AsyncResult.forMessage(result, null, CommandException.fromRilErrno(REQUEST_NOT_SUPPORTED)); result.sendToTarget(); } } } //***** Private Methods /** * This is a helper function to be called when an indication callback is called for any radio Loading