1e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville/*
2b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Copyright (C) 2012 The Android Open Source Project
3e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville *
4e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * you may not use this file except in compliance with the License.
6e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * You may obtain a copy of the License at
7e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville *
8e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville *
10e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Unless required by applicable law or agreed to in writing, software
11e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * See the License for the specific language governing permissions and
14e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * limitations under the License.
15e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */
16e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
17e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savillepackage android.telephony;
18e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
19e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.os.Bundle;
20e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.os.Parcel;
21e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.os.Parcelable;
2222b1e80c24c5fbd702a19f2511ee2897baaf3e98Wink Savilleimport android.telephony.Rlog;
23e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
24e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville/**
25e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Contains phone signal strength related information.
26e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */
27e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savillepublic class SignalStrength implements Parcelable {
28e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
295284090631e638b916d9a453212e9dc802656a67Wink Saville    private static final String LOG_TAG = "SignalStrength";
30432139b5c3bcbb3762fb7de1717e816d2b7c90f0Robert Greenwalt    private static final boolean DBG = false;
315284090631e638b916d9a453212e9dc802656a67Wink Saville
325284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
335284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
345284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
355284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_POOR = 1;
365284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
375284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_MODERATE = 2;
385284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
395284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_GOOD = 3;
405284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
415284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_GREAT = 4;
425284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
435284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
445284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
455284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final String[] SIGNAL_STRENGTH_NAMES = {
465284090631e638b916d9a453212e9dc802656a67Wink Saville        "none", "poor", "moderate", "good", "great"
475284090631e638b916d9a453212e9dc802656a67Wink Saville    };
48e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
495e39519396918f9e2312d1c355a9b6889851d887John Wang    /** @hide */
50a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    //Use int max, as -1 is a valid value in signal strength
51a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public static final int INVALID = 0x7FFFFFFF;
525e39519396918f9e2312d1c355a9b6889851d887John Wang
53e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
54e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mGsmBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
55e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mCdmaDbm;   // This value is the RSSI value
56e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mCdmaEcio;  // This value is the Ec/Io
57e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoDbm;   // This value is the EVDO RSSI value
58e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoEcio;  // This value is the EVDO Ec/Io
59e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoSnr;   // Valid values are 0-8.  8 is the highest signal to noise ratio
605284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteSignalStrength;
615284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRsrp;
625284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRsrq;
635284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRssnr;
645284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteCqi;
65e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
66e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult
672900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
68e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
69e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Create a new SignalStrength from a intent notifier Bundle
70e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
71e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * This method is used by PhoneStateIntentReceiver and maybe by
72e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * external applications.
73e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
74e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m Bundle from intent notifier
75e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @return newly created SignalStrength
76e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
77cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
78e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
79e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public static SignalStrength newFromBundle(Bundle m) {
80e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        SignalStrength ret;
81e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ret = new SignalStrength();
82e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ret.setFromNotifierBundle(m);
83e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return ret;
84e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
85e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
86e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
87e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Empty constructor
88e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
89cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
90e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
91e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public SignalStrength() {
92e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = 99;
93e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = -1;
94e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = -1;
95e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = -1;
96e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = -1;
97e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = -1;
98e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = -1;
99a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = 99;
100a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = INVALID;
101a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = INVALID;
102a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = INVALID;
103a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteCqi = INVALID;
104e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = true;
105e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
106e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
107e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
108a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * This constructor is used to create SignalStrength with default
109a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * values and set the isGsmFlag with the value passed in the input
110e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
111a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @param gsmFlag true if Gsm Phone,false if Cdma phone
112a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @return newly created SignalStrength
113cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
114e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
115a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public SignalStrength(boolean gsmFlag) {
116a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmSignalStrength = 99;
117a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmBitErrorRate = -1;
118a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaDbm = -1;
119a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaEcio = -1;
120a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoDbm = -1;
121a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoEcio = -1;
122a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoSnr = -1;
123a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = 99;
124a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = INVALID;
125a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = INVALID;
126a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = INVALID;
127a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteCqi = INVALID;
128a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        isGsm = gsmFlag;
129e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
130e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
131e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
1325284090631e638b916d9a453212e9dc802656a67Wink Saville     * Constructor
1335284090631e638b916d9a453212e9dc802656a67Wink Saville     *
1345284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
1355284090631e638b916d9a453212e9dc802656a67Wink Saville     */
1365284090631e638b916d9a453212e9dc802656a67Wink Saville    public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
1375284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaDbm, int cdmaEcio,
1385284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
139b208a24cf521401912cfce16fce550a995cf1250Wink Saville            int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
1402900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsmFlag) {
1412900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1422900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
1432900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                lteRsrq, lteRssnr, lteCqi, gsmFlag);
1442900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1452900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1462900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1472900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Constructor
1482900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1492900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1502900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1512900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
1522900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
1532900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
1542900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsmFlag) {
1552900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1562900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, 99, INVALID,
1572900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                INVALID, INVALID, INVALID, gsmFlag);
1582900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1612900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Copy constructors
1622900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1632900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param s Source SignalStrength
1642900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1652900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1662900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1672900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public SignalStrength(SignalStrength s) {
1682900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        copyFrom(s);
1692900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1702900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1712900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1722900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Initialize gsm/cdma values, sets lte values to defaults.
1732900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1742900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmSignalStrength
1752900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmBitErrorRate
1762900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaDbm
1772900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaEcio
1782900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoDbm
1792900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoEcio
1802900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoSnr
1812900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsm
1822900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1832900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1842900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1852900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public void initialize(int gsmSignalStrength, int gsmBitErrorRate,
1862900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
1872900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
1882900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsm) {
1892900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1902900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, 99, INVALID,
1912900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                INVALID, INVALID, INVALID, gsm);
1922900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1932900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1942900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1952900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Initialize all the values
1962900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1972900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmSignalStrength
1982900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmBitErrorRate
1992900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaDbm
2002900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaEcio
2012900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoDbm
2022900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoEcio
2032900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoSnr
2042900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteSignalStrength
2052900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRsrp
2062900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRsrq
2072900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRssnr
2082900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteCqi
2092900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsm
2102900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
2112900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
2122900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
2132900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public void initialize(int gsmSignalStrength, int gsmBitErrorRate,
2142900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
2152900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
2162900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
217b208a24cf521401912cfce16fce550a995cf1250Wink Saville            boolean gsm) {
218b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mGsmSignalStrength = gsmSignalStrength;
219b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mGsmBitErrorRate = gsmBitErrorRate;
220b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = cdmaDbm;
221b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = cdmaEcio;
222b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = evdoDbm;
223b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = evdoEcio;
224b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = evdoSnr;
225b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteSignalStrength = lteSignalStrength;
226b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRsrp = lteRsrp;
227b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRsrq = lteRsrq;
228b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRssnr = lteRssnr;
229b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteCqi = lteCqi;
230b208a24cf521401912cfce16fce550a995cf1250Wink Saville        isGsm = gsm;
231b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("initialize: " + toString());
232b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
233b208a24cf521401912cfce16fce550a995cf1250Wink Saville
234b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
235e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
236e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
237e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    protected void copyFrom(SignalStrength s) {
238e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = s.mGsmSignalStrength;
239e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = s.mGsmBitErrorRate;
240e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = s.mCdmaDbm;
241e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = s.mCdmaEcio;
242e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = s.mEvdoDbm;
243e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = s.mEvdoEcio;
244e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = s.mEvdoSnr;
2455284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = s.mLteSignalStrength;
2465284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = s.mLteRsrp;
2475284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = s.mLteRsrq;
2485284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = s.mLteRssnr;
2495284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = s.mLteCqi;
250e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = s.isGsm;
251e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
252e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
253e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
254e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Construct a SignalStrength object from the given parcel.
255cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     *
256cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
257e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
258e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public SignalStrength(Parcel in) {
2592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        if (DBG) log("Size of signalstrength parcel:" + in.dataSize());
2602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
261e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = in.readInt();
262e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = in.readInt();
263e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = in.readInt();
264e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = in.readInt();
265e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = in.readInt();
266e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = in.readInt();
267e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = in.readInt();
2685284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = in.readInt();
2695284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = in.readInt();
2705284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = in.readInt();
2715284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = in.readInt();
2725284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = in.readInt();
273e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = (in.readInt() != 0);
274e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
275e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
276cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
277efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * Make a SignalStrength object from the given parcel as passed up by
278efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * the ril which does not have isGsm. isGsm will be changed by ServiceStateTracker
279efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * so the default is a don't care.
280efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     *
281efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * @hide
282efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     */
283efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    public static SignalStrength makeSignalStrengthFromRilParcel(Parcel in) {
284efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        if (DBG) log("Size of signalstrength parcel:" + in.dataSize());
285efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
286efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        SignalStrength ss = new SignalStrength();
287efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mGsmSignalStrength = in.readInt();
288efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mGsmBitErrorRate = in.readInt();
289efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mCdmaDbm = in.readInt();
290efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mCdmaEcio = in.readInt();
291efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoDbm = in.readInt();
292efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoEcio = in.readInt();
293efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoSnr = in.readInt();
294efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteSignalStrength = in.readInt();
295efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRsrp = in.readInt();
296efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRsrq = in.readInt();
297efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRssnr = in.readInt();
298efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteCqi = in.readInt();
299efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
300efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        return ss;
301efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    }
302efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
303efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    /**
304cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable#writeToParcel}
305cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
306e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void writeToParcel(Parcel out, int flags) {
307e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mGsmSignalStrength);
308e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mGsmBitErrorRate);
309e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mCdmaDbm);
310e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mCdmaEcio);
311e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoDbm);
312e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoEcio);
313e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoSnr);
3145284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteSignalStrength);
3155284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRsrp);
3165284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRsrq);
3175284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRssnr);
3185284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteCqi);
319e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(isGsm ? 1 : 0);
320e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
321e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
322cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
323cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable#describeContents}
324cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
325e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int describeContents() {
326e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return 0;
327e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
328e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
329cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
330cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable.Creator}
331cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     *
332cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
333cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
335e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        public SignalStrength createFromParcel(Parcel in) {
336e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return new SignalStrength(in);
337e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
338e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
339e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        public SignalStrength[] newArray(int size) {
340e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return new SignalStrength[size];
341e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
342e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    };
343e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
344e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
345a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Validate the individual signal strength fields as per the range
346a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * specified in ril.h
347a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Set to invalid any field that is not in the valid range
348a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Cdma, evdo, lte rsrp & rsrq values are sign converted
349a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * when received from ril interface
350a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *
351a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @return
352a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *      Valid values for all signalstrength fields
353a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @hide
354a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     */
355a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public void validateInput() {
356a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("Signal before validate=" + this);
357a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // TS 27.007 8.5
358a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmSignalStrength = mGsmSignalStrength >= 0 ? mGsmSignalStrength : 99;
359a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // BER no change;
360a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
361a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
362a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaEcio = (mCdmaEcio > 0) ? -mCdmaEcio : -160;
363a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
364a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoDbm = (mEvdoDbm > 0) ? -mEvdoDbm : -120;
3658ab862cbd4eeeb52ab921a555b7a006e89fd2abcBanavathu, Srinivas Naik        mEvdoEcio = (mEvdoEcio >= 0) ? -mEvdoEcio : -1;
366a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoSnr = ((mEvdoSnr > 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
367a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
368a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
369a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
370a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = ((mLteRsrp >= 44) && (mLteRsrp <= 140)) ? -mLteRsrp : SignalStrength.INVALID;
371a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
372a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = ((mLteRssnr >= -200) && (mLteRssnr <= 300)) ? mLteRssnr
373a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                : SignalStrength.INVALID;
374a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // Cqi no change
375a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("Signal after validate=" + this);
376a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
377a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
378a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    /**
379a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @param true - Gsm, Lte phones
380a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *        false - Cdma phones
381a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *
382a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Used by voice phone to set the isGsm
383a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *        flag
384a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @hide
385a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     */
386a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public void setGsm(boolean gsmFlag) {
387a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        isGsm = gsmFlag;
388a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
389a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
390a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    /**
391a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS
392a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * 27.007 8.5
393e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
394e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getGsmSignalStrength() {
395e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mGsmSignalStrength;
396e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
397e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
398e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
399e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5
400e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
401e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getGsmBitErrorRate() {
402e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mGsmBitErrorRate;
403e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
404e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
405e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
406e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the CDMA RSSI value in dBm
407e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
408e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaDbm() {
409e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mCdmaDbm;
410e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
411e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
412e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
413e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the CDMA Ec/Io value in dB*10
414e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
415e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaEcio() {
416e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mCdmaEcio;
417e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
418e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
419e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
420e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the EVDO RSSI value in dBm
421e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
422e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoDbm() {
423e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoDbm;
424e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
425e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
426e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
427e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the EVDO Ec/Io value in dB*10
428e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
429e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoEcio() {
430e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoEcio;
431e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
432e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
433e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
434e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest.
435e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
436e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoSnr() {
437e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoSnr;
438e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
439e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
4402900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
44129c8b00f14675aa35ef44a58a60947f477247a1aWink Saville    public int getLteSignalStrength() {
4422900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteSignalStrength;
4432900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4442900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4452900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4462900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRsrp() {
4472900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRsrp;
4482900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4492900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4502900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4512900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRsrq() {
4522900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRsrq;
4532900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4542900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4552900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4562900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRssnr() {
4572900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRssnr;
4582900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4612900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteCqi() {
4622900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteCqi;
4632900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4642900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
465e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
4665284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get signal level as an int from 0..4
4675284090631e638b916d9a453212e9dc802656a67Wink Saville     *
4685284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
4695284090631e638b916d9a453212e9dc802656a67Wink Saville     */
4705284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLevel() {
4715284090631e638b916d9a453212e9dc802656a67Wink Saville        int level;
4725284090631e638b916d9a453212e9dc802656a67Wink Saville
4735284090631e638b916d9a453212e9dc802656a67Wink Saville        if (isGsm) {
474a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            level = getLteLevel();
475a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4765284090631e638b916d9a453212e9dc802656a67Wink Saville                level = getGsmLevel();
4775284090631e638b916d9a453212e9dc802656a67Wink Saville            }
4785284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
4795284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaLevel = getCdmaLevel();
4805284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoLevel = getEvdoLevel();
4815284090631e638b916d9a453212e9dc802656a67Wink Saville            if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4825284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know evdo, use cdma */
483a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                level = cdmaLevel;
4845284090631e638b916d9a453212e9dc802656a67Wink Saville            } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4855284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know cdma, use evdo */
486a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                level = evdoLevel;
4875284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
4885284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We know both, use the lowest level */
4895284090631e638b916d9a453212e9dc802656a67Wink Saville                level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
4905284090631e638b916d9a453212e9dc802656a67Wink Saville            }
4915284090631e638b916d9a453212e9dc802656a67Wink Saville        }
4925284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getLevel=" + level);
4935284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
4945284090631e638b916d9a453212e9dc802656a67Wink Saville    }
4955284090631e638b916d9a453212e9dc802656a67Wink Saville
4965284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
4975284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the signal level as an asu value between 0..31, 99 is unknown
4985284090631e638b916d9a453212e9dc802656a67Wink Saville     *
4995284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5005284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5015284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getAsuLevel() {
5025284090631e638b916d9a453212e9dc802656a67Wink Saville        int asuLevel;
5035284090631e638b916d9a453212e9dc802656a67Wink Saville        if (isGsm) {
504a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            if (getLteLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
5055284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = getGsmAsuLevel();
5065284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
5075284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = getLteAsuLevel();
5085284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5095284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
5105284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaAsuLevel = getCdmaAsuLevel();
5115284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoAsuLevel = getEvdoAsuLevel();
5125284090631e638b916d9a453212e9dc802656a67Wink Saville            if (evdoAsuLevel == 0) {
5135284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know evdo use, cdma */
5145284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = cdmaAsuLevel;
5155284090631e638b916d9a453212e9dc802656a67Wink Saville            } else if (cdmaAsuLevel == 0) {
5165284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know cdma use, evdo */
5175284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = evdoAsuLevel;
5185284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
5195284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We know both, use the lowest level */
5205284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = cdmaAsuLevel < evdoAsuLevel ? cdmaAsuLevel : evdoAsuLevel;
5215284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5225284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5235284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getAsuLevel=" + asuLevel);
5245284090631e638b916d9a453212e9dc802656a67Wink Saville        return asuLevel;
5255284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5265284090631e638b916d9a453212e9dc802656a67Wink Saville
5275284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5285284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the signal strength as dBm
5295284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5305284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5315284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5325284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getDbm() {
5335284090631e638b916d9a453212e9dc802656a67Wink Saville        int dBm;
5345284090631e638b916d9a453212e9dc802656a67Wink Saville
5355284090631e638b916d9a453212e9dc802656a67Wink Saville        if(isGsm()) {
536a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            if (getLteLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
5375284090631e638b916d9a453212e9dc802656a67Wink Saville                dBm = getGsmDbm();
5385284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
5395284090631e638b916d9a453212e9dc802656a67Wink Saville                dBm = getLteDbm();
5405284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5415284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
542a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            int cdmaDbm = getCdmaDbm();
543a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            int evdoDbm = getEvdoDbm();
544a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
545a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            return (evdoDbm == -120) ? cdmaDbm : ((cdmaDbm == -120) ? evdoDbm
546a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                    : (cdmaDbm < evdoDbm ? cdmaDbm : evdoDbm));
5475284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5485284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getDbm=" + dBm);
5495284090631e638b916d9a453212e9dc802656a67Wink Saville        return dBm;
5505284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5515284090631e638b916d9a453212e9dc802656a67Wink Saville
5525284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5535284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get Gsm signal strength as dBm
5545284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5555284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5565284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5575284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmDbm() {
5585284090631e638b916d9a453212e9dc802656a67Wink Saville        int dBm;
5595284090631e638b916d9a453212e9dc802656a67Wink Saville
5605284090631e638b916d9a453212e9dc802656a67Wink Saville        int gsmSignalStrength = getGsmSignalStrength();
5615284090631e638b916d9a453212e9dc802656a67Wink Saville        int asu = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength);
5625284090631e638b916d9a453212e9dc802656a67Wink Saville        if (asu != -1) {
5635284090631e638b916d9a453212e9dc802656a67Wink Saville            dBm = -113 + (2 * asu);
5645284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
5655284090631e638b916d9a453212e9dc802656a67Wink Saville            dBm = -1;
5665284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5675284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmDbm=" + dBm);
5685284090631e638b916d9a453212e9dc802656a67Wink Saville        return dBm;
5695284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5705284090631e638b916d9a453212e9dc802656a67Wink Saville
5715284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5725284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get gsm as level 0..4
5735284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5745284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5755284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5765284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmLevel() {
5775284090631e638b916d9a453212e9dc802656a67Wink Saville        int level;
5785284090631e638b916d9a453212e9dc802656a67Wink Saville
5795284090631e638b916d9a453212e9dc802656a67Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
5805284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 0 (-113dB or less) is very weak
5815284090631e638b916d9a453212e9dc802656a67Wink Saville        // signal, its better to show 0 bars to the user in such cases.
5825284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
5835284090631e638b916d9a453212e9dc802656a67Wink Saville        int asu = getGsmSignalStrength();
5845284090631e638b916d9a453212e9dc802656a67Wink Saville        if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
5855284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT;
5865284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 8)  level = SIGNAL_STRENGTH_GOOD;
5875284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 5)  level = SIGNAL_STRENGTH_MODERATE;
5885284090631e638b916d9a453212e9dc802656a67Wink Saville        else level = SIGNAL_STRENGTH_POOR;
5895284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmLevel=" + level);
5905284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
5915284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5925284090631e638b916d9a453212e9dc802656a67Wink Saville
5935284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5945284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the gsm signal level as an asu value between 0..31, 99 is unknown
5955284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5965284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5975284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5985284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmAsuLevel() {
5995284090631e638b916d9a453212e9dc802656a67Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
6005284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 0 (-113dB or less) is very weak
6015284090631e638b916d9a453212e9dc802656a67Wink Saville        // signal, its better to show 0 bars to the user in such cases.
6025284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
6035284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = getGsmSignalStrength();
6045284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmAsuLevel=" + level);
6055284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6065284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6075284090631e638b916d9a453212e9dc802656a67Wink Saville
6085284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6095284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get cdma as level 0..4
6105284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6115284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6125284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6135284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getCdmaLevel() {
6145284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaDbm = getCdmaDbm();
6155284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaEcio = getCdmaEcio();
6165284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelDbm;
6175284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEcio;
6185284090631e638b916d9a453212e9dc802656a67Wink Saville
6195284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;
6205284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;
6215284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;
6225284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;
6235284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6245284090631e638b916d9a453212e9dc802656a67Wink Saville
6255284090631e638b916d9a453212e9dc802656a67Wink Saville        // Ec/Io are in dB*10
6265284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;
6275284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;
6285284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;
6295284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;
6305284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6315284090631e638b916d9a453212e9dc802656a67Wink Saville
6325284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;
6335284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getCdmaLevel=" + level);
6345284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6355284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6365284090631e638b916d9a453212e9dc802656a67Wink Saville
6375284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6385284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the cdma signal level as an asu value between 0..31, 99 is unknown
6395284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6405284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6415284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6425284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getCdmaAsuLevel() {
6435284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaDbm = getCdmaDbm();
6445284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaEcio = getCdmaEcio();
6455284090631e638b916d9a453212e9dc802656a67Wink Saville        int cdmaAsuLevel;
6465284090631e638b916d9a453212e9dc802656a67Wink Saville        int ecioAsuLevel;
6475284090631e638b916d9a453212e9dc802656a67Wink Saville
6485284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaDbm >= -75) cdmaAsuLevel = 16;
6495284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -82) cdmaAsuLevel = 8;
6505284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -90) cdmaAsuLevel = 4;
6515284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -95) cdmaAsuLevel = 2;
6525284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -100) cdmaAsuLevel = 1;
6535284090631e638b916d9a453212e9dc802656a67Wink Saville        else cdmaAsuLevel = 99;
6545284090631e638b916d9a453212e9dc802656a67Wink Saville
6555284090631e638b916d9a453212e9dc802656a67Wink Saville        // Ec/Io are in dB*10
6565284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaEcio >= -90) ecioAsuLevel = 16;
6575284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -100) ecioAsuLevel = 8;
6585284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -115) ecioAsuLevel = 4;
6595284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -130) ecioAsuLevel = 2;
6605284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -150) ecioAsuLevel = 1;
6615284090631e638b916d9a453212e9dc802656a67Wink Saville        else ecioAsuLevel = 99;
6625284090631e638b916d9a453212e9dc802656a67Wink Saville
6635284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (cdmaAsuLevel < ecioAsuLevel) ? cdmaAsuLevel : ecioAsuLevel;
6645284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getCdmaAsuLevel=" + level);
6655284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6665284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6675284090631e638b916d9a453212e9dc802656a67Wink Saville
6685284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6695284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get Evdo as level 0..4
6705284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6715284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6725284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6735284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getEvdoLevel() {
6745284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoDbm = getEvdoDbm();
6755284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoSnr = getEvdoSnr();
6765284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoDbm;
6775284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoSnr;
6785284090631e638b916d9a453212e9dc802656a67Wink Saville
6795284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoDbm >= -65) levelEvdoDbm = SIGNAL_STRENGTH_GREAT;
6805284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -75) levelEvdoDbm = SIGNAL_STRENGTH_GOOD;
6815284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -90) levelEvdoDbm = SIGNAL_STRENGTH_MODERATE;
6825284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -105) levelEvdoDbm = SIGNAL_STRENGTH_POOR;
6835284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6845284090631e638b916d9a453212e9dc802656a67Wink Saville
6855284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoSnr >= 7) levelEvdoSnr = SIGNAL_STRENGTH_GREAT;
6865284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 5) levelEvdoSnr = SIGNAL_STRENGTH_GOOD;
6875284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 3) levelEvdoSnr = SIGNAL_STRENGTH_MODERATE;
6885284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 1) levelEvdoSnr = SIGNAL_STRENGTH_POOR;
6895284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoSnr = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6905284090631e638b916d9a453212e9dc802656a67Wink Saville
6915284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
6925284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getEvdoLevel=" + level);
6935284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6945284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6955284090631e638b916d9a453212e9dc802656a67Wink Saville
6965284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6975284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the evdo signal level as an asu value between 0..31, 99 is unknown
6985284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6995284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7005284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7015284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getEvdoAsuLevel() {
7025284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoDbm = getEvdoDbm();
7035284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoSnr = getEvdoSnr();
7045284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoDbm;
7055284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoSnr;
7065284090631e638b916d9a453212e9dc802656a67Wink Saville
7075284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoDbm >= -65) levelEvdoDbm = 16;
7085284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -75) levelEvdoDbm = 8;
7095284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -85) levelEvdoDbm = 4;
7105284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -95) levelEvdoDbm = 2;
7115284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -105) levelEvdoDbm = 1;
7125284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoDbm = 99;
7135284090631e638b916d9a453212e9dc802656a67Wink Saville
7145284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoSnr >= 7) levelEvdoSnr = 16;
7155284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 6) levelEvdoSnr = 8;
7165284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 5) levelEvdoSnr = 4;
7175284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 3) levelEvdoSnr = 2;
7185284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 1) levelEvdoSnr = 1;
7195284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoSnr = 99;
7205284090631e638b916d9a453212e9dc802656a67Wink Saville
7215284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
7225284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getEvdoAsuLevel=" + level);
7235284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
7245284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7255284090631e638b916d9a453212e9dc802656a67Wink Saville
7265284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7275284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get LTE as dBm
7285284090631e638b916d9a453212e9dc802656a67Wink Saville     *
7295284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7305284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7315284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteDbm() {
7325d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        return mLteRsrp;
7335284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7345284090631e638b916d9a453212e9dc802656a67Wink Saville
7355284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7365284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get LTE as level 0..4
7375284090631e638b916d9a453212e9dc802656a67Wink Saville     *
7385284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7395284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7405284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteLevel() {
741a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
742a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * TS 36.214 Physical Layer Section 5.1.3 TS 36.331 RRC RSSI = received
743a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * signal + noise RSRP = reference signal dBm RSRQ = quality of signal
744a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * dB= Number of Resource blocksxRSRP/RSSI SNR = gain=signal/noise ratio
745a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * = -10log P1/P2 dB
746a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
747a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        int rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN, rsrpIconLevel = -1, snrIconLevel = -1;
748a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
749a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (mLteRsrp > -44) rsrpIconLevel = -1;
750a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRsrp >= -85) rsrpIconLevel = SIGNAL_STRENGTH_GREAT;
751a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRsrp >= -95) rsrpIconLevel = SIGNAL_STRENGTH_GOOD;
752a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRsrp >= -105) rsrpIconLevel = SIGNAL_STRENGTH_MODERATE;
753a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRsrp >= -115) rsrpIconLevel = SIGNAL_STRENGTH_POOR;
754a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRsrp >= -140) rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
755a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
756a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
757a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * Values are -200 dB to +300 (SNR*10dB) RS_SNR >= 13.0 dB =>4 bars 4.5
758a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * dB <= RS_SNR < 13.0 dB => 3 bars 1.0 dB <= RS_SNR < 4.5 dB => 2 bars
759a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * -3.0 dB <= RS_SNR < 1.0 dB 1 bar RS_SNR < -3.0 dB/No Service Antenna
760a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * Icon Only
761a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
762a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (mLteRssnr > 300) snrIconLevel = -1;
763a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 130) snrIconLevel = SIGNAL_STRENGTH_GREAT;
764a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 45) snrIconLevel = SIGNAL_STRENGTH_GOOD;
765a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 10) snrIconLevel = SIGNAL_STRENGTH_MODERATE;
766a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= -30) snrIconLevel = SIGNAL_STRENGTH_POOR;
767a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= -200)
768a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            snrIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
769a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
770a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("getLTELevel - rsrp:" + mLteRsrp + " snr:" + mLteRssnr + " rsrpIconLevel:"
771a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                + rsrpIconLevel + " snrIconLevel:" + snrIconLevel);
772a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
773a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /* Choose a measurement type to use for notification */
774a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (snrIconLevel != -1 && rsrpIconLevel != -1) {
775a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            /*
776a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * The number of bars displayed shall be the smaller of the bars
777a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * associated with LTE RSRP and the bars associated with the LTE
778a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * RS_SNR
779a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             */
780a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            return (rsrpIconLevel < snrIconLevel ? rsrpIconLevel : snrIconLevel);
781a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        }
7825d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini
783a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (snrIconLevel != -1) return snrIconLevel;
7845d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini
785a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (rsrpIconLevel != -1) return rsrpIconLevel;
7865e39519396918f9e2312d1c355a9b6889851d887John Wang
787a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /* Valid values are (0-63, 99) as defined in TS 36.331 */
788a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
789a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
790a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
791a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
792a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
793a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("getLTELevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
794a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                + rssiIconLevel);
795a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        return rssiIconLevel;
7965284090631e638b916d9a453212e9dc802656a67Wink Saville
797a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
7985284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7995d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini     * Get the LTE signal level as an asu value between 0..97, 99 is unknown
8005d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
8015284090631e638b916d9a453212e9dc802656a67Wink Saville     *
8025284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
8035284090631e638b916d9a453212e9dc802656a67Wink Saville     */
8045284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteAsuLevel() {
8055d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        int lteAsuLevel = 99;
8065d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        int lteDbm = getLteDbm();
807a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
808a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 3GPP 27.007 (Ver 10.3.0) Sec 8.69
809a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 0   -140 dBm or less
810a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 1   -139 dBm
811a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 2...96  -138... -44 dBm
812a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 97  -43 dBm or greater
813a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 255 not known or not detectable
814a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
815a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
816a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * validateInput will always give a valid range between -140 t0 -44 as
817a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * per ril.h. so RSRP >= -43 & <-140 will fall under asu level 255
818a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * and not 97 or 0
819a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
820a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (lteDbm == SignalStrength.INVALID) lteAsuLevel = 255;
8215d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        else lteAsuLevel = lteDbm + 140;
8225d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        if (DBG) log("Lte Asu level: "+lteAsuLevel);
8235d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        return lteAsuLevel;
8245284090631e638b916d9a453212e9dc802656a67Wink Saville    }
8255284090631e638b916d9a453212e9dc802656a67Wink Saville
8265284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
827cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return true if this is for GSM
828e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
829e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public boolean isGsm() {
830e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.isGsm;
831e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
832e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
833e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
834cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return hash code
835e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
836e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
837e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int hashCode() {
8385284090631e638b916d9a453212e9dc802656a67Wink Saville        int primeNum = 31;
8395284090631e638b916d9a453212e9dc802656a67Wink Saville        return ((mGsmSignalStrength * primeNum)
8405284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mGsmBitErrorRate * primeNum)
8415284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mCdmaDbm * primeNum) + (mCdmaEcio * primeNum)
8425284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
8435284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
8445284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
845e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + (isGsm ? 1 : 0));
846e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
847e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
848e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
849cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return true if the signal strengths are the same
850e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
851e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
852e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public boolean equals (Object o) {
853e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        SignalStrength s;
854e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
855e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        try {
856e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            s = (SignalStrength) o;
857e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        } catch (ClassCastException ex) {
858e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return false;
859e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
860e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
861e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (o == null) {
862e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return false;
863e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
864e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
865e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return (mGsmSignalStrength == s.mGsmSignalStrength
866e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mGsmBitErrorRate == s.mGsmBitErrorRate
867e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mCdmaDbm == s.mCdmaDbm
868e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mCdmaEcio == s.mCdmaEcio
869e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoDbm == s.mEvdoDbm
870e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoEcio == s.mEvdoEcio
871e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoSnr == s.mEvdoSnr
8725284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteSignalStrength == s.mLteSignalStrength
8735284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRsrp == s.mLteRsrp
8745284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRsrq == s.mLteRsrq
8755284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRssnr == s.mLteRssnr
8765284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteCqi == s.mLteCqi
877e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && isGsm == s.isGsm);
878e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
879e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
880e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
881cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return string representation.
882e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
883e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
884e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public String toString() {
885e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return ("SignalStrength:"
886e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mGsmSignalStrength
887e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mGsmBitErrorRate
888e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mCdmaDbm
889e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mCdmaEcio
890e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoDbm
891e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoEcio
892e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoSnr
8935284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteSignalStrength
8945284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRsrp
8955284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRsrq
8965284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRssnr
8975284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteCqi
8985284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + (isGsm ? "gsm|lte" : "cdma"));
899e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
900e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
901e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
902e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Set SignalStrength based on intent notifier map
903e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
904e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m intent notifier map
905e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
906e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
907e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private void setFromNotifierBundle(Bundle m) {
908e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = m.getInt("GsmSignalStrength");
909e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = m.getInt("GsmBitErrorRate");
910e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = m.getInt("CdmaDbm");
911e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = m.getInt("CdmaEcio");
912e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = m.getInt("EvdoDbm");
913e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = m.getInt("EvdoEcio");
914e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = m.getInt("EvdoSnr");
9155284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = m.getInt("LteSignalStrength");
9165284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = m.getInt("LteRsrp");
9175284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = m.getInt("LteRsrq");
9185284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = m.getInt("LteRssnr");
9195284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = m.getInt("LteCqi");
920e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = m.getBoolean("isGsm");
921e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
922e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
923e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
924e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Set intent notifier Bundle based on SignalStrength
925e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
926e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m intent notifier Bundle
927e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
928e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
929e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void fillInNotifierBundle(Bundle m) {
930e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("GsmSignalStrength", mGsmSignalStrength);
931e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("GsmBitErrorRate", mGsmBitErrorRate);
932e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("CdmaDbm", mCdmaDbm);
933e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("CdmaEcio", mCdmaEcio);
934e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoDbm", mEvdoDbm);
935e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoEcio", mEvdoEcio);
936e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoSnr", mEvdoSnr);
9375284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteSignalStrength", mLteSignalStrength);
9385284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRsrp", mLteRsrp);
9395284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRsrq", mLteRsrq);
9405284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRssnr", mLteRssnr);
9415284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteCqi", mLteCqi);
942e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putBoolean("isGsm", Boolean.valueOf(isGsm));
943e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
9445284090631e638b916d9a453212e9dc802656a67Wink Saville
9455284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
9465284090631e638b916d9a453212e9dc802656a67Wink Saville     * log
9475284090631e638b916d9a453212e9dc802656a67Wink Saville     */
9485284090631e638b916d9a453212e9dc802656a67Wink Saville    private static void log(String s) {
94922b1e80c24c5fbd702a19f2511ee2897baaf3e98Wink Saville        Rlog.w(LOG_TAG, s);
9505284090631e638b916d9a453212e9dc802656a67Wink Saville    }
951e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville}
952