Loading src/java/com/android/internal/telephony/satellite/DatagramController.java +29 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.content.Context; import android.os.Looper; import android.telephony.Rlog; import android.telephony.SubscriptionManager; import android.telephony.satellite.ISatelliteDatagramCallback; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading Loading @@ -223,6 +224,34 @@ public class DatagramController { return mReceivePendingCount; } /** * This function is used by {@link SatelliteController} to notify {@link DatagramController} * that satellite modem state has changed. * * @param state Current satellite modem state. */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { logd("onSatelliteModemStateChanged: cleaning up resources"); cleanUpResources(); } mDatagramDispatcher.onSatelliteModemStateChanged(state); } private void cleanUpResources() { if (mReceiveDatagramTransferState == SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING) { updateReceiveStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED, mReceivePendingCount, SatelliteManager.SATELLITE_REQUEST_ABORTED); } updateReceiveStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0, SatelliteManager.SATELLITE_ERROR_NONE); } private void notifyDatagramTransferStateChangedToSessionController() { SatelliteSessionController sessionController = SatelliteSessionController.getInstance(); if (sessionController == null) { Loading src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +41 −8 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.Rlog; import android.telephony.SubscriptionManager; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading Loading @@ -277,7 +278,8 @@ public class DatagramDispatcher extends Handler { // Abort sending all the pending datagrams mControllerMetricsStats.reportOutgoingDatagramFailCount( argument.datagramType); abortSendingPendingDatagrams(argument.subId, error); abortSendingPendingDatagrams(argument.subId, SatelliteManager.SATELLITE_REQUEST_ABORTED); } } break; Loading Loading @@ -365,6 +367,8 @@ public class DatagramDispatcher extends Handler { /** * Send error code to all the pending datagrams * * @param pendingDatagramsMap The pending datagrams map to be cleaned up. * @param errorCode error code to be returned. */ @GuardedBy("mLock") Loading @@ -374,6 +378,7 @@ public class DatagramDispatcher extends Handler { if (pendingDatagramsMap.size() == 0) { return; } loge("sendErrorCodeAndCleanupPendingDatagrams: cleaning up resources"); // Send error code to all the pending datagrams for (Entry<Long, SendSatelliteDatagramArgument> entry : Loading @@ -391,17 +396,15 @@ public class DatagramDispatcher extends Handler { /** * Abort sending all the pending datagrams. * * @param subId the subId of the subscription used to send datagram * @param error error that resulted in abort. * @param subId The subId of the subscription used to send datagram * @param errorCode The error code that resulted in abort. */ @GuardedBy("mLock") private void abortSendingPendingDatagrams(int subId, @SatelliteManager.SatelliteError int error) { @SatelliteManager.SatelliteError int errorCode) { logd("abortSendingPendingDatagrams()"); sendErrorCodeAndCleanupPendingDatagrams(mPendingEmergencyDatagramsMap, SatelliteManager.SATELLITE_REQUEST_ABORTED); sendErrorCodeAndCleanupPendingDatagrams(mPendingNonEmergencyDatagramsMap, SatelliteManager.SATELLITE_REQUEST_ABORTED); sendErrorCodeAndCleanupPendingDatagrams(mPendingEmergencyDatagramsMap, errorCode); sendErrorCodeAndCleanupPendingDatagrams(mPendingNonEmergencyDatagramsMap, errorCode); } /** Loading Loading @@ -447,6 +450,36 @@ public class DatagramDispatcher extends Handler { sInstance = null; } /** * This function is used by {@link DatagramController} to notify {@link DatagramDispatcher} * that satellite modem state has changed. * * @param state Current satellite modem state. */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { logd("onSatelliteModemStateChanged: cleaning up resources"); cleanUpResources(); } } private void cleanUpResources() { synchronized (mLock) { mSendingDatagramInProgress = false; if (getPendingDatagramCount() > 0) { mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED, getPendingDatagramCount(), SatelliteManager.SATELLITE_REQUEST_ABORTED); } mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0, SatelliteManager.SATELLITE_ERROR_NONE); abortSendingPendingDatagrams(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_REQUEST_ABORTED); } } private static void logd(@NonNull String log) { Rlog.d(TAG, log); } Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +17 −12 Original line number Diff line number Diff line Loading @@ -512,7 +512,7 @@ public class SatelliteController extends Handler { updateSatelliteEnabledState(enabled, "EVENT_IS_SATELLITE_ENABLED_DONE"); } } else if (error == SatelliteManager.SATELLITE_REQUEST_NOT_SUPPORTED) { updateSatelliteSupportedState(false); updateSatelliteSupportedStateWhenSatelliteServiceConnected(false); } ((ResultReceiver) request.argument).send(error, bundle); break; Loading Loading @@ -550,7 +550,7 @@ public class SatelliteController extends Handler { boolean supported = (boolean) ar.result; if (DBG) logd("isSatelliteSupported: " + supported); bundle.putBoolean(SatelliteManager.KEY_SATELLITE_SUPPORTED, supported); updateSatelliteSupportedState(supported); updateSatelliteSupportedStateWhenSatelliteServiceConnected(supported); } } ((ResultReceiver) request.argument).send(error, bundle); Loading Loading @@ -1481,8 +1481,11 @@ public class SatelliteController extends Handler { * {@link SatelliteController} that the satellite vendor service was just connected. * <p> * {@link SatelliteController} will send requests to satellite modem to check whether it support * satellite, whether it is powered on, and whether it is provisioned. * {@link SatelliteController} will use these cached values to serve requests from its clients. * satellite and whether it is provisioned. {@link SatelliteController} will use these cached * values to serve requests from its clients. * <p> * Because satellite vendor service might have just come back from a crash, we need to disable * the satellite modem so that resources will be cleaned up and internal states will be reset. */ void onSatelliteServiceConnected() { if (mSatelliteModemInterface.isSatelliteServiceSupported()) { Loading Loading @@ -1684,7 +1687,7 @@ public class SatelliteController extends Handler { } } private void updateSatelliteSupportedState(boolean supported) { private void updateSatelliteSupportedStateWhenSatelliteServiceConnected(boolean supported) { synchronized (mIsSatelliteSupportedLock) { mIsSatelliteSupported = supported; } Loading @@ -1695,18 +1698,19 @@ public class SatelliteController extends Handler { registerForPendingDatagramCount(); registerForSatelliteModemStateChanged(); requestIsSatelliteEnabled(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, new ResultReceiver(this) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { logd("requestIsSatelliteEnabled: resultCode=" + resultCode); } }); requestIsSatelliteProvisioned(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, new ResultReceiver(this) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { logd("requestIsSatelliteProvisioned: resultCode=" + resultCode); requestSatelliteEnabled(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, false, false, new IIntegerConsumer.Stub() { @Override public void accept(int result) { logd("requestSatelliteEnabled: result=" + result); } }); } }); requestSatelliteCapabilities(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, Loading Loading @@ -1861,6 +1865,7 @@ public class SatelliteController extends Handler { updateSatelliteEnabledState( false, "handleEventSatelliteModemStateChanged"); } mDatagramController.onSatelliteModemStateChanged(state); } private static void logd(@NonNull String log) { Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramController.java +29 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.content.Context; import android.os.Looper; import android.telephony.Rlog; import android.telephony.SubscriptionManager; import android.telephony.satellite.ISatelliteDatagramCallback; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading Loading @@ -223,6 +224,34 @@ public class DatagramController { return mReceivePendingCount; } /** * This function is used by {@link SatelliteController} to notify {@link DatagramController} * that satellite modem state has changed. * * @param state Current satellite modem state. */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { logd("onSatelliteModemStateChanged: cleaning up resources"); cleanUpResources(); } mDatagramDispatcher.onSatelliteModemStateChanged(state); } private void cleanUpResources() { if (mReceiveDatagramTransferState == SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING) { updateReceiveStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED, mReceivePendingCount, SatelliteManager.SATELLITE_REQUEST_ABORTED); } updateReceiveStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0, SatelliteManager.SATELLITE_ERROR_NONE); } private void notifyDatagramTransferStateChangedToSessionController() { SatelliteSessionController sessionController = SatelliteSessionController.getInstance(); if (sessionController == null) { Loading
src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +41 −8 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.Rlog; import android.telephony.SubscriptionManager; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading Loading @@ -277,7 +278,8 @@ public class DatagramDispatcher extends Handler { // Abort sending all the pending datagrams mControllerMetricsStats.reportOutgoingDatagramFailCount( argument.datagramType); abortSendingPendingDatagrams(argument.subId, error); abortSendingPendingDatagrams(argument.subId, SatelliteManager.SATELLITE_REQUEST_ABORTED); } } break; Loading Loading @@ -365,6 +367,8 @@ public class DatagramDispatcher extends Handler { /** * Send error code to all the pending datagrams * * @param pendingDatagramsMap The pending datagrams map to be cleaned up. * @param errorCode error code to be returned. */ @GuardedBy("mLock") Loading @@ -374,6 +378,7 @@ public class DatagramDispatcher extends Handler { if (pendingDatagramsMap.size() == 0) { return; } loge("sendErrorCodeAndCleanupPendingDatagrams: cleaning up resources"); // Send error code to all the pending datagrams for (Entry<Long, SendSatelliteDatagramArgument> entry : Loading @@ -391,17 +396,15 @@ public class DatagramDispatcher extends Handler { /** * Abort sending all the pending datagrams. * * @param subId the subId of the subscription used to send datagram * @param error error that resulted in abort. * @param subId The subId of the subscription used to send datagram * @param errorCode The error code that resulted in abort. */ @GuardedBy("mLock") private void abortSendingPendingDatagrams(int subId, @SatelliteManager.SatelliteError int error) { @SatelliteManager.SatelliteError int errorCode) { logd("abortSendingPendingDatagrams()"); sendErrorCodeAndCleanupPendingDatagrams(mPendingEmergencyDatagramsMap, SatelliteManager.SATELLITE_REQUEST_ABORTED); sendErrorCodeAndCleanupPendingDatagrams(mPendingNonEmergencyDatagramsMap, SatelliteManager.SATELLITE_REQUEST_ABORTED); sendErrorCodeAndCleanupPendingDatagrams(mPendingEmergencyDatagramsMap, errorCode); sendErrorCodeAndCleanupPendingDatagrams(mPendingNonEmergencyDatagramsMap, errorCode); } /** Loading Loading @@ -447,6 +450,36 @@ public class DatagramDispatcher extends Handler { sInstance = null; } /** * This function is used by {@link DatagramController} to notify {@link DatagramDispatcher} * that satellite modem state has changed. * * @param state Current satellite modem state. */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { logd("onSatelliteModemStateChanged: cleaning up resources"); cleanUpResources(); } } private void cleanUpResources() { synchronized (mLock) { mSendingDatagramInProgress = false; if (getPendingDatagramCount() > 0) { mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED, getPendingDatagramCount(), SatelliteManager.SATELLITE_REQUEST_ABORTED); } mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0, SatelliteManager.SATELLITE_ERROR_NONE); abortSendingPendingDatagrams(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, SatelliteManager.SATELLITE_REQUEST_ABORTED); } } private static void logd(@NonNull String log) { Rlog.d(TAG, log); } Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +17 −12 Original line number Diff line number Diff line Loading @@ -512,7 +512,7 @@ public class SatelliteController extends Handler { updateSatelliteEnabledState(enabled, "EVENT_IS_SATELLITE_ENABLED_DONE"); } } else if (error == SatelliteManager.SATELLITE_REQUEST_NOT_SUPPORTED) { updateSatelliteSupportedState(false); updateSatelliteSupportedStateWhenSatelliteServiceConnected(false); } ((ResultReceiver) request.argument).send(error, bundle); break; Loading Loading @@ -550,7 +550,7 @@ public class SatelliteController extends Handler { boolean supported = (boolean) ar.result; if (DBG) logd("isSatelliteSupported: " + supported); bundle.putBoolean(SatelliteManager.KEY_SATELLITE_SUPPORTED, supported); updateSatelliteSupportedState(supported); updateSatelliteSupportedStateWhenSatelliteServiceConnected(supported); } } ((ResultReceiver) request.argument).send(error, bundle); Loading Loading @@ -1481,8 +1481,11 @@ public class SatelliteController extends Handler { * {@link SatelliteController} that the satellite vendor service was just connected. * <p> * {@link SatelliteController} will send requests to satellite modem to check whether it support * satellite, whether it is powered on, and whether it is provisioned. * {@link SatelliteController} will use these cached values to serve requests from its clients. * satellite and whether it is provisioned. {@link SatelliteController} will use these cached * values to serve requests from its clients. * <p> * Because satellite vendor service might have just come back from a crash, we need to disable * the satellite modem so that resources will be cleaned up and internal states will be reset. */ void onSatelliteServiceConnected() { if (mSatelliteModemInterface.isSatelliteServiceSupported()) { Loading Loading @@ -1684,7 +1687,7 @@ public class SatelliteController extends Handler { } } private void updateSatelliteSupportedState(boolean supported) { private void updateSatelliteSupportedStateWhenSatelliteServiceConnected(boolean supported) { synchronized (mIsSatelliteSupportedLock) { mIsSatelliteSupported = supported; } Loading @@ -1695,18 +1698,19 @@ public class SatelliteController extends Handler { registerForPendingDatagramCount(); registerForSatelliteModemStateChanged(); requestIsSatelliteEnabled(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, new ResultReceiver(this) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { logd("requestIsSatelliteEnabled: resultCode=" + resultCode); } }); requestIsSatelliteProvisioned(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, new ResultReceiver(this) { @Override protected void onReceiveResult(int resultCode, Bundle resultData) { logd("requestIsSatelliteProvisioned: resultCode=" + resultCode); requestSatelliteEnabled(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, false, false, new IIntegerConsumer.Stub() { @Override public void accept(int result) { logd("requestSatelliteEnabled: result=" + result); } }); } }); requestSatelliteCapabilities(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, Loading Loading @@ -1861,6 +1865,7 @@ public class SatelliteController extends Handler { updateSatelliteEnabledState( false, "handleEventSatelliteModemStateChanged"); } mDatagramController.onSatelliteModemStateChanged(state); } private static void logd(@NonNull String log) { Loading