script-astra/Android/Sdk/sources/android-35/com/android/internal/telephony/RILUtils.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

5828 lines
285 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.telephony;
import static android.telephony.TelephonyManager.CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE;
import static android.telephony.TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED;
import static android.telephony.TelephonyManager.CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE;
import static android.telephony.TelephonyManager.CAPABILITY_SIM_PHONEBOOK_IN_MODEM;
import static android.telephony.TelephonyManager.CAPABILITY_SLICING_CONFIG_SUPPORTED;
import static android.telephony.TelephonyManager.CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING;
import static android.telephony.TelephonyManager.CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ALLOCATE_PDU_SESSION_ID;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ALLOW_DATA;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ANSWER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_BASEBAND_VERSION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CANCEL_EMERGENCY_NETWORK_SCAN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CANCEL_HANDOVER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CANCEL_USSD;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_BROADCAST_ACTIVATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_BURST_DTMF;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_FLASH;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SEND_SMS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_SUBSCRIPTION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CHANGE_BARRING_PASSWORD;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CHANGE_SIM_PIN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CHANGE_SIM_PIN2;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_CONFERENCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DATA_CALL_LIST;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DATA_REGISTRATION_STATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEACTIVATE_DATA_CALL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DELETE_SMS_ON_SIM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEVICE_IDENTITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DEVICE_IMEI;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DIAL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DTMF;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DTMF_START;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_DTMF_STOP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_EMERGENCY_DIAL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_MODEM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_UICC_APPLICATIONS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENABLE_VONR;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PIN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PIN2;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PUK;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ENTER_SIM_PUK2;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_EXIT_EMERGENCY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_EXPLICIT_CALL_TRANSFER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_ACTIVITY_INFO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_ALLOWED_CARRIERS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_BARRING_INFO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_CELL_INFO_LIST;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_CLIR;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_CURRENT_CALLS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_DC_RT_INFO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_HAL_DEVICE_CAPABILITIES;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_HARDWARE_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_IMEI;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_IMEISV;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_IMSI;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_LOCATION_PRIVACY_SETTING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_MODEM_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_MUTE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_NEIGHBORING_CELL_IDS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_PHONE_CAPABILITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_RADIO_CAPABILITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SIMULTANEOUS_CALLING_SUPPORT;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SIM_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SLICING_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SLOT_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SMSC_ADDRESS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GET_USAGE_SETTING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GSM_BROADCAST_ACTIVATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GSM_GET_BROADCAST_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_GSM_SET_BROADCAST_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IMS_REGISTRATION_STATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IMS_SEND_SMS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_ISIM_AUTHENTICATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_N1_MODE_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_NULL_CIPHER_AND_INTEGRITY_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_SECURITY_ALGORITHMS_UPDATED_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_IS_VONR_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_LAST_CALL_FAIL_CAUSE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_NV_READ_ITEM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_NV_RESET_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_NV_WRITE_CDMA_PRL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_NV_WRITE_ITEM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_OEM_HOOK_RAW;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_OEM_HOOK_STRINGS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_OPERATOR;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_PULL_LCEDATA;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_CALL_FORWARD_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_CALL_WAITING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_CLIP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_FACILITY_LOCK;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_QUERY_TTY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_RADIO_POWER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_RELEASE_PDU_SESSION_ID;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_REPORT_SMS_MEMORY_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_RESET_RADIO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SCREEN_STATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_ANBR_QUERY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_DEVICE_STATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_SMS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_SMS_EXPECT_MORE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEND_USSD;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SEPARATE_CONNECTION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SETUP_DATA_CALL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_ALLOWED_CARRIERS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_BAND_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_CALL_FORWARD;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_CALL_WAITING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_CLIR;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_DATA_PROFILE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_DATA_THROTTLING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_DC_RT_INFO_RATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_EMERGENCY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_FACILITY_LOCK;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_INITIAL_ATTACH_APN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_LOCATION_PRIVACY_SETTING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_LOCATION_UPDATES;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_LOGICAL_TO_PHYSICAL_SLOT_MAPPING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_MUTE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_N1_MODE_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_NULL_CIPHER_AND_INTEGRITY_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_PREFERRED_DATA_MODEM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_RADIO_CAPABILITY;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SIM_CARD_POWER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SMSC_ADDRESS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SRVCC_CALL_INFO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_TTY_MODE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_UICC_SUBSCRIPTION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SET_USAGE_SETTING;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SHUTDOWN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIGNAL_STRENGTH;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_AUTHENTICATION;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_CLOSE_CHANNEL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_IO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_OPEN_CHANNEL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SMS_ACKNOWLEDGE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_START_HANDOVER;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_START_IMS_TRAFFIC;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_START_KEEPALIVE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_START_LCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_START_NETWORK_SCAN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_GET_PROFILE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STK_SET_PROFILE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STOP_IMS_TRAFFIC;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STOP_KEEPALIVE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STOP_LCE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_STOP_NETWORK_SCAN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SWITCH_DUAL_SIM_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_TRIGGER_EMERGENCY_NETWORK_SCAN;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_TRIGGER_EPS_FALLBACK;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_UDUB;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_UPDATE_IMS_CALL_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_UPDATE_IMS_REGISTRATION_INFO;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORD;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_VOICE_RADIO_TECH;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_VOICE_REGISTRATION_STATE;
import static com.android.internal.telephony.RILConstants.RIL_REQUEST_WRITE_SMS_TO_SIM;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_BARRING_INFO_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CALL_RING;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_CALL_WAITING;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_INFO_REC;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_OTA_PROVISION_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_PRL_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CELLULAR_IDENTIFIER_DISCLOSED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CELL_INFO_LIST;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CONNECTION_SETUP_FAILURE;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_DATA_CALL_LIST_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_DC_RT_INFO_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EMERGENCY_NUMBER_LIST;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_HARDWARE_CONFIG_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ICC_SLOT_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_IMEI_MAPPING_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_KEEPALIVE_STATUS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_LCEDATA_RECV;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_MODEM_RESTART;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_NETWORK_SCAN_RESULT;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_NITZ_TIME_RECEIVED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_NOTIFY_ANBR;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_OEM_HOOK_RAW;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ON_SS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ON_USSD;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ON_USSD_REQUEST;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_PCO_DATA;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RADIO_CAPABILITY;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_REGISTRATION_FAILED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESEND_INCALL_MUTE;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_CDMA_NEW_SMS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_RECORDS_RECEIVED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESTRICTED_STATE_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RIL_CONNECTED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RINGBACK_TONE;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SECURITY_ALGORITHMS_UPDATED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIGNAL_STRENGTH;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIMULTANEOUS_CALLING_SUPPORT_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIM_REFRESH;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIM_SMS_STORAGE_FULL;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SLICING_CONFIG_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SRVCC_STATE_NOTIFY;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_CALL_SETUP;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_CC_ALPHA_NOTIFY;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_EVENT_NOTIFY;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_PROACTIVE_COMMAND;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_STK_SESSION_END;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SUPP_SVC_NOTIFICATION;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_TRIGGER_IMS_DEREGISTRATION;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_UNTHROTTLE_APN;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_VOICE_RADIO_TECH_CHANGED;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.radio.data.SliceInfo;
import android.net.InetAddresses;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.os.SystemClock;
import android.service.carrier.CarrierIdentifier;
import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation;
import android.telephony.BarringInfo;
import android.telephony.CarrierInfo;
import android.telephony.CarrierRestrictionRules;
import android.telephony.CellConfigLte;
import android.telephony.CellIdentity;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
import android.telephony.CellIdentityLte;
import android.telephony.CellIdentityNr;
import android.telephony.CellIdentityTdscdma;
import android.telephony.CellIdentityWcdma;
import android.telephony.CellInfo;
import android.telephony.CellInfoCdma;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellInfoNr;
import android.telephony.CellInfoTdscdma;
import android.telephony.CellInfoWcdma;
import android.telephony.CellSignalStrength;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.CellSignalStrengthNr;
import android.telephony.CellSignalStrengthTdscdma;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.CellularIdentifierDisclosure;
import android.telephony.ClosedSubscriberGroupInfo;
import android.telephony.DomainSelectionService;
import android.telephony.EmergencyRegistrationResult;
import android.telephony.LinkCapacityEstimate;
import android.telephony.ModemInfo;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PhoneCapability;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhysicalChannelConfig;
import android.telephony.RadioAccessSpecifier;
import android.telephony.SecurityAlgorithmUpdate;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SignalThresholdInfo;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.telephony.UiccSlotMapping;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataProfile;
import android.telephony.data.DataService;
import android.telephony.data.DataService.DeactivateDataReason;
import android.telephony.data.DataService.SetupDataReason;
import android.telephony.data.EpsQos;
import android.telephony.data.NetworkSliceInfo;
import android.telephony.data.NetworkSlicingConfig;
import android.telephony.data.NrQos;
import android.telephony.data.Qos;
import android.telephony.data.QosBearerFilter;
import android.telephony.data.QosBearerSession;
import android.telephony.data.RouteSelectionDescriptor;
import android.telephony.data.TrafficDescriptor;
import android.telephony.data.UrspRule;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.feature.ConnectionFailureInfo;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase.ImsDeregistrationReason;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cat.ComprehensionTlv;
import com.android.internal.telephony.cat.ComprehensionTlvTag;
import com.android.internal.telephony.cdma.SmsMessage;
import com.android.internal.telephony.cdma.sms.CdmaSmsAddress;
import com.android.internal.telephony.cdma.sms.CdmaSmsSubaddress;
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
import com.android.internal.telephony.data.KeepaliveStatus;
import com.android.internal.telephony.data.KeepaliveStatus.KeepaliveStatusCode;
import com.android.internal.telephony.imsphone.ImsCallInfo;
import com.android.internal.telephony.uicc.AdnCapacity;
import com.android.internal.telephony.uicc.IccCardApplicationStatus;
import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccSimPortInfo;
import com.android.internal.telephony.uicc.IccSlotPortMapping;
import com.android.internal.telephony.uicc.IccSlotStatus;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.PortUtils;
import com.android.internal.telephony.uicc.SimPhonebookRecord;
import com.android.telephony.Rlog;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Utils class for HAL <-> RIL conversions
*/
public class RILUtils {
private static final String TAG = "RILUtils";
// The number of required config values for broadcast SMS stored in RIL_CdmaBroadcastServiceInfo
public static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
// The number of service categories for broadcast SMS
public static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
// Radio power failure UUIDs
public static final String RADIO_POWER_FAILURE_BUGREPORT_UUID =
"316f3801-fa21-4954-a42f-0041eada3b31";
public static final String RADIO_POWER_FAILURE_RF_HARDWARE_ISSUE_UUID =
"316f3801-fa21-4954-a42f-0041eada3b32";
public static final String RADIO_POWER_FAILURE_NO_RF_CALIBRATION_UUID =
"316f3801-fa21-4954-a42f-0041eada3b33";
private static final Set<Class> WRAPPER_CLASSES = new HashSet(Arrays.asList(
Boolean.class, Character.class, Byte.class, Short.class, Integer.class, Long.class,
Float.class, Double.class));
/**
* Convert to PersoSubstate defined in radio/1.5/types.hal
* @param persoType PersoSubState type
* @return The converted PersoSubstate
*/
public static int convertToHalPersoType(
IccCardApplicationStatus.PersoSubState persoType) {
switch (persoType) {
case PERSOSUBSTATE_IN_PROGRESS:
return android.hardware.radio.V1_5.PersoSubstate.IN_PROGRESS;
case PERSOSUBSTATE_READY:
return android.hardware.radio.V1_5.PersoSubstate.READY;
case PERSOSUBSTATE_SIM_NETWORK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NETWORK;
case PERSOSUBSTATE_SIM_NETWORK_SUBSET:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NETWORK_SUBSET;
case PERSOSUBSTATE_SIM_CORPORATE:
return android.hardware.radio.V1_5.PersoSubstate.SIM_CORPORATE;
case PERSOSUBSTATE_SIM_SERVICE_PROVIDER:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SERVICE_PROVIDER;
case PERSOSUBSTATE_SIM_SIM:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SIM;
case PERSOSUBSTATE_SIM_NETWORK_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NETWORK_PUK;
case PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NETWORK_SUBSET_PUK;
case PERSOSUBSTATE_SIM_CORPORATE_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_CORPORATE_PUK;
case PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SERVICE_PROVIDER_PUK;
case PERSOSUBSTATE_SIM_SIM_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SIM_PUK;
case PERSOSUBSTATE_RUIM_NETWORK1:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_NETWORK1;
case PERSOSUBSTATE_RUIM_NETWORK2:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_NETWORK2;
case PERSOSUBSTATE_RUIM_HRPD:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_HRPD;
case PERSOSUBSTATE_RUIM_CORPORATE:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_CORPORATE;
case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_SERVICE_PROVIDER;
case PERSOSUBSTATE_RUIM_RUIM:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_RUIM;
case PERSOSUBSTATE_RUIM_NETWORK1_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_NETWORK1_PUK;
case PERSOSUBSTATE_RUIM_NETWORK2_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_NETWORK2_PUK;
case PERSOSUBSTATE_RUIM_HRPD_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_HRPD_PUK;
case PERSOSUBSTATE_RUIM_CORPORATE_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_CORPORATE_PUK;
case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_SERVICE_PROVIDER_PUK;
case PERSOSUBSTATE_RUIM_RUIM_PUK:
return android.hardware.radio.V1_5.PersoSubstate.RUIM_RUIM_PUK;
case PERSOSUBSTATE_SIM_SPN:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SPN;
case PERSOSUBSTATE_SIM_SPN_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SPN_PUK;
case PERSOSUBSTATE_SIM_SP_EHPLMN:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SP_EHPLMN;
case PERSOSUBSTATE_SIM_SP_EHPLMN_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_SP_EHPLMN_PUK;
case PERSOSUBSTATE_SIM_ICCID:
return android.hardware.radio.V1_5.PersoSubstate.SIM_ICCID;
case PERSOSUBSTATE_SIM_ICCID_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_ICCID_PUK;
case PERSOSUBSTATE_SIM_IMPI:
return android.hardware.radio.V1_5.PersoSubstate.SIM_IMPI;
case PERSOSUBSTATE_SIM_IMPI_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_IMPI_PUK;
case PERSOSUBSTATE_SIM_NS_SP:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NS_SP;
case PERSOSUBSTATE_SIM_NS_SP_PUK:
return android.hardware.radio.V1_5.PersoSubstate.SIM_NS_SP_PUK;
default:
return android.hardware.radio.V1_5.PersoSubstate.UNKNOWN;
}
}
/**
* Convert to PersoSubstate.aidl
* @param persoType PersoSubState type
* @return The converted PersoSubstate
*/
public static int convertToHalPersoTypeAidl(
IccCardApplicationStatus.PersoSubState persoType) {
switch (persoType) {
case PERSOSUBSTATE_IN_PROGRESS:
return android.hardware.radio.sim.PersoSubstate.IN_PROGRESS;
case PERSOSUBSTATE_READY:
return android.hardware.radio.sim.PersoSubstate.READY;
case PERSOSUBSTATE_SIM_NETWORK:
return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK;
case PERSOSUBSTATE_SIM_NETWORK_SUBSET:
return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_SUBSET;
case PERSOSUBSTATE_SIM_CORPORATE:
return android.hardware.radio.sim.PersoSubstate.SIM_CORPORATE;
case PERSOSUBSTATE_SIM_SERVICE_PROVIDER:
return android.hardware.radio.sim.PersoSubstate.SIM_SERVICE_PROVIDER;
case PERSOSUBSTATE_SIM_SIM:
return android.hardware.radio.sim.PersoSubstate.SIM_SIM;
case PERSOSUBSTATE_SIM_NETWORK_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_PUK;
case PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_SUBSET_PUK;
case PERSOSUBSTATE_SIM_CORPORATE_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_CORPORATE_PUK;
case PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_SERVICE_PROVIDER_PUK;
case PERSOSUBSTATE_SIM_SIM_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_SIM_PUK;
case PERSOSUBSTATE_RUIM_NETWORK1:
return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK1;
case PERSOSUBSTATE_RUIM_NETWORK2:
return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK2;
case PERSOSUBSTATE_RUIM_HRPD:
return android.hardware.radio.sim.PersoSubstate.RUIM_HRPD;
case PERSOSUBSTATE_RUIM_CORPORATE:
return android.hardware.radio.sim.PersoSubstate.RUIM_CORPORATE;
case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER:
return android.hardware.radio.sim.PersoSubstate.RUIM_SERVICE_PROVIDER;
case PERSOSUBSTATE_RUIM_RUIM:
return android.hardware.radio.sim.PersoSubstate.RUIM_RUIM;
case PERSOSUBSTATE_RUIM_NETWORK1_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK1_PUK;
case PERSOSUBSTATE_RUIM_NETWORK2_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK2_PUK;
case PERSOSUBSTATE_RUIM_HRPD_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_HRPD_PUK;
case PERSOSUBSTATE_RUIM_CORPORATE_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_CORPORATE_PUK;
case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_SERVICE_PROVIDER_PUK;
case PERSOSUBSTATE_RUIM_RUIM_PUK:
return android.hardware.radio.sim.PersoSubstate.RUIM_RUIM_PUK;
case PERSOSUBSTATE_SIM_SPN:
return android.hardware.radio.sim.PersoSubstate.SIM_SPN;
case PERSOSUBSTATE_SIM_SPN_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_SPN_PUK;
case PERSOSUBSTATE_SIM_SP_EHPLMN:
return android.hardware.radio.sim.PersoSubstate.SIM_SP_EHPLMN;
case PERSOSUBSTATE_SIM_SP_EHPLMN_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_SP_EHPLMN_PUK;
case PERSOSUBSTATE_SIM_ICCID:
return android.hardware.radio.sim.PersoSubstate.SIM_ICCID;
case PERSOSUBSTATE_SIM_ICCID_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_ICCID_PUK;
case PERSOSUBSTATE_SIM_IMPI:
return android.hardware.radio.sim.PersoSubstate.SIM_IMPI;
case PERSOSUBSTATE_SIM_IMPI_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_IMPI_PUK;
case PERSOSUBSTATE_SIM_NS_SP:
return android.hardware.radio.sim.PersoSubstate.SIM_NS_SP;
case PERSOSUBSTATE_SIM_NS_SP_PUK:
return android.hardware.radio.sim.PersoSubstate.SIM_NS_SP_PUK;
default:
return android.hardware.radio.sim.PersoSubstate.UNKNOWN;
}
}
/**
* Convert to GsmSmsMessage defined in radio/1.0/types.hal
* @param smscPdu SMSC address
* @param pdu SMS in PDU format
* @return A converted GsmSmsMessage
*/
public static android.hardware.radio.V1_0.GsmSmsMessage convertToHalGsmSmsMessage(
String smscPdu, String pdu) {
android.hardware.radio.V1_0.GsmSmsMessage msg =
new android.hardware.radio.V1_0.GsmSmsMessage();
msg.smscPdu = smscPdu == null ? "" : smscPdu;
msg.pdu = pdu == null ? "" : pdu;
return msg;
}
/**
* Convert to GsmSmsMessage.aidl
* @param smscPdu SMSC address
* @param pdu SMS in PDU format
* @return A converted GsmSmsMessage
*/
public static android.hardware.radio.messaging.GsmSmsMessage convertToHalGsmSmsMessageAidl(
String smscPdu, String pdu) {
android.hardware.radio.messaging.GsmSmsMessage msg =
new android.hardware.radio.messaging.GsmSmsMessage();
msg.smscPdu = convertNullToEmptyString(smscPdu);
msg.pdu = convertNullToEmptyString(pdu);
return msg;
}
/**
* Convert to CdmaSmsMessage defined in radio/1.0/types.hal
* @param pdu SMS in PDU format
* @return A converted CdmaSmsMessage
*/
public static android.hardware.radio.V1_0.CdmaSmsMessage convertToHalCdmaSmsMessage(
byte[] pdu) {
android.hardware.radio.V1_0.CdmaSmsMessage msg =
new android.hardware.radio.V1_0.CdmaSmsMessage();
int addrNbrOfDigits;
int subaddrNbrOfDigits;
int bearerDataLength;
ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
DataInputStream dis = new DataInputStream(bais);
try {
msg.teleserviceId = dis.readInt(); // teleServiceId
msg.isServicePresent = (byte) dis.readInt() == 1; // servicePresent
msg.serviceCategory = dis.readInt(); // serviceCategory
msg.address.digitMode = dis.read(); // address digit mode
msg.address.numberMode = dis.read(); // address number mode
msg.address.numberType = dis.read(); // address number type
msg.address.numberPlan = dis.read(); // address number plan
addrNbrOfDigits = (byte) dis.read();
for (int i = 0; i < addrNbrOfDigits; i++) {
msg.address.digits.add(dis.readByte()); // address_orig_bytes[i]
}
msg.subAddress.subaddressType = dis.read(); //subaddressType
msg.subAddress.odd = (byte) dis.read() == 1; //subaddr odd
subaddrNbrOfDigits = (byte) dis.read();
for (int i = 0; i < subaddrNbrOfDigits; i++) {
msg.subAddress.digits.add(dis.readByte()); //subaddr_orig_bytes[i]
}
bearerDataLength = dis.read();
for (int i = 0; i < bearerDataLength; i++) {
msg.bearerData.add(dis.readByte()); //bearerData[i]
}
} catch (IOException ex) {
}
return msg;
}
/**
* Convert to CdmaSmsMessage.aidl
* @param pdu SMS in PDU format
* @return The converted CdmaSmsMessage
*/
public static android.hardware.radio.messaging.CdmaSmsMessage convertToHalCdmaSmsMessageAidl(
byte[] pdu) {
android.hardware.radio.messaging.CdmaSmsMessage msg =
new android.hardware.radio.messaging.CdmaSmsMessage();
msg.address = new android.hardware.radio.messaging.CdmaSmsAddress();
msg.subAddress = new android.hardware.radio.messaging.CdmaSmsSubaddress();
int addrNbrOfDigits;
int subaddrNbrOfDigits;
int bearerDataLength;
ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
DataInputStream dis = new DataInputStream(bais);
try {
msg.teleserviceId = dis.readInt(); // teleServiceId
msg.isServicePresent = (byte) dis.readInt() == 1; // servicePresent
msg.serviceCategory = dis.readInt(); // serviceCategory
msg.address.digitMode = dis.read(); // address digit mode
msg.address.isNumberModeDataNetwork =
dis.read() == CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK; // address number mode
msg.address.numberType = dis.read(); // address number type
msg.address.numberPlan = dis.read(); // address number plan
addrNbrOfDigits = (byte) dis.read();
byte[] digits = new byte[addrNbrOfDigits];
for (int i = 0; i < addrNbrOfDigits; i++) {
digits[i] = dis.readByte(); // address_orig_bytes[i]
}
msg.address.digits = digits;
msg.subAddress.subaddressType = dis.read(); //subaddressType
msg.subAddress.odd = (byte) dis.read() == 1; //subaddr odd
subaddrNbrOfDigits = (byte) dis.read();
digits = new byte[subaddrNbrOfDigits];
for (int i = 0; i < subaddrNbrOfDigits; i++) {
digits[i] = dis.readByte(); //subaddr_orig_bytes[i]
}
msg.subAddress.digits = digits;
bearerDataLength = dis.read();
byte[] bearerData = new byte[bearerDataLength];
for (int i = 0; i < bearerDataLength; i++) {
bearerData[i] = dis.readByte(); //bearerData[i]
}
msg.bearerData = bearerData;
} catch (IOException ex) {
}
return msg;
}
/**
* Convert CdmaSmsMessage defined in radio/1.0/types.hal to SmsMessage
* Note only primitive fields are set
* @param cdmaSmsMessage CdmaSmsMessage defined in radio/1.0/types.hal
* @return A converted SmsMessage
*/
public static SmsMessage convertHalCdmaSmsMessage(
android.hardware.radio.V1_0.CdmaSmsMessage cdmaSmsMessage) {
// Note: Parcel.readByte actually reads one Int and masks to byte
SmsEnvelope env = new SmsEnvelope();
CdmaSmsAddress addr = new CdmaSmsAddress();
CdmaSmsSubaddress subaddr = new CdmaSmsSubaddress();
byte[] data;
byte count;
int countInt;
int addressDigitMode;
//currently not supported by the modem-lib: env.mMessageType
env.teleService = cdmaSmsMessage.teleserviceId;
if (cdmaSmsMessage.isServicePresent) {
env.messageType = SmsEnvelope.MESSAGE_TYPE_BROADCAST;
} else {
if (SmsEnvelope.TELESERVICE_NOT_SET == env.teleService) {
// assume type ACK
env.messageType = SmsEnvelope.MESSAGE_TYPE_ACKNOWLEDGE;
} else {
env.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT;
}
}
env.serviceCategory = cdmaSmsMessage.serviceCategory;
// address
addressDigitMode = cdmaSmsMessage.address.digitMode;
addr.digitMode = (byte) (0xFF & addressDigitMode);
addr.numberMode = (byte) (0xFF & cdmaSmsMessage.address.numberMode);
addr.ton = cdmaSmsMessage.address.numberType;
addr.numberPlan = (byte) (0xFF & cdmaSmsMessage.address.numberPlan);
count = (byte) cdmaSmsMessage.address.digits.size();
addr.numberOfDigits = count;
data = new byte[count];
for (int index = 0; index < count; index++) {
data[index] = cdmaSmsMessage.address.digits.get(index);
// convert the value if it is 4-bit DTMF to 8 bit
if (addressDigitMode == CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF) {
data[index] = SmsMessage.convertDtmfToAscii(data[index]);
}
}
addr.origBytes = data;
subaddr.type = cdmaSmsMessage.subAddress.subaddressType;
subaddr.odd = (byte) (cdmaSmsMessage.subAddress.odd ? 1 : 0);
count = (byte) cdmaSmsMessage.subAddress.digits.size();
if (count < 0) {
count = 0;
}
// p_cur->sSubAddress.digits[digitCount] :
data = new byte[count];
for (int index = 0; index < count; ++index) {
data[index] = cdmaSmsMessage.subAddress.digits.get(index);
}
subaddr.origBytes = data;
/* currently not supported by the modem-lib:
env.bearerReply
env.replySeqNo
env.errorClass
env.causeCode
*/
// bearer data
countInt = cdmaSmsMessage.bearerData.size();
if (countInt < 0) {
countInt = 0;
}
data = new byte[countInt];
for (int index = 0; index < countInt; index++) {
data[index] = cdmaSmsMessage.bearerData.get(index);
}
// BD gets further decoded when accessed in SMSDispatcher
env.bearerData = data;
// link the filled objects to the SMS
env.origAddress = addr;
env.origSubaddress = subaddr;
SmsMessage msg = new SmsMessage(addr, env);
return msg;
}
/**
* Convert CdmaSmsMessage defined in CdmaSmsMessage.aidl to SmsMessage
* Note only primitive fields are set
* @param msg CdmaSmsMessage defined in CdmaSmsMessage.aidl
* @return A converted SmsMessage
*/
public static SmsMessage convertHalCdmaSmsMessage(
android.hardware.radio.messaging.CdmaSmsMessage msg) {
// Note: Parcel.readByte actually reads one Int and masks to byte
SmsEnvelope env = new SmsEnvelope();
CdmaSmsAddress addr = new CdmaSmsAddress();
CdmaSmsSubaddress subaddr = new CdmaSmsSubaddress();
// address
int addressDigitMode = msg.address.digitMode;
addr.digitMode = (byte) (0xFF & addressDigitMode);
addr.numberMode = (byte) (0xFF & (msg.address.isNumberModeDataNetwork ? 1 : 0));
addr.ton = msg.address.numberType;
addr.numberPlan = (byte) (0xFF & msg.address.numberPlan);
addr.numberOfDigits = msg.address.digits.length;
byte[] data = new byte[msg.address.digits.length];
for (int index = 0; index < data.length; index++) {
data[index] = msg.address.digits[index];
// convert the value if it is 4-bit DTMF to 8 bit
if (addressDigitMode == CdmaSmsAddress.DIGIT_MODE_4BIT_DTMF) {
data[index] = SmsMessage.convertDtmfToAscii(data[index]);
}
}
addr.origBytes = data;
// subaddress
subaddr.type = msg.subAddress.subaddressType;
subaddr.odd = (byte) (msg.subAddress.odd ? 1 : 0);
subaddr.origBytes = msg.subAddress.digits;
// envelope
// currently not supported by the modem-lib: env.bearerReply, env.replySeqNo,
// env.errorClass, env.causeCode, env.mMessageType
env.teleService = msg.teleserviceId;
if (msg.isServicePresent) {
env.messageType = SmsEnvelope.MESSAGE_TYPE_BROADCAST;
} else {
if (SmsEnvelope.TELESERVICE_NOT_SET == env.teleService) {
// assume type ACK
env.messageType = SmsEnvelope.MESSAGE_TYPE_ACKNOWLEDGE;
} else {
env.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT;
}
}
env.serviceCategory = msg.serviceCategory;
// bearer data is further decoded when accessed in SmsDispatcher
env.bearerData = msg.bearerData;
// link the filled objects to the SMS
env.origAddress = addr;
env.origSubaddress = subaddr;
return new SmsMessage(addr, env);
}
/**
* Convert to DataProfileInfo defined in radio/1.4/types.hal
* @param dp Data profile
* @return The converted DataProfileInfo
*/
public static android.hardware.radio.V1_4.DataProfileInfo convertToHalDataProfile14(
DataProfile dp) {
android.hardware.radio.V1_4.DataProfileInfo dpi =
new android.hardware.radio.V1_4.DataProfileInfo();
dpi.apn = dp.getApn();
dpi.protocol = dp.getProtocolType();
dpi.roamingProtocol = dp.getRoamingProtocolType();
dpi.authType = dp.getAuthType();
dpi.user = TextUtils.emptyIfNull(dp.getUserName());
dpi.password = TextUtils.emptyIfNull(dp.getPassword());
dpi.type = dp.getType();
dpi.maxConnsTime = dp.getMaxConnectionsTime();
dpi.maxConns = dp.getMaxConnections();
dpi.waitTime = dp.getWaitTime();
dpi.enabled = dp.isEnabled();
dpi.supportedApnTypesBitmap = dp.getSupportedApnTypesBitmask();
// Shift by 1 bit due to the discrepancy between
// android.hardware.radio.V1_0.RadioAccessFamily and the bitmask version of
// ServiceState.RIL_RADIO_TECHNOLOGY_XXXX.
dpi.bearerBitmap = ServiceState.convertNetworkTypeBitmaskToBearerBitmask(
dp.getBearerBitmask()) << 1;
dpi.mtu = dp.getMtuV4();
dpi.persistent = dp.isPersistent();
dpi.preferred = dp.isPreferred();
// profile id is only meaningful when it's persistent on the modem.
dpi.profileId = (dpi.persistent) ? dp.getProfileId()
: android.hardware.radio.V1_0.DataProfileId.INVALID;
return dpi;
}
/**
* Convert to DataProfileInfo defined in radio/1.5/types.hal
* @param dp Data profile
* @return The converted DataProfileInfo
*/
public static android.hardware.radio.V1_5.DataProfileInfo convertToHalDataProfile15(
DataProfile dp) {
android.hardware.radio.V1_5.DataProfileInfo dpi =
new android.hardware.radio.V1_5.DataProfileInfo();
dpi.apn = dp.getApn();
dpi.protocol = dp.getProtocolType();
dpi.roamingProtocol = dp.getRoamingProtocolType();
dpi.authType = dp.getAuthType();
dpi.user = TextUtils.emptyIfNull(dp.getUserName());
dpi.password = TextUtils.emptyIfNull(dp.getPassword());
dpi.type = dp.getType();
dpi.maxConnsTime = dp.getMaxConnectionsTime();
dpi.maxConns = dp.getMaxConnections();
dpi.waitTime = dp.getWaitTime();
dpi.enabled = dp.isEnabled();
dpi.supportedApnTypesBitmap = dp.getSupportedApnTypesBitmask();
// Shift by 1 bit due to the discrepancy between
// android.hardware.radio.V1_0.RadioAccessFamily and the bitmask version of
// ServiceState.RIL_RADIO_TECHNOLOGY_XXXX.
dpi.bearerBitmap = ServiceState.convertNetworkTypeBitmaskToBearerBitmask(
dp.getBearerBitmask()) << 1;
dpi.mtuV4 = dp.getMtuV4();
dpi.mtuV6 = dp.getMtuV6();
dpi.persistent = dp.isPersistent();
dpi.preferred = dp.isPreferred();
// profile id is only meaningful when it's persistent on the modem.
dpi.profileId = (dpi.persistent) ? dp.getProfileId()
: android.hardware.radio.V1_0.DataProfileId.INVALID;
return dpi;
}
/**
* Convert to DataProfileInfo.aidl
* @param dp Data profile
* @return The converted DataProfileInfo
*/
public static android.hardware.radio.data.DataProfileInfo convertToHalDataProfile(
@Nullable DataProfile dp) {
if (dp == null) return null;
android.hardware.radio.data.DataProfileInfo dpi =
new android.hardware.radio.data.DataProfileInfo();
dpi.apn = dp.getApn();
dpi.protocol = dp.getProtocolType();
dpi.roamingProtocol = dp.getRoamingProtocolType();
dpi.authType = dp.getAuthType();
dpi.user = convertNullToEmptyString(dp.getUserName());
dpi.password = convertNullToEmptyString(dp.getPassword());
dpi.type = dp.getType();
dpi.maxConnsTime = dp.getMaxConnectionsTime();
dpi.maxConns = dp.getMaxConnections();
dpi.waitTime = dp.getWaitTime();
dpi.enabled = dp.isEnabled();
dpi.supportedApnTypesBitmap = dp.getSupportedApnTypesBitmask();
// Shift by 1 bit due to the discrepancy between RadioAccessFamily.aidl and the bitmask
// version of ServiceState.RIL_RADIO_TECHNOLOGY_XXXX.
dpi.bearerBitmap = ServiceState.convertNetworkTypeBitmaskToBearerBitmask(
dp.getBearerBitmask()) << 1;
dpi.mtuV4 = dp.getMtuV4();
dpi.mtuV6 = dp.getMtuV6();
dpi.persistent = dp.isPersistent();
dpi.preferred = dp.isPreferred();
dpi.alwaysOn = false;
dpi.infrastructureBitmap = android.hardware.radio.data.DataProfileInfo
.INFRASTRUCTURE_CELLULAR;
if (dp.getApnSetting() != null) {
dpi.alwaysOn = dp.getApnSetting().isAlwaysOn();
dpi.infrastructureBitmap = dp.getApnSetting().getInfrastructureBitmask();
}
dpi.trafficDescriptor = convertToHalTrafficDescriptorAidl(dp.getTrafficDescriptor());
// profile id is only meaningful when it's persistent on the modem.
dpi.profileId = (dpi.persistent) ? dp.getProfileId()
: android.hardware.radio.data.DataProfileInfo.ID_INVALID;
return dpi;
}
/**
* Convert from DataProfileInfo.aidl to DataProfile
* @param dpi DataProfileInfo
* @return The converted DataProfile
*/
public static DataProfile convertToDataProfile(
android.hardware.radio.data.DataProfileInfo dpi) {
ApnSetting apnSetting = new ApnSetting.Builder()
.setEntryName(dpi.apn)
.setApnName(dpi.apn)
.setApnTypeBitmask(dpi.supportedApnTypesBitmap)
.setAuthType(dpi.authType)
.setMaxConnsTime(dpi.maxConnsTime)
.setMaxConns(dpi.maxConns)
.setWaitTime(dpi.waitTime)
.setCarrierEnabled(dpi.enabled)
.setModemCognitive(dpi.persistent)
.setMtuV4(dpi.mtuV4)
.setMtuV6(dpi.mtuV6)
.setNetworkTypeBitmask(ServiceState.convertBearerBitmaskToNetworkTypeBitmask(
dpi.bearerBitmap) >> 1)
.setProfileId(dpi.profileId)
.setPassword(dpi.password)
.setProtocol(dpi.protocol)
.setRoamingProtocol(dpi.roamingProtocol)
.setUser(dpi.user)
.setAlwaysOn(dpi.alwaysOn)
.setInfrastructureBitmask(dpi.infrastructureBitmap)
.build();
TrafficDescriptor td;
try {
td = convertHalTrafficDescriptor(dpi.trafficDescriptor);
} catch (IllegalArgumentException e) {
loge("convertToDataProfile: Failed to convert traffic descriptor. e=" + e);
td = null;
}
return new DataProfile.Builder()
.setType(dpi.type)
.setPreferred(dpi.preferred)
.setTrafficDescriptor(td)
.setApnSetting(apnSetting)
.build();
}
/**
* Convert to OptionalSliceInfo defined in radio/1.6/types.hal
* @param sliceInfo Slice info
* @return The converted OptionalSliceInfo
*/
public static android.hardware.radio.V1_6.OptionalSliceInfo convertToHalSliceInfo(
@Nullable NetworkSliceInfo sliceInfo) {
android.hardware.radio.V1_6.OptionalSliceInfo optionalSliceInfo =
new android.hardware.radio.V1_6.OptionalSliceInfo();
if (sliceInfo == null) {
return optionalSliceInfo;
}
android.hardware.radio.V1_6.SliceInfo si = new android.hardware.radio.V1_6.SliceInfo();
si.sst = (byte) sliceInfo.getSliceServiceType();
si.mappedHplmnSst = (byte) sliceInfo.getMappedHplmnSliceServiceType();
si.sliceDifferentiator = sliceInfo.getSliceDifferentiator();
si.mappedHplmnSD = sliceInfo.getMappedHplmnSliceDifferentiator();
optionalSliceInfo.value(si);
return optionalSliceInfo;
}
/**
* Convert to SliceInfo.aidl
* @param sliceInfo Slice info
* @return The converted SliceInfo
*/
public static android.hardware.radio.data.SliceInfo convertToHalSliceInfoAidl(
@Nullable NetworkSliceInfo sliceInfo) {
if (sliceInfo == null) {
return null;
}
android.hardware.radio.data.SliceInfo si = new android.hardware.radio.data.SliceInfo();
si.sliceServiceType = (byte) sliceInfo.getSliceServiceType();
si.mappedHplmnSst = (byte) sliceInfo.getMappedHplmnSliceServiceType();
si.sliceDifferentiator = sliceInfo.getSliceDifferentiator();
si.mappedHplmnSd = sliceInfo.getMappedHplmnSliceDifferentiator();
return si;
}
/**
* Convert to OptionalTrafficDescriptor defined in radio/1.6/types.hal
* @param trafficDescriptor Traffic descriptor
* @return The converted OptionalTrafficDescriptor
*/
public static android.hardware.radio.V1_6.OptionalTrafficDescriptor
convertToHalTrafficDescriptor(@Nullable TrafficDescriptor trafficDescriptor) {
android.hardware.radio.V1_6.OptionalTrafficDescriptor optionalTrafficDescriptor =
new android.hardware.radio.V1_6.OptionalTrafficDescriptor();
if (trafficDescriptor == null) {
return optionalTrafficDescriptor;
}
android.hardware.radio.V1_6.TrafficDescriptor td =
new android.hardware.radio.V1_6.TrafficDescriptor();
android.hardware.radio.V1_6.OptionalDnn optionalDnn =
new android.hardware.radio.V1_6.OptionalDnn();
if (trafficDescriptor.getDataNetworkName() != null) {
optionalDnn.value(trafficDescriptor.getDataNetworkName());
}
td.dnn = optionalDnn;
android.hardware.radio.V1_6.OptionalOsAppId optionalOsAppId =
new android.hardware.radio.V1_6.OptionalOsAppId();
if (trafficDescriptor.getOsAppId() != null) {
android.hardware.radio.V1_6.OsAppId osAppId = new android.hardware.radio.V1_6.OsAppId();
osAppId.osAppId = primitiveArrayToArrayList(trafficDescriptor.getOsAppId());
optionalOsAppId.value(osAppId);
}
td.osAppId = optionalOsAppId;
optionalTrafficDescriptor.value(td);
return optionalTrafficDescriptor;
}
/**
* Convert to TrafficDescriptor.aidl
* @param trafficDescriptor Traffic descriptor
* @return The converted TrafficDescriptor
*/
public static android.hardware.radio.data.TrafficDescriptor
convertToHalTrafficDescriptorAidl(@Nullable TrafficDescriptor trafficDescriptor) {
if (trafficDescriptor == null) {
return new android.hardware.radio.data.TrafficDescriptor();
}
android.hardware.radio.data.TrafficDescriptor td =
new android.hardware.radio.data.TrafficDescriptor();
td.dnn = trafficDescriptor.getDataNetworkName();
if (trafficDescriptor.getOsAppId() == null) {
td.osAppId = null;
} else {
android.hardware.radio.data.OsAppId osAppId = new android.hardware.radio.data.OsAppId();
osAppId.osAppId = trafficDescriptor.getOsAppId();
td.osAppId = osAppId;
}
return td;
}
/**
* Convert to ResetNvType defined in radio/1.0/types.hal
* @param resetType NV reset type
* @return The converted reset type in integer or -1 if param is invalid
*/
public static int convertToHalResetNvType(int resetType) {
/**
* resetType values
* 1 - reload all NV items
* 2 - erase NV reset (SCRTN)
* 3 - factory reset (RTN)
*/
switch (resetType) {
case 1: return android.hardware.radio.V1_0.ResetNvType.RELOAD;
case 2: return android.hardware.radio.V1_0.ResetNvType.ERASE;
case 3: return android.hardware.radio.V1_0.ResetNvType.FACTORY_RESET;
}
return -1;
}
/**
* Convert to ResetNvType.aidl
* @param resetType NV reset type
* @return The converted reset type in integer or -1 if param is invalid
*/
public static int convertToHalResetNvTypeAidl(int resetType) {
/**
* resetType values
* 1 - reload all NV items
* 2 - erase NV reset (SCRTN)
* 3 - factory reset (RTN)
*/
switch (resetType) {
case 1: return android.hardware.radio.modem.ResetNvType.RELOAD;
case 2: return android.hardware.radio.modem.ResetNvType.ERASE;
case 3: return android.hardware.radio.modem.ResetNvType.FACTORY_RESET;
}
return -1;
}
/**
* Convert to a list of LinkAddress defined in radio/1.5/types.hal
* @param linkProperties Link properties
* @return The converted list of LinkAddresses
*/
public static ArrayList<android.hardware.radio.V1_5.LinkAddress> convertToHalLinkProperties15(
LinkProperties linkProperties) {
ArrayList<android.hardware.radio.V1_5.LinkAddress> addresses15 = new ArrayList<>();
if (linkProperties != null) {
for (android.net.LinkAddress la : linkProperties.getAllLinkAddresses()) {
android.hardware.radio.V1_5.LinkAddress linkAddress =
new android.hardware.radio.V1_5.LinkAddress();
linkAddress.address = la.getAddress().getHostAddress();
linkAddress.properties = la.getFlags();
linkAddress.deprecationTime = la.getDeprecationTime();
linkAddress.expirationTime = la.getExpirationTime();
addresses15.add(linkAddress);
}
}
return addresses15;
}
/**
* Convert to a list of LinkAddress.aidl
* @param linkProperties Link properties
* @return The converted list of LinkAddresses
*/
public static android.hardware.radio.data.LinkAddress[] convertToHalLinkProperties(
LinkProperties linkProperties) {
if (linkProperties == null) {
return new android.hardware.radio.data.LinkAddress[0];
}
android.hardware.radio.data.LinkAddress[] addresses =
new android.hardware.radio.data.LinkAddress[
linkProperties.getAllLinkAddresses().size()];
for (int i = 0; i < linkProperties.getAllLinkAddresses().size(); i++) {
LinkAddress la = linkProperties.getAllLinkAddresses().get(i);
android.hardware.radio.data.LinkAddress linkAddress =
new android.hardware.radio.data.LinkAddress();
linkAddress.address = la.getAddress().getHostAddress();
linkAddress.addressProperties = la.getFlags();
linkAddress.deprecationTime = la.getDeprecationTime();
linkAddress.expirationTime = la.getExpirationTime();
addresses[i] = linkAddress;
}
return addresses;
}
/**
* Convert RadioAccessSpecifier defined in radio/1.5/types.hal to RadioAccessSpecifier
* @param specifier RadioAccessSpecifier defined in radio/1.5/types.hal
* @return The converted RadioAccessSpecifier
*/
public static RadioAccessSpecifier convertHalRadioAccessSpecifier(
android.hardware.radio.V1_5.RadioAccessSpecifier specifier) {
if (specifier == null) return null;
ArrayList<Integer> halBands = new ArrayList<>();
switch (specifier.bands.getDiscriminator()) {
case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
.geranBands:
halBands = specifier.bands.geranBands();
break;
case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
.utranBands:
halBands = specifier.bands.utranBands();
break;
case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
.eutranBands:
halBands = specifier.bands.eutranBands();
break;
case android.hardware.radio.V1_5.RadioAccessSpecifier.Bands.hidl_discriminator
.ngranBands:
halBands = specifier.bands.ngranBands();
break;
}
return new RadioAccessSpecifier(convertHalRadioAccessNetworks(specifier.radioAccessNetwork),
halBands.stream().mapToInt(Integer::intValue).toArray(),
specifier.channels.stream().mapToInt(Integer::intValue).toArray());
}
/**
* Convert RadioAccessSpecifier defined in RadioAccessSpecifier.aidl to RadioAccessSpecifier
* @param specifier RadioAccessSpecifier defined in RadioAccessSpecifier.aidl
* @return The converted RadioAccessSpecifier
*/
public static RadioAccessSpecifier convertHalRadioAccessSpecifier(
android.hardware.radio.network.RadioAccessSpecifier specifier) {
if (specifier == null) return null;
int[] halBands = null;
switch (specifier.bands.getTag()) {
case android.hardware.radio.network.RadioAccessSpecifierBands.geranBands:
halBands = specifier.bands.getGeranBands();
break;
case android.hardware.radio.network.RadioAccessSpecifierBands.utranBands:
halBands = specifier.bands.getUtranBands();
break;
case android.hardware.radio.network.RadioAccessSpecifierBands.eutranBands:
halBands = specifier.bands.getEutranBands();
break;
case android.hardware.radio.network.RadioAccessSpecifierBands.ngranBands:
halBands = specifier.bands.getNgranBands();
break;
}
return new RadioAccessSpecifier(specifier.accessNetwork, halBands, specifier.channels);
}
/**
* Convert to RadioAccessSpecifier defined in radio/1.1/types.hal
* @param ras Radio access specifier
* @return The converted RadioAccessSpecifier
*/
public static android.hardware.radio.V1_1.RadioAccessSpecifier
convertToHalRadioAccessSpecifier11(RadioAccessSpecifier ras) {
android.hardware.radio.V1_1.RadioAccessSpecifier rasInHalFormat =
new android.hardware.radio.V1_1.RadioAccessSpecifier();
rasInHalFormat.radioAccessNetwork = ras.getRadioAccessNetwork();
ArrayList<Integer> bands = new ArrayList<>();
if (ras.getBands() != null) {
for (int band : ras.getBands()) {
bands.add(band);
}
}
switch (ras.getRadioAccessNetwork()) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
rasInHalFormat.geranBands = bands;
break;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
rasInHalFormat.utranBands = bands;
break;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
rasInHalFormat.eutranBands = bands;
break;
default:
return null;
}
if (ras.getChannels() != null) {
for (int channel : ras.getChannels()) {
rasInHalFormat.channels.add(channel);
}
}
return rasInHalFormat;
}
/**
* Convert to RadioAccessSpecifier defined in radio/1.5/types.hal
* @param ras Radio access specifier
* @return The converted RadioAccessSpecifier
*/
public static android.hardware.radio.V1_5.RadioAccessSpecifier
convertToHalRadioAccessSpecifier15(RadioAccessSpecifier ras) {
android.hardware.radio.V1_5.RadioAccessSpecifier rasInHalFormat =
new android.hardware.radio.V1_5.RadioAccessSpecifier();
android.hardware.radio.V1_5.RadioAccessSpecifier.Bands bandsInHalFormat =
new android.hardware.radio.V1_5.RadioAccessSpecifier.Bands();
rasInHalFormat.radioAccessNetwork = convertToHalRadioAccessNetworks(
ras.getRadioAccessNetwork());
ArrayList<Integer> bands = new ArrayList<>();
if (ras.getBands() != null) {
for (int band : ras.getBands()) {
bands.add(band);
}
}
switch (ras.getRadioAccessNetwork()) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
bandsInHalFormat.geranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
bandsInHalFormat.utranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
bandsInHalFormat.eutranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.NGRAN:
bandsInHalFormat.ngranBands(bands);
break;
default:
return null;
}
rasInHalFormat.bands = bandsInHalFormat;
if (ras.getChannels() != null) {
for (int channel : ras.getChannels()) {
rasInHalFormat.channels.add(channel);
}
}
return rasInHalFormat;
}
/**
* Convert to RadioAccessSpecifier.aidl
* @param ras Radio access specifier
* @return The converted RadioAccessSpecifier
*/
public static android.hardware.radio.network.RadioAccessSpecifier
convertToHalRadioAccessSpecifierAidl(RadioAccessSpecifier ras) {
android.hardware.radio.network.RadioAccessSpecifier rasInHalFormat =
new android.hardware.radio.network.RadioAccessSpecifier();
android.hardware.radio.network.RadioAccessSpecifierBands bandsInHalFormat =
new android.hardware.radio.network.RadioAccessSpecifierBands();
rasInHalFormat.accessNetwork = convertToHalAccessNetworkAidl(ras.getRadioAccessNetwork());
int[] bands;
if (ras.getBands() != null) {
bands = new int[ras.getBands().length];
for (int i = 0; i < ras.getBands().length; i++) {
bands[i] = ras.getBands()[i];
}
} else {
bands = new int[0];
}
switch (ras.getRadioAccessNetwork()) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
bandsInHalFormat.setGeranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
bandsInHalFormat.setUtranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
bandsInHalFormat.setEutranBands(bands);
break;
case AccessNetworkConstants.AccessNetworkType.NGRAN:
bandsInHalFormat.setNgranBands(bands);
break;
default:
return null;
}
rasInHalFormat.bands = bandsInHalFormat;
int[] channels;
if (ras.getChannels() != null) {
channels = new int[ras.getChannels().length];
for (int i = 0; i < ras.getChannels().length; i++) {
channels[i] = ras.getChannels()[i];
}
} else {
channels = new int[0];
}
rasInHalFormat.channels = channels;
return rasInHalFormat;
}
/**
* Convert to censored terminal response
* @param terminalResponse Terminal response
* @return The converted censored terminal response
*/
public static String convertToCensoredTerminalResponse(String terminalResponse) {
try {
byte[] bytes = IccUtils.hexStringToBytes(terminalResponse);
if (bytes != null) {
List<ComprehensionTlv> ctlvs = ComprehensionTlv.decodeMany(bytes, 0);
int from = 0;
for (ComprehensionTlv ctlv : ctlvs) {
// Find text strings which might be personal information input by user,
// then replace it with "********".
if (ComprehensionTlvTag.TEXT_STRING.value() == ctlv.getTag()) {
byte[] target = Arrays.copyOfRange(ctlv.getRawValue(), from,
ctlv.getValueIndex() + ctlv.getLength());
terminalResponse = terminalResponse.toLowerCase(Locale.ROOT).replace(
IccUtils.bytesToHexString(target).toLowerCase(Locale.ROOT),
"********");
}
// The text string tag and the length field should also be hidden.
from = ctlv.getValueIndex() + ctlv.getLength();
}
}
} catch (Exception e) {
terminalResponse = null;
}
return terminalResponse;
}
/**
* Convert to {@link TelephonyManager.NetworkTypeBitMask}, the bitmask represented by
* {@link android.telephony.Annotation.NetworkType}.
*
* @param raf {@link android.hardware.radio.V1_0.RadioAccessFamily}
* @return {@link TelephonyManager.NetworkTypeBitMask}
*/
@TelephonyManager.NetworkTypeBitMask
public static int convertHalNetworkTypeBitMask(int raf) {
int networkTypeRaf = 0;
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.GSM) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GSM;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.GPRS) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_GPRS;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EDGE) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EDGE;
}
// convert both IS95A/IS95B to CDMA as network mode doesn't support CDMA
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95A) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.IS95B) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_CDMA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.EHRPD) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSUPA) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSDPA) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSPA) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.HSPAP) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.UMTS) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_UMTS;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.TD_SCDMA) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.LTE) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE;
}
if ((raf & android.hardware.radio.V1_0.RadioAccessFamily.LTE_CA) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA;
}
if ((raf & android.hardware.radio.V1_4.RadioAccessFamily.NR) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_NR;
}
if ((raf & (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN)) != 0) {
networkTypeRaf |= TelephonyManager.NETWORK_TYPE_BITMASK_IWLAN;
}
return (networkTypeRaf == 0) ? TelephonyManager.NETWORK_TYPE_UNKNOWN : networkTypeRaf;
}
/**
* Convert to RadioAccessFamily defined in radio/1.4/types.hal
* @param networkTypeBitmask {@link TelephonyManager.NetworkTypeBitMask}, the bitmask
* represented by {@link android.telephony.Annotation.NetworkType}
* @return The converted RadioAccessFamily
*/
public static int convertToHalRadioAccessFamily(
@TelephonyManager.NetworkTypeBitMask int networkTypeBitmask) {
int raf = 0;
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_GSM) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.GSM;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_GPRS) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.GPRS;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.EDGE;
}
// convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.IS95A;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.ONE_X_RTT;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_0;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_A;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.EVDO_B;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.EHRPD;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSUPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSDPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSPA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.HSPAP;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_UMTS) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.UMTS;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.TD_SCDMA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_IWLAN) != 0) {
raf |= (1 << android.hardware.radio.V1_4.RadioTechnology.IWLAN);
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_LTE) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.LTE;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA) != 0) {
raf |= android.hardware.radio.V1_0.RadioAccessFamily.LTE_CA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_NR) != 0) {
raf |= android.hardware.radio.V1_4.RadioAccessFamily.NR;
}
return (raf == 0) ? android.hardware.radio.V1_4.RadioAccessFamily.UNKNOWN : raf;
}
/**
* Convert to RadioAccessFamily.aidl
* @param networkTypeBitmask {@link TelephonyManager.NetworkTypeBitMask}, the bitmask
* represented by {@link android.telephony.Annotation.NetworkType}
* @return The converted RadioAccessFamily
*/
public static int convertToHalRadioAccessFamilyAidl(
@TelephonyManager.NetworkTypeBitMask int networkTypeBitmask) {
int raf = 0;
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_GSM) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.GSM;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_GPRS) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.GPRS;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EDGE) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.EDGE;
}
// convert CDMA to IS95A, consistent with ServiceState.networkTypeToRilRadioTechnology
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_CDMA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.IS95A;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_1xRTT) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.ONE_X_RTT;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_0) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.EVDO_0;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_A) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.EVDO_A;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EVDO_B) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.EVDO_B;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_EHRPD) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.EHRPD;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSUPA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.HSUPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSDPA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.HSDPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSPA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.HSPA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_HSPAP) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.HSPAP;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_UMTS) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.UMTS;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_TD_SCDMA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.TD_SCDMA;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_IWLAN) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.IWLAN;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_LTE) != 0
|| (networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_LTE_CA) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.LTE;
}
if ((networkTypeBitmask & TelephonyManager.NETWORK_TYPE_BITMASK_NR) != 0) {
raf |= android.hardware.radio.RadioAccessFamily.NR;
}
return (raf == 0) ? android.hardware.radio.RadioAccessFamily.UNKNOWN : raf;
}
/**
* Convert AccessNetworkType to AccessNetwork defined in radio/1.5/types.hal
* @param accessNetworkType Access network type
* @return The converted AccessNetwork
*/
public static int convertToHalAccessNetwork(int accessNetworkType) {
switch (accessNetworkType) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
return android.hardware.radio.V1_5.AccessNetwork.GERAN;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
return android.hardware.radio.V1_5.AccessNetwork.UTRAN;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
return android.hardware.radio.V1_5.AccessNetwork.EUTRAN;
case AccessNetworkConstants.AccessNetworkType.CDMA2000:
return android.hardware.radio.V1_5.AccessNetwork.CDMA2000;
case AccessNetworkConstants.AccessNetworkType.IWLAN:
return android.hardware.radio.V1_5.AccessNetwork.IWLAN;
case AccessNetworkConstants.AccessNetworkType.NGRAN:
return android.hardware.radio.V1_5.AccessNetwork.NGRAN;
case AccessNetworkConstants.AccessNetworkType.UNKNOWN:
default:
return android.hardware.radio.V1_5.AccessNetwork.UNKNOWN;
}
}
/**
* Convert to AccessNetwork.aidl
* @param accessNetworkType Access network type
* @return The converted AccessNetwork
*/
public static int convertToHalAccessNetworkAidl(int accessNetworkType) {
switch (accessNetworkType) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
return android.hardware.radio.AccessNetwork.GERAN;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
return android.hardware.radio.AccessNetwork.UTRAN;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
return android.hardware.radio.AccessNetwork.EUTRAN;
case AccessNetworkConstants.AccessNetworkType.CDMA2000:
return android.hardware.radio.AccessNetwork.CDMA2000;
case AccessNetworkConstants.AccessNetworkType.IWLAN:
return android.hardware.radio.AccessNetwork.IWLAN;
case AccessNetworkConstants.AccessNetworkType.NGRAN:
return android.hardware.radio.AccessNetwork.NGRAN;
case AccessNetworkConstants.AccessNetworkType.UNKNOWN:
default:
return android.hardware.radio.AccessNetwork.UNKNOWN;
}
}
/**
* Convert to RadioAccessNetwork defined in radio/1.1/types.hal
* @param accessNetworkType Access network type
* @return The converted RadioAccessNetwork
*/
public static int convertToHalRadioAccessNetworks(int accessNetworkType) {
switch (accessNetworkType) {
case AccessNetworkConstants.AccessNetworkType.GERAN:
return android.hardware.radio.V1_1.RadioAccessNetworks.GERAN;
case AccessNetworkConstants.AccessNetworkType.UTRAN:
return android.hardware.radio.V1_1.RadioAccessNetworks.UTRAN;
case AccessNetworkConstants.AccessNetworkType.EUTRAN:
return android.hardware.radio.V1_1.RadioAccessNetworks.EUTRAN;
case AccessNetworkConstants.AccessNetworkType.NGRAN:
return android.hardware.radio.V1_5.RadioAccessNetworks.NGRAN;
case AccessNetworkConstants.AccessNetworkType.CDMA2000:
return android.hardware.radio.V1_5.RadioAccessNetworks.CDMA2000;
case AccessNetworkConstants.AccessNetworkType.UNKNOWN:
default:
return android.hardware.radio.V1_5.RadioAccessNetworks.UNKNOWN;
}
}
/**
* Convert RadioAccessNetworks defined in radio/1.5/types.hal to AccessNetworkType
* @param ran RadioAccessNetwork defined in radio/1.5/types.hal
* @return The converted AccessNetworkType
*/
public static int convertHalRadioAccessNetworks(int ran) {
switch (ran) {
case android.hardware.radio.V1_5.RadioAccessNetworks.GERAN:
return AccessNetworkConstants.AccessNetworkType.GERAN;
case android.hardware.radio.V1_5.RadioAccessNetworks.UTRAN:
return AccessNetworkConstants.AccessNetworkType.UTRAN;
case android.hardware.radio.V1_5.RadioAccessNetworks.EUTRAN:
return AccessNetworkConstants.AccessNetworkType.EUTRAN;
case android.hardware.radio.V1_5.RadioAccessNetworks.NGRAN:
return AccessNetworkConstants.AccessNetworkType.NGRAN;
case android.hardware.radio.V1_5.RadioAccessNetworks.CDMA2000:
return AccessNetworkConstants.AccessNetworkType.CDMA2000;
case android.hardware.radio.V1_5.RadioAccessNetworks.UNKNOWN:
default:
return AccessNetworkConstants.AccessNetworkType.UNKNOWN;
}
}
/**
* Convert to SimApdu defined in radio/1.0/types.hal
* @param channel channel
* @param cla cla
* @param instruction instruction
* @param p1 p1
* @param p2 p2
* @param p3 p3
* @param data data
* @return The converted SimApdu
*/
public static android.hardware.radio.V1_0.SimApdu convertToHalSimApdu(int channel, int cla,
int instruction, int p1, int p2, int p3, String data) {
android.hardware.radio.V1_0.SimApdu msg = new android.hardware.radio.V1_0.SimApdu();
msg.sessionId = channel;
msg.cla = cla;
msg.instruction = instruction;
msg.p1 = p1;
msg.p2 = p2;
msg.p3 = p3;
msg.data = convertNullToEmptyString(data);
return msg;
}
/**
* Convert to SimApdu.aidl
* @param channel channel
* @param cla cla
* @param instruction instruction
* @param p1 p1
* @param p2 p2
* @param p3 p3
* @param data data
* @param radioHalVersion radio hal version
* @return The converted SimApdu
*/
public static android.hardware.radio.sim.SimApdu convertToHalSimApduAidl(int channel, int cla,
int instruction, int p1, int p2, int p3, String data, boolean isEs10Command,
HalVersion radioHalVersion) {
android.hardware.radio.sim.SimApdu msg = new android.hardware.radio.sim.SimApdu();
msg.sessionId = channel;
msg.cla = cla;
msg.instruction = instruction;
msg.p1 = p1;
msg.p2 = p2;
msg.p3 = p3;
msg.data = convertNullToEmptyString(data);
if (radioHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_2_1)) {
msg.isEs10 = isEs10Command;
}
return msg;
}
/**
* Convert to SimLockMultiSimPolicy defined in radio/1.4/types.hal
* @param policy Multi SIM policy
* @return The converted SimLockMultiSimPolicy
*/
public static int convertToHalSimLockMultiSimPolicy(int policy) {
switch (policy) {
case CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT:
return android.hardware.radio.V1_4.SimLockMultiSimPolicy
.ONE_VALID_SIM_MUST_BE_PRESENT;
case CarrierRestrictionRules.MULTISIM_POLICY_NONE:
// fallthrough
default:
return android.hardware.radio.V1_4.SimLockMultiSimPolicy.NO_MULTISIM_POLICY;
}
}
/**
* Convert to SimLockMultiSimPolicy.aidl
* @param policy Multi SIM policy
* @return The converted SimLockMultiSimPolicy
*/
public static int convertToHalSimLockMultiSimPolicyAidl(int policy) {
switch (policy) {
case CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT:
return android.hardware.radio.sim.SimLockMultiSimPolicy
.ONE_VALID_SIM_MUST_BE_PRESENT;
case CarrierRestrictionRules.MULTISIM_POLICY_NONE:
// fallthrough
default:
return android.hardware.radio.sim.SimLockMultiSimPolicy.NO_MULTISIM_POLICY;
}
}
/**
* Convert a list of CarrierIdentifiers into a list of Carriers defined in radio/1.0/types.hal
* @param carriers List of CarrierIdentifiers
* @return The converted list of Carriers
*/
public static ArrayList<android.hardware.radio.V1_0.Carrier> convertToHalCarrierRestrictionList(
List<CarrierIdentifier> carriers) {
ArrayList<android.hardware.radio.V1_0.Carrier> result = new ArrayList<>();
for (CarrierIdentifier ci : carriers) {
android.hardware.radio.V1_0.Carrier c = new android.hardware.radio.V1_0.Carrier();
c.mcc = convertNullToEmptyString(ci.getMcc());
c.mnc = convertNullToEmptyString(ci.getMnc());
int matchType = CarrierIdentifier.MatchType.ALL;
String matchData = null;
if (!TextUtils.isEmpty(ci.getSpn())) {
matchType = CarrierIdentifier.MatchType.SPN;
matchData = ci.getSpn();
} else if (!TextUtils.isEmpty(ci.getImsi())) {
matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
matchData = ci.getImsi();
} else if (!TextUtils.isEmpty(ci.getGid1())) {
matchType = CarrierIdentifier.MatchType.GID1;
matchData = ci.getGid1();
} else if (!TextUtils.isEmpty(ci.getGid2())) {
matchType = CarrierIdentifier.MatchType.GID2;
matchData = ci.getGid2();
}
c.matchType = matchType;
c.matchData = convertNullToEmptyString(matchData);
result.add(c);
}
return result;
}
/**
* Convert a list of CarrierIdentifiers into an array of Carrier.aidl
* @param carriers List of CarrierIdentifiers
* @return The converted array of Carriers
*/
public static android.hardware.radio.sim.Carrier[] convertToHalCarrierRestrictionListAidl(
List<CarrierIdentifier> carriers) {
android.hardware.radio.sim.Carrier[] result =
new android.hardware.radio.sim.Carrier[carriers.size()];
for (int i = 0; i < carriers.size(); i++) {
CarrierIdentifier ci = carriers.get(i);
android.hardware.radio.sim.Carrier carrier = new android.hardware.radio.sim.Carrier();
carrier.mcc = convertNullToEmptyString(ci.getMcc());
carrier.mnc = convertNullToEmptyString(ci.getMnc());
int matchType = CarrierIdentifier.MatchType.ALL;
String matchData = null;
if (!TextUtils.isEmpty(ci.getSpn())) {
matchType = CarrierIdentifier.MatchType.SPN;
matchData = ci.getSpn();
} else if (!TextUtils.isEmpty(ci.getImsi())) {
matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
matchData = ci.getImsi();
} else if (!TextUtils.isEmpty(ci.getGid1())) {
matchType = CarrierIdentifier.MatchType.GID1;
matchData = ci.getGid1();
} else if (!TextUtils.isEmpty(ci.getGid2())) {
matchType = CarrierIdentifier.MatchType.GID2;
matchData = ci.getGid2();
}
carrier.matchType = matchType;
carrier.matchData = convertNullToEmptyString(matchData);
result[i] = carrier;
}
return result;
}
/**
* Convert to Dial defined in radio/1.0/types.hal
* @param address Address
* @param clirMode CLIR mode
* @param uusInfo UUS info
* @return The converted Dial
*/
public static android.hardware.radio.V1_0.Dial convertToHalDial(String address, int clirMode,
UUSInfo uusInfo) {
android.hardware.radio.V1_0.Dial dial = new android.hardware.radio.V1_0.Dial();
dial.address = convertNullToEmptyString(address);
dial.clir = clirMode;
if (uusInfo != null) {
android.hardware.radio.V1_0.UusInfo info = new android.hardware.radio.V1_0.UusInfo();
info.uusType = uusInfo.getType();
info.uusDcs = uusInfo.getDcs();
info.uusData = new String(uusInfo.getUserData());
dial.uusInfo.add(info);
}
return dial;
}
/**
* Convert to Dial.aidl
* @param address Address
* @param clirMode CLIR mode
* @param uusInfo UUS info
* @return The converted Dial.aidl
*/
public static android.hardware.radio.voice.Dial convertToHalDialAidl(String address,
int clirMode, UUSInfo uusInfo) {
android.hardware.radio.voice.Dial dial = new android.hardware.radio.voice.Dial();
dial.address = convertNullToEmptyString(address);
dial.clir = clirMode;
if (uusInfo != null) {
android.hardware.radio.voice.UusInfo info = new android.hardware.radio.voice.UusInfo();
info.uusType = uusInfo.getType();
info.uusDcs = uusInfo.getDcs();
info.uusData = new String(uusInfo.getUserData());
dial.uusInfo = new android.hardware.radio.voice.UusInfo[] {info};
} else {
dial.uusInfo = new android.hardware.radio.voice.UusInfo[0];
}
return dial;
}
/**
* Convert to SignalThresholdInfo defined in radio/1.5/types.hal
* @param signalThresholdInfo Signal threshold info
* @return The converted SignalThresholdInfo
*/
public static android.hardware.radio.V1_5.SignalThresholdInfo convertToHalSignalThresholdInfo(
SignalThresholdInfo signalThresholdInfo) {
android.hardware.radio.V1_5.SignalThresholdInfo signalThresholdInfoHal =
new android.hardware.radio.V1_5.SignalThresholdInfo();
signalThresholdInfoHal.signalMeasurement = signalThresholdInfo.getSignalMeasurementType();
signalThresholdInfoHal.hysteresisMs = signalThresholdInfo.getHysteresisMs();
signalThresholdInfoHal.hysteresisDb = signalThresholdInfo.getHysteresisDb();
signalThresholdInfoHal.thresholds = primitiveArrayToArrayList(
signalThresholdInfo.getThresholds());
signalThresholdInfoHal.isEnabled = signalThresholdInfo.isEnabled();
return signalThresholdInfoHal;
}
/**
* Convert to SignalThresholdInfo.aidl
* @param signalThresholdInfo Signal threshold info
* @return The converted SignalThresholdInfo
*/
public static android.hardware.radio.network.SignalThresholdInfo
convertToHalSignalThresholdInfoAidl(SignalThresholdInfo signalThresholdInfo) {
android.hardware.radio.network.SignalThresholdInfo signalThresholdInfoHal =
new android.hardware.radio.network.SignalThresholdInfo();
signalThresholdInfoHal.signalMeasurement = signalThresholdInfo.getSignalMeasurementType();
signalThresholdInfoHal.hysteresisMs = signalThresholdInfo.getHysteresisMs();
signalThresholdInfoHal.hysteresisDb = signalThresholdInfo.getHysteresisDb();
signalThresholdInfoHal.thresholds = signalThresholdInfo.getThresholds();
signalThresholdInfoHal.isEnabled = signalThresholdInfo.isEnabled();
signalThresholdInfoHal.ran = signalThresholdInfo.getRadioAccessNetworkType();
return signalThresholdInfoHal;
}
/**
* Convert to SmsWriteArgsStatus defined in radio/1.0/types.hal
* @param status StatusOnIcc
* @return The converted SmsWriteArgsStatus defined in radio/1.0/types.hal
*/
public static int convertToHalSmsWriteArgsStatus(int status) {
switch (status & 0x7) {
case SmsManager.STATUS_ON_ICC_READ:
return android.hardware.radio.V1_0.SmsWriteArgsStatus.REC_READ;
case SmsManager.STATUS_ON_ICC_UNREAD:
return android.hardware.radio.V1_0.SmsWriteArgsStatus.REC_UNREAD;
case SmsManager.STATUS_ON_ICC_SENT:
return android.hardware.radio.V1_0.SmsWriteArgsStatus.STO_SENT;
case SmsManager.STATUS_ON_ICC_UNSENT:
return android.hardware.radio.V1_0.SmsWriteArgsStatus.STO_UNSENT;
default:
return android.hardware.radio.V1_0.SmsWriteArgsStatus.REC_READ;
}
}
/**
* Convert to statuses defined in SmsWriteArgs.aidl
* @param status StatusOnIcc
* @return The converted statuses defined in SmsWriteArgs.aidl
*/
public static int convertToHalSmsWriteArgsStatusAidl(int status) {
switch (status & 0x7) {
case SmsManager.STATUS_ON_ICC_READ:
return android.hardware.radio.messaging.SmsWriteArgs.STATUS_REC_READ;
case SmsManager.STATUS_ON_ICC_UNREAD:
return android.hardware.radio.messaging.SmsWriteArgs.STATUS_REC_UNREAD;
case SmsManager.STATUS_ON_ICC_SENT:
return android.hardware.radio.messaging.SmsWriteArgs.STATUS_STO_SENT;
case SmsManager.STATUS_ON_ICC_UNSENT:
return android.hardware.radio.messaging.SmsWriteArgs.STATUS_STO_UNSENT;
default:
return android.hardware.radio.messaging.SmsWriteArgs.STATUS_REC_READ;
}
}
/**
* Convert a list of HardwareConfig defined in radio/1.0/types.hal to a list of HardwareConfig
* @param hwListRil List of HardwareConfig defined in radio/1.0/types.hal
* @return The converted list of HardwareConfig
*/
public static ArrayList<HardwareConfig> convertHalHardwareConfigList(
ArrayList<android.hardware.radio.V1_0.HardwareConfig> hwListRil) {
int num;
ArrayList<HardwareConfig> response;
HardwareConfig hw;
num = hwListRil.size();
response = new ArrayList<>(num);
for (android.hardware.radio.V1_0.HardwareConfig hwRil : hwListRil) {
int type = hwRil.type;
switch(type) {
case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: {
hw = new HardwareConfig(type);
android.hardware.radio.V1_0.HardwareConfigModem hwModem = hwRil.modem.get(0);
hw.assignModem(hwRil.uuid, hwRil.state, hwModem.rilModel, hwModem.rat,
hwModem.maxVoice, hwModem.maxData, hwModem.maxStandby);
break;
}
case HardwareConfig.DEV_HARDWARE_TYPE_SIM: {
hw = new HardwareConfig(type);
hw.assignSim(hwRil.uuid, hwRil.state, hwRil.sim.get(0).modemUuid);
break;
}
default: {
throw new RuntimeException(
"RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardware type:" + type);
}
}
response.add(hw);
}
return response;
}
/**
* Convert a list of HardwareConfig defined in HardwareConfig.aidl to a list of HardwareConfig
* @param hwListRil List of HardwareConfig defined in HardwareConfig.aidl
* @return The converted list of HardwareConfig
*/
public static ArrayList<HardwareConfig> convertHalHardwareConfigList(
android.hardware.radio.modem.HardwareConfig[] hwListRil) {
ArrayList<HardwareConfig> response = new ArrayList<>(hwListRil.length);
HardwareConfig hw;
for (android.hardware.radio.modem.HardwareConfig hwRil : hwListRil) {
int type = hwRil.type;
switch (type) {
case HardwareConfig.DEV_HARDWARE_TYPE_MODEM: {
hw = new HardwareConfig(type);
android.hardware.radio.modem.HardwareConfigModem hwModem = hwRil.modem[0];
hw.assignModem(hwRil.uuid, hwRil.state, hwModem.rilModel, hwModem.rat,
hwModem.maxVoiceCalls, hwModem.maxDataCalls, hwModem.maxStandby);
break;
}
case HardwareConfig.DEV_HARDWARE_TYPE_SIM: {
hw = new HardwareConfig(type);
hw.assignSim(hwRil.uuid, hwRil.state, hwRil.sim[0].modemUuid);
break;
}
default: {
throw new RuntimeException(
"RIL_REQUEST_GET_HARDWARE_CONFIG invalid hardware type:" + type);
}
}
response.add(hw);
}
return response;
}
/**
* Convert RadioCapability defined in radio/1.0/types.hal to RadioCapability
* @param rc RadioCapability defined in radio/1.0/types.hal
* @param ril RIL
* @return The converted RadioCapability
*/
public static RadioCapability convertHalRadioCapability(
android.hardware.radio.V1_0.RadioCapability rc, RIL ril) {
int session = rc.session;
int phase = rc.phase;
int rat = convertHalNetworkTypeBitMask(rc.raf);
String logicModemUuid = rc.logicalModemUuid;
int status = rc.status;
ril.riljLog("convertHalRadioCapability: session=" + session + ", phase=" + phase + ", rat="
+ rat + ", logicModemUuid=" + logicModemUuid + ", status=" + status + ", rcRil.raf="
+ rc.raf);
return new RadioCapability(ril.mPhoneId, session, phase, rat, logicModemUuid, status);
}
/**
* Convert RadioCapability defined in RadioCapability.aidl to RadioCapability
* @param rc RadioCapability defined in RadioCapability.aidl
* @param ril RIL
* @return The converted RadioCapability
*/
public static RadioCapability convertHalRadioCapability(
android.hardware.radio.modem.RadioCapability rc, RIL ril) {
int session = rc.session;
int phase = rc.phase;
int rat = convertHalNetworkTypeBitMask(rc.raf);
String logicModemUuid = rc.logicalModemUuid;
int status = rc.status;
ril.riljLog("convertHalRadioCapability: session=" + session + ", phase=" + phase + ", rat="
+ rat + ", logicModemUuid=" + logicModemUuid + ", status=" + status + ", rcRil.raf="
+ rc.raf);
return new RadioCapability(ril.mPhoneId, session, phase, rat, logicModemUuid, status);
}
/**
* Convert LinkCapacityEstimate defined in radio/1.2, 1.6/types.hal to
* a list of LinkCapacityEstimates
* @param lceObj LinkCapacityEstimate defined in radio/1.2, 1.6/types.hal
* @return The converted list of LinkCapacityEstimates
*/
public static List<LinkCapacityEstimate> convertHalLinkCapacityEstimate(Object lceObj) {
final List<LinkCapacityEstimate> lceList = new ArrayList<>();
if (lceObj == null) return lceList;
if (lceObj instanceof android.hardware.radio.V1_2.LinkCapacityEstimate) {
android.hardware.radio.V1_2.LinkCapacityEstimate lce =
(android.hardware.radio.V1_2.LinkCapacityEstimate) lceObj;
lceList.add(new LinkCapacityEstimate(LinkCapacityEstimate.LCE_TYPE_COMBINED,
lce.downlinkCapacityKbps, lce.uplinkCapacityKbps));
} else if (lceObj instanceof android.hardware.radio.V1_6.LinkCapacityEstimate) {
android.hardware.radio.V1_6.LinkCapacityEstimate lce =
(android.hardware.radio.V1_6.LinkCapacityEstimate) lceObj;
int primaryDownlinkCapacityKbps = lce.downlinkCapacityKbps;
int primaryUplinkCapacityKbps = lce.uplinkCapacityKbps;
if (primaryDownlinkCapacityKbps != LinkCapacityEstimate.INVALID
&& lce.secondaryDownlinkCapacityKbps != LinkCapacityEstimate.INVALID) {
primaryDownlinkCapacityKbps =
lce.downlinkCapacityKbps - lce.secondaryDownlinkCapacityKbps;
}
if (primaryUplinkCapacityKbps != LinkCapacityEstimate.INVALID
&& lce.secondaryUplinkCapacityKbps != LinkCapacityEstimate.INVALID) {
primaryUplinkCapacityKbps =
lce.uplinkCapacityKbps - lce.secondaryUplinkCapacityKbps;
}
lceList.add(new LinkCapacityEstimate(LinkCapacityEstimate.LCE_TYPE_PRIMARY,
primaryDownlinkCapacityKbps, primaryUplinkCapacityKbps));
lceList.add(new LinkCapacityEstimate(LinkCapacityEstimate.LCE_TYPE_SECONDARY,
lce.secondaryDownlinkCapacityKbps, lce.secondaryUplinkCapacityKbps));
}
return lceList;
}
/**
* Convert LinkCapacityEstimate defined in LinkCapacityEstimate.aidl to a list of
* LinkCapacityEstimates
* @param lce LinkCapacityEstimate defined in LinkCapacityEstimate.aidl
* @return The converted list of LinkCapacityEstimates
*/
public static List<LinkCapacityEstimate> convertHalLinkCapacityEstimate(
android.hardware.radio.network.LinkCapacityEstimate lce) {
final List<LinkCapacityEstimate> lceList = new ArrayList<>();
int primaryDownlinkCapacityKbps = lce.downlinkCapacityKbps;
int primaryUplinkCapacityKbps = lce.uplinkCapacityKbps;
if (primaryDownlinkCapacityKbps != LinkCapacityEstimate.INVALID
&& lce.secondaryDownlinkCapacityKbps != LinkCapacityEstimate.INVALID) {
primaryDownlinkCapacityKbps =
lce.downlinkCapacityKbps - lce.secondaryDownlinkCapacityKbps;
}
if (primaryUplinkCapacityKbps != LinkCapacityEstimate.INVALID
&& lce.secondaryUplinkCapacityKbps != LinkCapacityEstimate.INVALID) {
primaryUplinkCapacityKbps =
lce.uplinkCapacityKbps - lce.secondaryUplinkCapacityKbps;
}
lceList.add(new LinkCapacityEstimate(LinkCapacityEstimate.LCE_TYPE_PRIMARY,
primaryDownlinkCapacityKbps, primaryUplinkCapacityKbps));
lceList.add(new LinkCapacityEstimate(LinkCapacityEstimate.LCE_TYPE_SECONDARY,
lce.secondaryDownlinkCapacityKbps, lce.secondaryUplinkCapacityKbps));
return lceList;
}
/**
* Convert a list of CellInfo defined in radio/1.4, 1.5, 1.6/types.hal to a list of
* CellInfos
* @param records List of CellInfo defined in radio/1.4, 1.5, 1.6/types.hal
* @return The converted list of CellInfos
*/
public static ArrayList<CellInfo> convertHalCellInfoList(ArrayList<Object> records) {
ArrayList<CellInfo> response = new ArrayList<>(records.size());
if (records.isEmpty()) return response;
final long nanotime = SystemClock.elapsedRealtimeNanos();
for (Object obj : records) {
response.add(convertHalCellInfo(obj, nanotime));
}
return response;
}
/**
* Convert a list of CellInfo defined in CellInfo.aidl to a list of CellInfos
* @param records List of CellInfo defined in CellInfo.aidl
* @return The converted list of CellInfos
*/
public static ArrayList<CellInfo> convertHalCellInfoList(
android.hardware.radio.network.CellInfo[] records) {
ArrayList<CellInfo> response = new ArrayList<>(records.length);
if (records.length == 0) return response;
final long nanotime = SystemClock.elapsedRealtimeNanos();
for (android.hardware.radio.network.CellInfo ci : records) {
response.add(convertHalCellInfo(ci, nanotime));
}
return response;
}
/**
* Convert a CellInfo defined in radio/1.4, 1.5, 1.6/types.hal to CellInfo
* @param cellInfo CellInfo defined in radio/1.4, 1.5, 1.6/types.hal
* @param nanotime time the CellInfo was created
* @return The converted CellInfo
*/
private static CellInfo convertHalCellInfo(Object cellInfo, long nanotime) {
if (cellInfo == null) return null;
int type;
int connectionStatus;
boolean registered;
CellIdentityGsm gsmCi = null;
CellSignalStrengthGsm gsmSs = null;
CellIdentityCdma cdmaCi = null;
CellSignalStrengthCdma cdmaSs = null;
CellIdentityLte lteCi = null;
CellSignalStrengthLte lteSs = null;
CellConfigLte lteCc = null;
CellIdentityWcdma wcdmaCi = null;
CellSignalStrengthWcdma wcdmaSs = null;
CellIdentityTdscdma tdscdmaCi = null;
CellSignalStrengthTdscdma tdscdmaSs = null;
CellIdentityNr nrCi = null;
CellSignalStrengthNr nrSs = null;
if (cellInfo instanceof android.hardware.radio.V1_4.CellInfo) {
final android.hardware.radio.V1_4.CellInfo record =
(android.hardware.radio.V1_4.CellInfo) cellInfo;
connectionStatus = record.connectionStatus;
registered = record.isRegistered;
switch (record.info.getDiscriminator()) {
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.gsm:
type = CellInfo.TYPE_GSM;
android.hardware.radio.V1_2.CellInfoGsm gsm = record.info.gsm();
gsmCi = convertHalCellIdentityGsm(gsm.cellIdentityGsm);
gsmSs = convertHalGsmSignalStrength(gsm.signalStrengthGsm);
break;
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.cdma:
type = CellInfo.TYPE_CDMA;
android.hardware.radio.V1_2.CellInfoCdma cdma = record.info.cdma();
cdmaCi = convertHalCellIdentityCdma(cdma.cellIdentityCdma);
cdmaSs = convertHalCdmaSignalStrength(
cdma.signalStrengthCdma, cdma.signalStrengthEvdo);
break;
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.lte:
type = CellInfo.TYPE_LTE;
android.hardware.radio.V1_4.CellInfoLte lte = record.info.lte();
lteCi = convertHalCellIdentityLte(lte.base.cellIdentityLte);
lteSs = convertHalLteSignalStrength(lte.base.signalStrengthLte);
lteCc = new CellConfigLte(lte.cellConfig.isEndcAvailable);
break;
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.wcdma:
type = CellInfo.TYPE_WCDMA;
android.hardware.radio.V1_2.CellInfoWcdma wcdma = record.info.wcdma();
wcdmaCi = convertHalCellIdentityWcdma(wcdma.cellIdentityWcdma);
wcdmaSs = convertHalWcdmaSignalStrength(wcdma.signalStrengthWcdma);
break;
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.tdscdma:
type = CellInfo.TYPE_TDSCDMA;
android.hardware.radio.V1_2.CellInfoTdscdma tdscdma = record.info.tdscdma();
tdscdmaCi = convertHalCellIdentityTdscdma(tdscdma.cellIdentityTdscdma);
tdscdmaSs = convertHalTdscdmaSignalStrength(tdscdma.signalStrengthTdscdma);
break;
case android.hardware.radio.V1_4.CellInfo.Info.hidl_discriminator.nr:
type = CellInfo.TYPE_NR;
android.hardware.radio.V1_4.CellInfoNr nr = record.info.nr();
nrCi = convertHalCellIdentityNr(nr.cellidentity);
nrSs = convertHalNrSignalStrength(nr.signalStrength);
break;
default: return null;
}
} else if (cellInfo instanceof android.hardware.radio.V1_5.CellInfo) {
final android.hardware.radio.V1_5.CellInfo record =
(android.hardware.radio.V1_5.CellInfo) cellInfo;
connectionStatus = record.connectionStatus;
registered = record.registered;
switch (record.ratSpecificInfo.getDiscriminator()) {
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.gsm:
type = CellInfo.TYPE_GSM;
android.hardware.radio.V1_5.CellInfoGsm gsm = record.ratSpecificInfo.gsm();
gsmCi = convertHalCellIdentityGsm(gsm.cellIdentityGsm);
gsmSs = convertHalGsmSignalStrength(gsm.signalStrengthGsm);
break;
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.cdma:
type = CellInfo.TYPE_CDMA;
android.hardware.radio.V1_2.CellInfoCdma cdma = record.ratSpecificInfo.cdma();
cdmaCi = convertHalCellIdentityCdma(cdma.cellIdentityCdma);
cdmaSs = convertHalCdmaSignalStrength(
cdma.signalStrengthCdma, cdma.signalStrengthEvdo);
break;
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.lte:
type = CellInfo.TYPE_LTE;
android.hardware.radio.V1_5.CellInfoLte lte = record.ratSpecificInfo.lte();
lteCi = convertHalCellIdentityLte(lte.cellIdentityLte);
lteSs = convertHalLteSignalStrength(lte.signalStrengthLte);
lteCc = new CellConfigLte();
break;
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
type = CellInfo.TYPE_WCDMA;
android.hardware.radio.V1_5.CellInfoWcdma wcdma =
record.ratSpecificInfo.wcdma();
wcdmaCi = convertHalCellIdentityWcdma(wcdma.cellIdentityWcdma);
wcdmaSs = convertHalWcdmaSignalStrength(wcdma.signalStrengthWcdma);
break;
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
type = CellInfo.TYPE_TDSCDMA;
android.hardware.radio.V1_5.CellInfoTdscdma tdscdma =
record.ratSpecificInfo.tdscdma();
tdscdmaCi = convertHalCellIdentityTdscdma(tdscdma.cellIdentityTdscdma);
tdscdmaSs = convertHalTdscdmaSignalStrength(tdscdma.signalStrengthTdscdma);
break;
case android.hardware.radio.V1_5.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.nr:
type = CellInfo.TYPE_NR;
android.hardware.radio.V1_5.CellInfoNr nr = record.ratSpecificInfo.nr();
nrCi = convertHalCellIdentityNr(nr.cellIdentityNr);
nrSs = convertHalNrSignalStrength(nr.signalStrengthNr);
break;
default: return null;
}
} else if (cellInfo instanceof android.hardware.radio.V1_6.CellInfo) {
final android.hardware.radio.V1_6.CellInfo record =
(android.hardware.radio.V1_6.CellInfo) cellInfo;
connectionStatus = record.connectionStatus;
registered = record.registered;
switch (record.ratSpecificInfo.getDiscriminator()) {
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.gsm:
type = CellInfo.TYPE_GSM;
android.hardware.radio.V1_5.CellInfoGsm gsm = record.ratSpecificInfo.gsm();
gsmCi = convertHalCellIdentityGsm(gsm.cellIdentityGsm);
gsmSs = convertHalGsmSignalStrength(gsm.signalStrengthGsm);
break;
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.cdma:
type = CellInfo.TYPE_CDMA;
android.hardware.radio.V1_2.CellInfoCdma cdma = record.ratSpecificInfo.cdma();
cdmaCi = convertHalCellIdentityCdma(cdma.cellIdentityCdma);
cdmaSs = convertHalCdmaSignalStrength(
cdma.signalStrengthCdma, cdma.signalStrengthEvdo);
break;
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.lte:
type = CellInfo.TYPE_LTE;
android.hardware.radio.V1_6.CellInfoLte lte = record.ratSpecificInfo.lte();
lteCi = convertHalCellIdentityLte(lte.cellIdentityLte);
lteSs = convertHalLteSignalStrength(lte.signalStrengthLte);
lteCc = new CellConfigLte();
break;
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.wcdma:
type = CellInfo.TYPE_WCDMA;
android.hardware.radio.V1_5.CellInfoWcdma wcdma =
record.ratSpecificInfo.wcdma();
wcdmaCi = convertHalCellIdentityWcdma(wcdma.cellIdentityWcdma);
wcdmaSs = convertHalWcdmaSignalStrength(wcdma.signalStrengthWcdma);
break;
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.tdscdma:
type = CellInfo.TYPE_TDSCDMA;
android.hardware.radio.V1_5.CellInfoTdscdma tdscdma =
record.ratSpecificInfo.tdscdma();
tdscdmaCi = convertHalCellIdentityTdscdma(tdscdma.cellIdentityTdscdma);
tdscdmaSs = convertHalTdscdmaSignalStrength(tdscdma.signalStrengthTdscdma);
break;
case android.hardware.radio.V1_6.CellInfo
.CellInfoRatSpecificInfo.hidl_discriminator.nr:
type = CellInfo.TYPE_NR;
android.hardware.radio.V1_6.CellInfoNr nr = record.ratSpecificInfo.nr();
nrCi = convertHalCellIdentityNr(nr.cellIdentityNr);
nrSs = convertHalNrSignalStrength(nr.signalStrengthNr);
break;
default: return null;
}
} else {
return null;
}
switch (type) {
case CellInfo.TYPE_GSM:
return new CellInfoGsm(connectionStatus, registered, nanotime, gsmCi, gsmSs);
case CellInfo.TYPE_CDMA:
return new CellInfoCdma(connectionStatus, registered, nanotime, cdmaCi, cdmaSs);
case CellInfo.TYPE_LTE:
return new CellInfoLte(connectionStatus, registered, nanotime, lteCi, lteSs, lteCc);
case CellInfo.TYPE_WCDMA:
return new CellInfoWcdma(connectionStatus, registered, nanotime, wcdmaCi, wcdmaSs);
case CellInfo.TYPE_TDSCDMA:
return new CellInfoTdscdma(connectionStatus, registered, nanotime, tdscdmaCi,
tdscdmaSs);
case CellInfo.TYPE_NR:
return new CellInfoNr(connectionStatus, registered, nanotime, nrCi, nrSs);
case CellInfo.TYPE_UNKNOWN:
default:
return null;
}
}
/**
* Convert a CellInfo defined in CellInfo.aidl to CellInfo
* @param cellInfo CellInfo defined in CellInfo.aidl
* @param nanotime time the CellInfo was created
* @return The converted CellInfo
*/
private static CellInfo convertHalCellInfo(android.hardware.radio.network.CellInfo cellInfo,
long nanotime) {
if (cellInfo == null) return null;
int connectionStatus = cellInfo.connectionStatus;
boolean registered = cellInfo.registered;
switch (cellInfo.ratSpecificInfo.getTag()) {
case android.hardware.radio.network.CellInfoRatSpecificInfo.gsm:
android.hardware.radio.network.CellInfoGsm gsm = cellInfo.ratSpecificInfo.getGsm();
return new CellInfoGsm(connectionStatus, registered, nanotime,
convertHalCellIdentityGsm(gsm.cellIdentityGsm),
convertHalGsmSignalStrength(gsm.signalStrengthGsm));
case android.hardware.radio.network.CellInfoRatSpecificInfo.cdma:
android.hardware.radio.network.CellInfoCdma cdma =
cellInfo.ratSpecificInfo.getCdma();
return new CellInfoCdma(connectionStatus, registered, nanotime,
convertHalCellIdentityCdma(cdma.cellIdentityCdma),
convertHalCdmaSignalStrength(cdma.signalStrengthCdma,
cdma.signalStrengthEvdo));
case android.hardware.radio.network.CellInfoRatSpecificInfo.lte:
android.hardware.radio.network.CellInfoLte lte = cellInfo.ratSpecificInfo.getLte();
return new CellInfoLte(connectionStatus, registered, nanotime,
convertHalCellIdentityLte(lte.cellIdentityLte),
convertHalLteSignalStrength(lte.signalStrengthLte), new CellConfigLte());
case android.hardware.radio.network.CellInfoRatSpecificInfo.wcdma:
android.hardware.radio.network.CellInfoWcdma wcdma =
cellInfo.ratSpecificInfo.getWcdma();
return new CellInfoWcdma(connectionStatus, registered, nanotime,
convertHalCellIdentityWcdma(wcdma.cellIdentityWcdma),
convertHalWcdmaSignalStrength(wcdma.signalStrengthWcdma));
case android.hardware.radio.network.CellInfoRatSpecificInfo.tdscdma:
android.hardware.radio.network.CellInfoTdscdma tdscdma =
cellInfo.ratSpecificInfo.getTdscdma();
return new CellInfoTdscdma(connectionStatus, registered, nanotime,
convertHalCellIdentityTdscdma(tdscdma.cellIdentityTdscdma),
convertHalTdscdmaSignalStrength(tdscdma.signalStrengthTdscdma));
case android.hardware.radio.network.CellInfoRatSpecificInfo.nr:
android.hardware.radio.network.CellInfoNr nr = cellInfo.ratSpecificInfo.getNr();
return new CellInfoNr(connectionStatus, registered, nanotime,
convertHalCellIdentityNr(nr.cellIdentityNr),
convertHalNrSignalStrength(nr.signalStrengthNr));
default:
return null;
}
}
/**
* Convert a CellIdentity defined in radio/1.2, 1.5/types.hal to CellIdentity
* @param halCi CellIdentity defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentity
*/
public static CellIdentity convertHalCellIdentity(Object halCi) {
if (halCi == null) return null;
if (halCi instanceof android.hardware.radio.V1_2.CellIdentity) {
android.hardware.radio.V1_2.CellIdentity ci =
(android.hardware.radio.V1_2.CellIdentity) halCi;
switch (ci.cellInfoType) {
case CellInfo.TYPE_GSM:
if (ci.cellIdentityGsm.size() == 1) {
return convertHalCellIdentityGsm(ci.cellIdentityGsm.get(0));
}
break;
case CellInfo.TYPE_CDMA:
if (ci.cellIdentityCdma.size() == 1) {
return convertHalCellIdentityCdma(ci.cellIdentityCdma.get(0));
}
break;
case CellInfo.TYPE_LTE:
if (ci.cellIdentityLte.size() == 1) {
return convertHalCellIdentityLte(ci.cellIdentityLte.get(0));
}
break;
case CellInfo.TYPE_WCDMA:
if (ci.cellIdentityWcdma.size() == 1) {
return convertHalCellIdentityWcdma(ci.cellIdentityWcdma.get(0));
}
break;
case CellInfo.TYPE_TDSCDMA:
if (ci.cellIdentityTdscdma.size() == 1) {
return convertHalCellIdentityTdscdma(ci.cellIdentityTdscdma.get(0));
}
break;
}
} else if (halCi instanceof android.hardware.radio.V1_5.CellIdentity) {
android.hardware.radio.V1_5.CellIdentity ci =
(android.hardware.radio.V1_5.CellIdentity) halCi;
switch (ci.getDiscriminator()) {
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.gsm:
return convertHalCellIdentityGsm(ci.gsm());
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.cdma:
return convertHalCellIdentityCdma(ci.cdma());
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.lte:
return convertHalCellIdentityLte(ci.lte());
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.wcdma:
return convertHalCellIdentityWcdma(ci.wcdma());
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.tdscdma:
return convertHalCellIdentityTdscdma(ci.tdscdma());
case android.hardware.radio.V1_5.CellIdentity.hidl_discriminator.nr:
return convertHalCellIdentityNr(ci.nr());
}
}
return null;
}
/**
* Convert a CellIdentity defined in CellIdentity.aidl to CellInfo
* @param ci CellIdentity defined in CellIdentity.aidl
* @return The converted CellIdentity
*/
public static CellIdentity convertHalCellIdentity(
android.hardware.radio.network.CellIdentity ci) {
if (ci == null) return null;
switch (ci.getTag()) {
case android.hardware.radio.network.CellIdentity.gsm:
return convertHalCellIdentityGsm(ci.getGsm());
case android.hardware.radio.network.CellIdentity.cdma:
return convertHalCellIdentityCdma(ci.getCdma());
case android.hardware.radio.network.CellIdentity.lte:
return convertHalCellIdentityLte(ci.getLte());
case android.hardware.radio.network.CellIdentity.wcdma:
return convertHalCellIdentityWcdma(ci.getWcdma());
case android.hardware.radio.network.CellIdentity.tdscdma:
return convertHalCellIdentityTdscdma(ci.getTdscdma());
case android.hardware.radio.network.CellIdentity.nr:
return convertHalCellIdentityNr(ci.getNr());
default: return null;
}
}
/**
* Convert a CellIdentityGsm defined in radio/1.2, 1.5/types.hal to CellIdentityGsm
* @param gsm CellIdentityGsm defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentityGsm
*/
public static CellIdentityGsm convertHalCellIdentityGsm(Object gsm) {
if (gsm == null) return null;
if (gsm instanceof android.hardware.radio.V1_2.CellIdentityGsm) {
android.hardware.radio.V1_2.CellIdentityGsm ci =
(android.hardware.radio.V1_2.CellIdentityGsm) gsm;
return new CellIdentityGsm(ci.base.lac, ci.base.cid, ci.base.arfcn,
ci.base.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : ci.base.bsic, ci.base.mcc,
ci.base.mnc, ci.operatorNames.alphaLong, ci.operatorNames.alphaShort,
new ArraySet<>());
} else if (gsm instanceof android.hardware.radio.V1_5.CellIdentityGsm) {
android.hardware.radio.V1_5.CellIdentityGsm ci =
(android.hardware.radio.V1_5.CellIdentityGsm) gsm;
return new CellIdentityGsm(ci.base.base.lac, ci.base.base.cid, ci.base.base.arfcn,
ci.base.base.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE
: ci.base.base.bsic, ci.base.base.mcc, ci.base.base.mnc,
ci.base.operatorNames.alphaLong, ci.base.operatorNames.alphaShort,
ci.additionalPlmns);
} else {
return null;
}
}
/**
* Convert a CellIdentityGsm defined in CellIdentityGsm.aidl to CellIdentityGsm
* @param cid CellIdentityGsm defined in CellIdentityGsm.aidl
* @return The converted CellIdentityGsm
*/
public static CellIdentityGsm convertHalCellIdentityGsm(
android.hardware.radio.network.CellIdentityGsm cid) {
return new CellIdentityGsm(cid.lac, cid.cid, cid.arfcn,
cid.bsic == (byte) 0xFF ? CellInfo.UNAVAILABLE : cid.bsic, cid.mcc, cid.mnc,
cid.operatorNames.alphaLong, cid.operatorNames.alphaShort, new ArraySet<>());
}
/**
* Convert a CellIdentityCdma defined in radio/1.2/types.hal to CellIdentityCdma
* @param cdma CellIdentityCdma defined in radio/1.2/types.hal
* @return The converted CellIdentityCdma
*/
public static CellIdentityCdma convertHalCellIdentityCdma(Object cdma) {
if (cdma == null) return null;
if (cdma instanceof android.hardware.radio.V1_2.CellIdentityCdma) {
android.hardware.radio.V1_2.CellIdentityCdma ci =
(android.hardware.radio.V1_2.CellIdentityCdma) cdma;
return new CellIdentityCdma(ci.base.networkId, ci.base.systemId, ci.base.baseStationId,
ci.base.longitude, ci.base.latitude, ci.operatorNames.alphaLong,
ci.operatorNames.alphaShort);
} else {
return null;
}
}
/**
* Convert a CellIdentityCdma defined in CellIdentityCdma.aidl to CellIdentityCdma
* @param cid CellIdentityCdma defined in CelIdentityCdma.aidl
* @return The converted CellIdentityCdma
*/
public static CellIdentityCdma convertHalCellIdentityCdma(
android.hardware.radio.network.CellIdentityCdma cid) {
return new CellIdentityCdma(cid.networkId, cid.systemId, cid.baseStationId, cid.longitude,
cid.latitude, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort);
}
/**
* Convert a CellIdentityLte defined in radio/1.2, 1.5/types.hal to CellIdentityLte
* @param lte CellIdentityLte defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentityLte
*/
public static CellIdentityLte convertHalCellIdentityLte(Object lte) {
if (lte == null) return null;
if (lte instanceof android.hardware.radio.V1_2.CellIdentityLte) {
android.hardware.radio.V1_2.CellIdentityLte ci =
(android.hardware.radio.V1_2.CellIdentityLte) lte;
return new CellIdentityLte(ci.base.ci, ci.base.pci, ci.base.tac, ci.base.earfcn,
new int[] {}, ci.bandwidth, ci.base.mcc, ci.base.mnc,
ci.operatorNames.alphaLong, ci.operatorNames.alphaShort, new ArraySet<>(),
null);
} else if (lte instanceof android.hardware.radio.V1_5.CellIdentityLte) {
android.hardware.radio.V1_5.CellIdentityLte ci =
(android.hardware.radio.V1_5.CellIdentityLte) lte;
return new CellIdentityLte(ci.base.base.ci, ci.base.base.pci, ci.base.base.tac,
ci.base.base.earfcn, ci.bands.stream().mapToInt(Integer::intValue).toArray(),
ci.base.bandwidth, ci.base.base.mcc, ci.base.base.mnc,
ci.base.operatorNames.alphaLong, ci.base.operatorNames.alphaShort,
ci.additionalPlmns, convertHalClosedSubscriberGroupInfo(ci.optionalCsgInfo));
} else {
return null;
}
}
/**
* Convert a CellIdentityLte defined in CellIdentityLte.aidl to CellIdentityLte
* @param cid CellIdentityLte defined in CellIdentityLte.aidl
* @return The converted CellIdentityLte
*/
public static CellIdentityLte convertHalCellIdentityLte(
android.hardware.radio.network.CellIdentityLte cid) {
return new CellIdentityLte(cid.ci, cid.pci, cid.tac, cid.earfcn, cid.bands, cid.bandwidth,
cid.mcc, cid.mnc, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
primitiveArrayToArrayList(cid.additionalPlmns),
convertHalClosedSubscriberGroupInfo(cid.csgInfo));
}
/**
* Convert a CellIdentityWcdma defined in radio/1.2, 1.5/types.hal to CellIdentityWcdma
* @param wcdma CellIdentityWcdma defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentityWcdma
*/
public static CellIdentityWcdma convertHalCellIdentityWcdma(Object wcdma) {
if (wcdma == null) return null;
if (wcdma instanceof android.hardware.radio.V1_2.CellIdentityWcdma) {
android.hardware.radio.V1_2.CellIdentityWcdma ci =
(android.hardware.radio.V1_2.CellIdentityWcdma) wcdma;
return new CellIdentityWcdma(ci.base.lac, ci.base.cid, ci.base.psc, ci.base.uarfcn,
ci.base.mcc, ci.base.mnc, ci.operatorNames.alphaLong,
ci.operatorNames.alphaShort, new ArraySet<>(), null);
} else if (wcdma instanceof android.hardware.radio.V1_5.CellIdentityWcdma) {
android.hardware.radio.V1_5.CellIdentityWcdma ci =
(android.hardware.radio.V1_5.CellIdentityWcdma) wcdma;
return new CellIdentityWcdma(ci.base.base.lac, ci.base.base.cid, ci.base.base.psc,
ci.base.base.uarfcn, ci.base.base.mcc, ci.base.base.mnc,
ci.base.operatorNames.alphaLong, ci.base.operatorNames.alphaShort,
ci.additionalPlmns, convertHalClosedSubscriberGroupInfo(ci.optionalCsgInfo));
} else {
return null;
}
}
/**
* Convert a CellIdentityWcdma defined in CellIdentityWcdma.aidl to CellIdentityWcdma
* @param cid CellIdentityWcdma defined in CellIdentityWcdma.aidl
* @return The converted CellIdentityWcdma
*/
public static CellIdentityWcdma convertHalCellIdentityWcdma(
android.hardware.radio.network.CellIdentityWcdma cid) {
return new CellIdentityWcdma(cid.lac, cid.cid, cid.psc, cid.uarfcn, cid.mcc, cid.mnc,
cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
primitiveArrayToArrayList(cid.additionalPlmns),
convertHalClosedSubscriberGroupInfo(cid.csgInfo));
}
/**
* Convert a CellIdentityTdscdma defined in radio/1.2, 1.5/types.hal to CellIdentityTdscdma
* @param tdscdma CellIdentityTdscdma defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentityTdscdma
*/
public static CellIdentityTdscdma convertHalCellIdentityTdscdma(Object tdscdma) {
if (tdscdma == null) return null;
if (tdscdma instanceof android.hardware.radio.V1_2.CellIdentityTdscdma) {
android.hardware.radio.V1_2.CellIdentityTdscdma ci =
(android.hardware.radio.V1_2.CellIdentityTdscdma) tdscdma;
return new CellIdentityTdscdma(ci.base.mcc, ci.base.mnc, ci.base.lac, ci.base.cid,
ci.base.cpid, ci.uarfcn, ci.operatorNames.alphaLong,
ci.operatorNames.alphaShort, Collections.emptyList(), null);
} else if (tdscdma instanceof android.hardware.radio.V1_5.CellIdentityTdscdma) {
android.hardware.radio.V1_5.CellIdentityTdscdma ci =
(android.hardware.radio.V1_5.CellIdentityTdscdma) tdscdma;
return new CellIdentityTdscdma(ci.base.base.mcc, ci.base.base.mnc, ci.base.base.lac,
ci.base.base.cid, ci.base.base.cpid, ci.base.uarfcn,
ci.base.operatorNames.alphaLong, ci.base.operatorNames.alphaShort,
ci.additionalPlmns, convertHalClosedSubscriberGroupInfo(ci.optionalCsgInfo));
} else {
return null;
}
}
/**
* Convert a CellIdentityTdscdma defined in CellIdentityTdscdma.aidl to CellIdentityTdscdma
* @param cid CellIdentityTdscdma defined in radio/1.2, 1.5/types.hal
* @return The converted CellIdentityTdscdma
*/
public static CellIdentityTdscdma convertHalCellIdentityTdscdma(
android.hardware.radio.network.CellIdentityTdscdma cid) {
return new CellIdentityTdscdma(cid.mcc, cid.mnc, cid.lac, cid.cid, cid.cpid, cid.uarfcn,
cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
primitiveArrayToArrayList(cid.additionalPlmns),
convertHalClosedSubscriberGroupInfo(cid.csgInfo));
}
/**
* Convert a CellIdentityNr defined in radio/1.4, 1.5/types.hal to CellIdentityNr
* @param nr CellIdentityNr defined in radio/1.4 1.5/types.hal
* @return The converted CellIdentityNr
*/
public static CellIdentityNr convertHalCellIdentityNr(Object nr) {
if (nr == null) return null;
if (nr instanceof android.hardware.radio.V1_4.CellIdentityNr) {
android.hardware.radio.V1_4.CellIdentityNr ci =
(android.hardware.radio.V1_4.CellIdentityNr) nr;
return new CellIdentityNr(ci.pci, ci.tac, ci.nrarfcn, new int[] {}, ci.mcc, ci.mnc,
ci.nci, ci.operatorNames.alphaLong, ci.operatorNames.alphaShort,
new ArraySet<>());
} else if (nr instanceof android.hardware.radio.V1_5.CellIdentityNr) {
android.hardware.radio.V1_5.CellIdentityNr ci =
(android.hardware.radio.V1_5.CellIdentityNr) nr;
return new CellIdentityNr(ci.base.pci, ci.base.tac, ci.base.nrarfcn,
ci.bands.stream().mapToInt(Integer::intValue).toArray(), ci.base.mcc,
ci.base.mnc, ci.base.nci, ci.base.operatorNames.alphaLong,
ci.base.operatorNames.alphaShort, ci.additionalPlmns);
} else {
return null;
}
}
/**
* Convert a CellIdentityNr defined in CellIdentityNr.aidl to CellIdentityNr
* @param cid CellIdentityNr defined in CellIdentityNr.aidl
* @return The converted CellIdentityNr
*/
public static CellIdentityNr convertHalCellIdentityNr(
android.hardware.radio.network.CellIdentityNr cid) {
return new CellIdentityNr(cid.pci, cid.tac, cid.nrarfcn, cid.bands, cid.mcc, cid.mnc,
cid.nci, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort,
primitiveArrayToArrayList(cid.additionalPlmns));
}
/**
* Convert a SignalStrength defined in radio/1.4, 1.6/types.hal to SignalStrength
* @param ss SignalStrength defined in radio/1.4, 1.6/types.hal
* @return The converted SignalStrength
*/
public static SignalStrength convertHalSignalStrength(Object ss) {
if (ss == null) return null;
if (ss instanceof android.hardware.radio.V1_4.SignalStrength) {
android.hardware.radio.V1_4.SignalStrength signalStrength =
(android.hardware.radio.V1_4.SignalStrength) ss;
return new SignalStrength(
convertHalCdmaSignalStrength(signalStrength.cdma, signalStrength.evdo),
convertHalGsmSignalStrength(signalStrength.gsm),
convertHalWcdmaSignalStrength(signalStrength.wcdma),
convertHalTdscdmaSignalStrength(signalStrength.tdscdma),
convertHalLteSignalStrength(signalStrength.lte),
convertHalNrSignalStrength(signalStrength.nr));
} else if (ss instanceof android.hardware.radio.V1_6.SignalStrength) {
android.hardware.radio.V1_6.SignalStrength signalStrength =
(android.hardware.radio.V1_6.SignalStrength) ss;
return new SignalStrength(
convertHalCdmaSignalStrength(signalStrength.cdma, signalStrength.evdo),
convertHalGsmSignalStrength(signalStrength.gsm),
convertHalWcdmaSignalStrength(signalStrength.wcdma),
convertHalTdscdmaSignalStrength(signalStrength.tdscdma),
convertHalLteSignalStrength(signalStrength.lte),
convertHalNrSignalStrength(signalStrength.nr));
}
return null;
}
/**
* Convert a SignalStrength defined in SignalStrength.aidl to SignalStrength
* @param signalStrength SignalStrength defined in SignalStrength.aidl
* @return The converted SignalStrength
*/
public static SignalStrength convertHalSignalStrength(
android.hardware.radio.network.SignalStrength signalStrength) {
return new SignalStrength(
convertHalCdmaSignalStrength(signalStrength.cdma, signalStrength.evdo),
convertHalGsmSignalStrength(signalStrength.gsm),
convertHalWcdmaSignalStrength(signalStrength.wcdma),
convertHalTdscdmaSignalStrength(signalStrength.tdscdma),
convertHalLteSignalStrength(signalStrength.lte),
convertHalNrSignalStrength(signalStrength.nr));
}
/**
* Convert a GsmSignalStrength defined in radio/1.0/types.hal to CellSignalStrengthGsm
* @param ss GsmSignalStrength defined in radio/1.0/types.hal
* @return The converted CellSignalStrengthGsm
*/
public static CellSignalStrengthGsm convertHalGsmSignalStrength(
android.hardware.radio.V1_0.GsmSignalStrength ss) {
CellSignalStrengthGsm ret = new CellSignalStrengthGsm(
CellSignalStrength.getRssiDbmFromAsu(ss.signalStrength), ss.bitErrorRate,
ss.timingAdvance);
if (ret.getRssi() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a GsmSignalStrength defined in GsmSignalStrength.aidl to CellSignalStrengthGsm
* @param ss GsmSignalStrength defined in GsmSignalStrength.aidl
* @return The converted CellSignalStrengthGsm
*/
public static CellSignalStrengthGsm convertHalGsmSignalStrength(
android.hardware.radio.network.GsmSignalStrength ss) {
CellSignalStrengthGsm ret = new CellSignalStrengthGsm(
CellSignalStrength.getRssiDbmFromAsu(ss.signalStrength), ss.bitErrorRate,
ss.timingAdvance);
if (ret.getRssi() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a CdmaSignalStrength and EvdoSignalStrength defined in radio/1.0/types.hal to
* CellSignalStrengthCdma
* @param cdma CdmaSignalStrength defined in radio/1.0/types.hal
* @param evdo EvdoSignalStrength defined in radio/1.0/types.hal
* @return The converted CellSignalStrengthCdma
*/
public static CellSignalStrengthCdma convertHalCdmaSignalStrength(
android.hardware.radio.V1_0.CdmaSignalStrength cdma,
android.hardware.radio.V1_0.EvdoSignalStrength evdo) {
return new CellSignalStrengthCdma(-cdma.dbm, -cdma.ecio, -evdo.dbm, -evdo.ecio,
evdo.signalNoiseRatio);
}
/**
* Convert a CdmaSignalStrength and EvdoSignalStrength defined in radio/network to
* CellSignalStrengthCdma
* @param cdma CdmaSignalStrength defined in CdmaSignalStrength.aidl
* @param evdo EvdoSignalStrength defined in EvdoSignalStrength.aidl
* @return The converted CellSignalStrengthCdma
*/
public static CellSignalStrengthCdma convertHalCdmaSignalStrength(
android.hardware.radio.network.CdmaSignalStrength cdma,
android.hardware.radio.network.EvdoSignalStrength evdo) {
return new CellSignalStrengthCdma(-cdma.dbm, -cdma.ecio, -evdo.dbm, -evdo.ecio,
evdo.signalNoiseRatio);
}
/**
* Convert a LteSignalStrength defined in radio/1.0, 1.6/types.hal to CellSignalStrengthLte
* @param lte LteSignalStrength defined in radio/1.0, 1.6/types.hal
* @return The converted CellSignalStrengthLte
*/
public static CellSignalStrengthLte convertHalLteSignalStrength(Object lte) {
if (lte == null) return null;
if (lte instanceof android.hardware.radio.V1_0.LteSignalStrength) {
android.hardware.radio.V1_0.LteSignalStrength ss =
(android.hardware.radio.V1_0.LteSignalStrength) lte;
return new CellSignalStrengthLte(
CellSignalStrengthLte.convertRssiAsuToDBm(ss.signalStrength),
ss.rsrp != CellInfo.UNAVAILABLE ? -ss.rsrp : ss.rsrp,
ss.rsrq != CellInfo.UNAVAILABLE ? -ss.rsrq : ss.rsrq,
CellSignalStrengthLte.convertRssnrUnitFromTenDbToDB(ss.rssnr), ss.cqi,
ss.timingAdvance);
} else if (lte instanceof android.hardware.radio.V1_6.LteSignalStrength) {
android.hardware.radio.V1_6.LteSignalStrength ss =
(android.hardware.radio.V1_6.LteSignalStrength) lte;
return new CellSignalStrengthLte(
CellSignalStrengthLte.convertRssiAsuToDBm(ss.base.signalStrength),
ss.base.rsrp != CellInfo.UNAVAILABLE ? -ss.base.rsrp : ss.base.rsrp,
ss.base.rsrq != CellInfo.UNAVAILABLE ? -ss.base.rsrq : ss.base.rsrq,
CellSignalStrengthLte.convertRssnrUnitFromTenDbToDB(ss.base.rssnr),
ss.cqiTableIndex, ss.base.cqi, ss.base.timingAdvance);
} else {
return null;
}
}
/**
* Convert a LteSignalStrength defined in LteSignalStrength.aidl to CellSignalStrengthLte
* @param ss LteSignalStrength defined in LteSignalStrength.aidl
* @return The converted CellSignalStrengthLte
*/
public static CellSignalStrengthLte convertHalLteSignalStrength(
android.hardware.radio.network.LteSignalStrength ss) {
return new CellSignalStrengthLte(
CellSignalStrengthLte.convertRssiAsuToDBm(ss.signalStrength),
ss.rsrp != CellInfo.UNAVAILABLE ? -ss.rsrp : ss.rsrp,
ss.rsrq != CellInfo.UNAVAILABLE ? -ss.rsrq : ss.rsrq,
CellSignalStrengthLte.convertRssnrUnitFromTenDbToDB(ss.rssnr), ss.cqiTableIndex,
ss.cqi, ss.timingAdvance);
}
/**
* Convert a WcdmaSignalStrength defined in radio/1.2/types.hal to CellSignalStrengthWcdma
* @param wcdma WcdmaSignalStrength defined in radio/1.2/types.hal
* @return The converted CellSignalStrengthWcdma
*/
public static CellSignalStrengthWcdma convertHalWcdmaSignalStrength(Object wcdma) {
if (wcdma == null) return null;
android.hardware.radio.V1_2.WcdmaSignalStrength ss =
(android.hardware.radio.V1_2.WcdmaSignalStrength) wcdma;
CellSignalStrengthWcdma ret = new CellSignalStrengthWcdma(
CellSignalStrength.getRssiDbmFromAsu(ss.base.signalStrength),
ss.base.bitErrorRate, CellSignalStrength.getRscpDbmFromAsu(ss.rscp),
CellSignalStrength.getEcNoDbFromAsu(ss.ecno));
if (ret.getRssi() == CellInfo.UNAVAILABLE && ret.getRscp() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a WcdmaSignalStrength defined in WcdmaSignalStrength.aidl to CellSignalStrengthWcdma
* @param ss WcdmaSignalStrength defined in WcdmaSignalStrength.aidl
* @return The converted CellSignalStrengthWcdma
*/
public static CellSignalStrengthWcdma convertHalWcdmaSignalStrength(
android.hardware.radio.network.WcdmaSignalStrength ss) {
CellSignalStrengthWcdma ret = new CellSignalStrengthWcdma(
CellSignalStrength.getRssiDbmFromAsu(ss.signalStrength),
ss.bitErrorRate, CellSignalStrength.getRscpDbmFromAsu(ss.rscp),
CellSignalStrength.getEcNoDbFromAsu(ss.ecno));
if (ret.getRssi() == CellInfo.UNAVAILABLE && ret.getRscp() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a TdscdmaSignalStrength defined in radio/1.2/types.hal to CellSignalStrengthTdscdma
* @param tdscdma TdscdmaSignalStrength defined in radio/1.2/types.hal
* @return The converted CellSignalStrengthTdscdma
*/
public static CellSignalStrengthTdscdma convertHalTdscdmaSignalStrength(Object tdscdma) {
if (tdscdma == null) return null;
android.hardware.radio.V1_2.TdscdmaSignalStrength ss =
(android.hardware.radio.V1_2.TdscdmaSignalStrength) tdscdma;
CellSignalStrengthTdscdma ret = new CellSignalStrengthTdscdma(
CellSignalStrength.getRssiDbmFromAsu(ss.signalStrength), ss.bitErrorRate,
CellSignalStrength.getRscpDbmFromAsu(ss.rscp));
if (ret.getRssi() == CellInfo.UNAVAILABLE && ret.getRscp() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a TdscdmaSignalStrength defined in TdscdmaSignalStrength.aidl to
* CellSignalStrengthTdscdma
* @param ss TdscdmaSignalStrength defined in TdscdmaSignalStrength.aidl
* @return The converted CellSignalStrengthTdscdma
*/
public static CellSignalStrengthTdscdma convertHalTdscdmaSignalStrength(
android.hardware.radio.network.TdscdmaSignalStrength ss) {
CellSignalStrengthTdscdma ret = new CellSignalStrengthTdscdma(
CellSignalStrength.getRssiDbmFromAsu(ss.signalStrength),
ss.bitErrorRate, CellSignalStrength.getRscpDbmFromAsu(ss.rscp));
if (ret.getRssi() == CellInfo.UNAVAILABLE && ret.getRscp() == CellInfo.UNAVAILABLE) {
ret.setDefaultValues();
ret.updateLevel(null, null);
}
return ret;
}
/**
* Convert a NrSignalStrength defined in radio/1.4, 1.6/types.hal to CellSignalStrengthNr
* @param nr NrSignalStrength defined in radio/1.4, 1.6/types.hal
* @return The converted CellSignalStrengthNr
*/
public static CellSignalStrengthNr convertHalNrSignalStrength(Object nr) {
if (nr == null) return null;
if (nr instanceof android.hardware.radio.V1_4.NrSignalStrength) {
android.hardware.radio.V1_4.NrSignalStrength ss =
(android.hardware.radio.V1_4.NrSignalStrength) nr;
return new CellSignalStrengthNr(CellSignalStrengthNr.flip(ss.csiRsrp),
CellSignalStrengthNr.flip(ss.csiRsrq), ss.csiSinr,
CellSignalStrengthNr.flip(ss.ssRsrp), CellSignalStrengthNr.flip(ss.ssRsrq),
ss.ssSinr);
} else if (nr instanceof android.hardware.radio.V1_6.NrSignalStrength) {
android.hardware.radio.V1_6.NrSignalStrength ss =
(android.hardware.radio.V1_6.NrSignalStrength) nr;
return new CellSignalStrengthNr(CellSignalStrengthNr.flip(ss.base.csiRsrp),
CellSignalStrengthNr.flip(ss.base.csiRsrq), ss.base.csiSinr,
ss.csiCqiTableIndex, ss.csiCqiReport, CellSignalStrengthNr.flip(ss.base.ssRsrp),
CellSignalStrengthNr.flip(ss.base.ssRsrq), ss.base.ssSinr,
CellInfo.UNAVAILABLE);
}
return null;
}
/**
* Convert a NrSignalStrength defined in NrSignalStrength.aidl to CellSignalStrengthNr
* @param ss NrSignalStrength defined in NrSignalStrength.aidl
* @return The converted CellSignalStrengthNr
*/
public static CellSignalStrengthNr convertHalNrSignalStrength(
android.hardware.radio.network.NrSignalStrength ss) {
return new CellSignalStrengthNr(CellSignalStrengthNr.flip(ss.csiRsrp),
CellSignalStrengthNr.flip(ss.csiRsrq), ss.csiSinr, ss.csiCqiTableIndex,
primitiveArrayToArrayList(ss.csiCqiReport), CellSignalStrengthNr.flip(ss.ssRsrp),
CellSignalStrengthNr.flip(ss.ssRsrq), ss.ssSinr, ss.timingAdvance);
}
private static ClosedSubscriberGroupInfo convertHalClosedSubscriberGroupInfo(
android.hardware.radio.V1_5.OptionalCsgInfo optionalCsgInfo) {
android.hardware.radio.V1_5.ClosedSubscriberGroupInfo csgInfo =
optionalCsgInfo.getDiscriminator()
== android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo
? optionalCsgInfo.csgInfo() : null;
if (csgInfo == null) return null;
return new ClosedSubscriberGroupInfo(csgInfo.csgIndication, csgInfo.homeNodebName,
csgInfo.csgIdentity);
}
private static ClosedSubscriberGroupInfo convertHalClosedSubscriberGroupInfo(
android.hardware.radio.network.ClosedSubscriberGroupInfo csgInfo) {
if (csgInfo == null) return null;
return new ClosedSubscriberGroupInfo(csgInfo.csgIndication, csgInfo.homeNodebName,
csgInfo.csgIdentity);
}
/**
* Convert a list of BarringInfo defined in radio/1.5/types.hal to a sparse array of
* BarringServiceInfos
* @param halBarringInfos List of BarringInfos defined in radio/1.5/types.hal
* @return The converted sparse array of BarringServiceInfos
*/
public static SparseArray<BarringInfo.BarringServiceInfo> convertHalBarringInfoList(
List<android.hardware.radio.V1_5.BarringInfo> halBarringInfos) {
SparseArray<BarringInfo.BarringServiceInfo> serviceInfos = new SparseArray<>();
for (android.hardware.radio.V1_5.BarringInfo halBarringInfo : halBarringInfos) {
if (halBarringInfo.barringType
== android.hardware.radio.V1_5.BarringInfo.BarringType.CONDITIONAL) {
if (halBarringInfo.barringTypeSpecificInfo.getDiscriminator()
!= android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo
.hidl_discriminator.conditional) {
// this is an error case where the barring info is conditional but the
// conditional barring fields weren't included
continue;
}
android.hardware.radio.V1_5.BarringInfo.BarringTypeSpecificInfo
.Conditional conditionalInfo =
halBarringInfo.barringTypeSpecificInfo.conditional();
serviceInfos.put(
halBarringInfo.serviceType, new BarringInfo.BarringServiceInfo(
halBarringInfo.barringType, // will always be CONDITIONAL here
conditionalInfo.isBarred,
conditionalInfo.factor,
conditionalInfo.timeSeconds));
} else {
// Barring type is either NONE or UNCONDITIONAL
serviceInfos.put(
halBarringInfo.serviceType, new BarringInfo.BarringServiceInfo(
halBarringInfo.barringType, false, 0, 0));
}
}
return serviceInfos;
}
/**
* Convert a list of BarringInfo defined in BarringInfo.aidl to a sparse array of
* BarringServiceInfos
* @param halBarringInfos List of BarringInfos defined in BarringInfo.aidl
* @return The converted sparse array of BarringServiceInfos
*/
public static SparseArray<BarringInfo.BarringServiceInfo> convertHalBarringInfoList(
android.hardware.radio.network.BarringInfo[] halBarringInfos) {
SparseArray<BarringInfo.BarringServiceInfo> serviceInfos = new SparseArray<>();
for (android.hardware.radio.network.BarringInfo halBarringInfo : halBarringInfos) {
if (halBarringInfo.barringType
== android.hardware.radio.network.BarringInfo.BARRING_TYPE_CONDITIONAL) {
if (halBarringInfo.barringTypeSpecificInfo == null) {
// this is an error case where the barring info is conditional but the
// conditional barring fields weren't included
continue;
}
serviceInfos.put(
halBarringInfo.serviceType, new BarringInfo.BarringServiceInfo(
halBarringInfo.barringType, // will always be CONDITIONAL here
halBarringInfo.barringTypeSpecificInfo.isBarred,
halBarringInfo.barringTypeSpecificInfo.factor,
halBarringInfo.barringTypeSpecificInfo.timeSeconds));
} else {
// Barring type is either NONE or UNCONDITIONAL
serviceInfos.put(halBarringInfo.serviceType, new BarringInfo.BarringServiceInfo(
halBarringInfo.barringType, false, 0, 0));
}
}
return serviceInfos;
}
private static LinkAddress convertToLinkAddress(String addressString) {
return convertToLinkAddress(addressString, 0, LinkAddress.LIFETIME_UNKNOWN,
LinkAddress.LIFETIME_UNKNOWN);
}
private static LinkAddress convertToLinkAddress(String addressString, int properties,
long deprecationTime, long expirationTime) {
addressString = addressString.trim();
InetAddress address = null;
int prefixLength = -1;
try {
String[] pieces = addressString.split("/", 2);
address = InetAddresses.parseNumericAddress(pieces[0]);
if (pieces.length == 1) {
prefixLength = (address instanceof Inet4Address) ? 32 : 128;
} else if (pieces.length == 2) {
prefixLength = Integer.parseInt(pieces[1]);
}
} catch (NullPointerException e) { // Null string.
} catch (ArrayIndexOutOfBoundsException e) { // No prefix length.
} catch (NumberFormatException e) { // Non-numeric prefix.
} catch (IllegalArgumentException e) { // Invalid IP address.
}
if (address == null || prefixLength == -1) {
throw new IllegalArgumentException("Invalid link address " + addressString);
}
return new LinkAddress(address, prefixLength, properties, 0, deprecationTime,
expirationTime);
}
/**
* Convert SetupDataCallResult defined in radio/1.4, 1.5, 1.6/types.hal into
* DataCallResponse
* @param dcResult SetupDataCallResult defined in radio/1.4, 1.5, 1.6/types.hal
* @return The converted DataCallResponse
*/
@VisibleForTesting
public static DataCallResponse convertHalDataCallResult(Object dcResult) {
if (dcResult == null) return null;
int cause, cid, active, mtu, mtuV4, mtuV6;
long suggestedRetryTime;
String ifname;
int protocolType;
String[] addresses;
String[] dnses;
String[] gateways;
String[] pcscfs;
Qos defaultQos = null;
@DataCallResponse.HandoverFailureMode
int handoverFailureMode = DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY;
int pduSessionId = DataCallResponse.PDU_SESSION_ID_NOT_SET;
List<LinkAddress> laList = new ArrayList<>();
List<QosBearerSession> qosSessions = new ArrayList<>();
NetworkSliceInfo sliceInfo = null;
List<TrafficDescriptor> trafficDescriptors = new ArrayList<>();
if (dcResult instanceof android.hardware.radio.V1_4.SetupDataCallResult) {
final android.hardware.radio.V1_4.SetupDataCallResult result =
(android.hardware.radio.V1_4.SetupDataCallResult) dcResult;
cause = result.cause;
suggestedRetryTime = result.suggestedRetryTime;
cid = result.cid;
active = result.active;
protocolType = result.type;
ifname = result.ifname;
addresses = result.addresses.toArray(new String[0]);
dnses = result.dnses.toArray(new String[0]);
gateways = result.gateways.toArray(new String[0]);
pcscfs = result.pcscf.toArray(new String[0]);
mtu = mtuV4 = mtuV6 = result.mtu;
if (addresses != null) {
for (String address : addresses) {
laList.add(convertToLinkAddress(address));
}
}
} else if (dcResult instanceof android.hardware.radio.V1_5.SetupDataCallResult) {
final android.hardware.radio.V1_5.SetupDataCallResult result =
(android.hardware.radio.V1_5.SetupDataCallResult) dcResult;
cause = result.cause;
suggestedRetryTime = result.suggestedRetryTime;
cid = result.cid;
active = result.active;
protocolType = result.type;
ifname = result.ifname;
laList = result.addresses.stream().map(la -> convertToLinkAddress(
la.address, la.properties, la.deprecationTime, la.expirationTime))
.collect(Collectors.toList());
dnses = result.dnses.toArray(new String[0]);
gateways = result.gateways.toArray(new String[0]);
pcscfs = result.pcscf.toArray(new String[0]);
mtu = Math.max(result.mtuV4, result.mtuV6);
mtuV4 = result.mtuV4;
mtuV6 = result.mtuV6;
} else if (dcResult instanceof android.hardware.radio.V1_6.SetupDataCallResult) {
final android.hardware.radio.V1_6.SetupDataCallResult result =
(android.hardware.radio.V1_6.SetupDataCallResult) dcResult;
cause = result.cause;
suggestedRetryTime = result.suggestedRetryTime;
cid = result.cid;
active = result.active;
protocolType = result.type;
ifname = result.ifname;
laList = result.addresses.stream().map(la -> convertToLinkAddress(
la.address, la.properties, la.deprecationTime, la.expirationTime))
.collect(Collectors.toList());
dnses = result.dnses.toArray(new String[0]);
gateways = result.gateways.toArray(new String[0]);
pcscfs = result.pcscf.toArray(new String[0]);
mtu = Math.max(result.mtuV4, result.mtuV6);
mtuV4 = result.mtuV4;
mtuV6 = result.mtuV6;
handoverFailureMode = result.handoverFailureMode;
pduSessionId = result.pduSessionId;
defaultQos = convertHalQos(result.defaultQos);
qosSessions = result.qosSessions.stream().map(RILUtils::convertHalQosBearerSession)
.collect(Collectors.toList());
sliceInfo = result.sliceInfo.getDiscriminator()
== android.hardware.radio.V1_6.OptionalSliceInfo.hidl_discriminator.noinit
? null : convertHalSliceInfo(result.sliceInfo.value());
for (android.hardware.radio.V1_6.TrafficDescriptor td : result.trafficDescriptors) {
try {
trafficDescriptors.add(RILUtils.convertHalTrafficDescriptor(td));
} catch (IllegalArgumentException e) {
loge("convertHalDataCallResult: Failed to convert traffic descriptor. e=" + e);
}
}
} else {
loge("Unsupported SetupDataCallResult " + dcResult);
return null;
}
// Process dns
List<InetAddress> dnsList = new ArrayList<>();
if (dnses != null) {
for (String dns : dnses) {
dns = dns.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(dns);
dnsList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown dns: " + dns, e);
}
}
}
// Process gateway
List<InetAddress> gatewayList = new ArrayList<>();
if (gateways != null) {
for (String gateway : gateways) {
gateway = gateway.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(gateway);
gatewayList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown gateway: " + gateway, e);
}
}
}
// Process gateway
List<InetAddress> pcscfList = new ArrayList<>();
if (pcscfs != null) {
for (String pcscf : pcscfs) {
pcscf = pcscf.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(pcscf);
pcscfList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown pcscf: " + pcscf, e);
}
}
}
return new DataCallResponse.Builder()
.setCause(cause)
.setRetryDurationMillis(suggestedRetryTime)
.setId(cid)
.setLinkStatus(active)
.setProtocolType(protocolType)
.setInterfaceName(ifname)
.setAddresses(laList)
.setDnsAddresses(dnsList)
.setGatewayAddresses(gatewayList)
.setPcscfAddresses(pcscfList)
.setMtu(mtu)
.setMtuV4(mtuV4)
.setMtuV6(mtuV6)
.setHandoverFailureMode(handoverFailureMode)
.setPduSessionId(pduSessionId)
.setDefaultQos(defaultQos)
.setQosBearerSessions(qosSessions)
.setSliceInfo(sliceInfo)
.setTrafficDescriptors(trafficDescriptors)
.build();
}
/**
* Convert SetupDataCallResult defined in SetupDataCallResult.aidl into DataCallResponse
* @param result SetupDataCallResult defined in SetupDataCallResult.aidl
* @return The converted DataCallResponse
*/
@VisibleForTesting
public static DataCallResponse convertHalDataCallResult(
android.hardware.radio.data.SetupDataCallResult result) {
if (result == null) return null;
List<LinkAddress> laList = new ArrayList<>();
for (android.hardware.radio.data.LinkAddress la : result.addresses) {
laList.add(convertToLinkAddress(la.address, la.addressProperties,
la.deprecationTime, la.expirationTime));
}
List<InetAddress> dnsList = new ArrayList<>();
if (result.dnses != null) {
for (String dns : result.dnses) {
dns = dns.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(dns);
dnsList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown dns: " + dns, e);
}
}
}
List<InetAddress> gatewayList = new ArrayList<>();
if (result.gateways != null) {
for (String gateway : result.gateways) {
gateway = gateway.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(gateway);
gatewayList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown gateway: " + gateway, e);
}
}
}
List<InetAddress> pcscfList = new ArrayList<>();
if (result.pcscf != null) {
for (String pcscf : result.pcscf) {
pcscf = pcscf.trim();
InetAddress ia;
try {
ia = InetAddresses.parseNumericAddress(pcscf);
pcscfList.add(ia);
} catch (IllegalArgumentException e) {
Rlog.e(TAG, "Unknown pcscf: " + pcscf, e);
}
}
}
List<QosBearerSession> qosSessions = new ArrayList<>();
for (android.hardware.radio.data.QosSession session : result.qosSessions) {
qosSessions.add(convertHalQosBearerSession(session));
}
List<TrafficDescriptor> trafficDescriptors = new ArrayList<>();
for (android.hardware.radio.data.TrafficDescriptor td : result.trafficDescriptors) {
try {
trafficDescriptors.add(convertHalTrafficDescriptor(td));
} catch (IllegalArgumentException e) {
loge("convertHalDataCallResult: Failed to convert traffic descriptor. e=" + e);
}
}
return new DataCallResponse.Builder()
.setCause(result.cause)
.setRetryDurationMillis(result.suggestedRetryTime)
.setId(result.cid)
.setLinkStatus(result.active)
.setProtocolType(result.type)
.setInterfaceName(result.ifname)
.setAddresses(laList)
.setDnsAddresses(dnsList)
.setGatewayAddresses(gatewayList)
.setPcscfAddresses(pcscfList)
.setMtu(Math.max(result.mtuV4, result.mtuV6))
.setMtuV4(result.mtuV4)
.setMtuV6(result.mtuV6)
.setHandoverFailureMode(result.handoverFailureMode)
.setPduSessionId(result.pduSessionId)
.setDefaultQos(convertHalQos(result.defaultQos))
.setQosBearerSessions(qosSessions)
.setSliceInfo(result.sliceInfo == null ? null
: convertHalSliceInfo(result.sliceInfo))
.setTrafficDescriptors(trafficDescriptors)
.build();
}
private static NetworkSliceInfo convertHalSliceInfo(android.hardware.radio.V1_6.SliceInfo si) {
NetworkSliceInfo.Builder builder = new NetworkSliceInfo.Builder()
.setSliceServiceType(si.sst)
.setMappedHplmnSliceServiceType(si.mappedHplmnSst)
.setStatus(convertHalSliceStatus(si.status));
if (si.sliceDifferentiator != NetworkSliceInfo.SLICE_DIFFERENTIATOR_NO_SLICE) {
builder.setSliceDifferentiator(si.sliceDifferentiator)
.setMappedHplmnSliceDifferentiator(si.mappedHplmnSD);
}
return builder.build();
}
private static NetworkSliceInfo convertHalSliceInfo(android.hardware.radio.data.SliceInfo si) {
NetworkSliceInfo.Builder builder = new NetworkSliceInfo.Builder()
.setSliceServiceType(si.sliceServiceType)
.setMappedHplmnSliceServiceType(si.mappedHplmnSst)
.setStatus(convertHalSliceStatus(si.status));
if (si.sliceDifferentiator != NetworkSliceInfo.SLICE_DIFFERENTIATOR_NO_SLICE) {
builder.setSliceDifferentiator(si.sliceDifferentiator)
.setMappedHplmnSliceDifferentiator(si.mappedHplmnSd);
}
return builder.build();
}
@NetworkSliceInfo.SliceStatus private static int convertHalSliceStatus(byte status) {
switch (status) {
case SliceInfo.STATUS_CONFIGURED:
return NetworkSliceInfo.SLICE_STATUS_CONFIGURED;
case SliceInfo.STATUS_ALLOWED:
return NetworkSliceInfo.SLICE_STATUS_ALLOWED;
case SliceInfo.STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN:
return NetworkSliceInfo.SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN;
case SliceInfo.STATUS_REJECTED_NOT_AVAILABLE_IN_REG_AREA:
return NetworkSliceInfo.SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_REGISTERED_AREA;
case SliceInfo.STATUS_DEFAULT_CONFIGURED:
return NetworkSliceInfo.SLICE_STATUS_DEFAULT_CONFIGURED;
default:
return NetworkSliceInfo.SLICE_STATUS_UNKNOWN;
}
}
private static TrafficDescriptor convertHalTrafficDescriptor(
android.hardware.radio.V1_6.TrafficDescriptor td) throws IllegalArgumentException {
String dnn = td.dnn.getDiscriminator()
== android.hardware.radio.V1_6.OptionalDnn.hidl_discriminator.noinit
? null : td.dnn.value();
byte[] osAppId = td.osAppId.getDiscriminator()
== android.hardware.radio.V1_6.OptionalOsAppId.hidl_discriminator.noinit
? null : arrayListToPrimitiveArray(td.osAppId.value().osAppId);
TrafficDescriptor.Builder builder = new TrafficDescriptor.Builder();
if (dnn != null) {
builder.setDataNetworkName(dnn);
}
if (osAppId != null) {
builder.setOsAppId(osAppId);
}
return builder.build();
}
private static TrafficDescriptor convertHalTrafficDescriptor(
android.hardware.radio.data.TrafficDescriptor td) throws IllegalArgumentException {
String dnn = td.dnn;
byte[] osAppId = td.osAppId == null ? null : td.osAppId.osAppId;
TrafficDescriptor.Builder builder = new TrafficDescriptor.Builder();
if (dnn != null) {
builder.setDataNetworkName(dnn);
}
if (osAppId != null) {
builder.setOsAppId(osAppId);
}
return builder.build();
}
/**
* Convert SlicingConfig defined in radio/1.6/types.hal to NetworkSlicingConfig
* @param sc SlicingConfig defined in radio/1.6/types.hal
* @return The converted NetworkSlicingConfig
*/
public static NetworkSlicingConfig convertHalSlicingConfig(
android.hardware.radio.V1_6.SlicingConfig sc) {
List<UrspRule> urspRules = sc.urspRules.stream().map(ur -> new UrspRule(ur.precedence,
ur.trafficDescriptors.stream()
.map(td -> {
try {
return convertHalTrafficDescriptor(td);
} catch (IllegalArgumentException e) {
loge("convertHalSlicingConfig: Failed to convert traffic "
+ "descriptor. e=" + e);
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList()),
ur.routeSelectionDescriptor.stream().map(
rsd -> new RouteSelectionDescriptor(rsd.precedence,
rsd.sessionType.value(), rsd.sscMode.value(),
rsd.sliceInfo.stream().map(RILUtils::convertHalSliceInfo)
.collect(Collectors.toList()),
rsd.dnn)).collect(Collectors.toList())))
.collect(Collectors.toList());
return new NetworkSlicingConfig(urspRules, sc.sliceInfo.stream()
.map(RILUtils::convertHalSliceInfo).collect(Collectors.toList()));
}
/**
* Convert SlicingConfig defined in SlicingConfig.aidl to NetworkSlicingConfig
* @param sc SlicingConfig defined in SlicingConfig.aidl
* @return The converted NetworkSlicingConfig
*/
public static NetworkSlicingConfig convertHalSlicingConfig(
android.hardware.radio.data.SlicingConfig sc) {
List<UrspRule> urspRules = new ArrayList<>();
for (android.hardware.radio.data.UrspRule ur : sc.urspRules) {
List<TrafficDescriptor> tds = new ArrayList<>();
for (android.hardware.radio.data.TrafficDescriptor td : ur.trafficDescriptors) {
try {
tds.add(convertHalTrafficDescriptor(td));
} catch (IllegalArgumentException e) {
loge("convertHalTrafficDescriptor: " + e);
}
}
List<RouteSelectionDescriptor> rsds = new ArrayList<>();
for (android.hardware.radio.data.RouteSelectionDescriptor rsd
: ur.routeSelectionDescriptor) {
List<NetworkSliceInfo> sliceInfo = new ArrayList<>();
for (android.hardware.radio.data.SliceInfo si : rsd.sliceInfo) {
sliceInfo.add(convertHalSliceInfo(si));
}
rsds.add(new RouteSelectionDescriptor(rsd.precedence, rsd.sessionType, rsd.sscMode,
sliceInfo, primitiveArrayToArrayList(rsd.dnn)));
}
urspRules.add(new UrspRule(ur.precedence, tds, rsds));
}
List<NetworkSliceInfo> sliceInfo = new ArrayList<>();
for (android.hardware.radio.data.SliceInfo si : sc.sliceInfo) {
sliceInfo.add(convertHalSliceInfo(si));
}
return new NetworkSlicingConfig(urspRules, sliceInfo);
}
private static Qos.QosBandwidth convertHalQosBandwidth(
android.hardware.radio.V1_6.QosBandwidth bandwidth) {
return new Qos.QosBandwidth(bandwidth.maxBitrateKbps, bandwidth.guaranteedBitrateKbps);
}
private static Qos.QosBandwidth convertHalQosBandwidth(
android.hardware.radio.data.QosBandwidth bandwidth) {
return new Qos.QosBandwidth(bandwidth.maxBitrateKbps, bandwidth.guaranteedBitrateKbps);
}
private static Qos convertHalQos(android.hardware.radio.V1_6.Qos qos) {
switch (qos.getDiscriminator()) {
case android.hardware.radio.V1_6.Qos.hidl_discriminator.eps:
android.hardware.radio.V1_6.EpsQos eps = qos.eps();
return new EpsQos(convertHalQosBandwidth(eps.downlink),
convertHalQosBandwidth(eps.uplink), eps.qci);
case android.hardware.radio.V1_6.Qos.hidl_discriminator.nr:
android.hardware.radio.V1_6.NrQos nr = qos.nr();
return new NrQos(convertHalQosBandwidth(nr.downlink),
convertHalQosBandwidth(nr.uplink), nr.qfi, nr.fiveQi, nr.averagingWindowMs);
default:
return null;
}
}
private static Qos convertHalQos(android.hardware.radio.data.Qos qos) {
switch (qos.getTag()) {
case android.hardware.radio.data.Qos.eps:
android.hardware.radio.data.EpsQos eps = qos.getEps();
return new EpsQos(convertHalQosBandwidth(eps.downlink),
convertHalQosBandwidth(eps.uplink), eps.qci);
case android.hardware.radio.data.Qos.nr:
android.hardware.radio.data.NrQos nr = qos.getNr();
int averagingWindowMs = nr.averagingWindowMillis;
if (averagingWindowMs
== android.hardware.radio.data.NrQos.AVERAGING_WINDOW_UNKNOWN) {
averagingWindowMs = nr.averagingWindowMs;
}
return new NrQos(convertHalQosBandwidth(nr.downlink),
convertHalQosBandwidth(nr.uplink), nr.qfi, nr.fiveQi, averagingWindowMs);
default:
return null;
}
}
private static QosBearerFilter convertHalQosBearerFilter(
android.hardware.radio.V1_6.QosFilter qosFilter) {
List<LinkAddress> localAddressList = new ArrayList<>();
String[] localAddresses = qosFilter.localAddresses.toArray(new String[0]);
if (localAddresses != null) {
for (String address : localAddresses) {
localAddressList.add(convertToLinkAddress(address));
}
}
List<LinkAddress> remoteAddressList = new ArrayList<>();
String[] remoteAddresses = qosFilter.remoteAddresses.toArray(new String[0]);
if (remoteAddresses != null) {
for (String address : remoteAddresses) {
remoteAddressList.add(convertToLinkAddress(address));
}
}
QosBearerFilter.PortRange localPort = null;
if (qosFilter.localPort != null) {
if (qosFilter.localPort.getDiscriminator()
== android.hardware.radio.V1_6.MaybePort.hidl_discriminator.range) {
final android.hardware.radio.V1_6.PortRange portRange = qosFilter.localPort.range();
localPort = new QosBearerFilter.PortRange(portRange.start, portRange.end);
}
}
QosBearerFilter.PortRange remotePort = null;
if (qosFilter.remotePort != null) {
if (qosFilter.remotePort.getDiscriminator()
== android.hardware.radio.V1_6.MaybePort.hidl_discriminator.range) {
final android.hardware.radio.V1_6.PortRange portRange =
qosFilter.remotePort.range();
remotePort = new QosBearerFilter.PortRange(portRange.start, portRange.end);
}
}
int tos = -1;
if (qosFilter.tos != null) {
if (qosFilter.tos.getDiscriminator() == android.hardware.radio.V1_6.QosFilter
.TypeOfService.hidl_discriminator.value) {
tos = qosFilter.tos.value();
}
}
long flowLabel = -1;
if (qosFilter.flowLabel != null) {
if (qosFilter.flowLabel.getDiscriminator() == android.hardware.radio.V1_6.QosFilter
.Ipv6FlowLabel.hidl_discriminator.value) {
flowLabel = qosFilter.flowLabel.value();
}
}
long spi = -1;
if (qosFilter.spi != null) {
if (qosFilter.spi.getDiscriminator()
== android.hardware.radio.V1_6.QosFilter.IpsecSpi.hidl_discriminator.value) {
spi = qosFilter.spi.value();
}
}
return new QosBearerFilter(localAddressList, remoteAddressList, localPort, remotePort,
qosFilter.protocol, tos, flowLabel, spi, qosFilter.direction, qosFilter.precedence);
}
private static QosBearerFilter convertHalQosBearerFilter(
android.hardware.radio.data.QosFilter qosFilter) {
List<LinkAddress> localAddressList = new ArrayList<>();
String[] localAddresses = qosFilter.localAddresses;
if (localAddresses != null) {
for (String address : localAddresses) {
localAddressList.add(convertToLinkAddress(address));
}
}
List<LinkAddress> remoteAddressList = new ArrayList<>();
String[] remoteAddresses = qosFilter.remoteAddresses;
if (remoteAddresses != null) {
for (String address : remoteAddresses) {
remoteAddressList.add(convertToLinkAddress(address));
}
}
QosBearerFilter.PortRange localPort = null;
if (qosFilter.localPort != null) {
localPort = new QosBearerFilter.PortRange(
qosFilter.localPort.start, qosFilter.localPort.end);
}
QosBearerFilter.PortRange remotePort = null;
if (qosFilter.remotePort != null) {
remotePort = new QosBearerFilter.PortRange(
qosFilter.remotePort.start, qosFilter.remotePort.end);
}
int tos = -1;
if (qosFilter.tos != null) {
if (qosFilter.tos.getTag()
== android.hardware.radio.data.QosFilterTypeOfService.value) {
tos = qosFilter.tos.value;
}
}
long flowLabel = -1;
if (qosFilter.flowLabel != null) {
if (qosFilter.flowLabel.getTag()
== android.hardware.radio.data.QosFilterIpv6FlowLabel.value) {
flowLabel = qosFilter.flowLabel.value;
}
}
long spi = -1;
if (qosFilter.spi != null) {
if (qosFilter.spi.getTag()
== android.hardware.radio.data.QosFilterIpsecSpi.value) {
spi = qosFilter.spi.value;
}
}
return new QosBearerFilter(localAddressList, remoteAddressList, localPort, remotePort,
qosFilter.protocol, tos, flowLabel, spi, qosFilter.direction, qosFilter.precedence);
}
private static QosBearerSession convertHalQosBearerSession(
android.hardware.radio.V1_6.QosSession qosSession) {
List<QosBearerFilter> qosBearerFilters = new ArrayList<>();
if (qosSession.qosFilters != null) {
for (android.hardware.radio.V1_6.QosFilter filter : qosSession.qosFilters) {
qosBearerFilters.add(convertHalQosBearerFilter(filter));
}
}
return new QosBearerSession(qosSession.qosSessionId, convertHalQos(qosSession.qos),
qosBearerFilters);
}
private static QosBearerSession convertHalQosBearerSession(
android.hardware.radio.data.QosSession qosSession) {
List<QosBearerFilter> qosBearerFilters = new ArrayList<>();
if (qosSession.qosFilters != null) {
for (android.hardware.radio.data.QosFilter filter : qosSession.qosFilters) {
qosBearerFilters.add(convertHalQosBearerFilter(filter));
}
}
return new QosBearerSession(qosSession.qosSessionId, convertHalQos(qosSession.qos),
qosBearerFilters);
}
/**
* Convert a list of SetupDataCallResult defined in radio/1.4, 1.5, 1.6/types.hal into
* a list of DataCallResponse
* @param dataCallResultList List of SetupDataCallResult defined in
* radio/1.4, 1.5, 1.6/types.hal
* @return The converted list of DataCallResponses
*/
@VisibleForTesting
public static ArrayList<DataCallResponse> convertHalDataCallResultList(
List<? extends Object> dataCallResultList) {
ArrayList<DataCallResponse> response = new ArrayList<>(dataCallResultList.size());
for (Object obj : dataCallResultList) {
response.add(convertHalDataCallResult(obj));
}
return response;
}
/**
* Convert a list of SetupDataCallResult defined in SetupDataCallResult.aidl into a list of
* DataCallResponse
* @param dataCallResultList Array of SetupDataCallResult defined in SetupDataCallResult.aidl
* @return The converted list of DataCallResponses
*/
@VisibleForTesting
public static ArrayList<DataCallResponse> convertHalDataCallResultList(
android.hardware.radio.data.SetupDataCallResult[] dataCallResultList) {
ArrayList<DataCallResponse> response = new ArrayList<>(dataCallResultList.length);
for (android.hardware.radio.data.SetupDataCallResult result : dataCallResultList) {
response.add(convertHalDataCallResult(result));
}
return response;
}
/**
* Convert KeepaliveStatusCode defined in radio/1.1/types.hal and KeepaliveStatus.aidl
* to KeepaliveStatus
* @param halCode KeepaliveStatus code defined in radio/1.1/types.hal or KeepaliveStatus.aidl
* @return The converted KeepaliveStatus
*/
public static @KeepaliveStatusCode int convertHalKeepaliveStatusCode(int halCode) {
switch (halCode) {
case android.hardware.radio.V1_1.KeepaliveStatusCode.ACTIVE:
return KeepaliveStatus.STATUS_ACTIVE;
case android.hardware.radio.V1_1.KeepaliveStatusCode.INACTIVE:
return KeepaliveStatus.STATUS_INACTIVE;
case android.hardware.radio.V1_1.KeepaliveStatusCode.PENDING:
return KeepaliveStatus.STATUS_PENDING;
default:
return -1;
}
}
/**
* Convert RadioState defined in radio/1.0/types.hal and RadioState.aidl to RadioPowerState
* @param stateInt Radio state defined in radio/1.0/types.hal or RadioState.aidl
* @return The converted {@link Annotation.RadioPowerState RadioPowerState}
*/
public static @Annotation.RadioPowerState int convertHalRadioState(int stateInt) {
int state;
switch(stateInt) {
case android.hardware.radio.V1_0.RadioState.OFF:
state = TelephonyManager.RADIO_POWER_OFF;
break;
case android.hardware.radio.V1_0.RadioState.UNAVAILABLE:
state = TelephonyManager.RADIO_POWER_UNAVAILABLE;
break;
case android.hardware.radio.V1_0.RadioState.ON:
state = TelephonyManager.RADIO_POWER_ON;
break;
default:
throw new RuntimeException("Unrecognized RadioState: " + stateInt);
}
return state;
}
/**
* Convert CellConnectionStatus defined in radio/1.2/types.hal to ConnectionStatus
* @param status Cell connection status defined in radio/1.2/types.hal
* @return The converted ConnectionStatus
*/
public static int convertHalCellConnectionStatus(int status) {
switch (status) {
case android.hardware.radio.V1_2.CellConnectionStatus.PRIMARY_SERVING:
return PhysicalChannelConfig.CONNECTION_PRIMARY_SERVING;
case android.hardware.radio.V1_2.CellConnectionStatus.SECONDARY_SERVING:
return PhysicalChannelConfig.CONNECTION_SECONDARY_SERVING;
default:
return PhysicalChannelConfig.CONNECTION_UNKNOWN;
}
}
/**
* Convert Call defined in radio/1.2, 1.6/types.hal to DriverCall
* @param halCall Call defined in radio/1.2, 1.6/types.hal
* @return The converted DriverCall
*/
public static DriverCall convertToDriverCall(Object halCall) {
DriverCall dc = new DriverCall();
final android.hardware.radio.V1_6.Call call16;
final android.hardware.radio.V1_2.Call call12;
final android.hardware.radio.V1_0.Call call10;
if (halCall instanceof android.hardware.radio.V1_6.Call) {
call16 = (android.hardware.radio.V1_6.Call) halCall;
call12 = call16.base;
call10 = call12.base;
} else if (halCall instanceof android.hardware.radio.V1_2.Call) {
call16 = null;
call12 = (android.hardware.radio.V1_2.Call) halCall;
call10 = call12.base;
} else {
call16 = null;
call12 = null;
call10 = null;
}
if (call10 != null) {
dc.state = DriverCall.stateFromCLCC(call10.state);
dc.index = call10.index;
dc.TOA = call10.toa;
dc.isMpty = call10.isMpty;
dc.isMT = call10.isMT;
dc.als = call10.als;
dc.isVoice = call10.isVoice;
dc.isVoicePrivacy = call10.isVoicePrivacy;
dc.number = call10.number;
dc.numberPresentation = DriverCall.presentationFromCLIP(call10.numberPresentation);
dc.name = call10.name;
dc.namePresentation = DriverCall.presentationFromCLIP(call10.namePresentation);
if (call10.uusInfo.size() == 1) {
dc.uusInfo = new UUSInfo();
dc.uusInfo.setType(call10.uusInfo.get(0).uusType);
dc.uusInfo.setDcs(call10.uusInfo.get(0).uusDcs);
if (!TextUtils.isEmpty(call10.uusInfo.get(0).uusData)) {
byte[] userData = call10.uusInfo.get(0).uusData.getBytes();
dc.uusInfo.setUserData(userData);
}
}
// Make sure there's a leading + on addresses with a TOA of 145
dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
}
if (call12 != null) {
dc.audioQuality = call12.audioQuality;
}
if (call16 != null) {
dc.forwardedNumber = call16.forwardedNumber;
}
return dc;
}
/**
* Convert Call defined in Call.aidl to DriverCall
* @param halCall Call defined in Call.aidl
* @return The converted DriverCall
*/
public static DriverCall convertToDriverCall(android.hardware.radio.voice.Call halCall) {
DriverCall dc = new DriverCall();
dc.state = DriverCall.stateFromCLCC(halCall.state);
dc.index = halCall.index;
dc.TOA = halCall.toa;
dc.isMpty = halCall.isMpty;
dc.isMT = halCall.isMT;
dc.als = halCall.als;
dc.isVoice = halCall.isVoice;
dc.isVoicePrivacy = halCall.isVoicePrivacy;
dc.number = halCall.number;
dc.numberPresentation = DriverCall.presentationFromCLIP(halCall.numberPresentation);
dc.name = halCall.name;
dc.namePresentation = DriverCall.presentationFromCLIP(halCall.namePresentation);
if (halCall.uusInfo.length == 1) {
dc.uusInfo = new UUSInfo();
dc.uusInfo.setType(halCall.uusInfo[0].uusType);
dc.uusInfo.setDcs(halCall.uusInfo[0].uusDcs);
if (!TextUtils.isEmpty(halCall.uusInfo[0].uusData)) {
dc.uusInfo.setUserData(halCall.uusInfo[0].uusData.getBytes());
}
}
// Make sure there's a leading + on addresses with a TOA of 145
dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
dc.audioQuality = halCall.audioQuality;
dc.forwardedNumber = halCall.forwardedNumber;
return dc;
}
/**
* Convert OperatorStatus defined in radio/1.0/types.hal to OperatorInfo.State
* @param status Operator status defined in radio/1.0/types.hal
* @return The converted OperatorStatus as a String
*/
public static String convertHalOperatorStatus(int status) {
if (status == android.hardware.radio.V1_0.OperatorStatus.UNKNOWN) {
return "unknown";
} else if (status == android.hardware.radio.V1_0.OperatorStatus.AVAILABLE) {
return "available";
} else if (status == android.hardware.radio.V1_0.OperatorStatus.CURRENT) {
return "current";
} else if (status == android.hardware.radio.V1_0.OperatorStatus.FORBIDDEN) {
return "forbidden";
} else {
return "";
}
}
/**
* Convert a list of Carriers defined in radio/1.0/types.hal to a list of CarrierIdentifiers
* @param carrierList List of Carriers defined in radio/1.0/types.hal
* @return The converted list of CarrierIdentifiers
*/
public static List<CarrierIdentifier> convertHalCarrierList(
List<android.hardware.radio.V1_0.Carrier> carrierList) {
List<CarrierIdentifier> ret = new ArrayList<>();
for (int i = 0; i < carrierList.size(); i++) {
String mcc = carrierList.get(i).mcc;
String mnc = carrierList.get(i).mnc;
String spn = null, imsi = null, gid1 = null, gid2 = null;
int matchType = carrierList.get(i).matchType;
String matchData = carrierList.get(i).matchData;
if (matchType == CarrierIdentifier.MatchType.SPN) {
spn = matchData;
} else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
imsi = matchData;
} else if (matchType == CarrierIdentifier.MatchType.GID1) {
gid1 = matchData;
} else if (matchType == CarrierIdentifier.MatchType.GID2) {
gid2 = matchData;
}
ret.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
}
return ret;
}
/**
* Convert a list of Carriers defined in radio/1.0/types.hal to a list of CarrierIdentifiers
* @param carrierList List of Carriers defined in radio/1.0/types.hal
* @return The converted list of CarrierIdentifiers
*/
public static List<CarrierIdentifier> convertHalCarrierList(
android.hardware.radio.sim.Carrier[] carrierList) {
List<CarrierIdentifier> ret = new ArrayList<>();
if (carrierList == null) {
return ret;
}
for (int i = 0; i < carrierList.length; i++) {
String mcc = carrierList[i].mcc;
String mnc = carrierList[i].mnc;
String spn = null, imsi = null, gid1 = null, gid2 = null;
int matchType = carrierList[i].matchType;
String matchData = carrierList[i].matchData;
if (matchType == CarrierIdentifier.MatchType.SPN) {
spn = matchData;
} else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
imsi = matchData;
} else if (matchType == CarrierIdentifier.MatchType.GID1) {
gid1 = matchData;
} else if (matchType == CarrierIdentifier.MatchType.GID2) {
gid2 = matchData;
}
ret.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
}
return ret;
}
/**
* Convert an array of CarrierInfo defined in
* radio/aidl/android/hardware/radio/sim/CarrierInfo.aidl to a list of CarrierInfo
* defined in android/service/carrier/CarrierInfo.java
*
* @param carrierInfos array of CarrierInfo defined in
* radio/aidl/android/hardware/radio/sim/CarrierInfo.aidl
* @return The converted list of CarrierInfo
*/
public static List<CarrierInfo> convertAidlCarrierInfoList(
android.hardware.radio.sim.CarrierInfo[] carrierInfos) {
List<CarrierInfo> carrierInfoList = new ArrayList<>();
if (carrierInfos == null) {
loge("convertAidlCarrierInfoList received NULL carrierInfos");
return carrierInfoList;
}
for (int index = 0; index < carrierInfos.length; index++) {
String mcc = carrierInfos[index].mcc;
String mnc = carrierInfos[index].mnc;
String spn = carrierInfos[index].spn;
String gid1 = carrierInfos[index].gid1;
String gid2 = carrierInfos[index].gid2;
String imsi = carrierInfos[index].imsiPrefix;
String iccid = carrierInfos[index].iccid;
String impi = carrierInfos[index].impi;
List<android.hardware.radio.sim.Plmn> halEhplmn = carrierInfos[index].ehplmn;
List<String> eHplmnList = new ArrayList<>();
if (halEhplmn != null) {
for (int plmnIndex = 0; plmnIndex < halEhplmn.size(); plmnIndex++) {
String ehplmnMcc = halEhplmn.get(plmnIndex).mcc;
String ehplmnMnc = halEhplmn.get(plmnIndex).mnc;
eHplmnList.add(ehplmnMcc + "," + ehplmnMnc);
}
} else {
loge("convertAidlCarrierInfoList ehplmList is NULL");
}
CarrierInfo carrierInfo = new CarrierInfo(mcc, mnc, spn, gid1, gid2, imsi, iccid, impi,
eHplmnList);
carrierInfoList.add(carrierInfo);
}
return carrierInfoList;
}
/**
* Convert the sim policy defined in
* radio/aidl/android/hardware/radio/sim/SimLockMultiSimPolicy.aidl to the equivalent sim
* policy defined in android.telephony/CarrierRestrictionRules.MultiSimPolicy
*
* @param multiSimPolicy of type defined in SimLockMultiSimPolicy.aidl
* @return int of type CarrierRestrictionRules.MultiSimPolicy
*/
public static @CarrierRestrictionRules.MultiSimPolicy int convertAidlSimLockMultiSimPolicy(
int multiSimPolicy) {
switch (multiSimPolicy) {
case android.hardware.radio.sim.SimLockMultiSimPolicy.ONE_VALID_SIM_MUST_BE_PRESENT:
return CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT;
case android.hardware.radio.sim.SimLockMultiSimPolicy.APPLY_TO_ALL_SLOTS:
return CarrierRestrictionRules.MULTISIM_POLICY_APPLY_TO_ALL_SLOTS;
case android.hardware.radio.sim.SimLockMultiSimPolicy.APPLY_TO_ONLY_SLOT_1:
return CarrierRestrictionRules.MULTISIM_POLICY_APPLY_TO_ONLY_SLOT_1;
case android.hardware.radio.sim.SimLockMultiSimPolicy.VALID_SIM_MUST_PRESENT_ON_SLOT_1:
return CarrierRestrictionRules.MULTISIM_POLICY_VALID_SIM_MUST_PRESENT_ON_SLOT_1;
case android.hardware.radio.sim.SimLockMultiSimPolicy.
ACTIVE_SERVICE_ON_SLOT_1_TO_UNBLOCK_OTHER_SLOTS:
return CarrierRestrictionRules.
MULTISIM_POLICY_ACTIVE_SERVICE_ON_SLOT_1_TO_UNBLOCK_OTHER_SLOTS;
case android.hardware.radio.sim.SimLockMultiSimPolicy.
ACTIVE_SERVICE_ON_ANY_SLOT_TO_UNBLOCK_OTHER_SLOTS:
return CarrierRestrictionRules.
MULTISIM_POLICY_ACTIVE_SERVICE_ON_ANY_SLOT_TO_UNBLOCK_OTHER_SLOTS;
case android.hardware.radio.sim.SimLockMultiSimPolicy.ALL_SIMS_MUST_BE_VALID:
return CarrierRestrictionRules.MULTISIM_POLICY_ALL_SIMS_MUST_BE_VALID;
case android.hardware.radio.sim.SimLockMultiSimPolicy.SLOT_POLICY_OTHER:
return CarrierRestrictionRules.MULTISIM_POLICY_SLOT_POLICY_OTHER;
default:
return CarrierRestrictionRules.MULTISIM_POLICY_NONE;
}
}
/**
* Convert CardStatus defined in radio/1.0, 1.5/types.hal to IccCardStatus
* @param cardStatus CardStatus defined in radio/1.0, 1.5/types.hal
* @return The converted IccCardStatus
*/
public static IccCardStatus convertHalCardStatus(Object cardStatus) {
final android.hardware.radio.V1_0.CardStatus cardStatus10;
final android.hardware.radio.V1_5.CardStatus cardStatus15;
if (cardStatus instanceof android.hardware.radio.V1_5.CardStatus) {
cardStatus15 = (android.hardware.radio.V1_5.CardStatus) cardStatus;
cardStatus10 = cardStatus15.base.base.base;
} else if (cardStatus instanceof android.hardware.radio.V1_0.CardStatus) {
cardStatus15 = null;
cardStatus10 = (android.hardware.radio.V1_0.CardStatus) cardStatus;
} else {
cardStatus15 = null;
cardStatus10 = null;
}
IccCardStatus iccCardStatus = new IccCardStatus();
if (cardStatus10 != null) {
iccCardStatus.setCardState(cardStatus10.cardState);
iccCardStatus.setUniversalPinState(cardStatus10.universalPinState);
iccCardStatus.mGsmUmtsSubscriptionAppIndex = cardStatus10.gsmUmtsSubscriptionAppIndex;
iccCardStatus.mCdmaSubscriptionAppIndex = cardStatus10.cdmaSubscriptionAppIndex;
iccCardStatus.mImsSubscriptionAppIndex = cardStatus10.imsSubscriptionAppIndex;
int numApplications = cardStatus10.applications.size();
// limit to maximum allowed applications
if (numApplications > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
numApplications = com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
}
iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
for (int i = 0; i < numApplications; i++) {
android.hardware.radio.V1_0.AppStatus rilAppStatus =
cardStatus10.applications.get(i);
IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
appStatus.app_type = appStatus.AppTypeFromRILInt(rilAppStatus.appType);
appStatus.app_state = appStatus.AppStateFromRILInt(rilAppStatus.appState);
appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
rilAppStatus.persoSubstate);
appStatus.aid = rilAppStatus.aidPtr;
appStatus.app_label = rilAppStatus.appLabelPtr;
appStatus.pin1_replaced = rilAppStatus.pin1Replaced != 0;
appStatus.pin1 = appStatus.PinStateFromRILInt(rilAppStatus.pin1);
appStatus.pin2 = appStatus.PinStateFromRILInt(rilAppStatus.pin2);
iccCardStatus.mApplications[i] = appStatus;
}
}
if (cardStatus15 != null) {
IccSlotPortMapping slotPortMapping = new IccSlotPortMapping();
slotPortMapping.mPhysicalSlotIndex = cardStatus15.base.base.physicalSlotId;
iccCardStatus.mSlotPortMapping = slotPortMapping;
iccCardStatus.atr = cardStatus15.base.base.atr;
iccCardStatus.iccid = cardStatus15.base.base.iccid;
iccCardStatus.eid = cardStatus15.base.eid;
int numApplications = cardStatus15.applications.size();
// limit to maximum allowed applications
if (numApplications > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
numApplications = com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
}
iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
for (int i = 0; i < numApplications; i++) {
android.hardware.radio.V1_5.AppStatus rilAppStatus =
cardStatus15.applications.get(i);
IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
appStatus.app_type = appStatus.AppTypeFromRILInt(rilAppStatus.base.appType);
appStatus.app_state = appStatus.AppStateFromRILInt(rilAppStatus.base.appState);
appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
rilAppStatus.persoSubstate);
appStatus.aid = rilAppStatus.base.aidPtr;
appStatus.app_label = rilAppStatus.base.appLabelPtr;
appStatus.pin1_replaced = rilAppStatus.base.pin1Replaced != 0;
appStatus.pin1 = appStatus.PinStateFromRILInt(rilAppStatus.base.pin1);
appStatus.pin2 = appStatus.PinStateFromRILInt(rilAppStatus.base.pin2);
iccCardStatus.mApplications[i] = appStatus;
}
}
return iccCardStatus;
}
/**
* Convert CardStatus defined in CardStatus.aidl to IccCardStatus
* @param cardStatus CardStatus defined in CardStatus.aidl
* @return The converted IccCardStatus
*/
public static IccCardStatus convertHalCardStatus(
android.hardware.radio.sim.CardStatus cardStatus) {
IccCardStatus iccCardStatus = new IccCardStatus();
iccCardStatus.setCardState(cardStatus.cardState);
iccCardStatus.setMultipleEnabledProfilesMode(cardStatus.supportedMepMode);
iccCardStatus.setUniversalPinState(cardStatus.universalPinState);
iccCardStatus.mGsmUmtsSubscriptionAppIndex = cardStatus.gsmUmtsSubscriptionAppIndex;
iccCardStatus.mCdmaSubscriptionAppIndex = cardStatus.cdmaSubscriptionAppIndex;
iccCardStatus.mImsSubscriptionAppIndex = cardStatus.imsSubscriptionAppIndex;
iccCardStatus.atr = cardStatus.atr;
iccCardStatus.iccid = cardStatus.iccid;
iccCardStatus.eid = cardStatus.eid;
int numApplications = Math.min(cardStatus.applications.length,
com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS);
iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
for (int i = 0; i < numApplications; i++) {
android.hardware.radio.sim.AppStatus rilAppStatus = cardStatus.applications[i];
IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
appStatus.app_type = appStatus.AppTypeFromRILInt(rilAppStatus.appType);
appStatus.app_state = appStatus.AppStateFromRILInt(rilAppStatus.appState);
appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
rilAppStatus.persoSubstate);
appStatus.aid = rilAppStatus.aidPtr;
appStatus.app_label = rilAppStatus.appLabelPtr;
appStatus.pin1_replaced = rilAppStatus.pin1Replaced;
appStatus.pin1 = appStatus.PinStateFromRILInt(rilAppStatus.pin1);
appStatus.pin2 = appStatus.PinStateFromRILInt(rilAppStatus.pin2);
iccCardStatus.mApplications[i] = appStatus;
}
IccSlotPortMapping slotPortMapping = new IccSlotPortMapping();
slotPortMapping.mPhysicalSlotIndex = cardStatus.slotMap.physicalSlotId;
slotPortMapping.mPortIndex = PortUtils.convertFromHalPortIndex(
cardStatus.slotMap.physicalSlotId, cardStatus.slotMap.portId,
iccCardStatus.mCardState, iccCardStatus.mSupportedMepMode);
iccCardStatus.mSlotPortMapping = slotPortMapping;
return iccCardStatus;
}
/**
* Convert PhonebookCapacity defined in radio/1.6/types.hal to AdnCapacity
* @param pbCap PhonebookCapacity defined in radio/1.6/types.hal
* @return The converted AdnCapacity
*/
public static AdnCapacity convertHalPhonebookCapacity(
android.hardware.radio.V1_6.PhonebookCapacity pbCap) {
if (pbCap != null) {
return new AdnCapacity(pbCap.maxAdnRecords, pbCap.usedAdnRecords, pbCap.maxEmailRecords,
pbCap.usedEmailRecords, pbCap.maxAdditionalNumberRecords,
pbCap.usedAdditionalNumberRecords, pbCap.maxNameLen, pbCap.maxNumberLen,
pbCap.maxEmailLen, pbCap.maxAdditionalNumberLen);
}
return null;
}
/**
* Convert PhonebookCapacity defined in PhonebookCapacity.aidl to AdnCapacity
* @param pbCap PhonebookCapacity defined in PhonebookCapacity.aidl
* @return The converted AdnCapacity
*/
public static AdnCapacity convertHalPhonebookCapacity(
android.hardware.radio.sim.PhonebookCapacity pbCap) {
if (pbCap != null) {
return new AdnCapacity(pbCap.maxAdnRecords, pbCap.usedAdnRecords, pbCap.maxEmailRecords,
pbCap.usedEmailRecords, pbCap.maxAdditionalNumberRecords,
pbCap.usedAdditionalNumberRecords, pbCap.maxNameLen, pbCap.maxNumberLen,
pbCap.maxEmailLen, pbCap.maxAdditionalNumberLen);
}
return null;
}
/**
* Convert PhonebookRecordInfo defined in radio/1.6/types.hal to SimPhonebookRecord
* @param recInfo PhonebookRecordInfo defined in radio/1.6/types.hal
* @return The converted SimPhonebookRecord
*/
public static SimPhonebookRecord convertHalPhonebookRecordInfo(
android.hardware.radio.V1_6.PhonebookRecordInfo recInfo) {
String[] emails = recInfo.emails == null ? null
: recInfo.emails.toArray(new String[recInfo.emails.size()]);
String[] numbers = recInfo.additionalNumbers == null ? null
: recInfo.additionalNumbers.toArray(new String[recInfo.additionalNumbers.size()]);
return new SimPhonebookRecord(recInfo.recordId, recInfo.name, recInfo.number, emails,
numbers);
}
/**
* Convert PhonebookRecordInfo defined in PhonebookRecordInfo.aidl to SimPhonebookRecord
* @param recInfo PhonebookRecordInfo defined in PhonebookRecordInfo.aidl
* @return The converted SimPhonebookRecord
*/
public static SimPhonebookRecord convertHalPhonebookRecordInfo(
android.hardware.radio.sim.PhonebookRecordInfo recInfo) {
return new SimPhonebookRecord(recInfo.recordId, recInfo.name, recInfo.number,
recInfo.emails, recInfo.additionalNumbers);
}
/**
* Convert to PhonebookRecordInfo defined in radio/1.6/types.hal
* @param record SimPhonebookRecord to convert
* @return The converted PhonebookRecordInfo defined in radio/1.6/types.hal
*/
public static android.hardware.radio.V1_6.PhonebookRecordInfo convertToHalPhonebookRecordInfo(
SimPhonebookRecord record) {
if (record != null) {
return record.toPhonebookRecordInfo();
}
return null;
}
/**
* Convert to PhonebookRecordInfo.aidl
* @param record SimPhonebookRecord to convert
* @return The converted PhonebookRecordInfo
*/
public static android.hardware.radio.sim.PhonebookRecordInfo
convertToHalPhonebookRecordInfoAidl(SimPhonebookRecord record) {
if (record != null) {
return record.toPhonebookRecordInfoAidl();
}
return new android.hardware.radio.sim.PhonebookRecordInfo();
}
/**
* Convert array of SimSlotStatus to IccSlotStatus
* @param o object that represents array/list of SimSlotStatus
* @return ArrayList of IccSlotStatus
*/
public static ArrayList<IccSlotStatus> convertHalSlotStatus(Object o) {
ArrayList<IccSlotStatus> response = new ArrayList<>();
try {
final android.hardware.radio.config.SimSlotStatus[] halSlotStatusArray =
(android.hardware.radio.config.SimSlotStatus[]) o;
for (android.hardware.radio.config.SimSlotStatus slotStatus : halSlotStatusArray) {
IccSlotStatus iccSlotStatus = new IccSlotStatus();
iccSlotStatus.setCardState(slotStatus.cardState);
int portCount = slotStatus.portInfo.length;
iccSlotStatus.mSimPortInfos = new IccSimPortInfo[portCount];
for (int i = 0; i < portCount; i++) {
IccSimPortInfo simPortInfo = new IccSimPortInfo();
simPortInfo.mIccId = slotStatus.portInfo[i].iccId;
// If port is not active, set invalid logical slot index(-1) irrespective of
// the modem response. For more info, check http://b/209035150
simPortInfo.mLogicalSlotIndex = slotStatus.portInfo[i].portActive
? slotStatus.portInfo[i].logicalSlotId : -1;
simPortInfo.mPortActive = slotStatus.portInfo[i].portActive;
iccSlotStatus.mSimPortInfos[i] = simPortInfo;
}
iccSlotStatus.atr = slotStatus.atr;
iccSlotStatus.eid = slotStatus.eid;
iccSlotStatus.setMultipleEnabledProfilesMode(slotStatus.supportedMepMode);
response.add(iccSlotStatus);
}
return response;
} catch (ClassCastException ignore) { }
try {
final ArrayList<android.hardware.radio.config.V1_2.SimSlotStatus>
halSlotStatusArray =
(ArrayList<android.hardware.radio.config.V1_2.SimSlotStatus>) o;
for (android.hardware.radio.config.V1_2.SimSlotStatus slotStatus :
halSlotStatusArray) {
IccSlotStatus iccSlotStatus = new IccSlotStatus();
iccSlotStatus.setCardState(slotStatus.base.cardState);
// Old HAL versions does not support MEP, so only one port is available.
iccSlotStatus.mSimPortInfos = new IccSimPortInfo[1];
IccSimPortInfo simPortInfo = new IccSimPortInfo();
simPortInfo.mIccId = slotStatus.base.iccid;
simPortInfo.mPortActive = (slotStatus.base.slotState == IccSlotStatus.STATE_ACTIVE);
// If port/slot is not active, set invalid logical slot index(-1) irrespective of
// the modem response. For more info, check http://b/209035150
simPortInfo.mLogicalSlotIndex = simPortInfo.mPortActive
? slotStatus.base.logicalSlotId : -1;
iccSlotStatus.mSimPortInfos[TelephonyManager.DEFAULT_PORT_INDEX] = simPortInfo;
iccSlotStatus.atr = slotStatus.base.atr;
iccSlotStatus.eid = slotStatus.eid;
response.add(iccSlotStatus);
}
return response;
} catch (ClassCastException ignore) { }
try {
final ArrayList<android.hardware.radio.config.V1_0.SimSlotStatus>
halSlotStatusArray =
(ArrayList<android.hardware.radio.config.V1_0.SimSlotStatus>) o;
for (android.hardware.radio.config.V1_0.SimSlotStatus slotStatus :
halSlotStatusArray) {
IccSlotStatus iccSlotStatus = new IccSlotStatus();
iccSlotStatus.setCardState(slotStatus.cardState);
// Old HAL versions does not support MEP, so only one port is available.
iccSlotStatus.mSimPortInfos = new IccSimPortInfo[1];
IccSimPortInfo simPortInfo = new IccSimPortInfo();
simPortInfo.mIccId = slotStatus.iccid;
simPortInfo.mPortActive = (slotStatus.slotState == IccSlotStatus.STATE_ACTIVE);
// If port/slot is not active, set invalid logical slot index(-1) irrespective of
// the modem response. For more info, check http://b/209035150
simPortInfo.mLogicalSlotIndex = simPortInfo.mPortActive
? slotStatus.logicalSlotId : -1;
iccSlotStatus.mSimPortInfos[TelephonyManager.DEFAULT_PORT_INDEX] = simPortInfo;
iccSlotStatus.atr = slotStatus.atr;
response.add(iccSlotStatus);
}
return response;
} catch (ClassCastException ignore) { }
return response;
}
/**
* Convert List<UiccSlotMapping> list to SlotPortMapping[]
* @param slotMapping List<UiccSlotMapping> of slots mapping
* @return SlotPortMapping[] of slots mapping
*/
public static android.hardware.radio.config.SlotPortMapping[] convertSimSlotsMapping(
List<UiccSlotMapping> slotMapping) {
android.hardware.radio.config.SlotPortMapping[] res =
new android.hardware.radio.config.SlotPortMapping[slotMapping.size()];
for (UiccSlotMapping mapping : slotMapping) {
int logicalSlotIdx = mapping.getLogicalSlotIndex();
res[logicalSlotIdx] = new android.hardware.radio.config.SlotPortMapping();
res[logicalSlotIdx].physicalSlotId = mapping.getPhysicalSlotIndex();
res[logicalSlotIdx].portId = PortUtils.convertToHalPortIndex(
mapping.getPhysicalSlotIndex(), mapping.getPortIndex());
}
return res;
}
/** Convert a list of UiccSlotMapping to an ArrayList<Integer>.*/
public static ArrayList<Integer> convertSlotMappingToList(
List<UiccSlotMapping> slotMapping) {
int[] physicalSlots = new int[slotMapping.size()];
for (UiccSlotMapping mapping : slotMapping) {
physicalSlots[mapping.getLogicalSlotIndex()] = mapping.getPhysicalSlotIndex();
}
return primitiveArrayToArrayList(physicalSlots);
}
/**
* Convert PhoneCapability to telephony PhoneCapability.
* @param deviceNrCapabilities device's nr capability array
* @param o PhoneCapability to convert
* @return converted PhoneCapability
*/
public static PhoneCapability convertHalPhoneCapability(int[] deviceNrCapabilities, Object o) {
int maxActiveVoiceCalls = 0;
int maxActiveData = 0;
boolean validationBeforeSwitchSupported = false;
List<ModemInfo> logicalModemList = new ArrayList<>();
if (o instanceof android.hardware.radio.config.PhoneCapability) {
final android.hardware.radio.config.PhoneCapability phoneCapability =
(android.hardware.radio.config.PhoneCapability) o;
maxActiveData = phoneCapability.maxActiveData;
// If the maxActiveVoice field has been set, use that value. Otherwise, default to the
// legacy behavior and rely on the maxActiveInternetData field:
if (phoneCapability.maxActiveVoice ==
android.hardware.radio.config.PhoneCapability.UNKNOWN) {
maxActiveVoiceCalls = phoneCapability.maxActiveInternetData;
} else {
maxActiveVoiceCalls = phoneCapability.maxActiveVoice;
}
validationBeforeSwitchSupported = phoneCapability.isInternetLingeringSupported;
for (int modemId : phoneCapability.logicalModemIds) {
logicalModemList.add(new ModemInfo(modemId));
}
} else if (o instanceof android.hardware.radio.config.V1_1.PhoneCapability) {
final android.hardware.radio.config.V1_1.PhoneCapability phoneCapability =
(android.hardware.radio.config.V1_1.PhoneCapability) o;
maxActiveData = phoneCapability.maxActiveData;
// maxActiveInternetData defines how many logical modems can have internet PDN
// connections simultaneously. For L+L DSDS modem its 1, and for DSDA modem its 2.
maxActiveVoiceCalls = phoneCapability.maxActiveInternetData;
validationBeforeSwitchSupported = phoneCapability.isInternetLingeringSupported;
for (android.hardware.radio.config.V1_1.ModemInfo modemInfo :
phoneCapability.logicalModemList) {
logicalModemList.add(new ModemInfo(modemInfo.modemId));
}
}
return new PhoneCapability(maxActiveVoiceCalls, maxActiveData, logicalModemList,
validationBeforeSwitchSupported, deviceNrCapabilities);
}
/**
* Convert network scan type
* @param scanType The network scan type
* @return The converted EmergencyScanType
*/
public static int convertEmergencyScanType(int scanType) {
switch (scanType) {
case DomainSelectionService.SCAN_TYPE_LIMITED_SERVICE:
return android.hardware.radio.network.EmergencyScanType.LIMITED_SERVICE;
case DomainSelectionService.SCAN_TYPE_FULL_SERVICE:
return android.hardware.radio.network.EmergencyScanType.FULL_SERVICE;
default:
return android.hardware.radio.network.EmergencyScanType.NO_PREFERENCE;
}
}
/**
* Convert to EmergencyNetworkScanTrigger
* @param accessNetwork The list of access network types
* @param scanType The network scan type
* @return The converted EmergencyNetworkScanTrigger
*/
public static android.hardware.radio.network.EmergencyNetworkScanTrigger
convertEmergencyNetworkScanTrigger(@NonNull int[] accessNetwork, int scanType) {
int[] halAccessNetwork = new int[accessNetwork.length];
for (int i = 0; i < accessNetwork.length; i++) {
halAccessNetwork[i] = convertToHalAccessNetworkAidl(accessNetwork[i]);
}
android.hardware.radio.network.EmergencyNetworkScanTrigger scanRequest =
new android.hardware.radio.network.EmergencyNetworkScanTrigger();
scanRequest.accessNetwork = halAccessNetwork;
scanRequest.scanType = convertEmergencyScanType(scanType);
return scanRequest;
}
/**
* Convert EmergencyRegResult.aidl to EmergencyRegistrationResult.
* @param halResult EmergencyRegResult.aidl in HAL.
* @return Converted EmergencyRegistrationResult.
*/
public static EmergencyRegistrationResult convertHalEmergencyRegResult(
android.hardware.radio.network.EmergencyRegResult halResult) {
return new EmergencyRegistrationResult(
halResult.accessNetwork,
convertHalRegState(halResult.regState),
halResult.emcDomain,
halResult.isVopsSupported,
halResult.isEmcBearerSupported,
halResult.nwProvidedEmc,
halResult.nwProvidedEmf,
halResult.mcc,
halResult.mnc,
getCountryCodeForMccMnc(halResult.mcc, halResult.mnc));
}
private static @NonNull String getCountryCodeForMccMnc(
@NonNull String mcc, @NonNull String mnc) {
if (TextUtils.isEmpty(mcc)) return "";
if (TextUtils.isEmpty(mnc)) mnc = "000";
String operatorNumeric = TextUtils.concat(mcc, mnc).toString();
MccTable.MccMnc mccMnc = MccTable.MccMnc.fromOperatorNumeric(operatorNumeric);
return MccTable.geoCountryCodeForMccMnc(mccMnc);
}
/**
* Convert RegResult.aidl to RegistrationState.
* @param halRegState RegResult in HAL.
* @return Converted RegistrationState.
*/
public static @NetworkRegistrationInfo.RegistrationState int convertHalRegState(
int halRegState) {
switch (halRegState) {
case android.hardware.radio.network.RegState.NOT_REG_MT_NOT_SEARCHING_OP:
case android.hardware.radio.network.RegState.NOT_REG_MT_NOT_SEARCHING_OP_EM:
return NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING;
case android.hardware.radio.network.RegState.REG_HOME:
return NetworkRegistrationInfo.REGISTRATION_STATE_HOME;
case android.hardware.radio.network.RegState.NOT_REG_MT_SEARCHING_OP:
case android.hardware.radio.network.RegState.NOT_REG_MT_SEARCHING_OP_EM:
return NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING;
case android.hardware.radio.network.RegState.REG_DENIED:
case android.hardware.radio.network.RegState.REG_DENIED_EM:
return NetworkRegistrationInfo.REGISTRATION_STATE_DENIED;
case android.hardware.radio.network.RegState.UNKNOWN:
case android.hardware.radio.network.RegState.UNKNOWN_EM:
return NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN;
case android.hardware.radio.network.RegState.REG_ROAMING:
return NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING;
default:
return NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING;
}
}
/** Converts the array of network types to readable String array */
public static @NonNull String accessNetworkTypesToString(
@NonNull @AccessNetworkConstants.RadioAccessNetworkType int[] accessNetworkTypes) {
int length = accessNetworkTypes.length;
StringBuilder sb = new StringBuilder("{");
if (length > 0) {
sb.append(Arrays.stream(accessNetworkTypes)
.mapToObj(RILUtils::accessNetworkTypeToString)
.collect(Collectors.joining(",")));
}
sb.append("}");
return sb.toString();
}
private static @NonNull String accessNetworkTypeToString(
@AccessNetworkConstants.RadioAccessNetworkType int accessNetworkType) {
switch (accessNetworkType) {
case AccessNetworkConstants.AccessNetworkType.UNKNOWN: return "UNKNOWN";
case AccessNetworkConstants.AccessNetworkType.GERAN: return "GERAN";
case AccessNetworkConstants.AccessNetworkType.UTRAN: return "UTRAN";
case AccessNetworkConstants.AccessNetworkType.EUTRAN: return "EUTRAN";
case AccessNetworkConstants.AccessNetworkType.CDMA2000: return "CDMA2000";
case AccessNetworkConstants.AccessNetworkType.IWLAN: return "IWLAN";
case AccessNetworkConstants.AccessNetworkType.NGRAN: return "NGRAN";
default: return Integer.toString(accessNetworkType);
}
}
/** Converts scan type to readable String */
public static @NonNull String scanTypeToString(
@DomainSelectionService.EmergencyScanType int scanType) {
switch (scanType) {
case DomainSelectionService.SCAN_TYPE_LIMITED_SERVICE:
return "LIMITED_SERVICE";
case DomainSelectionService.SCAN_TYPE_FULL_SERVICE:
return "FULL_SERVICE";
default:
return "NO_PREFERENCE";
}
}
/** Convert IMS deregistration reason */
public static @ImsDeregistrationReason int convertHalDeregistrationReason(int reason) {
switch (reason) {
case android.hardware.radio.ims.ImsDeregistrationReason.REASON_SIM_REMOVED:
return ImsRegistrationImplBase.REASON_SIM_REMOVED;
case android.hardware.radio.ims.ImsDeregistrationReason.REASON_SIM_REFRESH:
return ImsRegistrationImplBase.REASON_SIM_REFRESH;
case android.hardware.radio.ims.ImsDeregistrationReason
.REASON_ALLOWED_NETWORK_TYPES_CHANGED:
return ImsRegistrationImplBase.REASON_ALLOWED_NETWORK_TYPES_CHANGED;
default:
return ImsRegistrationImplBase.REASON_UNKNOWN;
}
}
/**
* Convert the IMS traffic type.
* @param trafficType IMS traffic type like registration, voice, video, SMS, emergency, and etc.
* @return The converted IMS traffic type.
*/
public static int convertImsTrafficType(@MmTelFeature.ImsTrafficType int trafficType) {
switch (trafficType) {
case MmTelFeature.IMS_TRAFFIC_TYPE_EMERGENCY:
return android.hardware.radio.ims.ImsTrafficType.EMERGENCY;
case MmTelFeature.IMS_TRAFFIC_TYPE_EMERGENCY_SMS:
return android.hardware.radio.ims.ImsTrafficType.EMERGENCY_SMS;
case MmTelFeature.IMS_TRAFFIC_TYPE_VOICE:
return android.hardware.radio.ims.ImsTrafficType.VOICE;
case MmTelFeature.IMS_TRAFFIC_TYPE_VIDEO:
return android.hardware.radio.ims.ImsTrafficType.VIDEO;
case MmTelFeature.IMS_TRAFFIC_TYPE_SMS:
return android.hardware.radio.ims.ImsTrafficType.SMS;
case MmTelFeature.IMS_TRAFFIC_TYPE_REGISTRATION:
return android.hardware.radio.ims.ImsTrafficType.REGISTRATION;
}
return android.hardware.radio.ims.ImsTrafficType.UT_XCAP;
}
/**
* Convert the IMS traffic direction.
* @param trafficDirection Indicates the traffic direction.
* @return The converted IMS traffic direction.
*/
public static int convertImsTrafficDirection(
@MmTelFeature.ImsTrafficDirection int trafficDirection) {
switch (trafficDirection) {
case MmTelFeature.IMS_TRAFFIC_DIRECTION_INCOMING:
return android.hardware.radio.ims.ImsCall.Direction.INCOMING;
default:
return android.hardware.radio.ims.ImsCall.Direction.OUTGOING;
}
}
/**
* Convert the IMS connection failure reason.
* @param halReason Specifies the reason that IMS connection failed.
* @return The converted IMS connection failure reason.
*/
public static @ConnectionFailureInfo.FailureReason int convertHalConnectionFailureReason(
int halReason) {
switch (halReason) {
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_ACCESS_DENIED:
return ConnectionFailureInfo.REASON_ACCESS_DENIED;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_NAS_FAILURE:
return ConnectionFailureInfo.REASON_NAS_FAILURE;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_RACH_FAILURE:
return ConnectionFailureInfo.REASON_RACH_FAILURE;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_RLC_FAILURE:
return ConnectionFailureInfo.REASON_RLC_FAILURE;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_RRC_REJECT:
return ConnectionFailureInfo.REASON_RRC_REJECT;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_RRC_TIMEOUT:
return ConnectionFailureInfo.REASON_RRC_TIMEOUT;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_NO_SERVICE:
return ConnectionFailureInfo.REASON_NO_SERVICE;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_PDN_NOT_AVAILABLE:
return ConnectionFailureInfo.REASON_PDN_NOT_AVAILABLE;
case android.hardware.radio.ims.ConnectionFailureInfo
.ConnectionFailureReason.REASON_RF_BUSY:
return ConnectionFailureInfo.REASON_RF_BUSY;
}
return ConnectionFailureInfo.REASON_UNSPECIFIED;
}
/** Append the data to the end of an ArrayList */
public static void appendPrimitiveArrayToArrayList(byte[] src, ArrayList<Byte> dst) {
for (byte b : src) {
dst.add(b);
}
}
/** Convert a primitive byte array to an ArrayList<Integer>. */
public static ArrayList<Byte> primitiveArrayToArrayList(byte[] arr) {
ArrayList<Byte> arrayList = new ArrayList<>(arr.length);
for (byte b : arr) {
arrayList.add(b);
}
return arrayList;
}
/** Convert a primitive int array to an ArrayList<Integer>. */
public static ArrayList<Integer> primitiveArrayToArrayList(int[] arr) {
ArrayList<Integer> arrayList = new ArrayList<>(arr.length);
for (int i : arr) {
arrayList.add(i);
}
return arrayList;
}
/** Convert a primitive String array to an ArrayList<String>. */
public static ArrayList<String> primitiveArrayToArrayList(String[] arr) {
return new ArrayList<>(Arrays.asList(arr));
}
/** Convert an ArrayList of Bytes to an exactly-sized primitive array */
public static byte[] arrayListToPrimitiveArray(ArrayList<Byte> bytes) {
byte[] ret = new byte[bytes.size()];
for (int i = 0; i < ret.length; i++) {
ret[i] = bytes.get(i);
}
return ret;
}
/** Convert null to an empty String */
public static String convertNullToEmptyString(String string) {
return string != null ? string : "";
}
/**
* Convert setup data reason to string.
*
* @param reason The reason for setup data call.
* @return The reason in string format.
*/
public static String setupDataReasonToString(@SetupDataReason int reason) {
switch (reason) {
case DataService.REQUEST_REASON_NORMAL:
return "NORMAL";
case DataService.REQUEST_REASON_HANDOVER:
return "HANDOVER";
case DataService.REQUEST_REASON_UNKNOWN:
return "UNKNOWN";
default:
return "UNKNOWN(" + reason + ")";
}
}
/**
* Convert deactivate data reason to string.
*
* @param reason The reason for deactivate data call.
* @return The reason in string format.
*/
public static String deactivateDataReasonToString(@DeactivateDataReason int reason) {
switch (reason) {
case DataService.REQUEST_REASON_NORMAL:
return "NORMAL";
case DataService.REQUEST_REASON_HANDOVER:
return "HANDOVER";
case DataService.REQUEST_REASON_SHUTDOWN:
return "SHUTDOWN";
case DataService.REQUEST_REASON_UNKNOWN:
return "UNKNOWN";
default:
return "UNKNOWN(" + reason + ")";
}
}
/**
* RIL request to String
* @param request request
* @return The converted String request
*/
public static String requestToString(int request) {
switch(request) {
case RIL_REQUEST_GET_SIM_STATUS:
return "GET_SIM_STATUS";
case RIL_REQUEST_ENTER_SIM_PIN:
return "ENTER_SIM_PIN";
case RIL_REQUEST_ENTER_SIM_PUK:
return "ENTER_SIM_PUK";
case RIL_REQUEST_ENTER_SIM_PIN2:
return "ENTER_SIM_PIN2";
case RIL_REQUEST_ENTER_SIM_PUK2:
return "ENTER_SIM_PUK2";
case RIL_REQUEST_CHANGE_SIM_PIN:
return "CHANGE_SIM_PIN";
case RIL_REQUEST_CHANGE_SIM_PIN2:
return "CHANGE_SIM_PIN2";
case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION:
return "ENTER_NETWORK_DEPERSONALIZATION";
case RIL_REQUEST_GET_CURRENT_CALLS:
return "GET_CURRENT_CALLS";
case RIL_REQUEST_DIAL:
return "DIAL";
case RIL_REQUEST_GET_IMSI:
return "GET_IMSI";
case RIL_REQUEST_HANGUP:
return "HANGUP";
case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND:
return "HANGUP_WAITING_OR_BACKGROUND";
case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND:
return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE:
return "REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
case RIL_REQUEST_CONFERENCE:
return "CONFERENCE";
case RIL_REQUEST_UDUB:
return "UDUB";
case RIL_REQUEST_LAST_CALL_FAIL_CAUSE:
return "LAST_CALL_FAIL_CAUSE";
case RIL_REQUEST_SIGNAL_STRENGTH:
return "SIGNAL_STRENGTH";
case RIL_REQUEST_VOICE_REGISTRATION_STATE:
return "VOICE_REGISTRATION_STATE";
case RIL_REQUEST_DATA_REGISTRATION_STATE:
return "DATA_REGISTRATION_STATE";
case RIL_REQUEST_OPERATOR:
return "OPERATOR";
case RIL_REQUEST_RADIO_POWER:
return "RADIO_POWER";
case RIL_REQUEST_DTMF:
return "DTMF";
case RIL_REQUEST_SEND_SMS:
return "SEND_SMS";
case RIL_REQUEST_SEND_SMS_EXPECT_MORE:
return "SEND_SMS_EXPECT_MORE";
case RIL_REQUEST_SETUP_DATA_CALL:
return "SETUP_DATA_CALL";
case RIL_REQUEST_SIM_IO:
return "SIM_IO";
case RIL_REQUEST_SEND_USSD:
return "SEND_USSD";
case RIL_REQUEST_CANCEL_USSD:
return "CANCEL_USSD";
case RIL_REQUEST_GET_CLIR:
return "GET_CLIR";
case RIL_REQUEST_SET_CLIR:
return "SET_CLIR";
case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS:
return "QUERY_CALL_FORWARD_STATUS";
case RIL_REQUEST_SET_CALL_FORWARD:
return "SET_CALL_FORWARD";
case RIL_REQUEST_QUERY_CALL_WAITING:
return "QUERY_CALL_WAITING";
case RIL_REQUEST_SET_CALL_WAITING:
return "SET_CALL_WAITING";
case RIL_REQUEST_SMS_ACKNOWLEDGE:
return "SMS_ACKNOWLEDGE";
case RIL_REQUEST_GET_IMEI:
return "GET_IMEI";
case RIL_REQUEST_GET_IMEISV:
return "GET_IMEISV";
case RIL_REQUEST_ANSWER:
return "ANSWER";
case RIL_REQUEST_DEACTIVATE_DATA_CALL:
return "DEACTIVATE_DATA_CALL";
case RIL_REQUEST_QUERY_FACILITY_LOCK:
return "QUERY_FACILITY_LOCK";
case RIL_REQUEST_SET_FACILITY_LOCK:
return "SET_FACILITY_LOCK";
case RIL_REQUEST_CHANGE_BARRING_PASSWORD:
return "CHANGE_BARRING_PASSWORD";
case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE:
return "QUERY_NETWORK_SELECTION_MODE";
case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC:
return "SET_NETWORK_SELECTION_AUTOMATIC";
case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL:
return "SET_NETWORK_SELECTION_MANUAL";
case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS :
return "QUERY_AVAILABLE_NETWORKS ";
case RIL_REQUEST_DTMF_START:
return "DTMF_START";
case RIL_REQUEST_DTMF_STOP:
return "DTMF_STOP";
case RIL_REQUEST_BASEBAND_VERSION:
return "BASEBAND_VERSION";
case RIL_REQUEST_SEPARATE_CONNECTION:
return "SEPARATE_CONNECTION";
case RIL_REQUEST_SET_MUTE:
return "SET_MUTE";
case RIL_REQUEST_GET_MUTE:
return "GET_MUTE";
case RIL_REQUEST_QUERY_CLIP:
return "QUERY_CLIP";
case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE:
return "LAST_DATA_CALL_FAIL_CAUSE";
case RIL_REQUEST_DATA_CALL_LIST:
return "DATA_CALL_LIST";
case RIL_REQUEST_RESET_RADIO:
return "RESET_RADIO";
case RIL_REQUEST_OEM_HOOK_RAW:
return "OEM_HOOK_RAW";
case RIL_REQUEST_OEM_HOOK_STRINGS:
return "OEM_HOOK_STRINGS";
case RIL_REQUEST_SCREEN_STATE:
return "SCREEN_STATE";
case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION:
return "SET_SUPP_SVC_NOTIFICATION";
case RIL_REQUEST_WRITE_SMS_TO_SIM:
return "WRITE_SMS_TO_SIM";
case RIL_REQUEST_DELETE_SMS_ON_SIM:
return "DELETE_SMS_ON_SIM";
case RIL_REQUEST_SET_BAND_MODE:
return "SET_BAND_MODE";
case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE:
return "QUERY_AVAILABLE_BAND_MODE";
case RIL_REQUEST_STK_GET_PROFILE:
return "STK_GET_PROFILE";
case RIL_REQUEST_STK_SET_PROFILE:
return "STK_SET_PROFILE";
case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND:
return "STK_SEND_ENVELOPE_COMMAND";
case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE:
return "STK_SEND_TERMINAL_RESPONSE";
case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM:
return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
case RIL_REQUEST_EXPLICIT_CALL_TRANSFER:
return "EXPLICIT_CALL_TRANSFER";
case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE:
return "SET_PREFERRED_NETWORK_TYPE";
case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
return "GET_PREFERRED_NETWORK_TYPE";
case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS:
return "GET_NEIGHBORING_CELL_IDS";
case RIL_REQUEST_SET_LOCATION_UPDATES:
return "SET_LOCATION_UPDATES";
case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:
return "CDMA_SET_SUBSCRIPTION_SOURCE";
case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:
return "CDMA_SET_ROAMING_PREFERENCE";
case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:
return "CDMA_QUERY_ROAMING_PREFERENCE";
case RIL_REQUEST_SET_TTY_MODE:
return "SET_TTY_MODE";
case RIL_REQUEST_QUERY_TTY_MODE:
return "QUERY_TTY_MODE";
case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:
return "CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:
return "CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
case RIL_REQUEST_CDMA_FLASH:
return "CDMA_FLASH";
case RIL_REQUEST_CDMA_BURST_DTMF:
return "CDMA_BURST_DTMF";
case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY:
return "CDMA_VALIDATE_AND_WRITE_AKEY";
case RIL_REQUEST_CDMA_SEND_SMS:
return "CDMA_SEND_SMS";
case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:
return "CDMA_SMS_ACKNOWLEDGE";
case RIL_REQUEST_GSM_GET_BROADCAST_CONFIG:
return "GSM_GET_BROADCAST_CONFIG";
case RIL_REQUEST_GSM_SET_BROADCAST_CONFIG:
return "GSM_SET_BROADCAST_CONFIG";
case RIL_REQUEST_GSM_BROADCAST_ACTIVATION:
return "GSM_BROADCAST_ACTIVATION";
case RIL_REQUEST_CDMA_GET_BROADCAST_CONFIG:
return "CDMA_GET_BROADCAST_CONFIG";
case RIL_REQUEST_CDMA_SET_BROADCAST_CONFIG:
return "CDMA_SET_BROADCAST_CONFIG";
case RIL_REQUEST_CDMA_BROADCAST_ACTIVATION:
return "CDMA_BROADCAST_ACTIVATION";
case RIL_REQUEST_CDMA_SUBSCRIPTION:
return "CDMA_SUBSCRIPTION";
case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM:
return "CDMA_WRITE_SMS_TO_RUIM";
case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM:
return "CDMA_DELETE_SMS_ON_RUIM";
case RIL_REQUEST_DEVICE_IDENTITY:
return "DEVICE_IDENTITY";
case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE:
return "EXIT_EMERGENCY_CALLBACK_MODE";
case RIL_REQUEST_GET_SMSC_ADDRESS:
return "GET_SMSC_ADDRESS";
case RIL_REQUEST_SET_SMSC_ADDRESS:
return "SET_SMSC_ADDRESS";
case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS:
return "REPORT_SMS_MEMORY_STATUS";
case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING:
return "REPORT_STK_SERVICE_IS_RUNNING";
case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE:
return "CDMA_GET_SUBSCRIPTION_SOURCE";
case RIL_REQUEST_ISIM_AUTHENTICATION:
return "ISIM_AUTHENTICATION";
case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU:
return "ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS:
return "STK_SEND_ENVELOPE_WITH_STATUS";
case RIL_REQUEST_VOICE_RADIO_TECH:
return "VOICE_RADIO_TECH";
case RIL_REQUEST_GET_CELL_INFO_LIST:
return "GET_CELL_INFO_LIST";
case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE:
return "SET_CELL_INFO_LIST_RATE";
case RIL_REQUEST_SET_INITIAL_ATTACH_APN:
return "SET_INITIAL_ATTACH_APN";
case RIL_REQUEST_IMS_REGISTRATION_STATE:
return "IMS_REGISTRATION_STATE";
case RIL_REQUEST_IMS_SEND_SMS:
return "IMS_SEND_SMS";
case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC:
return "SIM_TRANSMIT_APDU_BASIC";
case RIL_REQUEST_SIM_OPEN_CHANNEL:
return "SIM_OPEN_CHANNEL";
case RIL_REQUEST_SIM_CLOSE_CHANNEL:
return "SIM_CLOSE_CHANNEL";
case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL:
return "SIM_TRANSMIT_APDU_CHANNEL";
case RIL_REQUEST_NV_READ_ITEM:
return "NV_READ_ITEM";
case RIL_REQUEST_NV_WRITE_ITEM:
return "NV_WRITE_ITEM";
case RIL_REQUEST_NV_WRITE_CDMA_PRL:
return "NV_WRITE_CDMA_PRL";
case RIL_REQUEST_NV_RESET_CONFIG:
return "NV_RESET_CONFIG";
case RIL_REQUEST_SET_UICC_SUBSCRIPTION:
return "SET_UICC_SUBSCRIPTION";
case RIL_REQUEST_ALLOW_DATA:
return "ALLOW_DATA";
case RIL_REQUEST_GET_HARDWARE_CONFIG:
return "GET_HARDWARE_CONFIG";
case RIL_REQUEST_SIM_AUTHENTICATION:
return "SIM_AUTHENTICATION";
case RIL_REQUEST_GET_DC_RT_INFO:
return "GET_DC_RT_INFO";
case RIL_REQUEST_SET_DC_RT_INFO_RATE:
return "SET_DC_RT_INFO_RATE";
case RIL_REQUEST_SET_DATA_PROFILE:
return "SET_DATA_PROFILE";
case RIL_REQUEST_SHUTDOWN:
return "SHUTDOWN";
case RIL_REQUEST_GET_RADIO_CAPABILITY:
return "GET_RADIO_CAPABILITY";
case RIL_REQUEST_SET_RADIO_CAPABILITY:
return "SET_RADIO_CAPABILITY";
case RIL_REQUEST_START_LCE:
return "START_LCE";
case RIL_REQUEST_STOP_LCE:
return "STOP_LCE";
case RIL_REQUEST_PULL_LCEDATA:
return "PULL_LCEDATA";
case RIL_REQUEST_GET_ACTIVITY_INFO:
return "GET_ACTIVITY_INFO";
case RIL_REQUEST_SET_ALLOWED_CARRIERS:
return "SET_ALLOWED_CARRIERS";
case RIL_REQUEST_GET_ALLOWED_CARRIERS:
return "GET_ALLOWED_CARRIERS";
case RIL_REQUEST_SEND_DEVICE_STATE:
return "SEND_DEVICE_STATE";
case RIL_REQUEST_SET_UNSOLICITED_RESPONSE_FILTER:
return "SET_UNSOLICITED_RESPONSE_FILTER";
case RIL_REQUEST_SET_SIM_CARD_POWER:
return "SET_SIM_CARD_POWER";
case RIL_REQUEST_SET_CARRIER_INFO_IMSI_ENCRYPTION:
return "SET_CARRIER_INFO_IMSI_ENCRYPTION";
case RIL_REQUEST_START_NETWORK_SCAN:
return "START_NETWORK_SCAN";
case RIL_REQUEST_STOP_NETWORK_SCAN:
return "STOP_NETWORK_SCAN";
case RIL_REQUEST_START_KEEPALIVE:
return "START_KEEPALIVE";
case RIL_REQUEST_STOP_KEEPALIVE:
return "STOP_KEEPALIVE";
case RIL_REQUEST_ENABLE_MODEM:
return "ENABLE_MODEM";
case RIL_REQUEST_GET_MODEM_STATUS:
return "GET_MODEM_STATUS";
case RIL_REQUEST_CDMA_SEND_SMS_EXPECT_MORE:
return "CDMA_SEND_SMS_EXPECT_MORE";
case RIL_REQUEST_GET_SIM_PHONEBOOK_CAPACITY:
return "GET_SIM_PHONEBOOK_CAPACITY";
case RIL_REQUEST_GET_SIM_PHONEBOOK_RECORDS:
return "GET_SIM_PHONEBOOK_RECORDS";
case RIL_REQUEST_UPDATE_SIM_PHONEBOOK_RECORD:
return "UPDATE_SIM_PHONEBOOK_RECORD";
case RIL_REQUEST_DEVICE_IMEI:
return "DEVICE_IMEI";
/* The following requests are not defined in RIL.h */
case RIL_REQUEST_GET_SLOT_STATUS:
return "GET_SLOT_STATUS";
case RIL_REQUEST_SET_LOGICAL_TO_PHYSICAL_SLOT_MAPPING:
return "SET_LOGICAL_TO_PHYSICAL_SLOT_MAPPING";
case RIL_REQUEST_SET_SIGNAL_STRENGTH_REPORTING_CRITERIA:
return "SET_SIGNAL_STRENGTH_REPORTING_CRITERIA";
case RIL_REQUEST_SET_LINK_CAPACITY_REPORTING_CRITERIA:
return "SET_LINK_CAPACITY_REPORTING_CRITERIA";
case RIL_REQUEST_SET_PREFERRED_DATA_MODEM:
return "SET_PREFERRED_DATA_MODEM";
case RIL_REQUEST_EMERGENCY_DIAL:
return "EMERGENCY_DIAL";
case RIL_REQUEST_GET_PHONE_CAPABILITY:
return "GET_PHONE_CAPABILITY";
case RIL_REQUEST_SWITCH_DUAL_SIM_CONFIG:
return "SWITCH_DUAL_SIM_CONFIG";
case RIL_REQUEST_ENABLE_UICC_APPLICATIONS:
return "ENABLE_UICC_APPLICATIONS";
case RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT:
return "GET_UICC_APPLICATIONS_ENABLEMENT";
case RIL_REQUEST_SET_SYSTEM_SELECTION_CHANNELS:
return "SET_SYSTEM_SELECTION_CHANNELS";
case RIL_REQUEST_GET_BARRING_INFO:
return "GET_BARRING_INFO";
case RIL_REQUEST_ENTER_SIM_DEPERSONALIZATION:
return "ENTER_SIM_DEPERSONALIZATION";
case RIL_REQUEST_ENABLE_NR_DUAL_CONNECTIVITY:
return "ENABLE_NR_DUAL_CONNECTIVITY";
case RIL_REQUEST_IS_NR_DUAL_CONNECTIVITY_ENABLED:
return "IS_NR_DUAL_CONNECTIVITY_ENABLED";
case RIL_REQUEST_ALLOCATE_PDU_SESSION_ID:
return "ALLOCATE_PDU_SESSION_ID";
case RIL_REQUEST_RELEASE_PDU_SESSION_ID:
return "RELEASE_PDU_SESSION_ID";
case RIL_REQUEST_START_HANDOVER:
return "START_HANDOVER";
case RIL_REQUEST_CANCEL_HANDOVER:
return "CANCEL_HANDOVER";
case RIL_REQUEST_GET_SYSTEM_SELECTION_CHANNELS:
return "GET_SYSTEM_SELECTION_CHANNELS";
case RIL_REQUEST_GET_HAL_DEVICE_CAPABILITIES:
return "GET_HAL_DEVICE_CAPABILITIES";
case RIL_REQUEST_SET_DATA_THROTTLING:
return "SET_DATA_THROTTLING";
case RIL_REQUEST_SET_ALLOWED_NETWORK_TYPES_BITMAP:
return "SET_ALLOWED_NETWORK_TYPES_BITMAP";
case RIL_REQUEST_GET_ALLOWED_NETWORK_TYPES_BITMAP:
return "GET_ALLOWED_NETWORK_TYPES_BITMAP";
case RIL_REQUEST_GET_SLICING_CONFIG:
return "GET_SLICING_CONFIG";
case RIL_REQUEST_ENABLE_VONR:
return "ENABLE_VONR";
case RIL_REQUEST_IS_VONR_ENABLED:
return "IS_VONR_ENABLED";
case RIL_REQUEST_SET_USAGE_SETTING:
return "SET_USAGE_SETTING";
case RIL_REQUEST_GET_USAGE_SETTING:
return "GET_USAGE_SETTING";
case RIL_REQUEST_SET_EMERGENCY_MODE:
return "SET_EMERGENCY_MODE";
case RIL_REQUEST_TRIGGER_EMERGENCY_NETWORK_SCAN:
return "TRIGGER_EMERGENCY_NETWORK_SCAN";
case RIL_REQUEST_CANCEL_EMERGENCY_NETWORK_SCAN:
return "CANCEL_EMERGENCY_NETWORK_SCAN";
case RIL_REQUEST_EXIT_EMERGENCY_MODE:
return "EXIT_EMERGENCY_MODE";
case RIL_REQUEST_SET_SRVCC_CALL_INFO:
return "SET_SRVCC_CALL_INFO";
case RIL_REQUEST_UPDATE_IMS_REGISTRATION_INFO:
return "UPDATE_IMS_REGISTRATION_INFO";
case RIL_REQUEST_START_IMS_TRAFFIC:
return "START_IMS_TRAFFIC";
case RIL_REQUEST_STOP_IMS_TRAFFIC:
return "STOP_IMS_TRAFFIC";
case RIL_REQUEST_SEND_ANBR_QUERY:
return "SEND_ANBR_QUERY";
case RIL_REQUEST_TRIGGER_EPS_FALLBACK:
return "TRIGGER_EPS_FALLBACK";
case RIL_REQUEST_SET_NULL_CIPHER_AND_INTEGRITY_ENABLED:
return "SET_NULL_CIPHER_AND_INTEGRITY_ENABLED";
case RIL_REQUEST_IS_NULL_CIPHER_AND_INTEGRITY_ENABLED:
return "IS_NULL_CIPHER_AND_INTEGRITY_ENABLED";
case RIL_REQUEST_UPDATE_IMS_CALL_STATUS:
return "UPDATE_IMS_CALL_STATUS";
case RIL_REQUEST_SET_N1_MODE_ENABLED:
return "SET_N1_MODE_ENABLED";
case RIL_REQUEST_IS_N1_MODE_ENABLED:
return "IS_N1_MODE_ENABLED";
case RIL_REQUEST_SET_LOCATION_PRIVACY_SETTING:
return "SET_LOCATION_PRIVACY_SETTING";
case RIL_REQUEST_GET_LOCATION_PRIVACY_SETTING:
return "GET_LOCATION_PRIVACY_SETTING";
case RIL_REQUEST_IS_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED:
return "IS_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED";
case RIL_REQUEST_SET_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED:
return "SET_CELLULAR_IDENTIFIER_DISCLOSED_ENABLED";
case RIL_REQUEST_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED:
return "SET_SECURITY_ALGORITHMS_UPDATED_ENABLED";
case RIL_REQUEST_IS_SECURITY_ALGORITHMS_UPDATED_ENABLED:
return "IS_SECURITY_ALGORITHMS_UPDATED_ENABLED";
case RIL_REQUEST_GET_SIMULTANEOUS_CALLING_SUPPORT:
return "GET_SIMULTANEOUS_CALLING_SUPPORT";
default:
return "<unknown request " + request + ">";
}
}
/**
* RIL response to String
* @param response response
* @return The converted String response
*/
public static String responseToString(int response) {
switch (response) {
case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED:
return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED:
return "UNSOL_RESPONSE_NETWORK_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_NEW_SMS:
return "UNSOL_RESPONSE_NEW_SMS";
case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT:
return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM:
return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
case RIL_UNSOL_ON_USSD:
return "UNSOL_ON_USSD";
case RIL_UNSOL_ON_USSD_REQUEST:
return "UNSOL_ON_USSD_REQUEST";
case RIL_UNSOL_NITZ_TIME_RECEIVED:
return "UNSOL_NITZ_TIME_RECEIVED";
case RIL_UNSOL_SIGNAL_STRENGTH:
return "UNSOL_SIGNAL_STRENGTH";
case RIL_UNSOL_DATA_CALL_LIST_CHANGED:
return "UNSOL_DATA_CALL_LIST_CHANGED";
case RIL_UNSOL_SUPP_SVC_NOTIFICATION:
return "UNSOL_SUPP_SVC_NOTIFICATION";
case RIL_UNSOL_STK_SESSION_END:
return "UNSOL_STK_SESSION_END";
case RIL_UNSOL_STK_PROACTIVE_COMMAND:
return "UNSOL_STK_PROACTIVE_COMMAND";
case RIL_UNSOL_STK_EVENT_NOTIFY:
return "UNSOL_STK_EVENT_NOTIFY";
case RIL_UNSOL_STK_CALL_SETUP:
return "UNSOL_STK_CALL_SETUP";
case RIL_UNSOL_SIM_SMS_STORAGE_FULL:
return "UNSOL_SIM_SMS_STORAGE_FULL";
case RIL_UNSOL_SIM_REFRESH:
return "UNSOL_SIM_REFRESH";
case RIL_UNSOL_CALL_RING:
return "UNSOL_CALL_RING";
case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED:
return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS:
return "UNSOL_RESPONSE_CDMA_NEW_SMS";
case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
return "UNSOL_RESPONSE_NEW_BROADCAST_SMS";
case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL:
return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
case RIL_UNSOL_RESTRICTED_STATE_CHANGED:
return "UNSOL_RESTRICTED_STATE_CHANGED";
case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE:
return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
case RIL_UNSOL_CDMA_CALL_WAITING:
return "UNSOL_CDMA_CALL_WAITING";
case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS:
return "UNSOL_CDMA_OTA_PROVISION_STATUS";
case RIL_UNSOL_CDMA_INFO_REC:
return "UNSOL_CDMA_INFO_REC";
case RIL_UNSOL_OEM_HOOK_RAW:
return "UNSOL_OEM_HOOK_RAW";
case RIL_UNSOL_RINGBACK_TONE:
return "UNSOL_RINGBACK_TONE";
case RIL_UNSOL_RESEND_INCALL_MUTE:
return "UNSOL_RESEND_INCALL_MUTE";
case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED:
return "UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED";
case RIL_UNSOL_CDMA_PRL_CHANGED:
return "UNSOL_CDMA_PRL_CHANGED";
case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE:
return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
case RIL_UNSOL_RIL_CONNECTED:
return "UNSOL_RIL_CONNECTED";
case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED:
return "UNSOL_VOICE_RADIO_TECH_CHANGED";
case RIL_UNSOL_CELL_INFO_LIST:
return "UNSOL_CELL_INFO_LIST";
case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
return "UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED";
case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED:
return "UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
case RIL_UNSOL_SRVCC_STATE_NOTIFY:
return "UNSOL_SRVCC_STATE_NOTIFY";
case RIL_UNSOL_HARDWARE_CONFIG_CHANGED:
return "UNSOL_HARDWARE_CONFIG_CHANGED";
case RIL_UNSOL_DC_RT_INFO_CHANGED:
return "UNSOL_DC_RT_INFO_CHANGED";
case RIL_UNSOL_RADIO_CAPABILITY:
return "UNSOL_RADIO_CAPABILITY";
case RIL_UNSOL_ON_SS:
return "UNSOL_ON_SS";
case RIL_UNSOL_STK_CC_ALPHA_NOTIFY:
return "UNSOL_STK_CC_ALPHA_NOTIFY";
case RIL_UNSOL_LCEDATA_RECV:
return "UNSOL_LCE_INFO_RECV";
case RIL_UNSOL_PCO_DATA:
return "UNSOL_PCO_DATA";
case RIL_UNSOL_MODEM_RESTART:
return "UNSOL_MODEM_RESTART";
case RIL_UNSOL_CARRIER_INFO_IMSI_ENCRYPTION:
return "UNSOL_CARRIER_INFO_IMSI_ENCRYPTION";
case RIL_UNSOL_NETWORK_SCAN_RESULT:
return "UNSOL_NETWORK_SCAN_RESULT";
case RIL_UNSOL_KEEPALIVE_STATUS:
return "UNSOL_KEEPALIVE_STATUS";
case RIL_UNSOL_UNTHROTTLE_APN:
return "UNSOL_UNTHROTTLE_APN";
case RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_CHANGED:
return "UNSOL_RESPONSE_SIM_PHONEBOOK_CHANGED";
case RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_RECORDS_RECEIVED:
return "UNSOL_RESPONSE_SIM_PHONEBOOK_RECORDS_RECEIVED";
case RIL_UNSOL_SLICING_CONFIG_CHANGED:
return "UNSOL_SLICING_CONFIG_CHANGED";
case RIL_UNSOL_CELLULAR_IDENTIFIER_DISCLOSED:
return "UNSOL_CELLULAR_IDENTIFIER_DISCLOSED";
case RIL_UNSOL_SECURITY_ALGORITHMS_UPDATED:
return "UNSOL_SECURITY_ALGORITHMS_UPDATED";
/* The follow unsols are not defined in RIL.h */
case RIL_UNSOL_ICC_SLOT_STATUS:
return "UNSOL_ICC_SLOT_STATUS";
case RIL_UNSOL_PHYSICAL_CHANNEL_CONFIG:
return "UNSOL_PHYSICAL_CHANNEL_CONFIG";
case RIL_UNSOL_EMERGENCY_NUMBER_LIST:
return "UNSOL_EMERGENCY_NUMBER_LIST";
case RIL_UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED:
return "UNSOL_UICC_APPLICATIONS_ENABLEMENT_CHANGED";
case RIL_UNSOL_REGISTRATION_FAILED:
return "UNSOL_REGISTRATION_FAILED";
case RIL_UNSOL_BARRING_INFO_CHANGED:
return "UNSOL_BARRING_INFO_CHANGED";
case RIL_UNSOL_EMERGENCY_NETWORK_SCAN_RESULT:
return "UNSOL_EMERGENCY_NETWORK_SCAN_RESULT";
case RIL_UNSOL_CONNECTION_SETUP_FAILURE:
return "UNSOL_CONNECTION_SETUP_FAILURE";
case RIL_UNSOL_NOTIFY_ANBR:
return "UNSOL_NOTIFY_ANBR";
case RIL_UNSOL_TRIGGER_IMS_DEREGISTRATION:
return "UNSOL_TRIGGER_IMS_DEREGISTRATION";
case RIL_UNSOL_IMEI_MAPPING_CHANGED:
return "UNSOL_IMEI_MAPPING_CHANGED";
case RIL_UNSOL_SIMULTANEOUS_CALLING_SUPPORT_CHANGED:
return "UNSOL_SIMULTANEOUS_CALLING_SUPPORT_CHANGED";
default:
return "<unknown response " + response + ">";
}
}
/**
* Create capabilities based off of the radio hal version and feature set configurations.
* @param radioHalVersion radio hal version
* @param modemReducedFeatureSet1 reduced feature set
* @return set of capabilities
*/
@VisibleForTesting
public static Set<String> getCaps(HalVersion radioHalVersion, boolean modemReducedFeatureSet1) {
final Set<String> caps = new HashSet<>();
if (radioHalVersion.equals(RIL.RADIO_HAL_VERSION_UNKNOWN)) {
// If the Radio HAL is UNKNOWN, no capabilities will present themselves.
loge("Radio Hal Version is UNKNOWN!");
}
logd("Radio Hal Version = " + radioHalVersion.toString());
if (radioHalVersion.greaterOrEqual(RIL.RADIO_HAL_VERSION_1_6)) {
caps.add(CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK);
logd("CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK");
if (!modemReducedFeatureSet1) {
caps.add(CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE);
logd("CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE");
caps.add(CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE);
logd("CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE");
caps.add(CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING);
logd("CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING");
caps.add(CAPABILITY_SLICING_CONFIG_SUPPORTED);
logd("CAPABILITY_SLICING_CONFIG_SUPPORTED");
caps.add(CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED);
logd("CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED");
} else {
caps.add(CAPABILITY_SIM_PHONEBOOK_IN_MODEM);
logd("CAPABILITY_SIM_PHONEBOOK_IN_MODEM");
}
}
return caps;
}
private static boolean isPrimitiveOrWrapper(Class c) {
return c.isPrimitive() || WRAPPER_CLASSES.contains(c);
}
/**
* Return a general String representation of a class
* @param o The object to convert to String
* @return A string containing all public non-static local variables of a class
*/
public static String convertToString(Object o) {
boolean toStringExists = false;
try {
toStringExists = o.getClass().getMethod("toString").getDeclaringClass() != Object.class;
} catch (NoSuchMethodException e) {
loge(e.toString());
}
if (toStringExists || isPrimitiveOrWrapper(o.getClass()) || o instanceof ArrayList) {
return o.toString();
}
if (o.getClass().isArray()) {
// Special handling for arrays
StringBuilder sb = new StringBuilder("[");
boolean added = false;
if (isPrimitiveOrWrapper(o.getClass().getComponentType())) {
for (int i = 0; i < Array.getLength(o); i++) {
sb.append(convertToString(Array.get(o, i))).append(", ");
added = true;
}
} else {
for (Object element : (Object[]) o) {
sb.append(convertToString(element)).append(", ");
added = true;
}
}
if (added) {
// Remove extra ,
sb.delete(sb.length() - 2, sb.length());
}
sb.append("]");
return sb.toString();
}
StringBuilder sb = new StringBuilder(o.getClass().getSimpleName());
sb.append("{");
Field[] fields = o.getClass().getDeclaredFields();
int tag = -1;
try {
tag = (int) o.getClass().getDeclaredMethod("getTag").invoke(o);
} catch (IllegalAccessException | InvocationTargetException e) {
loge(e.toString());
} catch (NoSuchMethodException ignored) {
// Ignored since only unions have the getTag method
}
if (tag != -1) {
// Special handling for unions
String tagName = null;
try {
Method method = o.getClass().getDeclaredMethod("_tagString", int.class);
method.setAccessible(true);
tagName = (String) method.invoke(o, tag);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
loge(e.toString());
}
if (tagName != null) {
sb.append(tagName);
sb.append("=");
// From tag, create method name getTag
String getTagMethod = "get" + tagName.substring(0, 1).toUpperCase(Locale.ROOT)
+ tagName.substring(1);
Object val = null;
try {
val = o.getClass().getDeclaredMethod(getTagMethod).invoke(o);
} catch (NoSuchMethodException | IllegalAccessException
| InvocationTargetException e) {
loge(e.toString());
}
if (val != null) {
sb.append(convertToString(val));
}
}
} else {
boolean added = false;
for (Field field : fields) {
// Ignore static variables
if (Modifier.isStatic(field.getModifiers())) continue;
sb.append(field.getName()).append("=");
Object val = null;
try {
val = field.get(o);
} catch (IllegalAccessException e) {
loge(e.toString());
}
if (val == null) continue;
sb.append(convertToString(val)).append(", ");
added = true;
}
if (added) {
// Remove extra ,
sb.delete(sb.length() - 2, sb.length());
}
}
sb.append("}");
return sb.toString();
}
/**
* Converts the list of call information for Single Radio Voice Call Continuity(SRVCC).
*
* @param srvccConnections The list of call information for SRVCC.
* @return The converted list of call information.
*/
public static android.hardware.radio.ims.SrvccCall[] convertToHalSrvccCall(
SrvccConnection[] srvccConnections) {
if (srvccConnections == null) {
return new android.hardware.radio.ims.SrvccCall[0];
}
int length = srvccConnections.length;
android.hardware.radio.ims.SrvccCall[] srvccCalls =
new android.hardware.radio.ims.SrvccCall[length];
for (int i = 0; i < length; i++) {
srvccCalls[i] = new android.hardware.radio.ims.SrvccCall();
srvccCalls[i].index = i + 1;
srvccCalls[i].callType = convertSrvccCallType(srvccConnections[i].getType());
srvccCalls[i].callState = convertCallState(srvccConnections[i].getState());
srvccCalls[i].callSubstate =
convertSrvccCallSubState(srvccConnections[i].getSubState());
srvccCalls[i].ringbackToneType =
convertSrvccCallRingbackToneType(srvccConnections[i].getRingbackToneType());
srvccCalls[i].isMpty = srvccConnections[i].isMultiParty();
srvccCalls[i].isMT = srvccConnections[i].isIncoming();
srvccCalls[i].number = TextUtils.emptyIfNull(srvccConnections[i].getNumber());
srvccCalls[i].numPresentation =
convertPresentation(srvccConnections[i].getNumberPresentation());
srvccCalls[i].name = TextUtils.emptyIfNull(srvccConnections[i].getName());
srvccCalls[i].namePresentation =
convertPresentation(srvccConnections[i].getNamePresentation());
}
return srvccCalls;
}
/**
* Converts the call type.
*
* @param type The call type.
* @return The converted call type.
*/
public static int convertSrvccCallType(int type) {
switch (type) {
case SrvccConnection.CALL_TYPE_NORMAL:
return android.hardware.radio.ims.SrvccCall.CallType.NORMAL;
case SrvccConnection.CALL_TYPE_EMERGENCY:
return android.hardware.radio.ims.SrvccCall.CallType.EMERGENCY;
default:
throw new RuntimeException("illegal call type " + type);
}
}
/**
* Converts the call state.
*
* @param state The call state.
* @return The converted call state.
*/
public static int convertCallState(Call.State state) {
switch (state) {
case ACTIVE: return android.hardware.radio.voice.Call.STATE_ACTIVE;
case HOLDING: return android.hardware.radio.voice.Call.STATE_HOLDING;
case DIALING: return android.hardware.radio.voice.Call.STATE_DIALING;
case ALERTING: return android.hardware.radio.voice.Call.STATE_ALERTING;
case INCOMING: return android.hardware.radio.voice.Call.STATE_INCOMING;
case WAITING: return android.hardware.radio.voice.Call.STATE_WAITING;
default:
throw new RuntimeException("illegal state " + state);
}
}
/**
* Converts the substate of a call.
*
* @param state The substate of a call.
* @return The converted substate.
*/
public static int convertSrvccCallSubState(int state) {
switch (state) {
case SrvccConnection.SUBSTATE_NONE:
return android.hardware.radio.ims.SrvccCall.CallSubState.NONE;
case SrvccConnection.SUBSTATE_PREALERTING:
return android.hardware.radio.ims.SrvccCall.CallSubState.PREALERTING;
default:
throw new RuntimeException("illegal substate " + state);
}
}
/**
* Converts the ringback tone type.
*
* @param type The ringback tone type.
* @return The converted ringback tone type.
*/
public static int convertSrvccCallRingbackToneType(int type) {
switch (type) {
case SrvccConnection.TONE_NONE:
return android.hardware.radio.ims.SrvccCall.ToneType.NONE;
case SrvccConnection.TONE_LOCAL:
return android.hardware.radio.ims.SrvccCall.ToneType.LOCAL;
case SrvccConnection.TONE_NETWORK:
return android.hardware.radio.ims.SrvccCall.ToneType.NETWORK;
default:
throw new RuntimeException("illegal ringback tone type " + type);
}
}
/**
* Converts the number presentation type for caller id display.
*
* @param presentation The number presentation type.
* @return The converted presentation type.
*/
public static int convertPresentation(int presentation) {
switch (presentation) {
case PhoneConstants.PRESENTATION_ALLOWED:
return android.hardware.radio.voice.Call.PRESENTATION_ALLOWED;
case PhoneConstants.PRESENTATION_RESTRICTED:
return android.hardware.radio.voice.Call.PRESENTATION_RESTRICTED;
case PhoneConstants.PRESENTATION_UNKNOWN:
return android.hardware.radio.voice.Call.PRESENTATION_UNKNOWN;
case PhoneConstants.PRESENTATION_PAYPHONE:
return android.hardware.radio.voice.Call.PRESENTATION_PAYPHONE;
default:
throw new RuntimeException("illegal presentation " + presentation);
}
}
/**
* Converts IMS registration state.
*
* @param state The IMS registration state.
* @return The converted HAL IMS registration state.
*/
public static int convertImsRegistrationState(int state) {
switch (state) {
case RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED:
return android.hardware.radio.ims.ImsRegistrationState.NOT_REGISTERED;
case RegistrationManager.REGISTRATION_STATE_REGISTERED:
return android.hardware.radio.ims.ImsRegistrationState.REGISTERED;
default:
throw new RuntimeException("illegal state " + state);
}
}
/**
* Converts IMS service radio technology.
*
* @param imsRadioTech The IMS service radio technology.
* @return The converted HAL access network type.
*/
public static int convertImsRegistrationTech(
@ImsRegistrationImplBase.ImsRegistrationTech int imsRadioTech) {
switch (imsRadioTech) {
case ImsRegistrationImplBase.REGISTRATION_TECH_LTE:
return android.hardware.radio.AccessNetwork.EUTRAN;
case ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN:
return android.hardware.radio.AccessNetwork.IWLAN;
case ImsRegistrationImplBase.REGISTRATION_TECH_NR:
return android.hardware.radio.AccessNetwork.NGRAN;
case ImsRegistrationImplBase.REGISTRATION_TECH_3G:
return android.hardware.radio.AccessNetwork.UTRAN;
default:
return android.hardware.radio.AccessNetwork.UNKNOWN;
}
}
/**
* Converts IMS capabilities.
*
* @param capabilities The IMS capabilities.
* @return The converted HAL IMS capabilities.
*/
public static int convertImsCapability(int capabilities) {
int halCapabilities = android.hardware.radio.ims.ImsRegistration.IMS_MMTEL_CAPABILITY_NONE;
if ((capabilities & CommandsInterface.IMS_MMTEL_CAPABILITY_VOICE) > 0) {
halCapabilities |=
android.hardware.radio.ims.ImsRegistration.IMS_MMTEL_CAPABILITY_VOICE;
}
if ((capabilities & CommandsInterface.IMS_MMTEL_CAPABILITY_VIDEO) > 0) {
halCapabilities |=
android.hardware.radio.ims.ImsRegistration.IMS_MMTEL_CAPABILITY_VIDEO;
}
if ((capabilities & CommandsInterface.IMS_MMTEL_CAPABILITY_SMS) > 0) {
halCapabilities |= android.hardware.radio.ims.ImsRegistration.IMS_MMTEL_CAPABILITY_SMS;
}
if ((capabilities & CommandsInterface.IMS_RCS_CAPABILITIES) > 0) {
halCapabilities |= android.hardware.radio.ims.ImsRegistration.IMS_RCS_CAPABILITIES;
}
return halCapabilities;
}
/** Converts the ImsCallInfo instances to HAL ImsCall instances. */
public static android.hardware.radio.ims.ImsCall[] convertImsCallInfo(
List<ImsCallInfo> imsCallInfos) {
if (imsCallInfos == null) {
return new android.hardware.radio.ims.ImsCall[0];
}
int length = 0;
for (int i = 0; i < imsCallInfos.size(); i++) {
if (imsCallInfos.get(i) != null) length++;
}
if (length == 0) {
return new android.hardware.radio.ims.ImsCall[0];
}
android.hardware.radio.ims.ImsCall[] halInfos =
new android.hardware.radio.ims.ImsCall[length];
int index = 0;
for (int i = 0; i < imsCallInfos.size(); i++) {
ImsCallInfo info = imsCallInfos.get(i);
if (info == null) continue;
halInfos[index] = new android.hardware.radio.ims.ImsCall();
halInfos[index].index = info.getIndex();
halInfos[index].callState = convertToHalImsCallState(info.getCallState());
halInfos[index].callType = info.isEmergencyCall()
? android.hardware.radio.ims.ImsCall.CallType.EMERGENCY
: android.hardware.radio.ims.ImsCall.CallType.NORMAL;
halInfos[index].accessNetwork = convertToHalAccessNetworkAidl(info.getCallRadioTech());
halInfos[index].direction = info.isIncoming()
? android.hardware.radio.ims.ImsCall.Direction.INCOMING
: android.hardware.radio.ims.ImsCall.Direction.OUTGOING;
halInfos[index].isHeldByRemote = info.isHeldByRemote();
index++;
}
return halInfos;
}
/**
* Converts the call state to HAL IMS call state.
*
* @param state The {@link Call.State}.
* @return The converted {@link android.hardware.radio.ims.ImsCall.CallState}.
*/
private static int convertToHalImsCallState(Call.State state) {
switch (state) {
case ACTIVE: return android.hardware.radio.ims.ImsCall.CallState.ACTIVE;
case HOLDING: return android.hardware.radio.ims.ImsCall.CallState.HOLDING;
case DIALING: return android.hardware.radio.ims.ImsCall.CallState.DIALING;
case ALERTING: return android.hardware.radio.ims.ImsCall.CallState.ALERTING;
case INCOMING: return android.hardware.radio.ims.ImsCall.CallState.INCOMING;
case WAITING: return android.hardware.radio.ims.ImsCall.CallState.WAITING;
case DISCONNECTING: return android.hardware.radio.ims.ImsCall.CallState.DISCONNECTING;
default: return android.hardware.radio.ims.ImsCall.CallState.DISCONNECTED;
}
}
/** Convert an AIDL-based CellularIdentifierDisclosure to its Java wrapper. */
public static CellularIdentifierDisclosure convertCellularIdentifierDisclosure(
android.hardware.radio.network.CellularIdentifierDisclosure identifierDisclsoure) {
if (identifierDisclsoure == null) {
return null;
}
return new CellularIdentifierDisclosure(
identifierDisclsoure.protocolMessage,
identifierDisclsoure.identifier,
identifierDisclsoure.plmn,
identifierDisclsoure.isEmergency);
}
/** Convert an AIDL-based SecurityAlgorithmUpdate to its Java wrapper. */
public static SecurityAlgorithmUpdate convertSecurityAlgorithmUpdate(
android.hardware.radio.network.SecurityAlgorithmUpdate securityAlgorithmUpdate) {
if (securityAlgorithmUpdate == null) {
return null;
}
return new SecurityAlgorithmUpdate(
securityAlgorithmUpdate.connectionEvent,
securityAlgorithmUpdate.encryption,
securityAlgorithmUpdate.integrity,
securityAlgorithmUpdate.isUnprotectedEmergency);
}
private static void logd(String log) {
Rlog.d("RILUtils", log);
}
private static void loge(String log) {
Rlog.e("RILUtils", log);
}
}