//
// Copyright (C) 2016 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.
//

syntax = "proto2";

package clearcut.connectivity;

option java_package = "com.android.internal.telephony";
option java_outer_classname = "TelephonyProto";

// The information about Telephony events.
message TelephonyLog {

  // Events logged by telephony services
  repeated TelephonyEvent events = 1;

  // Voice/Video call sessions
  repeated TelephonyCallSession call_sessions = 2;

  // Send/Receive SMS sessions
  repeated SmsSession sms_sessions = 3;

  // Telephony Histograms
  repeated TelephonyHistogram histograms = 4;

  // Indicating some telephony events are dropped
  optional bool events_dropped = 5;

  // The start time of this log
  optional Time start_time = 6;

  // The end time of this log
  optional Time end_time = 7;

  // Modem power stats
  optional ModemPowerStats modem_power_stats = 8;

  // Hardware revision (EVT, DVT, PVT etc.)
  optional string hardware_revision = 9;

  // The last active subscription info for each slot.
  repeated ActiveSubscriptionInfo last_active_subscription_info = 10;
}

// The time information
message Time {
  // The system time in milli seconds. This represents the actual
  // time of the events.
  optional int64 system_timestamp_millis = 1;

  // The time since boot in milli seconds.
  // This is used for calculating the time interval between events. Different
  // from the system time, this won't be affected by time changed by the network or users.
  optional int64 elapsed_timestamp_millis = 2;
}

// Telephony Histogram
message TelephonyHistogram {

  // Type of histogram
  optional int32 category = 1;

  // Unique Id identifying a sample within
  // particular category of the histogram.
  optional int32 id = 2;

  // Min time taken in millis.
  optional int32 min_time_millis = 3;

  // Max time taken in millis.
  optional int32 max_time_millis = 4;

  // Average time taken in millis.
  optional int32 avg_time_millis = 5;

  // Total count of histogram samples.
  optional int32 count = 6;

  // Total number of time ranges expected
  // (must be greater than 1).
  optional int32 bucket_count = 7;

  // Array storing endpoints of range buckets.
  repeated int32 bucket_end_points = 8;

  // Array storing counts for each time range
  // starting from smallest value range.
  repeated int32 bucket_counters = 9;
}

// Telephony related user settings
message TelephonySettings {

  // NETWORK_MODE_* See ril.h PREF_NET_TYPE_XXXX
  enum RilNetworkMode {

    // Mode is unknown.
    NETWORK_MODE_UNKNOWN = 0;

    // GSM/WCDMA (WCDMA preferred). Note the following values are all off by 1.
    NETWORK_MODE_WCDMA_PREF = 1;

    // GSM only
    NETWORK_MODE_GSM_ONLY = 2;

    // WCDMA only
    NETWORK_MODE_WCDMA_ONLY = 3;

    // GSM/WCDMA (auto mode, according to PRL)
    NETWORK_MODE_GSM_UMTS = 4;

    // CDMA and EvDo (auto mode, according to PRL)
    NETWORK_MODE_CDMA = 5;

    // CDMA only
    NETWORK_MODE_CDMA_NO_EVDO = 6;

    // EvDo only
    NETWORK_MODE_EVDO_NO_CDMA = 7;

    // GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)
    NETWORK_MODE_GLOBAL = 8;

    // LTE, CDMA and EvDo
    NETWORK_MODE_LTE_CDMA_EVDO = 9;

    // LTE, GSM/WCDMA
    NETWORK_MODE_LTE_GSM_WCDMA = 10;

    // LTE, CDMA, EvDo, GSM/WCDMA
    NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = 11;

    // LTE Only mode
    NETWORK_MODE_LTE_ONLY = 12;

    // LTE/WCDMA
    NETWORK_MODE_LTE_WCDMA = 13;

    // TD-SCDMA only
    NETWORK_MODE_TDSCDMA_ONLY = 14;

    // TD-SCDMA and WCDMA
    NETWORK_MODE_TDSCDMA_WCDMA = 15;

    // TD-SCDMA and LTE
    NETWORK_MODE_LTE_TDSCDMA = 16;

    // TD-SCDMA and GSM
    NETWORK_MODE_TDSCDMA_GSM = 17;

    // TD-SCDMA,GSM and LTE
    NETWORK_MODE_LTE_TDSCDMA_GSM = 18;

    // TD-SCDMA, GSM/WCDMA
    NETWORK_MODE_TDSCDMA_GSM_WCDMA = 19;

    // TD-SCDMA, WCDMA and LTE
    NETWORK_MODE_LTE_TDSCDMA_WCDMA = 20;

    // TD-SCDMA, GSM/WCDMA and LTE
    NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA = 21;

    // TD-SCDMA,EvDo,CDMA,GSM/WCDMA
    NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 22;

    // TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo
    NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = 23;
  }

  // Constants for WiFi Calling mode
  enum WiFiCallingMode {

    // Calling mode is unknown.
    WFC_MODE_UNKNOWN = 0;

    WFC_MODE_WIFI_ONLY = 1;

    WFC_MODE_CELLULAR_PREFERRED = 2;

    WFC_MODE_WIFI_PREFERRED = 3;
  }

  // If the device is in airplane mode.
  optional bool is_airplane_mode = 1;

  // If cell-data has been enabled.
  optional bool is_cellular_data_enabled = 2;

  // If cell-roaming has been enabled.
  optional bool is_data_roaming_enabled = 3;

  // Preferred network mode.
  optional RilNetworkMode preferred_network_mode = 4;

  // If enhanced mode enabled.
  optional bool is_enhanced_4g_lte_mode_enabled = 5;

  // If wifi has been enabled.
  optional bool is_wifi_enabled = 6;

  // If wifi-calling has been enabled.
  optional bool is_wifi_calling_enabled = 7;

  // Wifi-calling Mode.
  optional WiFiCallingMode wifi_calling_mode = 8;

  // If video over LTE enabled.
  optional bool is_vt_over_lte_enabled = 9;

  // If video over wifi enabled.
  optional bool is_vt_over_wifi_enabled = 10;
}

// Contains phone state and service related information.
message TelephonyServiceState {

  // The information about cellular network operator
  message TelephonyOperator {

    // Name in long alphanumeric format
    optional string alpha_long = 1;

    // Name in short alphanumeric format
    optional string alpha_short = 2;

    // Numeric id.
    // In GSM/UMTS, numeric format is 3 digit country code plus 2 or 3 digit
    // network code. Same as MCC/MNC.
    optional string numeric = 3;
  }

  // Roaming type
  enum RoamingType {

    // Unknown. The default value. Different from ROAMING_TYPE_UNKNOWN.
    UNKNOWN = -1;

    // In home network
    ROAMING_TYPE_NOT_ROAMING = 0;

    // In a roaming network, but we can not tell
    // if it's domestic or international
    ROAMING_TYPE_UNKNOWN = 1;

    // In domestic roaming network
    ROAMING_TYPE_DOMESTIC = 2;

    // In international roaming network
    ROAMING_TYPE_INTERNATIONAL = 3;
  }

  // Current registered operator
  optional TelephonyOperator voice_operator = 1;

  // Current registered data network operator
  optional TelephonyOperator data_operator = 2;

  // Current voice network roaming type
  optional RoamingType voice_roaming_type = 3 [default = UNKNOWN];

  // Current data network roaming type
  optional RoamingType data_roaming_type = 4 [default = UNKNOWN];

  // Current voice radio technology
  optional RadioAccessTechnology voice_rat = 5 [default = UNKNOWN];

  // Current data radio technology
  optional RadioAccessTechnology data_rat = 6 [default = UNKNOWN];

  // Current Channel Number
  optional int32 channel_number = 7;
}

// Radio access families
enum RadioAccessTechnology {

  // This is the default value. Different from RAT_UNKNOWN.
  UNKNOWN = -1;

  // Airplane mode, out of service, or when the modem cannot determine
  // the RAT.
  RAT_UNKNOWN = 0;

  RAT_GPRS = 1;

  RAT_EDGE = 2;

  RAT_UMTS = 3;

  RAT_IS95A = 4;

  RAT_IS95B = 5;

  RAT_1XRTT = 6;

  RAT_EVDO_0 = 7;

  RAT_EVDO_A = 8;

  RAT_HSDPA = 9;

  RAT_HSUPA = 10;

  RAT_HSPA = 11;

  RAT_EVDO_B = 12;

  RAT_EHRPD = 13;

  RAT_LTE = 14;

  RAT_HSPAP = 15;

  RAT_GSM = 16;

  RAT_TD_SCDMA = 17;

  RAT_IWLAN = 18;

  RAT_LTE_CA = 19;
}

// The information about IMS errors
// https://cs.corp.google.com/#android/frameworks/base/telephony/java/com/android/ims/ImsReasonInfo.java
message ImsReasonInfo {

  // Main reason code.
  optional int32 reason_code = 1;

  // Extra code value; it depends on the code value.
  optional int32 extra_code = 2;

  // Additional message of the reason info. We get this from the modem.
  optional string extra_message = 3;
}

// The information about state connection between IMS service and IMS server
message ImsConnectionState {

  // Current state
  optional State state = 1;

  // If DISCONNECTED then this field may have additional information about
  // connection problem.
  optional ImsReasonInfo reason_info = 2;

  // Posible states
  enum State {

    // State is unknown.
    STATE_UNKNOWN = 0;

    CONNECTED = 1;

    PROGRESSING = 2;

    DISCONNECTED = 3;

    RESUMED = 4;

    SUSPENDED = 5;
  }
}

// The information about current capabilities of IMS service
message ImsCapabilities {

  optional bool voice_over_lte = 1;

  optional bool voice_over_wifi = 2;

  optional bool video_over_lte = 3;

  optional bool video_over_wifi = 4;

  optional bool ut_over_lte = 5;

  optional bool ut_over_wifi = 6;
}

// Errors returned by RIL
enum RilErrno {

  // type is unknown.
  RIL_E_UNKNOWN = 0;

  // Note the following values are all off by 1.
  RIL_E_SUCCESS = 1;

  // If radio did not start or is resetting
  RIL_E_RADIO_NOT_AVAILABLE = 2;

  RIL_E_GENERIC_FAILURE = 3;

  // for PIN/PIN2 methods only!
  RIL_E_PASSWORD_INCORRECT = 4;

  // Operation requires SIM PIN2 to be entered
  RIL_E_SIM_PIN2 = 5;

  // Operation requires SIM PIN2 to be entered
  RIL_E_SIM_PUK2 = 6;

  RIL_E_REQUEST_NOT_SUPPORTED = 7;

  RIL_E_CANCELLED = 8;

  // data ops are not allowed during voice call on a Class C GPRS device
  RIL_E_OP_NOT_ALLOWED_DURING_VOICE_CALL = 9;

  // data ops are not allowed before device registers in network
  RIL_E_OP_NOT_ALLOWED_BEFORE_REG_TO_NW = 10;

  // fail to send sms and need retry
  RIL_E_SMS_SEND_FAIL_RETRY = 11;

  // fail to set the location where CDMA subscription shall be retrieved
  // because of SIM or RUIM card absent
  RIL_E_SIM_ABSENT = 12;

  // fail to find CDMA subscription from specified location
  RIL_E_SUBSCRIPTION_NOT_AVAILABLE = 13;

  // HW does not support preferred network type
  RIL_E_MODE_NOT_SUPPORTED = 14;

  // command failed because recipient is not on FDN list
  RIL_E_FDN_CHECK_FAILURE = 15;

  // network selection failed due to illegal SIM or ME
  RIL_E_ILLEGAL_SIM_OR_ME = 16;

  // no logical channel available
  RIL_E_MISSING_RESOURCE = 17;

  // application not found on SIM
  RIL_E_NO_SUCH_ELEMENT = 18;

  // DIAL request modified to USSD
  RIL_E_DIAL_MODIFIED_TO_USSD = 19;

  // DIAL request modified to SS
  RIL_E_DIAL_MODIFIED_TO_SS = 20;

  // DIAL request modified to DIAL with different data
  RIL_E_DIAL_MODIFIED_TO_DIAL = 21;

  // USSD request modified to DIAL
  RIL_E_USSD_MODIFIED_TO_DIAL = 22;

  // USSD request modified to SS
  RIL_E_USSD_MODIFIED_TO_SS = 23;

  // USSD request modified to different USSD request
  RIL_E_USSD_MODIFIED_TO_USSD = 24;

  // SS request modified to DIAL
  RIL_E_SS_MODIFIED_TO_DIAL = 25;

  // SS request modified to USSD
  RIL_E_SS_MODIFIED_TO_USSD = 26;

  // Subscription not supported by RIL
  RIL_E_SUBSCRIPTION_NOT_SUPPORTED = 27;

  // SS request modified to different SS request
  RIL_E_SS_MODIFIED_TO_SS = 28;

  // LCE service not supported(36 in RILConstants.java. This is a mistake.
  // The value should be off by 1 ideally.)
  RIL_E_LCE_NOT_SUPPORTED = 36 [deprecated=true];

  // LCE service not supported
  RIL_E_LCE_NOT_SUPPORTED_NEW = 37;

  // Not sufficient memory to process the request
  RIL_E_NO_MEMORY = 38;

  // Modem hit unexpected error scenario while handling this request
  RIL_E_INTERNAL_ERR = 39;

  // Hit platform or system error
  RIL_E_SYSTEM_ERR = 40;

  // Vendor RIL got unexpected or incorrect response from modem for this request
  RIL_E_MODEM_ERR = 41;

  // Unexpected request for the current state
  RIL_E_INVALID_STATE = 42;

  // Not sufficient resource to process the request
  RIL_E_NO_RESOURCES = 43;

  // Received error from SIM card
  RIL_E_SIM_ERR = 44;

  // Received invalid arguments in request
  RIL_E_INVALID_ARGUMENTS = 45;

  // Cannot process the request in current SIM state
  RIL_E_INVALID_SIM_STATE = 46;

  // Cannot process the request in current Modem state
  RIL_E_INVALID_MODEM_STATE = 47;

  // Received invalid call id in request
  RIL_E_INVALID_CALL_ID = 48;

  // ACK received when there is no SMS to ack
  RIL_E_NO_SMS_TO_ACK = 49;

  // Received error from network
  RIL_E_NETWORK_ERR = 50;

  // Operation denied due to overly-frequent requests
  RIL_E_REQUEST_RATE_LIMITED = 51;

  // SIM is busy
  RIL_E_SIM_BUSY = 52;

  // The target EF is full
  RIL_E_SIM_FULL = 53;

  // Request is rejected by network
  RIL_E_NETWORK_REJECT = 54;

  // Not allowed the request now
  RIL_E_OPERATION_NOT_ALLOWED = 55;

  // The request record is empty
  RIL_E_EMPTY_RECORD = 56;

  // Invalid sms format
  RIL_E_INVALID_SMS_FORMAT = 57;

  // Message not encoded properly
  RIL_E_ENCODING_ERR = 58;

  // SMSC address specified is invalid
  RIL_E_INVALID_SMSC_ADDRESS = 59;

  // No such entry present to perform the request
  RIL_E_NO_SUCH_ENTRY = 60;

  // Network is not ready to perform the request
  RIL_E_NETWORK_NOT_READY = 61;

  // Device does not have this value provisioned
  RIL_E_NOT_PROVISIONED = 62;

  // Device does not have subscription
  RIL_E_NO_SUBSCRIPTION = 63;

  // Network cannot be found
  RIL_E_NO_NETWORK_FOUND = 64;

  // Operation cannot be performed because the device is currently in use
  RIL_E_DEVICE_IN_USE = 65;

  // Operation aborted
  RIL_E_ABORTED = 66;

  // Invalid response sent by vendor code
  RIL_E_INVALID_RESPONSE = 67;
}

// Errors returned by ImsService
enum ImsServiceErrno {

  // The operation error is unknown
  IMS_E_UNKNOWN = 0;
  // The operation has succeeded
  IMS_E_SUCCESS = 1;
  // Sending SMS over IMS failed. Do not retry over IMS again or fallback to CS.
  IMS_E_SMS_SEND_STATUS_ERROR = 2;
  // Sending SMS over IMS failed. Retry over IMS again.
  IMS_E_SMS_SEND_STATUS_ERROR_RETRY = 3;
  // Sending SMS over IMS failed. Fallback to sending the SMS over CS.
  IMS_E_SMS_SEND_STATUS_ERROR_FALLBACK = 4;
}

// PDP_type values in TS 27.007 section 10.1.1.
enum PdpType {

  // type is unknown.
  PDP_UNKNOWN = 0;

  PDP_TYPE_IP = 1;

  PDP_TYPE_IPV6 = 2;

  PDP_TYPE_IPV4V6 = 3;

  PDP_TYPE_PPP = 4;

  PDP_TYPE_NON_IP = 5;

  PDP_TYPE_UNSTRUCTURED = 6;
}

// The information about packet data connection
message RilDataCall {

  // Context ID, uniquely identifies this call
  optional int32 cid = 1;

  // One of the PDP_type values in TS 27.007 section 10.1.1
  optional PdpType type = 2;

  // The network interface name e.g. wlan0, rmnet_data0.
  optional string iframe = 3;

  // State of the Data Call connection
  optional State state = 4;

  // Bitmask of APN types
  optional int32 apn_type_bitmask = 5;

  enum State {

    // Unknown event
    UNKNOWN = 0;

    // Connected event
    CONNECTED = 1;

    // Disconnected event
    DISCONNECTED = 2;
  }
}

message EmergencyNumberInfo {
  // Dialing address
  optional string address = 1 /* [
    (datapol.semantic_type) = ST_PHONE_NUMBER,
    (datapol.qualifier) = {is_public: true}
  ] */;

  // Country code string (lowercase character) in ISO 3166 format
  optional string country_iso = 2 /* [(datapol.semantic_type) = ST_LOCATION] */;

  // Mobile Network Code
  optional string mnc = 3 /* [(datapol.semantic_type) = ST_LOCATION] */;

  // Bitmask of emergency service categories
  optional int32 service_categories_bitmask = 4;

  // Emergency Uniform Resources Names (URN)
  // Reference: https://tools.ietf.org/html/rfc5031
  repeated string urns = 5;

  // Bitmask of the sources
  optional int32 number_sources_bitmask = 6;

  // Emergency call routing information.
  // Emergency call routing is a flag to tell how modem handles the calling with
  // emergency numbers. For example, 110 in India, modem needs to handle/route
  // it like a normal call. There are only two possible options for emergency
  // call routing: emergency call routing vs normal call routing. It is usually
  // a country or carrier requirement.
  optional int32 routing = 7;
}

message TelephonyEvent {

  enum Type {

    // Unknown event
    UNKNOWN = 0;

    // Telephony related user settings changed
    SETTINGS_CHANGED = 1;

    // Phone state changed
    RIL_SERVICE_STATE_CHANGED = 2;

    // IMS connected/disconnected
    IMS_CONNECTION_STATE_CHANGED = 3;

    // IMS Voice, Video and Ut capabilities changed
    IMS_CAPABILITIES_CHANGED = 4;

    // Setup a packet data connection
    DATA_CALL_SETUP = 5;

    // RIL request result
    DATA_CALL_SETUP_RESPONSE = 6;

    // Notification that new data call has appeared in the list
    // or old data call has removed.
    DATA_CALL_LIST_CHANGED = 7;

    // Deactivate packet data connection
    DATA_CALL_DEACTIVATE = 8;

    // RIL request result
    DATA_CALL_DEACTIVATE_RESPONSE = 9;

    // Logging a data stall + its action
    DATA_STALL_ACTION = 10;

    // Modem Restarted. Logging a baseband version and reason for restart
    // along with the event if it is available
    MODEM_RESTART = 11;

    // System time overwritten by NITZ (Network time)
    NITZ_TIME = 12;

    // Carrier Identification Matching Event
    CARRIER_ID_MATCHING = 13;

    // Carrier Key Change event.
    CARRIER_KEY_CHANGED = 14;

    // Data switch event.
    DATA_SWITCH = 15;

    // Network validate event.
    NETWORK_VALIDATE = 16;

    // On deman data switch event.
    ON_DEMAND_DATA_SWITCH = 17;

    // SIM state change event.
    SIM_STATE_CHANGED = 18;

    // Active subscription info change event.
    ACTIVE_SUBSCRIPTION_INFO_CHANGED = 19;

    // Enabled modem change event.
    ENABLED_MODEM_CHANGED = 20;

    // Emergency Number update event (Device HAL >= 1.4).
    EMERGENCY_NUMBER_REPORT = 21;
  }

  enum ApnType {
    APN_TYPE_UNKNOWN = 0;

    APN_TYPE_DEFAULT = 1;

    APN_TYPE_MMS = 2;

    APN_TYPE_SUPL = 3;

    APN_TYPE_DUN = 4;

    APN_TYPE_HIPRI = 5;

    APN_TYPE_FOTA = 6;

    APN_TYPE_IMS = 7;

    APN_TYPE_CBS = 8;

    APN_TYPE_IA = 9;

    APN_TYPE_EMERGENCY = 10;
  }

  enum EventState {
    EVENT_STATE_UNKNOWN = 0;

    EVENT_STATE_START = 1;

    EVENT_STATE_END = 2;
  }

  enum NetworkValidationState {
    /** The network validation state is unknown. */
    NETWORK_VALIDATION_STATE_UNKNOWN = 0;

    /** The network under validation is initial established. */
    NETWORK_VALIDATION_STATE_AVAILABLE = 1;

    /** The validation is failed. */
    NETWORK_VALIDATION_STATE_FAILED = 2;

    /** The validation is passed. */
    NETWORK_VALIDATION_STATE_PASSED = 3;
  }

  message DataSwitch {
    enum Reason {
      /** Data switch caused by unknown reason. */
      DATA_SWITCH_REASON_UNKNOWN = 0;

      /** Data switch caused by user's manual switch. */
      DATA_SWITCH_REASON_MANUAL = 1;

      /** Data switch caused by incoming/outgoing call. */
      DATA_SWITCH_REASON_IN_CALL = 2;

      /** Data switch caused by CBRS switch. */
      DATA_SWITCH_REASON_CBRS = 3;
    }

    /** The reason for data switch. */
    optional Reason reason = 1;

    /** Current state of the data switch event. */
    optional EventState state = 2;
  }

  message OnDemandDataSwitch {
    /** The apn associated with this event. */
    optional ApnType apn = 1;

    /** Current state of the on demand data switch event. */
    optional EventState state = 2;
  }

  // Setup a packet data connection
  message RilSetupDataCall {

    // See ril.h RIL_REQUEST_SETUP_DATA_CALL
    enum RilDataProfile {

      // type is unknown.
      RIL_DATA_UNKNOWN = 0;

      RIL_DATA_PROFILE_DEFAULT = 1;

      RIL_DATA_PROFILE_TETHERED = 2;

      RIL_DATA_PROFILE_IMS = 3;

      RIL_DATA_PROFILE_FOTA = 4;

      RIL_DATA_PROFILE_CBS = 5;

      RIL_DATA_PROFILE_OEM_BASE = 6;

      RIL_DATA_PROFILE_INVALID = 7;
    }

    // Radio technology to use
    optional RadioAccessTechnology rat = 1 [default = UNKNOWN];

    // optional RIL_DataProfile
    optional RilDataProfile data_profile = 2;

    // APN to connect to if radio technology is GSM/UMTS
    optional string apn = 3;

    // the connection type to request
    optional PdpType type = 4;
  }

  // RIL response to RilSetupDataCall
  message RilSetupDataCallResponse {

    // Copy of enum RIL_DataCallFailCause defined at ril.h
    enum RilDataCallFailCause {

      // Failure reason is unknown.
      PDP_FAIL_UNKNOWN = 0;

      // No error, connection ok
      PDP_FAIL_NONE = 1;

      PDP_FAIL_OPERATOR_BARRED = 8;

      PDP_FAIL_NAS_SIGNALLING = 14;

      PDP_FAIL_LLC_SNDCP = 25;

      PDP_FAIL_INSUFFICIENT_RESOURCES = 26;

      PDP_FAIL_MISSING_UKNOWN_APN = 27;

      PDP_FAIL_UNKNOWN_PDP_ADDRESS_TYPE = 28;

      PDP_FAIL_USER_AUTHENTICATION = 29;

      PDP_FAIL_ACTIVATION_REJECT_GGSN = 30;

      PDP_FAIL_ACTIVATION_REJECT_UNSPECIFIED = 31;

      PDP_FAIL_SERVICE_OPTION_NOT_SUPPORTED = 32;

      PDP_FAIL_SERVICE_OPTION_NOT_SUBSCRIBED = 33;

      PDP_FAIL_SERVICE_OPTION_OUT_OF_ORDER = 34;

      PDP_FAIL_NSAPI_IN_USE = 35;

      // Possibly restart radio, based on framework config
      PDP_FAIL_REGULAR_DEACTIVATION = 36;

      PDP_FAIL_QOS_NOT_ACCEPTED = 37;

      PDP_FAIL_NETWORK_FAILURE = 38;

      PDP_FAIL_UMTS_REACTIVATION_REQ = 39;

      PDP_FAIL_FEATURE_NOT_SUPP = 40;

      PDP_FAIL_TFT_SEMANTIC_ERROR = 41;

      PDP_FAIL_TFT_SYTAX_ERROR = 42;

      PDP_FAIL_UNKNOWN_PDP_CONTEXT = 43;

      PDP_FAIL_FILTER_SEMANTIC_ERROR = 44;

      PDP_FAIL_FILTER_SYTAX_ERROR = 45;

      PDP_FAIL_PDP_WITHOUT_ACTIVE_TFT = 46;

      PDP_FAIL_ACTIVATION_REJECTED_BCM_VIOLATION = 48;

      PDP_FAIL_ONLY_IPV4_ALLOWED = 50;

      PDP_FAIL_ONLY_IPV6_ALLOWED = 51;

      PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED = 52;

      PDP_FAIL_ESM_INFO_NOT_RECEIVED = 53;

      PDP_FAIL_PDN_CONN_DOES_NOT_EXIST = 54;

      PDP_FAIL_MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 55;

      PDP_FAIL_COLLISION_WITH_NETWORK_INITIATED_REQUEST = 56;

      PDP_FAIL_ONLY_IPV4V6_ALLOWED = 57;

      PDP_FAIL_ONLY_NON_IP_ALLOWED = 58;

      PDP_FAIL_UNSUPPORTED_QCI_VALUE = 59;

      PDP_FAIL_BEARER_HANDLING_NOT_SUPPORTED = 60;

      PDP_FAIL_MAX_ACTIVE_PDP_CONTEXT_REACHED = 65;

      PDP_FAIL_UNSUPPORTED_APN_IN_CURRENT_PLMN = 66;

      PDP_FAIL_INVALID_TRANSACTION_ID = 81;

      PDP_FAIL_MESSAGE_INCORRECT_SEMANTIC = 95;

      PDP_FAIL_INVALID_MANDATORY_INFO = 96;

      PDP_FAIL_MESSAGE_TYPE_UNSUPPORTED = 97;

      PDP_FAIL_MSG_TYPE_NONCOMPATIBLE_STATE = 98;

      PDP_FAIL_UNKNOWN_INFO_ELEMENT = 99;

      PDP_FAIL_CONDITIONAL_IE_ERROR = 100;

      PDP_FAIL_MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 101;

      PDP_FAIL_PROTOCOL_ERRORS   = 111;

      PDP_FAIL_APN_TYPE_CONFLICT = 112;

      PDP_FAIL_INVALID_PCSCF_ADDR = 113;

      PDP_FAIL_INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 114;

      PDP_FAIL_EMM_ACCESS_BARRED = 115;

      PDP_FAIL_EMERGENCY_IFACE_ONLY = 116;

      PDP_FAIL_IFACE_MISMATCH = 117;

      PDP_FAIL_COMPANION_IFACE_IN_USE = 118;

      PDP_FAIL_IP_ADDRESS_MISMATCH = 119;

      PDP_FAIL_IFACE_AND_POL_FAMILY_MISMATCH = 120;

      PDP_FAIL_EMM_ACCESS_BARRED_INFINITE_RETRY = 121;

      PDP_FAIL_AUTH_FAILURE_ON_EMERGENCY_CALL = 122;

      PDP_FAIL_INVALID_DNS_ADDR = 123;

      PDP_FAIL_INVALID_PCSCF_OR_DNS_ADDRESS = 124;

      PDP_FAIL_CALL_PREEMPT_BY_EMERGENCY_APN = 127;

      PDP_FAIL_UE_INITIATED_DETACH_OR_DISCONNECT = 128;

      PDP_FAIL_MIP_FA_REASON_UNSPECIFIED = 2000;

      PDP_FAIL_MIP_FA_ADMIN_PROHIBITED = 2001;

      PDP_FAIL_MIP_FA_INSUFFICIENT_RESOURCES = 2002;

      PDP_FAIL_MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2003;

      PDP_FAIL_MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE = 2004;

      PDP_FAIL_MIP_FA_REQUESTED_LIFETIME_TOO_LONG = 2005;

      PDP_FAIL_MIP_FA_MALFORMED_REQUEST = 2006;

      PDP_FAIL_MIP_FA_MALFORMED_REPLY = 2007;

      PDP_FAIL_MIP_FA_ENCAPSULATION_UNAVAILABLE = 2008;

      PDP_FAIL_MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE = 2009;

      PDP_FAIL_MIP_FA_REVERSE_TUNNEL_UNAVAILABLE = 2010;

      PDP_FAIL_MIP_FA_REVERSE_TUNNEL_IS_MANDATORY = 2011;

      PDP_FAIL_MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED = 2012;

      PDP_FAIL_MIP_FA_MISSING_NAI = 2013;

      PDP_FAIL_MIP_FA_MISSING_HOME_AGENT = 2014;

      PDP_FAIL_MIP_FA_MISSING_HOME_ADDRESS = 2015;

      PDP_FAIL_MIP_FA_UNKNOWN_CHALLENGE = 2016;

      PDP_FAIL_MIP_FA_MISSING_CHALLENGE = 2017;

      PDP_FAIL_MIP_FA_STALE_CHALLENGE = 2018;

      PDP_FAIL_MIP_HA_REASON_UNSPECIFIED = 2019;

      PDP_FAIL_MIP_HA_ADMIN_PROHIBITED = 2020;

      PDP_FAIL_MIP_HA_INSUFFICIENT_RESOURCES = 2021;

      PDP_FAIL_MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2022;

      PDP_FAIL_MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE = 2023;

      PDP_FAIL_MIP_HA_REGISTRATION_ID_MISMATCH = 2024;

      PDP_FAIL_MIP_HA_MALFORMED_REQUEST = 2025;

      PDP_FAIL_MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS = 2026;

      PDP_FAIL_MIP_HA_REVERSE_TUNNEL_UNAVAILABLE = 2027;

      PDP_FAIL_MIP_HA_REVERSE_TUNNEL_IS_MANDATORY = 2028;

      PDP_FAIL_MIP_HA_ENCAPSULATION_UNAVAILABLE = 2029;

      PDP_FAIL_CLOSE_IN_PROGRESS = 2030;

      PDP_FAIL_NETWORK_INITIATED_TERMINATION = 2031;

      PDP_FAIL_MODEM_APP_PREEMPTED = 2032;

      PDP_FAIL_PDN_IPV4_CALL_DISALLOWED = 2033;

      PDP_FAIL_PDN_IPV4_CALL_THROTTLED = 2034;

      PDP_FAIL_PDN_IPV6_CALL_DISALLOWED = 2035;

      PDP_FAIL_PDN_IPV6_CALL_THROTTLED = 2036;

      PDP_FAIL_MODEM_RESTART = 2037;

      PDP_FAIL_PDP_PPP_NOT_SUPPORTED = 2038;

      PDP_FAIL_UNPREFERRED_RAT = 2039;

      PDP_FAIL_PHYSICAL_LINK_CLOSE_IN_PROGRESS = 2040;

      PDP_FAIL_APN_PENDING_HANDOVER = 2041;

      PDP_FAIL_PROFILE_BEARER_INCOMPATIBLE = 2042;

      PDP_FAIL_SIM_CARD_CHANGED = 2043;

      PDP_FAIL_LOW_POWER_MODE_OR_POWERING_DOWN = 2044;

      PDP_FAIL_APN_DISABLED = 2045;

      PDP_FAIL_MAX_PPP_INACTIVITY_TIMER_EXPIRED = 2046;

      PDP_FAIL_IPV6_ADDRESS_TRANSFER_FAILED = 2047;

      PDP_FAIL_TRAT_SWAP_FAILED = 2048;

      PDP_FAIL_EHRPD_TO_HRPD_FALLBACK = 2049;

      PDP_FAIL_MIP_CONFIG_FAILURE = 2050;

      PDP_FAIL_PDN_INACTIVITY_TIMER_EXPIRED = 2051;

      PDP_FAIL_MAX_IPV4_CONNECTIONS = 2052;

      PDP_FAIL_MAX_IPV6_CONNECTIONS = 2053;

      PDP_FAIL_APN_MISMATCH = 2054;

      PDP_FAIL_IP_VERSION_MISMATCH = 2055;

      PDP_FAIL_DUN_CALL_DISALLOWED = 2056;

      PDP_FAIL_INTERNAL_EPC_NONEPC_TRANSITION = 2057;

      PDP_FAIL_INTERFACE_IN_USE = 2058;

      PDP_FAIL_APN_DISALLOWED_ON_ROAMING = 2059;

      PDP_FAIL_APN_PARAMETERS_CHANGED = 2060;

      PDP_FAIL_NULL_APN_DISALLOWED = 2061;

      PDP_FAIL_THERMAL_MITIGATION = 2062;

      PDP_FAIL_DATA_SETTINGS_DISABLED = 2063;

      PDP_FAIL_DATA_ROAMING_SETTINGS_DISABLED = 2064;

      PDP_FAIL_DDS_SWITCHED = 2065;

      PDP_FAIL_FORBIDDEN_APN_NAME = 2066;

      PDP_FAIL_DDS_SWITCH_IN_PROGRESS = 2067;

      PDP_FAIL_CALL_DISALLOWED_IN_ROAMING = 2068;

      PDP_FAIL_NON_IP_NOT_SUPPORTED = 2069;

      PDP_FAIL_PDN_NON_IP_CALL_THROTTLED = 2070;

      PDP_FAIL_PDN_NON_IP_CALL_DISALLOWED = 2071;

      PDP_FAIL_CDMA_LOCK = 2072;

      PDP_FAIL_CDMA_INTERCEPT = 2073;

      PDP_FAIL_CDMA_REORDER = 2074;

      PDP_FAIL_CDMA_RELEASE_DUE_TO_SO_REJECTION = 2075;

      PDP_FAIL_CDMA_INCOMING_CALL = 2076;

      PDP_FAIL_CDMA_ALERT_STOP = 2077;

      PDP_FAIL_CHANNEL_ACQUISITION_FAILURE = 2078;

      PDP_FAIL_MAX_ACCESS_PROBE = 2079;

      PDP_FAIL_CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION = 2080;

      PDP_FAIL_NO_RESPONSE_FROM_BASE_STATION = 2081;

      PDP_FAIL_REJECTED_BY_BASE_STATION = 2082;

      PDP_FAIL_CONCURRENT_SERVICES_INCOMPATIBLE = 2083;

      PDP_FAIL_NO_CDMA_SERVICE = 2084;

      PDP_FAIL_RUIM_NOT_PRESENT = 2085;

      PDP_FAIL_CDMA_RETRY_ORDER = 2086;

      PDP_FAIL_ACCESS_BLOCK = 2087;

      PDP_FAIL_ACCESS_BLOCK_ALL = 2088;

      PDP_FAIL_IS707B_MAX_ACCESS_PROBES = 2089;

      PDP_FAIL_THERMAL_EMERGENCY = 2090;

      PDP_FAIL_CONCURRENT_SERVICES_NOT_ALLOWED = 2091;

      PDP_FAIL_INCOMING_CALL_REJECTED = 2092;

      PDP_FAIL_NO_SERVICE_ON_GATEWAY = 2093;

      PDP_FAIL_NO_GPRS_CONTEXT = 2094;

      PDP_FAIL_ILLEGAL_MS = 2095;

      PDP_FAIL_ILLEGAL_ME = 2096;

      PDP_FAIL_GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 2097;

      PDP_FAIL_GPRS_SERVICES_NOT_ALLOWED = 2098;

      PDP_FAIL_MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK = 2099;

      PDP_FAIL_IMPLICITLY_DETACHED = 2100;

      PDP_FAIL_PLMN_NOT_ALLOWED = 2101;

      PDP_FAIL_LOCATION_AREA_NOT_ALLOWED = 2102;

      PDP_FAIL_GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN = 2103;

      PDP_FAIL_PDP_DUPLICATE = 2104;

      PDP_FAIL_UE_RAT_CHANGE = 2105;

      PDP_FAIL_CONGESTION = 2106;

      PDP_FAIL_NO_PDP_CONTEXT_ACTIVATED = 2107;

      PDP_FAIL_ACCESS_CLASS_DSAC_REJECTION = 2108;

      PDP_FAIL_PDP_ACTIVATE_MAX_RETRY_FAILED = 2109;

      PDP_FAIL_RADIO_ACCESS_BEARER_FAILURE = 2110;

      PDP_FAIL_ESM_UNKNOWN_EPS_BEARER_CONTEXT = 2111;

      PDP_FAIL_DRB_RELEASED_BY_RRC = 2112;

      PDP_FAIL_CONNECTION_RELEASED = 2113;

      PDP_FAIL_EMM_DETACHED = 2114;

      PDP_FAIL_EMM_ATTACH_FAILED = 2115;

      PDP_FAIL_EMM_ATTACH_STARTED = 2116;

      PDP_FAIL_LTE_NAS_SERVICE_REQUEST_FAILED = 2117;

      PDP_FAIL_DUPLICATE_BEARER_ID = 2118;

      PDP_FAIL_ESM_COLLISION_SCENARIOS = 2119;

      PDP_FAIL_ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK = 2120;

      PDP_FAIL_ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER = 2121;

      PDP_FAIL_ESM_BAD_OTA_MESSAGE = 2122;

      PDP_FAIL_ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL = 2123;

      PDP_FAIL_ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT = 2124;

      PDP_FAIL_DS_EXPLICIT_DEACTIVATION = 2125;

      PDP_FAIL_ESM_LOCAL_CAUSE_NONE = 2126;

      PDP_FAIL_LTE_THROTTLING_NOT_REQUIRED = 2127;

      PDP_FAIL_ACCESS_CONTROL_LIST_CHECK_FAILURE = 2128;

      PDP_FAIL_SERVICE_NOT_ALLOWED_ON_PLMN = 2129;

      PDP_FAIL_EMM_T3417_EXPIRED = 2130;

      PDP_FAIL_EMM_T3417_EXT_EXPIRED = 2131;

      PDP_FAIL_RRC_UPLINK_DATA_TRANSMISSION_FAILURE = 2132;

      PDP_FAIL_RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER = 2133;

      PDP_FAIL_RRC_UPLINK_CONNECTION_RELEASE = 2134;

      PDP_FAIL_RRC_UPLINK_RADIO_LINK_FAILURE = 2135;

      PDP_FAIL_RRC_UPLINK_ERROR_REQUEST_FROM_NAS = 2136;

      PDP_FAIL_RRC_CONNECTION_ACCESS_STRATUM_FAILURE = 2137;

      PDP_FAIL_RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS = 2138;

      PDP_FAIL_RRC_CONNECTION_ACCESS_BARRED = 2139;

      PDP_FAIL_RRC_CONNECTION_CELL_RESELECTION = 2140;

      PDP_FAIL_RRC_CONNECTION_CONFIG_FAILURE = 2141;

      PDP_FAIL_RRC_CONNECTION_TIMER_EXPIRED = 2142;

      PDP_FAIL_RRC_CONNECTION_LINK_FAILURE = 2143;

      PDP_FAIL_RRC_CONNECTION_CELL_NOT_CAMPED = 2144;

      PDP_FAIL_RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE = 2145;

      PDP_FAIL_RRC_CONNECTION_REJECT_BY_NETWORK = 2146;

      PDP_FAIL_RRC_CONNECTION_NORMAL_RELEASE = 2147;

      PDP_FAIL_RRC_CONNECTION_RADIO_LINK_FAILURE = 2148;

      PDP_FAIL_RRC_CONNECTION_REESTABLISHMENT_FAILURE = 2149;

      PDP_FAIL_RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER = 2150;

      PDP_FAIL_RRC_CONNECTION_ABORT_REQUEST = 2151;

      PDP_FAIL_RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR = 2152;

      PDP_FAIL_NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH = 2153;

      PDP_FAIL_NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH = 2154;

      PDP_FAIL_ESM_PROCEDURE_TIME_OUT = 2155;

      PDP_FAIL_INVALID_CONNECTION_ID = 2156;

      PDP_FAIL_MAXIMIUM_NSAPIS_EXCEEDED = 2157;

      PDP_FAIL_INVALID_PRIMARY_NSAPI = 2158;

      PDP_FAIL_CANNOT_ENCODE_OTA_MESSAGE = 2159;

      PDP_FAIL_RADIO_ACCESS_BEARER_SETUP_FAILURE = 2160;

      PDP_FAIL_PDP_ESTABLISH_TIMEOUT_EXPIRED = 2161;

      PDP_FAIL_PDP_MODIFY_TIMEOUT_EXPIRED = 2162;

      PDP_FAIL_PDP_INACTIVE_TIMEOUT_EXPIRED = 2163;

      PDP_FAIL_PDP_LOWERLAYER_ERROR = 2164;

      PDP_FAIL_PDP_MODIFY_COLLISION = 2165;

      PDP_FAIL_MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED = 2166;

      PDP_FAIL_NAS_REQUEST_REJECTED_BY_NETWORK = 2167;

      PDP_FAIL_RRC_CONNECTION_INVALID_REQUEST = 2168;

      PDP_FAIL_RRC_CONNECTION_TRACKING_AREA_ID_CHANGED = 2169;

      PDP_FAIL_RRC_CONNECTION_RF_UNAVAILABLE = 2170;

      PDP_FAIL_RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE = 2171;

      PDP_FAIL_RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE = 2172;

      PDP_FAIL_RRC_CONNECTION_ABORTED_AFTER_HANDOVER = 2173;

      PDP_FAIL_RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE = 2174;

      PDP_FAIL_RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE = 2175;

      PDP_FAIL_IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER = 2176;

      PDP_FAIL_IMEI_NOT_ACCEPTED = 2177;

      PDP_FAIL_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED = 2178;

      PDP_FAIL_EPS_SERVICES_NOT_ALLOWED_IN_PLMN = 2179;

      PDP_FAIL_MSC_TEMPORARILY_NOT_REACHABLE = 2180;

      PDP_FAIL_CS_DOMAIN_NOT_AVAILABLE = 2181;

      PDP_FAIL_ESM_FAILURE = 2182;

      PDP_FAIL_MAC_FAILURE = 2183;

      PDP_FAIL_SYNCHRONIZATION_FAILURE = 2184;

      PDP_FAIL_UE_SECURITY_CAPABILITIES_MISMATCH = 2185;

      PDP_FAIL_SECURITY_MODE_REJECTED = 2186;

      PDP_FAIL_UNACCEPTABLE_NON_EPS_AUTHENTICATION = 2187;

      PDP_FAIL_CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED = 2188;

      PDP_FAIL_NO_EPS_BEARER_CONTEXT_ACTIVATED = 2189;

      PDP_FAIL_INVALID_EMM_STATE = 2190;

      PDP_FAIL_NAS_LAYER_FAILURE = 2191;

      PDP_FAIL_MULTIPLE_PDP_CALL_NOT_ALLOWED = 2192;

      PDP_FAIL_EMBMS_NOT_ENABLED = 2193;

      PDP_FAIL_IRAT_HANDOVER_FAILED = 2194;

      PDP_FAIL_EMBMS_REGULAR_DEACTIVATION = 2195;

      PDP_FAIL_TEST_LOOPBACK_REGULAR_DEACTIVATION = 2196;

      PDP_FAIL_LOWER_LAYER_REGISTRATION_FAILURE = 2197;

      PDP_FAIL_DATA_PLAN_EXPIRED = 2198;

      PDP_FAIL_UMTS_HANDOVER_TO_IWLAN = 2199;

      PDP_FAIL_EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 2200;

      PDP_FAIL_EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 2201;

      PDP_FAIL_EVDO_HDR_CHANGED = 2202;

      PDP_FAIL_EVDO_HDR_EXITED = 2203;

      PDP_FAIL_EVDO_HDR_NO_SESSION = 2204;

      PDP_FAIL_EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 2205;

      PDP_FAIL_EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 2206;

      PDP_FAIL_FAILED_TO_ACQUIRE_COLOCATED_HDR = 2207;

      PDP_FAIL_OTASP_COMMIT_IN_PROGRESS = 2208;

      PDP_FAIL_NO_HYBRID_HDR_SERVICE = 2209;

      PDP_FAIL_HDR_NO_LOCK_GRANTED = 2210;

      PDP_FAIL_DBM_OR_SMS_IN_PROGRESS = 2211;

      PDP_FAIL_HDR_FADE = 2212;

      PDP_FAIL_HDR_ACCESS_FAILURE = 2213;

      PDP_FAIL_UNSUPPORTED_1X_PREV = 2214;

      PDP_FAIL_LOCAL_END = 2215;

      PDP_FAIL_NO_SERVICE = 2216;

      PDP_FAIL_FADE = 2217;

      PDP_FAIL_NORMAL_RELEASE = 2218;

      PDP_FAIL_ACCESS_ATTEMPT_ALREADY_IN_PROGRESS = 2219;

      PDP_FAIL_REDIRECTION_OR_HANDOFF_IN_PROGRESS = 2220;

      PDP_FAIL_EMERGENCY_MODE = 2221;

      PDP_FAIL_PHONE_IN_USE = 2222;

      PDP_FAIL_INVALID_MODE = 2223;

      PDP_FAIL_INVALID_SIM_STATE = 2224;

      PDP_FAIL_NO_COLLOCATED_HDR = 2225;

      PDP_FAIL_UE_IS_ENTERING_POWERSAVE_MODE = 2226;

      PDP_FAIL_DUAL_SWITCH = 2227;

      PDP_FAIL_PPP_TIMEOUT = 2228;

      PDP_FAIL_PPP_AUTH_FAILURE = 2229;

      PDP_FAIL_PPP_OPTION_MISMATCH = 2230;

      PDP_FAIL_PPP_PAP_FAILURE = 2231;

      PDP_FAIL_PPP_CHAP_FAILURE = 2232;

      PDP_FAIL_PPP_CLOSE_IN_PROGRESS = 2233;

      PDP_FAIL_LIMITED_TO_IPV4 = 2234;

      PDP_FAIL_LIMITED_TO_IPV6 = 2235;

      PDP_FAIL_VSNCP_TIMEOUT = 2236;

      PDP_FAIL_VSNCP_GEN_ERROR = 2237;

      PDP_FAIL_VSNCP_APN_UNATHORIZED = 2238;

      PDP_FAIL_VSNCP_PDN_LIMIT_EXCEEDED = 2239;

      PDP_FAIL_VSNCP_NO_PDN_GATEWAY_ADDRESS = 2240;

      PDP_FAIL_VSNCP_PDN_GATEWAY_UNREACHABLE = 2241;

      PDP_FAIL_VSNCP_PDN_GATEWAY_REJECT = 2242;

      PDP_FAIL_VSNCP_INSUFFICIENT_PARAMETERS = 2243;

      PDP_FAIL_VSNCP_RESOURCE_UNAVAILABLE = 2244;

      PDP_FAIL_VSNCP_ADMINISTRATIVELY_PROHIBITED = 2245;

      PDP_FAIL_VSNCP_PDN_ID_IN_USE = 2246;

      PDP_FAIL_VSNCP_SUBSCRIBER_LIMITATION = 2247;

      PDP_FAIL_VSNCP_PDN_EXISTS_FOR_THIS_APN = 2248;

      PDP_FAIL_VSNCP_RECONNECT_NOT_ALLOWED = 2249;

      PDP_FAIL_IPV6_PREFIX_UNAVAILABLE = 2250;

      PDP_FAIL_HANDOFF_PREFERENCE_CHANGED = 2251;

      // Not mentioned in the specification
      PDP_FAIL_VOICE_REGISTRATION_FAIL = -1;

      PDP_FAIL_DATA_REGISTRATION_FAIL = -2;

      // Reasons for data call drop - network/modem disconnect
      PDP_FAIL_SIGNAL_LOST = -3;

      // Preferred technology has changed, should retry with parameters
      // appropriate for new technology
      PDP_FAIL_PREF_RADIO_TECH_CHANGED = -4;

      // Data call was disconnected because radio was resetting,
      // powered off - no retry
      PDP_FAIL_RADIO_POWER_OFF = -5;

      // Data call was disconnected by modem because tethered mode was up
      // on same APN/data profile - no retry until tethered call is off
      PDP_FAIL_TETHERED_CALL_ACTIVE = -6;

      // retry silently
      PDP_FAIL_ERROR_UNSPECIFIED = 65535;
    }

    // A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no error
    optional RilDataCallFailCause status = 1;

    // If status != 0, this fields indicates the suggested retry back-off timer
    // value RIL wants to override the one pre-configured in FW
    optional int32 suggested_retry_time_millis = 2;

    optional RilDataCall call = 3;
  }

  // Carrier Key Change Event.
  message CarrierKeyChange {

    enum KeyType {

      // Key Type Unknown.
      UNKNOWN = 0;
      // Key Type for WLAN.
      WLAN = 1;
      // Key Type for EPDG.
      EPDG = 2;
    }

    // Key type of the Encryption key.
    optional KeyType key_type = 1;

    // Whether the download was successful or not.
    optional bool isDownloadSuccessful = 2;
  }

  // Deactivate packet data connection
  message RilDeactivateDataCall {

    // Context ID
    optional int32 cid = 1;

    // Reason for deactivating data call
    optional DeactivateReason reason = 2;

    // Deactivate data call reasons
    enum DeactivateReason {

      // Reason is unknown.
      DEACTIVATE_REASON_UNKNOWN = 0;

      DEACTIVATE_REASON_NONE = 1;

      DEACTIVATE_REASON_RADIO_OFF = 2;

      DEACTIVATE_REASON_PDP_RESET = 3;

      DEACTIVATE_REASON_HANDOVER = 4;
    }
  }

  message ModemRestart {
     // The baseband_version is used to identify the particular software version
     // where the modem restarts happened
     optional string baseband_version = 1;

     // Indicates the modem restart reason. The restart reason can be used to
     // categorize any modem crashes and group similar crashes together. This
     // information will be useful to identify the cause of modem crashes,
     // reproduce the issue and confirm that the fix works.
     optional string reason = 2;
  }

  message CarrierIdMatching {

    // Carrier id table version number
    optional int32 cid_table_version = 1;

    // Carrier id matching result object
    optional CarrierIdMatchingResult result = 2;
  }

  message CarrierIdMatchingResult {

    // A unique carrier id
    optional int32 carrier_id = 1;

    // Group id level 1. Logged only if gid1 is configured from subscription
    // but its matching rule is unknown
    optional string unknown_gid1 = 2;

    // MCC and MNC that map to this carrier. Logged only if mccmnc is configured
    // from subscription but its matching rule is unknown
    optional string unknown_mccmnc = 3;

    // MCC and MNC from the subscription that map to this carrier.
    optional string mccmnc = 4;

    // Group id level 1 from the subscription that map to this carrier.
    optional string gid1 = 5;

    // Group id level 2 from the subscription that map to this carrier.
    optional string gid2 = 6;

    // spn from the subscription that map to this carrier.
    optional string spn = 7;

    // pnn from the subscription that map to this carrier.
    optional string pnn = 8;

    // iccid prefix from the subscription that map to this carrier.
    // only log first 7 outof 20 bit of full iccid
    optional string iccid_prefix = 9;

    // imsi prefix from the subscription that map to this carrier.
    // only log additional 2 bits other than MCC MNC.
    optional string imsi_prefix = 10;

    // Carrier Privilege Access Rule in hex string from the subscription.
    // Sample values: 61ed377e85d386a8dfee6b864bd85b0bfaa5af88
    repeated string privilege_access_rule = 11;

    // The Access Point Name, corresponding to "apn" field returned by
    // "content://telephony/carriers/preferapn" on device.
    // Sample values: fast.t-mobile.com, internet. Note only log if this apn is not user edited.
    optional string preferApn = 12;
  }

  // Time when event happened on device, in milliseconds since epoch
  optional int64 timestamp_millis = 1;

  // In Multi-SIM devices this indicates SIM slot
  optional int32 phone_id = 2;

  // Event type
  optional Type type = 3;

  // User settings
  optional TelephonySettings settings = 4;

  // RIL Service State
  optional TelephonyServiceState service_state = 5;

  // IMS state
  optional ImsConnectionState ims_connection_state = 6;

  // IMS capabilities
  optional ImsCapabilities ims_capabilities = 7;

  // List of data calls when changed
  repeated RilDataCall data_calls = 8;

  // RIL error code
  optional RilErrno error = 9;

  // Setup data call request
  optional RilSetupDataCall setup_data_call = 10;

  // Setup data call response
  optional RilSetupDataCallResponse setup_data_call_response = 11;

  // Deactivate data call request
  optional RilDeactivateDataCall deactivate_data_call = 12;

  // Data call stall recovery action
  optional int32 data_stall_action = 13;

  // Modem restart event
  optional ModemRestart modem_restart = 14;

  // NITZ time in milliseconds
  optional int64 nitz_timestamp_millis = 15;

  // Carrier id matching event
  optional CarrierIdMatching carrier_id_matching = 16;

  // Carrier key change
  optional CarrierKeyChange carrier_key_change = 17;

  // Data switch event
  optional DataSwitch data_switch = 19;

  // For network validate event
  optional NetworkValidationState network_validation_state = 20;

  // On demand data switch event
  optional OnDemandDataSwitch on_demand_data_switch = 21;

  // Sim state for each slot.
  repeated SimState sim_state = 22;

  // The active subscription info for a specific slot.
  optional ActiveSubscriptionInfo active_subscription_info = 23;

  // The modem state represent by a bitmap, the i-th bit(LSB) indicates the i-th modem
  // state (0 - disabled, 1 - enabled).
  optional int32 enabled_modem_bitmap = 24;

  // Updated Emergency Call info.
  optional EmergencyNumberInfo updated_emergency_number = 25;
}

message ActiveSubscriptionInfo {
  /** The slot index which this subscription is associated with. */
  optional int32 slot_index = 1;

  /** The Carrier id of this subscription. -1 indicates unknown value. */
  optional int32 carrier_id = 2;

  /** whether subscription is opportunistic (0 - false, 1 - true, -1 - unknown). */
  optional int32 is_opportunistic = 3;
};

enum SimState {
  /**
   * SIM card is inserted, but the state is unknown. Typically happened when the SIM is inserted
   * but not loaded.
   */
  SIM_STATE_UNKNOWN = 0;

  /** No SIM card is inserted in the slot. */
  SIM_STATE_ABSENT = 1;

  /** SIM card applications have been loaded. */
  SIM_STATE_LOADED = 2;
};

enum TimeInterval {
  TI_UNKNOWN = 0;
  TI_10_MILLIS = 1;
  TI_20_MILLIS = 2;
  TI_50_MILLIS = 3;
  TI_100_MILLIS = 4;
  TI_200_MILLIS = 5;
  TI_500_MILLIS = 6;
  TI_1_SEC = 7;
  TI_2_SEC = 8;
  TI_5_SEC = 9;
  TI_10_SEC = 10;
  TI_30_SEC = 11;
  TI_1_MINUTE = 12;
  TI_3_MINUTES = 13;
  TI_10_MINUTES = 14;
  TI_30_MINUTES = 15;
  TI_1_HOUR = 16;
  TI_2_HOURS = 17;
  TI_4_HOURS = 18;
  TI_MANY_HOURS = 19;
}

// Information about CS and/or PS call session.
// Session starts when call is placed or accepted and
// ends when there are no more active calls.
message TelephonyCallSession {

  message Event {

    enum Type {

      // Unknown event
      EVENT_UNKNOWN = 0;

      // Telephony related user settings changed
      SETTINGS_CHANGED = 1;

      // Phone state changed
      RIL_SERVICE_STATE_CHANGED = 2;

      // IMS connected/disconnected
      IMS_CONNECTION_STATE_CHANGED = 3;

      // IMS Voice, Video and Ut capabilities changed
      IMS_CAPABILITIES_CHANGED = 4;

      // Notification that new data call has appeared in the list
      // or old data call has removed.
      DATA_CALL_LIST_CHANGED = 5;

      // Send request to RIL
      RIL_REQUEST = 6;

      // Result of the RIL request
      RIL_RESPONSE = 7;

      // Ring indication for an incoming call
      RIL_CALL_RING = 8;

      // Notification that Single Radio Voice Call Continuity(SRVCC)
      // progress state has changed.
      RIL_CALL_SRVCC = 9;

      // Notification that list of calls has changed.
      RIL_CALL_LIST_CHANGED = 10;

      // Command sent to IMS Service. See ImsCommand.
      IMS_COMMAND = 11;

      // Command sent to IMS Service. See ImsCommand.
      IMS_COMMAND_RECEIVED = 12;

      // Command sent to IMS Service. See ImsCommand.
      IMS_COMMAND_FAILED = 13;

      // Command sent to IMS Service. See ImsCommand.
      IMS_COMMAND_COMPLETE = 14;

      // Notification about incoming voice call
      IMS_CALL_RECEIVE = 15;

      // Notification that state of the call has changed
      IMS_CALL_STATE_CHANGED = 16;

      // Notification about IMS call termination
      IMS_CALL_TERMINATED = 17;

      // Notification that session access technology has changed
      IMS_CALL_HANDOVER = 18;

      // Notification that session access technology has changed
      IMS_CALL_HANDOVER_FAILED = 19;

      // Notification about phone state changed.
      PHONE_STATE_CHANGED = 20;

      // System time overwritten by NITZ (Network time)
      NITZ_TIME = 21;

      // Change of audio codec
      AUDIO_CODEC = 22;

      // Notification that the call quality has changed
      CALL_QUALITY_CHANGED = 23;
    }

    enum RilRequest {

      RIL_REQUEST_UNKNOWN = 0;

      // Initiate voice call
      RIL_REQUEST_DIAL = 1;

      // Answer incoming call
      RIL_REQUEST_ANSWER = 2;

      // Hang up a specific line
      RIL_REQUEST_HANGUP = 3;

      // Configure current call waiting state
      RIL_REQUEST_SET_CALL_WAITING = 4;

      RIL_REQUEST_SWITCH_HOLDING_AND_ACTIVE = 5;

      // Send FLASH
      RIL_REQUEST_CDMA_FLASH = 6;

      // Conference holding and active
      RIL_REQUEST_CONFERENCE = 7;
    }

    enum ImsCommand {

      // Command is unknown.
      IMS_CMD_UNKNOWN = 0;

      IMS_CMD_START = 1;

      IMS_CMD_ACCEPT = 2;

      IMS_CMD_REJECT = 3;

      IMS_CMD_TERMINATE = 4;

      IMS_CMD_HOLD = 5;

      IMS_CMD_RESUME = 6;

      IMS_CMD_MERGE = 7;

      IMS_CMD_UPDATE = 8;

      IMS_CMD_CONFERENCE_EXTEND = 9;

      IMS_CMD_INVITE_PARTICIPANT = 10;

      IMS_CMD_REMOVE_PARTICIPANT = 11;
    }

    enum PhoneState {

      // State is unknown.
      STATE_UNKNOWN = 0;

      STATE_IDLE = 1;

      STATE_RINGING = 2;

      STATE_OFFHOOK = 3;
    }

    // Telephony call states
    enum CallState {

      // State is unknown.
      CALL_UNKNOWN = 0;

      CALL_IDLE = 1;

      CALL_ACTIVE = 2;

      CALL_HOLDING = 3;

      CALL_DIALING = 4;

      CALL_ALERTING = 5;

      CALL_INCOMING = 6;

      CALL_WAITING = 7;

      CALL_DISCONNECTED = 8;

      CALL_DISCONNECTING = 9;
    }

    // Audio codecs
    enum AudioCodec {

      // Unknown codec
      AUDIO_CODEC_UNKNOWN = 0;

      AUDIO_CODEC_AMR = 1;

      AUDIO_CODEC_AMR_WB = 2;

      AUDIO_CODEC_QCELP13K = 3;

      AUDIO_CODEC_EVRC = 4;

      AUDIO_CODEC_EVRC_B = 5;

      AUDIO_CODEC_EVRC_WB = 6;

      AUDIO_CODEC_EVRC_NW = 7;

      AUDIO_CODEC_GSM_EFR = 8;

      AUDIO_CODEC_GSM_FR = 9;

      AUDIO_CODEC_GSM_HR = 10;

      AUDIO_CODEC_G711U = 11;

      AUDIO_CODEC_G723 = 12;

      AUDIO_CODEC_G711A = 13;

      AUDIO_CODEC_G722 = 14;

      AUDIO_CODEC_G711AB = 15;

      AUDIO_CODEC_G729 = 16;

      AUDIO_CODEC_EVS_NB = 17;

      AUDIO_CODEC_EVS_WB = 18;

      AUDIO_CODEC_EVS_SWB = 19;

      AUDIO_CODEC_EVS_FB = 20;
    }

    // The information about a voice call
    message RilCall {

      enum Type {

        // Scan Type is unknown.
        UNKNOWN = 0;

        // Mobile originated
        MO = 1;

        // Mobile terminated
        MT = 2;
      }

      // Connection Index
      optional int32 index = 1;

      optional CallState state = 2;

      optional Type type = 3;

      // For possible values for a call end reason check
      // frameworks/base/telephony/java/android/telephony/DisconnectCause.java
      optional int32 call_end_reason = 4;

      // This field is true for Conference Calls
      optional bool is_multiparty = 5;

      // Detailed cause code for CS Call failures
      // frameworks/base/telephony/java/android/telephony/PreciseDisconnectCause.java
      optional int32 precise_disconnect_cause = 6;

      // Indicate if the call is an emergency call
      optional bool is_emergency_call = 7;

      // Indicate the emergency call information dialed from the CS call
      optional EmergencyNumberInfo emergency_number_info = 8;
    }

    // Single Radio Voice Call Continuity(SRVCC) progress state
    enum RilSrvccState {

      // State is unknown.
      HANDOVER_UNKNOWN = 0;

      HANDOVER_STARTED = 1;

      HANDOVER_COMPLETED = 2;

      HANDOVER_FAILED = 3;

      HANDOVER_CANCELED = 4;
    }

    message SignalStrength {

      // signal to noise ratio for LTE signal strength
      optional int32 lte_snr = 1;

      // in the future we may include more measures of signal strength, or
      // measurements for other RATs
    }

    // CallQuality information. (This proto class corresponds to
    // android.telephony.CallQuality)
    message CallQuality {

      enum CallQualityLevel {

        // leaving the first value explicitly as unspecified avoids breaking
        // clients if the desired default behavior changes
        UNDEFINED = 0;

        EXCELLENT = 1;

        GOOD = 2;

        FAIR = 3;

        POOR = 4;

        BAD = 5;

        // this typically indicates a failure in the modem
        NOT_AVAILABLE = 6;
      }

      // the downlink CallQualityLevel for a given ongoing call
      optional CallQualityLevel downlink_level = 1;

      // the uplink CallQualityLevel for a given ongoing call
      optional CallQualityLevel uplink_level = 2;

      // the duration of the call, in seconds
      optional int32 duration_in_seconds = 3;

      // the total number of RTP packets transmitted by this device for an
      // ongoing call
      optional int32 rtp_packets_transmitted = 4;

      // the total number of RTP packets received by this device for an ongoing
      // call
      optional int32 rtp_packets_received = 5;

      // the number of RTP packets which were sent by this device but were lost
      // in the network before reaching the other party
      optional int32 rtp_packets_transmitted_lost = 6;

      // the number of RTP packets which were sent by the other party but were
      // lost in the network before reaching this device
      optional int32 rtp_packets_not_received = 7;

      // the average relative jitter in milliseconds. Jitter represents the
      // amount of variance in interarrival time of packets, for example, if two
      // packets are sent 2 milliseconds apart but received 3 milliseconds
      // apart, the relative jitter between those packets is 1 millisecond.
      //
      // See RFC 3550 for more information on jitter calculations
      optional int32 average_relative_jitter_millis = 8;

      // the maximum relative jitter for a given ongoing call. Jitter represents
      // the amount of variance in interarrival time of packets, for example, if
      // two packets are sent 2 milliseconds apart but received 3 milliseconds
      // apart, the relative jitter between those packets is 1 millisecond.
      //
      // See RFC 3550 for more information on jitter calculations.
      optional int32 max_relative_jitter_millis = 9;

      // the average round trip time of RTP packets in an ongoing call, in milliseconds
      optional int32 average_round_trip_time = 10;

      // the codec type of an ongoing call
      optional AudioCodec codec_type = 11;
    }

    message CallQualitySummary {

      // Total duration of good call quality reported at the end of a call
      optional int32 total_good_quality_duration_in_seconds = 1;

      // Total duration of bad call quality reported at the end of a call
      optional int32 total_bad_quality_duration_in_seconds = 2;

      // Total duration of the call for which we have call quality
      // information, reported at the end of a call. For example, if an IMS call
      // is converted to a CS call, which doesn't report call quality information,
      // this value is the duration of the IMS component.
      optional int32 total_duration_with_quality_information_in_seconds = 3;

      // Snapshot of the CallQuality when signal strength is worst within good
      // quality section
      optional CallQuality snapshot_of_worst_ss_with_good_quality = 4;

      // Snapshot of the CallQuality when signal strength is best within good
      // quality section
      optional CallQuality snapshot_of_best_ss_with_good_quality = 5;

      // Snapshot of the CallQuality when signal strength is worst within bad
      // quality section
      optional CallQuality snapshot_of_worst_ss_with_bad_quality = 6;

      // Snapshot of the CallQuality when signal strength is best within bad
      // quality section
      optional CallQuality snapshot_of_best_ss_with_bad_quality = 7;

      // The worst SignalStrength in any good quality section
      optional SignalStrength worst_ss_with_good_quality = 8;

      // The best SignalStrength in any good quality section
      optional SignalStrength best_ss_with_good_quality = 9;

      // The worst SignalStrength in any bad quality section
      optional SignalStrength worst_ss_with_bad_quality = 10;

      // The best SignalStrength in any bad quality section
      optional SignalStrength best_ss_with_bad_quality = 11;

      // Snapshot of the CallQuality at the end of a call. This includes
      // cumulative statistics like total duration and total RTP packets.
      optional CallQuality snapshot_of_end = 12;

    }

    // Event type
    optional Type type = 1;

    // Time since previous event
    optional TimeInterval delay = 2;

    // Settings at the beginning of the session or when changed
    optional TelephonySettings settings = 3;

    // State at the beginning of the session or when changed
    optional TelephonyServiceState service_state = 4;

    // State at the beginning of the session or when changed
    optional ImsConnectionState ims_connection_state = 5;

    // Capabilities at the beginning of the session or when changed
    optional ImsCapabilities ims_capabilities = 6;

    // List of data calls at the beginning of the session or when changed
    repeated RilDataCall data_calls = 7;

    // New state
    optional PhoneState phone_state = 8;

    // New state
    optional CallState call_state = 9;

    // CS or IMS Voice call index
    optional int32 call_index = 10;

    // New merged call
    optional int32 merged_call_index = 11;

    // Active CS Voice calls
    repeated RilCall calls = 12;

    // RIL error code
    optional RilErrno error = 13;

    // RIL request
    optional RilRequest ril_request = 14;

    // Numeric ID
    optional int32 ril_request_id = 15;

    // New SRVCC state
    optional RilSrvccState srvcc_state = 16;

    // IMS command
    optional ImsCommand ims_command = 17;

    // IMS Failure reason
    optional ImsReasonInfo reason_info = 18;

    // Original access technology
    optional RadioAccessTechnology src_access_tech = 19 [default = UNKNOWN];

    // New access technology
    optional RadioAccessTechnology target_access_tech = 20 [default = UNKNOWN];

    // NITZ time in milliseconds
    optional int64 nitz_timestamp_millis = 21;

    // Audio codec at the beginning of the session or when changed
    optional AudioCodec audio_codec = 22;

    // Call quality when changed
    optional CallQuality call_quality = 23;

    // Downlink call quality summary at the end of a call
    optional CallQualitySummary call_quality_summary_dl = 24;

    // Uplink call quality summary at the end of a call
    optional CallQualitySummary call_quality_summary_ul = 25;

    // Indicate if it is IMS emergency call
    optional bool is_ims_emergency_call = 26;

    // Emergency call info
    optional EmergencyNumberInfo ims_emergency_number_info = 27;
  }

  // Time when call has started, in minutes since epoch,
  // with 5 minutes precision
  optional int32 start_time_minutes = 1;

  // In Multi-SIM devices this indicates SIM slot
  optional int32 phone_id = 2;

  // List of events happened during the call
  repeated Event events = 3;

  // Indicating some call events are dropped
  optional bool events_dropped = 4;
}

message SmsSession {

  message Event {

    enum Type {

      // Unknown event
      EVENT_UNKNOWN = 0;

      // Telephony related user settings changed
      SETTINGS_CHANGED = 1;

      // Phone state changed
      RIL_SERVICE_STATE_CHANGED = 2;

      // IMS connected/disconnected
      IMS_CONNECTION_STATE_CHANGED = 3;

      // IMS Voice, Video and Ut capabilities changed
      IMS_CAPABILITIES_CHANGED = 4;

      // Notification that new data call has appeared in the list
      // or old data call has removed.
      DATA_CALL_LIST_CHANGED = 5;

      // Send a SMS message over RIL
      SMS_SEND = 6;

      // Message has been sent to network using RIL
      SMS_SEND_RESULT = 7;

      // Notification about received SMS using RIL
      SMS_RECEIVED = 8;

      // CB message received
      CB_SMS_RECEIVED = 9;

      // Incomplete multipart message received
      INCOMPLETE_SMS_RECEIVED = 10;
    }

    // Formats used to encode SMS messages
    enum Format {

      // State is unknown.
      SMS_FORMAT_UNKNOWN = 0;

      // GSM, WCDMA
      SMS_FORMAT_3GPP = 1;

      // CDMA
      SMS_FORMAT_3GPP2 = 2;
    }

    enum Tech {
      SMS_UNKNOWN = 0;

      SMS_GSM = 1;

      SMS_CDMA = 2;

      SMS_IMS = 3;
    }

    message CBMessage {
      // CB message format
      optional Format msg_format = 1;

      // CB message priority
      optional CBPriority msg_priority = 2;

      // Type of CB msg
      optional CBMessageType msg_type = 3;

      // Service category of CB message
      optional int32 service_category = 4;

      // Message's serial number
      optional int32 serial_number = 5;

      // The delivered time (UTC) of the message
      optional int64 delivered_timestamp_millis = 6;
    }

    enum CBMessageType {
      // Unknown type
      TYPE_UNKNOWN = 0;

      // ETWS CB msg
      ETWS = 1;

      // CMAS CB msg
      CMAS = 2;

      // CB msg other than ETWS and CMAS
      OTHER = 3;
    }

    enum CBPriority {
      // Unknown priority
      PRIORITY_UNKNOWN = 0;

      // NORMAL priority
      NORMAL = 1;

      // Interactive priority
      INTERACTIVE = 2;

      // Urgent priority
      URGENT = 3;

      // Emergency priority
      EMERGENCY = 4;
    }

    // Types of SMS messages
    enum SmsType {

      // Normal type
      SMS_TYPE_NORMAL = 0;

      // SMS-PP.
      SMS_TYPE_SMS_PP = 1;

      // Voicemail indication
      SMS_TYPE_VOICEMAIL_INDICATION = 2;

      // Type 0 message (3GPP TS 23.040 9.2.3.9)
      SMS_TYPE_ZERO = 3;

      // WAP-PUSH message
      SMS_TYPE_WAP_PUSH = 4;
    }

    message IncompleteSms {
      // Number of received parts
      optional int32 received_parts = 1;

      // Number of expected parts
      optional int32 total_parts = 2;
    }

    // Event type
    optional Type type = 1;

    // Time since previous event
    optional TimeInterval delay = 2;

    // Settings at the beginning of the session or when changed
    optional TelephonySettings settings = 3;

    // State at the beginning of the session or when changed
    optional TelephonyServiceState service_state = 4;

    // State at the beginning of the session or when changed
    optional ImsConnectionState ims_connection_state = 5;

    // Capabilities at the beginning of the session or when changed
    optional ImsCapabilities ims_capabilities = 6;

    // List of data calls at the beginning of the session or when changed
    repeated RilDataCall data_calls = 7;

    // Format of the message
    optional Format format = 8;

    // Technology used to send/receive SMS
    optional Tech tech = 9;

    // For outgoing SMS:
    //  - See 3GPP 27.005, 3.2.5 for GSM/UMTS,
    //  - 3GPP2 N.S0005 (IS-41C) Table 171 for CDMA,
    // For incoming SMS of any type:
    //  - it is mapped to a SmsManager.RESULT_* code
    // SmsManager can be accessed from
    // frameworks/base/telephony/java/android/telephony/SmsManager.java
    optional int32 error_code = 10;

    // RIL error code - Not used.
    optional RilErrno error = 11;

    // Numeric ID - Used only for outgoing SMS
    optional int32 ril_request_id = 12;

    // Cellbroadcast message content
    optional CBMessage cell_broadcast_message = 13;

    // ImsService error code. Used only for outgoing SMS
    optional ImsServiceErrno ims_error = 14;

    // Details of incoming incomplete multipart SMS
    optional IncompleteSms incomplete_sms = 15;

    // Indicate the type of incoming SMS
    optional SmsType sms_type = 16;

    // Indicates if the incoming SMS was blocked
    optional bool blocked = 17;
  }

  // Time when session has started, in minutes since epoch,
  // with 5 minutes precision
  optional int32 start_time_minutes = 1;

  // In Multi-SIM devices this indicates SIM slot
  optional int32 phone_id = 2;

  // List of events happened during the call
  repeated Event events = 3;

  // Indicating some sms session events are dropped
  optional bool events_dropped = 4;
}

// Power stats for modem
message ModemPowerStats {

  // Duration of log (ms). This is the duration of time device is
  // on battery and modem power stats are collected.
  optional int64 logging_duration_ms = 1;

  // Energy consumed by modem (mAh)
  optional double energy_consumed_mah = 2;

  // Number of packets sent (tx)
  optional int64 num_packets_tx = 3;

  // Amount of time kernel is active because of cellular data (ms)
  optional int64 cellular_kernel_active_time_ms = 4;

  // Amount of time spent in very poor rx signal level (ms)
  optional int64 time_in_very_poor_rx_signal_level_ms = 5;

  // Amount of time modem is in sleep (ms)
  optional int64 sleep_time_ms = 6;

  // Amount of time modem is in idle (ms)
  optional int64 idle_time_ms = 7;

  // Amount of time modem is in rx (ms)
  optional int64 rx_time_ms = 8;

  // Amount of time modem is in tx (ms)
  repeated int64 tx_time_ms = 9;

  // Number of bytes sent (tx)
  optional int64 num_bytes_tx = 10;

  // Number of packets received (rx)
  optional int64 num_packets_rx = 11;

  // Number of bytes received (rx)
  optional int64 num_bytes_rx = 12;

  // Amount of time phone spends in various Radio Access Technologies (ms)
  repeated int64 time_in_rat_ms = 13;

  // Amount of time phone spends in various cellular
  // rx signal strength levels (ms)
  repeated int64 time_in_rx_signal_strength_level_ms = 14;

  // Actual monitored rail energy consumed by modem (mAh)
  optional double monitored_rail_energy_consumed_mah = 15;
}
