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