/*
 * Copyright (C) 2018 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 android.telephony;

option java_outer_classname = "TelephonyProtoEnums";
option java_multiple_files = true;

// Data conn. power states, primarily used by android/telephony/DataConnectionRealTimeInfo.java.
enum DataConnectionPowerStateEnum {
    DATA_CONNECTION_POWER_STATE_LOW = 1;
    DATA_CONNECTION_POWER_STATE_MEDIUM = 2;
    DATA_CONNECTION_POWER_STATE_HIGH = 3;
    DATA_CONNECTION_POWER_STATE_UNKNOWN = 2147483647; // Java Integer.MAX_VALUE;
}

// Network type enums, primarily used by android/telephony/TelephonyManager.java.
// Do not add negative types.
enum NetworkTypeEnum {
    NETWORK_TYPE_UNKNOWN = 0;
    NETWORK_TYPE_GPRS = 1;
    NETWORK_TYPE_EDGE = 2;
    NETWORK_TYPE_UMTS = 3;
    NETWORK_TYPE_CDMA = 4;
    NETWORK_TYPE_EVDO_0 = 5;
    NETWORK_TYPE_EVDO_A = 6;
    NETWORK_TYPE_1XRTT = 7;
    NETWORK_TYPE_HSDPA = 8;
    NETWORK_TYPE_HSUPA = 9;
    NETWORK_TYPE_HSPA = 10;
    NETWORK_TYPE_IDEN = 11;
    NETWORK_TYPE_EVDO_B = 12;
    NETWORK_TYPE_LTE = 13;
    NETWORK_TYPE_EHRPD = 14;
    NETWORK_TYPE_HSPAP = 15;
    NETWORK_TYPE_GSM = 16;
    NETWORK_TYPE_TD_SCDMA = 17;
    NETWORK_TYPE_IWLAN = 18;
    NETWORK_TYPE_LTE_CA = 19;
}

// Signal strength levels, primarily used by android/telephony/SignalStrength.java.
enum SignalStrengthEnum {
    SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
    SIGNAL_STRENGTH_POOR = 1;
    SIGNAL_STRENGTH_MODERATE = 2;
    SIGNAL_STRENGTH_GOOD = 3;
    SIGNAL_STRENGTH_GREAT = 4;
}


enum ServiceStateEnum {
    /**
     * Normal operation condition, the phone is registered
     * with an operator either in home network or in roaming.
     */
    SERVICE_STATE_IN_SERVICE = 0;

    /**
     * Phone is not registered with any operator, the phone
     * can be currently searching a new operator to register to, or not
     * searching to registration at all, or registration is denied, or radio
     * signal is not available.
     */
    SERVICE_STATE_OUT_OF_SERVICE = 1;

    /**
     * The phone is registered and locked.  Only emergency numbers are allowed. {@more}
     */
    SERVICE_STATE_EMERGENCY_ONLY = 2;

    /**
     * Radio of telephony is explicitly powered off.
     */
    SERVICE_STATE_POWER_OFF = 3;
}

enum SimStateEnum {
    SIM_STATE_UNKNOWN = 0;
    /** SIM card state: no SIM card is available in the device */
    SIM_STATE_ABSENT = 1;
    /** SIM card state: Locked: requires the user's SIM PIN to unlock */
    SIM_STATE_PIN_REQUIRED = 2;
    /** SIM card state: Locked: requires the user's SIM PUK to unlock */
    SIM_STATE_PUK_REQUIRED = 3;
    /** SIM card state: Locked: requires a network PIN to unlock */
    SIM_STATE_NETWORK_LOCKED = 4;
    /** SIM card state: Ready */
    SIM_STATE_READY = 5;
    /** SIM card state: SIM Card is NOT READY */
    SIM_STATE_NOT_READY = 6;
    /** SIM card state: SIM Card Error, permanently disabled */
    SIM_STATE_PERM_DISABLED = 7;
    /** SIM card state: SIM Card Error, present but faulty */
    SIM_STATE_CARD_IO_ERROR = 8;
    /** SIM card state: SIM Card restricted, present but not usable due to
     * carrier restrictions.
     */
    SIM_STATE_CARD_RESTRICTED = 9;
    /**
     * SIM card state: Loaded: SIM card applications have been loaded
     * @hide
     */
    SIM_STATE_LOADED = 10;
    /**
     * SIM card state: SIM Card is present
     * @hide
     */
    SIM_STATE_PRESENT = 11;
}
