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;
23c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Uedaimport android.content.res.Resources;
24e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
25e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville/**
26e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Contains phone signal strength related information.
27e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */
28e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savillepublic class SignalStrength implements Parcelable {
29e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
305284090631e638b916d9a453212e9dc802656a67Wink Saville    private static final String LOG_TAG = "SignalStrength";
31432139b5c3bcbb3762fb7de1717e816d2b7c90f0Robert Greenwalt    private static final boolean DBG = false;
325284090631e638b916d9a453212e9dc802656a67Wink Saville
335284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
345284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
355284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
365284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_POOR = 1;
375284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
385284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_MODERATE = 2;
395284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
405284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_GOOD = 3;
415284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
425284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int SIGNAL_STRENGTH_GREAT = 4;
435284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
445284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
455284090631e638b916d9a453212e9dc802656a67Wink Saville    /** @hide */
465284090631e638b916d9a453212e9dc802656a67Wink Saville    public static final String[] SIGNAL_STRENGTH_NAMES = {
475284090631e638b916d9a453212e9dc802656a67Wink Saville        "none", "poor", "moderate", "good", "great"
485284090631e638b916d9a453212e9dc802656a67Wink Saville    };
49e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
505e39519396918f9e2312d1c355a9b6889851d887John Wang    /** @hide */
51a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    //Use int max, as -1 is a valid value in signal strength
52a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public static final int INVALID = 0x7FFFFFFF;
535e39519396918f9e2312d1c355a9b6889851d887John Wang
54c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda    private static final int RSRP_THRESH_TYPE_STRICT = 0;
55c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda    private static final int[] RSRP_THRESH_STRICT = new int[] {-140, -115, -105, -95, -85, -44};
56c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda    private static final int[] RSRP_THRESH_LENIENT = new int[] {-140, -128, -118, -108, -98, -44};
57c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda
58c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda
59e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
60e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mGsmBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
61e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mCdmaDbm;   // This value is the RSSI value
62e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mCdmaEcio;  // This value is the Ec/Io
63e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoDbm;   // This value is the EVDO RSSI value
64e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoEcio;  // This value is the EVDO Ec/Io
65e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private int mEvdoSnr;   // Valid values are 0-8.  8 is the highest signal to noise ratio
665284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteSignalStrength;
675284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRsrp;
685284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRsrq;
695284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteRssnr;
705284090631e638b916d9a453212e9dc802656a67Wink Saville    private int mLteCqi;
71e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
72e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult
732900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
74e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
75e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Create a new SignalStrength from a intent notifier Bundle
76e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
77e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * This method is used by PhoneStateIntentReceiver and maybe by
78e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * external applications.
79e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
80e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m Bundle from intent notifier
81e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @return newly created SignalStrength
82e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
83cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
84e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
85e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public static SignalStrength newFromBundle(Bundle m) {
86e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        SignalStrength ret;
87e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ret = new SignalStrength();
88e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        ret.setFromNotifierBundle(m);
89e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return ret;
90e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
91e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
92e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
93e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Empty constructor
94e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
95cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
96e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
97e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public SignalStrength() {
98e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = 99;
99e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = -1;
100e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = -1;
101e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = -1;
102e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = -1;
103e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = -1;
104e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = -1;
105a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = 99;
106a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = INVALID;
107a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = INVALID;
108a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = INVALID;
109a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteCqi = INVALID;
110e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = true;
111e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
112e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
113e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
114a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * This constructor is used to create SignalStrength with default
115a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * values and set the isGsmFlag with the value passed in the input
116e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
117a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @param gsmFlag true if Gsm Phone,false if Cdma phone
118a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @return newly created SignalStrength
119cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
120e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
121a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public SignalStrength(boolean gsmFlag) {
122a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmSignalStrength = 99;
123a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmBitErrorRate = -1;
124a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaDbm = -1;
125a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaEcio = -1;
126a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoDbm = -1;
127a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoEcio = -1;
128a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoSnr = -1;
129a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = 99;
130a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = INVALID;
131a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = INVALID;
132a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = INVALID;
133a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteCqi = INVALID;
134a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        isGsm = gsmFlag;
135e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
136e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
137e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
1385284090631e638b916d9a453212e9dc802656a67Wink Saville     * Constructor
1395284090631e638b916d9a453212e9dc802656a67Wink Saville     *
1405284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
1415284090631e638b916d9a453212e9dc802656a67Wink Saville     */
1425284090631e638b916d9a453212e9dc802656a67Wink Saville    public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
1435284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaDbm, int cdmaEcio,
1445284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
145b208a24cf521401912cfce16fce550a995cf1250Wink Saville            int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
1462900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsmFlag) {
1472900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1482900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, lteSignalStrength, lteRsrp,
1492900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                lteRsrq, lteRssnr, lteCqi, gsmFlag);
1502900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1512900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1522900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1532900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Constructor
1542900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1552900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1562900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1572900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
1582900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
1592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
1602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsmFlag) {
1612900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1622900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, 99, INVALID,
1632900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                INVALID, INVALID, INVALID, gsmFlag);
1642900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1652900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1662900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1672900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Copy constructors
1682900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1692900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param s Source SignalStrength
1702900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1712900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1722900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1732900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public SignalStrength(SignalStrength s) {
1742900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        copyFrom(s);
1752900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1762900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
1772900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
1782900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Initialize gsm/cdma values, sets lte values to defaults.
1792900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1802900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmSignalStrength
1812900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmBitErrorRate
1822900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaDbm
1832900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaEcio
1842900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoDbm
1852900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoEcio
1862900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoSnr
1872900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsm
1882900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
1892900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
1902900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
1912900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public void initialize(int gsmSignalStrength, int gsmBitErrorRate,
1922900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
1932900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
1942900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            boolean gsm) {
1952900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        initialize(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
1962900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                evdoDbm, evdoEcio, evdoSnr, 99, INVALID,
1972900a3fae6e3da65522ffc16673ab1757352afbbWink Saville                INVALID, INVALID, INVALID, gsm);
1982900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
1992900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
2002900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /**
2012900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * Initialize all the values
2022900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
2032900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmSignalStrength
2042900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsmBitErrorRate
2052900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaDbm
2062900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param cdmaEcio
2072900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoDbm
2082900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoEcio
2092900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param evdoSnr
2102900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteSignalStrength
2112900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRsrp
2122900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRsrq
2132900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteRssnr
2142900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param lteCqi
2152900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @param gsm
2162900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     *
2172900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     * @hide
2182900a3fae6e3da65522ffc16673ab1757352afbbWink Saville     */
2192900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public void initialize(int gsmSignalStrength, int gsmBitErrorRate,
2202900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int cdmaDbm, int cdmaEcio,
2212900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int evdoDbm, int evdoEcio, int evdoSnr,
2222900a3fae6e3da65522ffc16673ab1757352afbbWink Saville            int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
223b208a24cf521401912cfce16fce550a995cf1250Wink Saville            boolean gsm) {
224b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mGsmSignalStrength = gsmSignalStrength;
225b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mGsmBitErrorRate = gsmBitErrorRate;
226b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = cdmaDbm;
227b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = cdmaEcio;
228b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = evdoDbm;
229b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = evdoEcio;
230b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = evdoSnr;
231b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteSignalStrength = lteSignalStrength;
232b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRsrp = lteRsrp;
233b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRsrq = lteRsrq;
234b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteRssnr = lteRssnr;
235b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mLteCqi = lteCqi;
236b208a24cf521401912cfce16fce550a995cf1250Wink Saville        isGsm = gsm;
237b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("initialize: " + toString());
238b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
239b208a24cf521401912cfce16fce550a995cf1250Wink Saville
240b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
241e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
242e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
243e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    protected void copyFrom(SignalStrength s) {
244e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = s.mGsmSignalStrength;
245e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = s.mGsmBitErrorRate;
246e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = s.mCdmaDbm;
247e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = s.mCdmaEcio;
248e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = s.mEvdoDbm;
249e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = s.mEvdoEcio;
250e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = s.mEvdoSnr;
2515284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = s.mLteSignalStrength;
2525284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = s.mLteRsrp;
2535284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = s.mLteRsrq;
2545284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = s.mLteRssnr;
2555284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = s.mLteCqi;
256e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = s.isGsm;
257e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
258e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
259e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
260e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Construct a SignalStrength object from the given parcel.
261cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     *
262cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
263e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
264e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public SignalStrength(Parcel in) {
2652900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        if (DBG) log("Size of signalstrength parcel:" + in.dataSize());
2662900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
267e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = in.readInt();
268e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = in.readInt();
269e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = in.readInt();
270e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = in.readInt();
271e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = in.readInt();
272e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = in.readInt();
273e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = in.readInt();
2745284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = in.readInt();
2755284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = in.readInt();
2765284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = in.readInt();
2775284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = in.readInt();
2785284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = in.readInt();
279e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = (in.readInt() != 0);
280e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
281e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
282cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
283efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * Make a SignalStrength object from the given parcel as passed up by
284efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * the ril which does not have isGsm. isGsm will be changed by ServiceStateTracker
285efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * so the default is a don't care.
286efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     *
287efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     * @hide
288efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville     */
289efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    public static SignalStrength makeSignalStrengthFromRilParcel(Parcel in) {
290efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        if (DBG) log("Size of signalstrength parcel:" + in.dataSize());
291efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
292efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        SignalStrength ss = new SignalStrength();
293efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mGsmSignalStrength = in.readInt();
294efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mGsmBitErrorRate = in.readInt();
295efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mCdmaDbm = in.readInt();
296efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mCdmaEcio = in.readInt();
297efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoDbm = in.readInt();
298efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoEcio = in.readInt();
299efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mEvdoSnr = in.readInt();
300efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteSignalStrength = in.readInt();
301efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRsrp = in.readInt();
302efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRsrq = in.readInt();
303efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteRssnr = in.readInt();
304efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        ss.mLteCqi = in.readInt();
305efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
306efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville        return ss;
307efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    }
308efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville
309efbca4d01d2fe6ecb9e697aea71da44fefcfc094Wink Saville    /**
310cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable#writeToParcel}
311cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
312e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void writeToParcel(Parcel out, int flags) {
313e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mGsmSignalStrength);
314e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mGsmBitErrorRate);
315e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mCdmaDbm);
316e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mCdmaEcio);
317e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoDbm);
318e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoEcio);
319e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(mEvdoSnr);
3205284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteSignalStrength);
3215284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRsrp);
3225284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRsrq);
3235284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteRssnr);
3245284090631e638b916d9a453212e9dc802656a67Wink Saville        out.writeInt(mLteCqi);
325e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        out.writeInt(isGsm ? 1 : 0);
326e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
327e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
328cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
329cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable#describeContents}
330cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
331e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int describeContents() {
332e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return 0;
333e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
335cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville    /**
336cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * {@link Parcelable.Creator}
337cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     *
338cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @hide
339cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     */
340e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
341e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        public SignalStrength createFromParcel(Parcel in) {
342e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return new SignalStrength(in);
343e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
344e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
345e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        public SignalStrength[] newArray(int size) {
346e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return new SignalStrength[size];
347e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
348e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    };
349e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
350e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
351a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Validate the individual signal strength fields as per the range
352a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * specified in ril.h
353a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Set to invalid any field that is not in the valid range
354a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Cdma, evdo, lte rsrp & rsrq values are sign converted
355a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * when received from ril interface
356a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *
357a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @return
358a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *      Valid values for all signalstrength fields
359a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @hide
360a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     */
361a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public void validateInput() {
362a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("Signal before validate=" + this);
363a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // TS 27.007 8.5
364a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mGsmSignalStrength = mGsmSignalStrength >= 0 ? mGsmSignalStrength : 99;
365a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // BER no change;
366a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
367a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaDbm = mCdmaDbm > 0 ? -mCdmaDbm : -120;
368a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mCdmaEcio = (mCdmaEcio > 0) ? -mCdmaEcio : -160;
369a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
370a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoDbm = (mEvdoDbm > 0) ? -mEvdoDbm : -120;
3718ab862cbd4eeeb52ab921a555b7a006e89fd2abcBanavathu, Srinivas Naik        mEvdoEcio = (mEvdoEcio >= 0) ? -mEvdoEcio : -1;
372a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mEvdoSnr = ((mEvdoSnr > 0) && (mEvdoSnr <= 8)) ? mEvdoSnr : -1;
373a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
374a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // TS 36.214 Physical Layer Section 5.1.3, TS 36.331 RRC
375a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteSignalStrength = (mLteSignalStrength >= 0) ? mLteSignalStrength : 99;
376a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrp = ((mLteRsrp >= 44) && (mLteRsrp <= 140)) ? -mLteRsrp : SignalStrength.INVALID;
377a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRsrq = ((mLteRsrq >= 3) && (mLteRsrq <= 20)) ? -mLteRsrq : SignalStrength.INVALID;
378a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        mLteRssnr = ((mLteRssnr >= -200) && (mLteRssnr <= 300)) ? mLteRssnr
379a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                : SignalStrength.INVALID;
380a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        // Cqi no change
381a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("Signal after validate=" + this);
382a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
383a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
384a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    /**
385a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @param true - Gsm, Lte phones
386a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *        false - Cdma phones
387a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *
388a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Used by voice phone to set the isGsm
389a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     *        flag
390a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * @hide
391a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     */
392a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    public void setGsm(boolean gsmFlag) {
393a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        isGsm = gsmFlag;
394a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
395a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
396a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    /**
397a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS
398a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam     * 27.007 8.5
399e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
400e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getGsmSignalStrength() {
401e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mGsmSignalStrength;
402e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
403e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
404e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
405e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5
406e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
407e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getGsmBitErrorRate() {
408e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mGsmBitErrorRate;
409e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
410e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
411e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
412e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the CDMA RSSI value in dBm
413e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
414e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaDbm() {
415e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mCdmaDbm;
416e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
417e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
418e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
419e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the CDMA Ec/Io value in dB*10
420e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
421e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaEcio() {
422e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mCdmaEcio;
423e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
424e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
425e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
426e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the EVDO RSSI value in dBm
427e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
428e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoDbm() {
429e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoDbm;
430e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
431e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
432e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
433e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the EVDO Ec/Io value in dB*10
434e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
435e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoEcio() {
436e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoEcio;
437e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
438e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
439e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
440e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest.
441e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
442e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getEvdoSnr() {
443e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.mEvdoSnr;
444e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
445e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
4462900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
44729c8b00f14675aa35ef44a58a60947f477247a1aWink Saville    public int getLteSignalStrength() {
4482900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteSignalStrength;
4492900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4502900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4512900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4522900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRsrp() {
4532900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRsrp;
4542900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4552900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4562900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4572900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRsrq() {
4582900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRsrq;
4592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4612900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4622900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteRssnr() {
4632900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteRssnr;
4642900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4652900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
4662900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    /** @hide */
4672900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    public int getLteCqi() {
4682900a3fae6e3da65522ffc16673ab1757352afbbWink Saville        return mLteCqi;
4692900a3fae6e3da65522ffc16673ab1757352afbbWink Saville    }
4702900a3fae6e3da65522ffc16673ab1757352afbbWink Saville
471e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
47246982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     * Retrieve an abstract level value for the overall signal strength.
47346982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     *
47446982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     * @return a single integer from 0 to 4 representing the general signal quality.
47546982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     *     This may take into account many different radio technology inputs.
47646982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     *     0 represents very poor signal strength
47746982c53641603f42cf32a7ac9a7fc3e4e2befceRobert Greenwalt     *     while 4 represents a very strong signal strength.
4785284090631e638b916d9a453212e9dc802656a67Wink Saville     */
4795284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLevel() {
4805284090631e638b916d9a453212e9dc802656a67Wink Saville        int level;
4815284090631e638b916d9a453212e9dc802656a67Wink Saville
4825284090631e638b916d9a453212e9dc802656a67Wink Saville        if (isGsm) {
483a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            level = getLteLevel();
484a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4855284090631e638b916d9a453212e9dc802656a67Wink Saville                level = getGsmLevel();
4865284090631e638b916d9a453212e9dc802656a67Wink Saville            }
4875284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
4885284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaLevel = getCdmaLevel();
4895284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoLevel = getEvdoLevel();
4905284090631e638b916d9a453212e9dc802656a67Wink Saville            if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4915284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know evdo, use cdma */
492a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                level = cdmaLevel;
4935284090631e638b916d9a453212e9dc802656a67Wink Saville            } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
4945284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know cdma, use evdo */
495a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                level = evdoLevel;
4965284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
4975284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We know both, use the lowest level */
4985284090631e638b916d9a453212e9dc802656a67Wink Saville                level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
4995284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5005284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5015284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getLevel=" + level);
5025284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
5035284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5045284090631e638b916d9a453212e9dc802656a67Wink Saville
5055284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5065284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the signal level as an asu value between 0..31, 99 is unknown
5075284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5085284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5095284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5105284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getAsuLevel() {
5115284090631e638b916d9a453212e9dc802656a67Wink Saville        int asuLevel;
5125284090631e638b916d9a453212e9dc802656a67Wink Saville        if (isGsm) {
513a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            if (getLteLevel() == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
5145284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = getGsmAsuLevel();
5155284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
5165284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = getLteAsuLevel();
5175284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5185284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
5195284090631e638b916d9a453212e9dc802656a67Wink Saville            int cdmaAsuLevel = getCdmaAsuLevel();
5205284090631e638b916d9a453212e9dc802656a67Wink Saville            int evdoAsuLevel = getEvdoAsuLevel();
5215284090631e638b916d9a453212e9dc802656a67Wink Saville            if (evdoAsuLevel == 0) {
5225284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know evdo use, cdma */
5235284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = cdmaAsuLevel;
5245284090631e638b916d9a453212e9dc802656a67Wink Saville            } else if (cdmaAsuLevel == 0) {
5255284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We don't know cdma use, evdo */
5265284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = evdoAsuLevel;
5275284090631e638b916d9a453212e9dc802656a67Wink Saville            } else {
5285284090631e638b916d9a453212e9dc802656a67Wink Saville                /* We know both, use the lowest level */
5295284090631e638b916d9a453212e9dc802656a67Wink Saville                asuLevel = cdmaAsuLevel < evdoAsuLevel ? cdmaAsuLevel : evdoAsuLevel;
5305284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5315284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5325284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getAsuLevel=" + asuLevel);
5335284090631e638b916d9a453212e9dc802656a67Wink Saville        return asuLevel;
5345284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5355284090631e638b916d9a453212e9dc802656a67Wink Saville
5365284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5375284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the signal strength as dBm
5385284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5395284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5405284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5415284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getDbm() {
5425284090631e638b916d9a453212e9dc802656a67Wink Saville        int dBm;
5435284090631e638b916d9a453212e9dc802656a67Wink Saville
5445284090631e638b916d9a453212e9dc802656a67Wink Saville        if(isGsm()) {
545b5c78682ad79be7b7c53cf8a8450ed485cf610e6Amit Mahajan            dBm = getLteDbm();
546b5c78682ad79be7b7c53cf8a8450ed485cf610e6Amit Mahajan            if (dBm == INVALID) {
5475284090631e638b916d9a453212e9dc802656a67Wink Saville                dBm = getGsmDbm();
5485284090631e638b916d9a453212e9dc802656a67Wink Saville            }
5495284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
550a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            int cdmaDbm = getCdmaDbm();
551a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            int evdoDbm = getEvdoDbm();
552a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
553a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            return (evdoDbm == -120) ? cdmaDbm : ((cdmaDbm == -120) ? evdoDbm
554a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                    : (cdmaDbm < evdoDbm ? cdmaDbm : evdoDbm));
5555284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5565284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getDbm=" + dBm);
5575284090631e638b916d9a453212e9dc802656a67Wink Saville        return dBm;
5585284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5595284090631e638b916d9a453212e9dc802656a67Wink Saville
5605284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5615284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get Gsm signal strength as dBm
5625284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5635284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5645284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5655284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmDbm() {
5665284090631e638b916d9a453212e9dc802656a67Wink Saville        int dBm;
5675284090631e638b916d9a453212e9dc802656a67Wink Saville
5685284090631e638b916d9a453212e9dc802656a67Wink Saville        int gsmSignalStrength = getGsmSignalStrength();
5695284090631e638b916d9a453212e9dc802656a67Wink Saville        int asu = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength);
5705284090631e638b916d9a453212e9dc802656a67Wink Saville        if (asu != -1) {
5715284090631e638b916d9a453212e9dc802656a67Wink Saville            dBm = -113 + (2 * asu);
5725284090631e638b916d9a453212e9dc802656a67Wink Saville        } else {
5735284090631e638b916d9a453212e9dc802656a67Wink Saville            dBm = -1;
5745284090631e638b916d9a453212e9dc802656a67Wink Saville        }
5755284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmDbm=" + dBm);
5765284090631e638b916d9a453212e9dc802656a67Wink Saville        return dBm;
5775284090631e638b916d9a453212e9dc802656a67Wink Saville    }
5785284090631e638b916d9a453212e9dc802656a67Wink Saville
5795284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
5805284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get gsm as level 0..4
5815284090631e638b916d9a453212e9dc802656a67Wink Saville     *
5825284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
5835284090631e638b916d9a453212e9dc802656a67Wink Saville     */
5845284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmLevel() {
5855284090631e638b916d9a453212e9dc802656a67Wink Saville        int level;
5865284090631e638b916d9a453212e9dc802656a67Wink Saville
5875284090631e638b916d9a453212e9dc802656a67Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
5885284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 0 (-113dB or less) is very weak
5895284090631e638b916d9a453212e9dc802656a67Wink Saville        // signal, its better to show 0 bars to the user in such cases.
5905284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
5915284090631e638b916d9a453212e9dc802656a67Wink Saville        int asu = getGsmSignalStrength();
5925284090631e638b916d9a453212e9dc802656a67Wink Saville        if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
5935284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT;
5945284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 8)  level = SIGNAL_STRENGTH_GOOD;
5955284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (asu >= 5)  level = SIGNAL_STRENGTH_MODERATE;
5965284090631e638b916d9a453212e9dc802656a67Wink Saville        else level = SIGNAL_STRENGTH_POOR;
5975284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmLevel=" + level);
5985284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
5995284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6005284090631e638b916d9a453212e9dc802656a67Wink Saville
6015284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6025284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the gsm signal level as an asu value between 0..31, 99 is unknown
6035284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6045284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6055284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6065284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getGsmAsuLevel() {
6075284090631e638b916d9a453212e9dc802656a67Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
6085284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 0 (-113dB or less) is very weak
6095284090631e638b916d9a453212e9dc802656a67Wink Saville        // signal, its better to show 0 bars to the user in such cases.
6105284090631e638b916d9a453212e9dc802656a67Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
6115284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = getGsmSignalStrength();
6125284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getGsmAsuLevel=" + level);
6135284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6145284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6155284090631e638b916d9a453212e9dc802656a67Wink Saville
6165284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6175284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get cdma as level 0..4
6185284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6195284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6205284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6215284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getCdmaLevel() {
6225284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaDbm = getCdmaDbm();
6235284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaEcio = getCdmaEcio();
6245284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelDbm;
6255284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEcio;
6265284090631e638b916d9a453212e9dc802656a67Wink Saville
6275284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;
6285284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;
6295284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;
6305284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;
6315284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6325284090631e638b916d9a453212e9dc802656a67Wink Saville
6335284090631e638b916d9a453212e9dc802656a67Wink Saville        // Ec/Io are in dB*10
6345284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;
6355284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;
6365284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;
6375284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;
6385284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6395284090631e638b916d9a453212e9dc802656a67Wink Saville
6405284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;
6415284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getCdmaLevel=" + level);
6425284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6435284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6445284090631e638b916d9a453212e9dc802656a67Wink Saville
6455284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6465284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the cdma signal level as an asu value between 0..31, 99 is unknown
6475284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6485284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6495284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6505284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getCdmaAsuLevel() {
6515284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaDbm = getCdmaDbm();
6525284090631e638b916d9a453212e9dc802656a67Wink Saville        final int cdmaEcio = getCdmaEcio();
6535284090631e638b916d9a453212e9dc802656a67Wink Saville        int cdmaAsuLevel;
6545284090631e638b916d9a453212e9dc802656a67Wink Saville        int ecioAsuLevel;
6555284090631e638b916d9a453212e9dc802656a67Wink Saville
6565284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaDbm >= -75) cdmaAsuLevel = 16;
6575284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -82) cdmaAsuLevel = 8;
6585284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -90) cdmaAsuLevel = 4;
6595284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -95) cdmaAsuLevel = 2;
6605284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaDbm >= -100) cdmaAsuLevel = 1;
6615284090631e638b916d9a453212e9dc802656a67Wink Saville        else cdmaAsuLevel = 99;
6625284090631e638b916d9a453212e9dc802656a67Wink Saville
6635284090631e638b916d9a453212e9dc802656a67Wink Saville        // Ec/Io are in dB*10
6645284090631e638b916d9a453212e9dc802656a67Wink Saville        if (cdmaEcio >= -90) ecioAsuLevel = 16;
6655284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -100) ecioAsuLevel = 8;
6665284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -115) ecioAsuLevel = 4;
6675284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -130) ecioAsuLevel = 2;
6685284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (cdmaEcio >= -150) ecioAsuLevel = 1;
6695284090631e638b916d9a453212e9dc802656a67Wink Saville        else ecioAsuLevel = 99;
6705284090631e638b916d9a453212e9dc802656a67Wink Saville
6715284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (cdmaAsuLevel < ecioAsuLevel) ? cdmaAsuLevel : ecioAsuLevel;
6725284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getCdmaAsuLevel=" + level);
6735284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
6745284090631e638b916d9a453212e9dc802656a67Wink Saville    }
6755284090631e638b916d9a453212e9dc802656a67Wink Saville
6765284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
6775284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get Evdo as level 0..4
6785284090631e638b916d9a453212e9dc802656a67Wink Saville     *
6795284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
6805284090631e638b916d9a453212e9dc802656a67Wink Saville     */
6815284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getEvdoLevel() {
6825284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoDbm = getEvdoDbm();
6835284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoSnr = getEvdoSnr();
6845284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoDbm;
6855284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoSnr;
6865284090631e638b916d9a453212e9dc802656a67Wink Saville
6875284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoDbm >= -65) levelEvdoDbm = SIGNAL_STRENGTH_GREAT;
6885284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -75) levelEvdoDbm = SIGNAL_STRENGTH_GOOD;
6895284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -90) levelEvdoDbm = SIGNAL_STRENGTH_MODERATE;
6905284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -105) levelEvdoDbm = SIGNAL_STRENGTH_POOR;
6915284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6925284090631e638b916d9a453212e9dc802656a67Wink Saville
6935284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoSnr >= 7) levelEvdoSnr = SIGNAL_STRENGTH_GREAT;
6945284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 5) levelEvdoSnr = SIGNAL_STRENGTH_GOOD;
6955284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 3) levelEvdoSnr = SIGNAL_STRENGTH_MODERATE;
6965284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 1) levelEvdoSnr = SIGNAL_STRENGTH_POOR;
6975284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoSnr = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
6985284090631e638b916d9a453212e9dc802656a67Wink Saville
6995284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
7005284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getEvdoLevel=" + level);
7015284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
7025284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7035284090631e638b916d9a453212e9dc802656a67Wink Saville
7045284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7055284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get the evdo signal level as an asu value between 0..31, 99 is unknown
7065284090631e638b916d9a453212e9dc802656a67Wink Saville     *
7075284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7085284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7095284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getEvdoAsuLevel() {
7105284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoDbm = getEvdoDbm();
7115284090631e638b916d9a453212e9dc802656a67Wink Saville        int evdoSnr = getEvdoSnr();
7125284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoDbm;
7135284090631e638b916d9a453212e9dc802656a67Wink Saville        int levelEvdoSnr;
7145284090631e638b916d9a453212e9dc802656a67Wink Saville
7155284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoDbm >= -65) levelEvdoDbm = 16;
7165284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -75) levelEvdoDbm = 8;
7175284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -85) levelEvdoDbm = 4;
7185284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -95) levelEvdoDbm = 2;
7195284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoDbm >= -105) levelEvdoDbm = 1;
7205284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoDbm = 99;
7215284090631e638b916d9a453212e9dc802656a67Wink Saville
7225284090631e638b916d9a453212e9dc802656a67Wink Saville        if (evdoSnr >= 7) levelEvdoSnr = 16;
7235284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 6) levelEvdoSnr = 8;
7245284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 5) levelEvdoSnr = 4;
7255284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 3) levelEvdoSnr = 2;
7265284090631e638b916d9a453212e9dc802656a67Wink Saville        else if (evdoSnr >= 1) levelEvdoSnr = 1;
7275284090631e638b916d9a453212e9dc802656a67Wink Saville        else levelEvdoSnr = 99;
7285284090631e638b916d9a453212e9dc802656a67Wink Saville
7295284090631e638b916d9a453212e9dc802656a67Wink Saville        int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
7305284090631e638b916d9a453212e9dc802656a67Wink Saville        if (DBG) log("getEvdoAsuLevel=" + level);
7315284090631e638b916d9a453212e9dc802656a67Wink Saville        return level;
7325284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7335284090631e638b916d9a453212e9dc802656a67Wink Saville
7345284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7355284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get LTE as dBm
7365284090631e638b916d9a453212e9dc802656a67Wink Saville     *
7375284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7385284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7395284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteDbm() {
7405d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        return mLteRsrp;
7415284090631e638b916d9a453212e9dc802656a67Wink Saville    }
7425284090631e638b916d9a453212e9dc802656a67Wink Saville
7435284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
7445284090631e638b916d9a453212e9dc802656a67Wink Saville     * Get LTE as level 0..4
7455284090631e638b916d9a453212e9dc802656a67Wink Saville     *
7465284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
7475284090631e638b916d9a453212e9dc802656a67Wink Saville     */
7485284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteLevel() {
749a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
750a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * TS 36.214 Physical Layer Section 5.1.3 TS 36.331 RRC RSSI = received
751a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * signal + noise RSRP = reference signal dBm RSRQ = quality of signal
752a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * dB= Number of Resource blocksxRSRP/RSSI SNR = gain=signal/noise ratio
753a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * = -10log P1/P2 dB
754a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
755a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        int rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN, rsrpIconLevel = -1, snrIconLevel = -1;
756a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
757c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        int rsrpThreshType = Resources.getSystem().getInteger(com.android.internal.R.integer.
758c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda                config_LTE_RSRP_threshold_type);
759c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        int[] threshRsrp;
760c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        if (rsrpThreshType == RSRP_THRESH_TYPE_STRICT) {
761c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda            threshRsrp = RSRP_THRESH_STRICT;
762c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        } else {
763c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda            threshRsrp = RSRP_THRESH_LENIENT;
764c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        }
765c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda
766c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        if (mLteRsrp > threshRsrp[5]) rsrpIconLevel = -1;
767c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        else if (mLteRsrp >= threshRsrp[4]) rsrpIconLevel = SIGNAL_STRENGTH_GREAT;
768c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        else if (mLteRsrp >= threshRsrp[3]) rsrpIconLevel = SIGNAL_STRENGTH_GOOD;
769c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        else if (mLteRsrp >= threshRsrp[2]) rsrpIconLevel = SIGNAL_STRENGTH_MODERATE;
770c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        else if (mLteRsrp >= threshRsrp[1]) rsrpIconLevel = SIGNAL_STRENGTH_POOR;
771c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda        else if (mLteRsrp >= threshRsrp[0]) rsrpIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
772a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
773a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
774a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * Values are -200 dB to +300 (SNR*10dB) RS_SNR >= 13.0 dB =>4 bars 4.5
775a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * dB <= RS_SNR < 13.0 dB => 3 bars 1.0 dB <= RS_SNR < 4.5 dB => 2 bars
776a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * -3.0 dB <= RS_SNR < 1.0 dB 1 bar RS_SNR < -3.0 dB/No Service Antenna
777a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * Icon Only
778a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
779a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (mLteRssnr > 300) snrIconLevel = -1;
780a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 130) snrIconLevel = SIGNAL_STRENGTH_GREAT;
781a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 45) snrIconLevel = SIGNAL_STRENGTH_GOOD;
782a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= 10) snrIconLevel = SIGNAL_STRENGTH_MODERATE;
783a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= -30) snrIconLevel = SIGNAL_STRENGTH_POOR;
784a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteRssnr >= -200)
785a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            snrIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
786a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
787a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("getLTELevel - rsrp:" + mLteRsrp + " snr:" + mLteRssnr + " rsrpIconLevel:"
788a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                + rsrpIconLevel + " snrIconLevel:" + snrIconLevel);
789a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam
790a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /* Choose a measurement type to use for notification */
791a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (snrIconLevel != -1 && rsrpIconLevel != -1) {
792a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            /*
793a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * The number of bars displayed shall be the smaller of the bars
794a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * associated with LTE RSRP and the bars associated with the LTE
795a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             * RS_SNR
796a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam             */
797a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam            return (rsrpIconLevel < snrIconLevel ? rsrpIconLevel : snrIconLevel);
798a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        }
7995d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini
800a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (snrIconLevel != -1) return snrIconLevel;
8015d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini
802a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (rsrpIconLevel != -1) return rsrpIconLevel;
8035e39519396918f9e2312d1c355a9b6889851d887John Wang
804a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /* Valid values are (0-63, 99) as defined in TS 36.331 */
805a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (mLteSignalStrength > 63) rssiIconLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
806a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 12) rssiIconLevel = SIGNAL_STRENGTH_GREAT;
807a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 8) rssiIconLevel = SIGNAL_STRENGTH_GOOD;
808a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 5) rssiIconLevel = SIGNAL_STRENGTH_MODERATE;
809a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        else if (mLteSignalStrength >= 0) rssiIconLevel = SIGNAL_STRENGTH_POOR;
810c962b1dcfb4bb06d87b5cdcceecc359d5e221edaKensuke Ueda
811a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (DBG) log("getLTELevel - rssi:" + mLteSignalStrength + " rssiIconLevel:"
812a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam                + rssiIconLevel);
813a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        return rssiIconLevel;
8145284090631e638b916d9a453212e9dc802656a67Wink Saville
815a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam    }
8165284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
8175d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini     * Get the LTE signal level as an asu value between 0..97, 99 is unknown
8185d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
8195284090631e638b916d9a453212e9dc802656a67Wink Saville     *
8205284090631e638b916d9a453212e9dc802656a67Wink Saville     * @hide
8215284090631e638b916d9a453212e9dc802656a67Wink Saville     */
8225284090631e638b916d9a453212e9dc802656a67Wink Saville    public int getLteAsuLevel() {
8235d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        int lteAsuLevel = 99;
8245d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        int lteDbm = getLteDbm();
825a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
826a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 3GPP 27.007 (Ver 10.3.0) Sec 8.69
827a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 0   -140 dBm or less
828a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 1   -139 dBm
829a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 2...96  -138... -44 dBm
830a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 97  -43 dBm or greater
831a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * 255 not known or not detectable
832a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
833a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        /*
834a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * validateInput will always give a valid range between -140 t0 -44 as
835a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * per ril.h. so RSRP >= -43 & <-140 will fall under asu level 255
836a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         * and not 97 or 0
837a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam         */
838a44b137648c44cc29a8ce43f44a7934ff8045135Uma Maheswari Ramalingam        if (lteDbm == SignalStrength.INVALID) lteAsuLevel = 255;
8395d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        else lteAsuLevel = lteDbm + 140;
8405d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        if (DBG) log("Lte Asu level: "+lteAsuLevel);
8415d7b9271b3f8a5f27c789a2b673e4bfd532b280cRamesh Sudini        return lteAsuLevel;
8425284090631e638b916d9a453212e9dc802656a67Wink Saville    }
8435284090631e638b916d9a453212e9dc802656a67Wink Saville
8445284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
845cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return true if this is for GSM
846e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
847e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public boolean isGsm() {
848e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return this.isGsm;
849e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
850e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
851e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
852cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return hash code
853e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
854e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
855e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int hashCode() {
8565284090631e638b916d9a453212e9dc802656a67Wink Saville        int primeNum = 31;
8575284090631e638b916d9a453212e9dc802656a67Wink Saville        return ((mGsmSignalStrength * primeNum)
8585284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mGsmBitErrorRate * primeNum)
8595284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mCdmaDbm * primeNum) + (mCdmaEcio * primeNum)
8605284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
8615284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
8625284090631e638b916d9a453212e9dc802656a67Wink Saville                + (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
863e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + (isGsm ? 1 : 0));
864e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
865e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
866e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
867cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return true if the signal strengths are the same
868e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
869e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
870e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public boolean equals (Object o) {
871e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        SignalStrength s;
872e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
873e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        try {
874e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            s = (SignalStrength) o;
875e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        } catch (ClassCastException ex) {
876e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return false;
877e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
878e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
879e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if (o == null) {
880e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            return false;
881e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
882e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
883e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return (mGsmSignalStrength == s.mGsmSignalStrength
884e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mGsmBitErrorRate == s.mGsmBitErrorRate
885e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mCdmaDbm == s.mCdmaDbm
886e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mCdmaEcio == s.mCdmaEcio
887e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoDbm == s.mEvdoDbm
888e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoEcio == s.mEvdoEcio
889e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && mEvdoSnr == s.mEvdoSnr
8905284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteSignalStrength == s.mLteSignalStrength
8915284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRsrp == s.mLteRsrp
8925284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRsrq == s.mLteRsrq
8935284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteRssnr == s.mLteRssnr
8945284090631e638b916d9a453212e9dc802656a67Wink Saville                && mLteCqi == s.mLteCqi
895e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                && isGsm == s.isGsm);
896e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
897e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
898e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
899cc6ff2bc6011294367d9a8c644f811449e952eb7Wink Saville     * @return string representation.
900e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
901e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
902e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public String toString() {
903e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return ("SignalStrength:"
904e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mGsmSignalStrength
905e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mGsmBitErrorRate
906e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mCdmaDbm
907e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mCdmaEcio
908e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoDbm
909e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoEcio
910e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                + " " + mEvdoSnr
9115284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteSignalStrength
9125284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRsrp
9135284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRsrq
9145284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteRssnr
9155284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + mLteCqi
9165284090631e638b916d9a453212e9dc802656a67Wink Saville                + " " + (isGsm ? "gsm|lte" : "cdma"));
917e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
918e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
919e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
920e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Set SignalStrength based on intent notifier map
921e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
922e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m intent notifier map
923e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
924e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
925e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private void setFromNotifierBundle(Bundle m) {
926e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmSignalStrength = m.getInt("GsmSignalStrength");
927e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mGsmBitErrorRate = m.getInt("GsmBitErrorRate");
928e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaDbm = m.getInt("CdmaDbm");
929e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mCdmaEcio = m.getInt("CdmaEcio");
930e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoDbm = m.getInt("EvdoDbm");
931e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoEcio = m.getInt("EvdoEcio");
932e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEvdoSnr = m.getInt("EvdoSnr");
9335284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteSignalStrength = m.getInt("LteSignalStrength");
9345284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrp = m.getInt("LteRsrp");
9355284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRsrq = m.getInt("LteRsrq");
9365284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteRssnr = m.getInt("LteRssnr");
9375284090631e638b916d9a453212e9dc802656a67Wink Saville        mLteCqi = m.getInt("LteCqi");
938e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        isGsm = m.getBoolean("isGsm");
939e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
940e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
941e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
942e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Set intent notifier Bundle based on SignalStrength
943e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     *
944e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @param m intent notifier Bundle
945e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * @hide
946e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
947e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void fillInNotifierBundle(Bundle m) {
948e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("GsmSignalStrength", mGsmSignalStrength);
949e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("GsmBitErrorRate", mGsmBitErrorRate);
950e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("CdmaDbm", mCdmaDbm);
951e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("CdmaEcio", mCdmaEcio);
952e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoDbm", mEvdoDbm);
953e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoEcio", mEvdoEcio);
954e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putInt("EvdoSnr", mEvdoSnr);
9555284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteSignalStrength", mLteSignalStrength);
9565284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRsrp", mLteRsrp);
9575284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRsrq", mLteRsrq);
9585284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteRssnr", mLteRssnr);
9595284090631e638b916d9a453212e9dc802656a67Wink Saville        m.putInt("LteCqi", mLteCqi);
960e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        m.putBoolean("isGsm", Boolean.valueOf(isGsm));
961e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
9625284090631e638b916d9a453212e9dc802656a67Wink Saville
9635284090631e638b916d9a453212e9dc802656a67Wink Saville    /**
9645284090631e638b916d9a453212e9dc802656a67Wink Saville     * log
9655284090631e638b916d9a453212e9dc802656a67Wink Saville     */
9665284090631e638b916d9a453212e9dc802656a67Wink Saville    private static void log(String s) {
96722b1e80c24c5fbd702a19f2511ee2897baaf3e98Wink Saville        Rlog.w(LOG_TAG, s);
9685284090631e638b916d9a453212e9dc802656a67Wink Saville    }
969e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville}
970