1b208a24cf521401912cfce16fce550a995cf1250Wink Saville/* 2b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Copyright (C) 2012 The Android Open Source Project 3b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 4b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5b208a24cf521401912cfce16fce550a995cf1250Wink Saville * you may not use this file except in compliance with the License. 6b208a24cf521401912cfce16fce550a995cf1250Wink Saville * You may obtain a copy of the License at 7b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 8b208a24cf521401912cfce16fce550a995cf1250Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 10b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Unless required by applicable law or agreed to in writing, software 11b208a24cf521401912cfce16fce550a995cf1250Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12b208a24cf521401912cfce16fce550a995cf1250Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b208a24cf521401912cfce16fce550a995cf1250Wink Saville * See the License for the specific language governing permissions and 14b208a24cf521401912cfce16fce550a995cf1250Wink Saville * limitations under the License. 15b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 16b208a24cf521401912cfce16fce550a995cf1250Wink Saville 17b208a24cf521401912cfce16fce550a995cf1250Wink Savillepackage android.telephony; 18b208a24cf521401912cfce16fce550a995cf1250Wink Saville 19b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcel; 20b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcelable; 2122b1e80c24c5fbd702a19f2511ee2897baaf3e98Wink Savilleimport android.telephony.Rlog; 22b208a24cf521401912cfce16fce550a995cf1250Wink Saville 23017e7f90eea67b0ecd002d1ab193f60238ad0555Nathan Haroldimport java.util.Objects; 24017e7f90eea67b0ecd002d1ab193f60238ad0555Nathan Harold 25b208a24cf521401912cfce16fce550a995cf1250Wink Saville/** 26b208a24cf521401912cfce16fce550a995cf1250Wink Saville * LTE signal strength related information. 27b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 28c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellSignalStrengthLte extends CellSignalStrength implements Parcelable { 29b208a24cf521401912cfce16fce550a995cf1250Wink Saville 30b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final String LOG_TAG = "CellSignalStrengthLte"; 31b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final boolean DBG = false; 32b208a24cf521401912cfce16fce550a995cf1250Wink Saville 33b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mSignalStrength; 34b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mRsrp; 35b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mRsrq; 36b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mRssnr; 37b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mCqi; 38b208a24cf521401912cfce16fce550a995cf1250Wink Saville private int mTimingAdvance; 39b208a24cf521401912cfce16fce550a995cf1250Wink Saville 409d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold /** @hide */ 41b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellSignalStrengthLte() { 42b208a24cf521401912cfce16fce550a995cf1250Wink Saville setDefaultValues(); 43b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 44b208a24cf521401912cfce16fce550a995cf1250Wink Saville 459d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold /** @hide */ 46b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellSignalStrengthLte(int signalStrength, int rsrp, int rsrq, int rssnr, int cqi, 47b208a24cf521401912cfce16fce550a995cf1250Wink Saville int timingAdvance) { 489d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold mSignalStrength = signalStrength; 49b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrp = rsrp; 50b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrq = rsrq; 51b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRssnr = rssnr; 52b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCqi = cqi; 53b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTimingAdvance = timingAdvance; 54b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 55b208a24cf521401912cfce16fce550a995cf1250Wink Saville 569d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold /** @hide */ 579d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold public CellSignalStrengthLte(CellSignalStrengthLte s) { 589d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold copyFrom(s); 592900a3fae6e3da65522ffc16673ab1757352afbbWink Saville } 602900a3fae6e3da65522ffc16673ab1757352afbbWink Saville 619d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold /** @hide */ 62b208a24cf521401912cfce16fce550a995cf1250Wink Saville protected void copyFrom(CellSignalStrengthLte s) { 63b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSignalStrength = s.mSignalStrength; 64b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrp = s.mRsrp; 65b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrq = s.mRsrq; 66b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRssnr = s.mRssnr; 67b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCqi = s.mCqi; 68b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTimingAdvance = s.mTimingAdvance; 69b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 70b208a24cf521401912cfce16fce550a995cf1250Wink Saville 719d729c5304508b355345e5490d69f9509bb1cb4dNathan Harold /** @hide */ 72b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 73b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellSignalStrengthLte copy() { 74b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellSignalStrengthLte(this); 75b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 76b208a24cf521401912cfce16fce550a995cf1250Wink Saville 77b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** @hide */ 78b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 79b208a24cf521401912cfce16fce550a995cf1250Wink Saville public void setDefaultValues() { 80b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSignalStrength = Integer.MAX_VALUE; 81b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrp = Integer.MAX_VALUE; 82b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRsrq = Integer.MAX_VALUE; 83b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRssnr = Integer.MAX_VALUE; 84b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCqi = Integer.MAX_VALUE; 85b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTimingAdvance = Integer.MAX_VALUE; 86b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 87b208a24cf521401912cfce16fce550a995cf1250Wink Saville 88b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 8982e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville * Get signal level as an int from 0..4 90b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 91b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 92b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getLevel() { 93b208a24cf521401912cfce16fce550a995cf1250Wink Saville int levelRsrp = 0; 94b208a24cf521401912cfce16fce550a995cf1250Wink Saville int levelRssnr = 0; 95b208a24cf521401912cfce16fce550a995cf1250Wink Saville 96b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (mRsrp == Integer.MAX_VALUE) levelRsrp = 0; 97b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRsrp >= -95) levelRsrp = SIGNAL_STRENGTH_GREAT; 98b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRsrp >= -105) levelRsrp = SIGNAL_STRENGTH_GOOD; 99b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRsrp >= -115) levelRsrp = SIGNAL_STRENGTH_MODERATE; 100b208a24cf521401912cfce16fce550a995cf1250Wink Saville else levelRsrp = SIGNAL_STRENGTH_POOR; 101b208a24cf521401912cfce16fce550a995cf1250Wink Saville 102b208a24cf521401912cfce16fce550a995cf1250Wink Saville // See RIL_LTE_SignalStrength in ril.h 103b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (mRssnr == Integer.MAX_VALUE) levelRssnr = 0; 104b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRssnr >= 45) levelRssnr = SIGNAL_STRENGTH_GREAT; 105b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRssnr >= 10) levelRssnr = SIGNAL_STRENGTH_GOOD; 106b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRssnr >= -30) levelRssnr = SIGNAL_STRENGTH_MODERATE; 107b208a24cf521401912cfce16fce550a995cf1250Wink Saville else levelRssnr = SIGNAL_STRENGTH_POOR; 108b208a24cf521401912cfce16fce550a995cf1250Wink Saville 109b208a24cf521401912cfce16fce550a995cf1250Wink Saville int level; 110b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (mRsrp == Integer.MAX_VALUE) 111b208a24cf521401912cfce16fce550a995cf1250Wink Saville level = levelRssnr; 112b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (mRssnr == Integer.MAX_VALUE) 113b208a24cf521401912cfce16fce550a995cf1250Wink Saville level = levelRsrp; 114b208a24cf521401912cfce16fce550a995cf1250Wink Saville else 115b208a24cf521401912cfce16fce550a995cf1250Wink Saville level = (levelRssnr < levelRsrp) ? levelRssnr : levelRsrp; 116b208a24cf521401912cfce16fce550a995cf1250Wink Saville 117b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("Lte rsrp level: " + levelRsrp 118b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " snr level: " + levelRssnr + " level: " + level); 119b208a24cf521401912cfce16fce550a995cf1250Wink Saville return level; 120b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 121b208a24cf521401912cfce16fce550a995cf1250Wink Saville 122b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 123211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su * Get reference signal received quality 12414388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold */ 12514388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold public int getRsrq() { 12614388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold return mRsrq; 12714388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold } 12814388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold 12914388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold /** 130211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su * Get reference signal signal-to-noise ratio 13114388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold */ 13214388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold public int getRssnr() { 13314388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold return mRssnr; 13414388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold } 13514388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold 13614388588268596c72cff1dbabfb97b1bd4c58ea1Nathan Harold /** 137211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su * Get reference signal received power 138211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su */ 139211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su public int getRsrp() { 140211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su return mRsrp; 141211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su } 142211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su 143211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su /** 144211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su * Get channel quality indicator 145211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su */ 146211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su public int getCqi() { 147211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su return mCqi; 148211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su } 149211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su 150211c1c2ca815b101ed9bc65a9ab0407c3ce97836Kevin Su /** 15182e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville * Get signal strength as dBm 152b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 153b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 154b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getDbm() { 155b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mRsrp; 156b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 157b208a24cf521401912cfce16fce550a995cf1250Wink Saville 158b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 159b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Get the LTE signal level as an asu value between 0..97, 99 is unknown 160b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69 161b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 162b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 163b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getAsuLevel() { 164b208a24cf521401912cfce16fce550a995cf1250Wink Saville int lteAsuLevel = 99; 165b208a24cf521401912cfce16fce550a995cf1250Wink Saville int lteDbm = getDbm(); 166efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold if (lteDbm == Integer.MAX_VALUE) lteAsuLevel = 99; 167efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold else if (lteDbm <= -140) lteAsuLevel = 0; 168b208a24cf521401912cfce16fce550a995cf1250Wink Saville else if (lteDbm >= -43) lteAsuLevel = 97; 169b208a24cf521401912cfce16fce550a995cf1250Wink Saville else lteAsuLevel = lteDbm + 140; 170b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("Lte Asu level: "+lteAsuLevel); 171b208a24cf521401912cfce16fce550a995cf1250Wink Saville return lteAsuLevel; 172b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 173b208a24cf521401912cfce16fce550a995cf1250Wink Saville 174b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 175e2270652141700626b5c11d56e9a97cb0f8e1957Nathan Harold * Get the timing advance value for LTE, as a value in range of 0..1282. 17690bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold * Integer.MAX_VALUE is reported when there is no active RRC 17790bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold * connection. Refer to 3GPP 36.213 Sec 4.2.3 17890bc8e30ad3b0c211ef6e4a2e54cfadd28df1b2dNathan Harold * @return the LTE timing advance, if available. 179b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 180b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getTimingAdvance() { 181b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mTimingAdvance; 182b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 183b208a24cf521401912cfce16fce550a995cf1250Wink Saville 184b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 185b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 186017e7f90eea67b0ecd002d1ab193f60238ad0555Nathan Harold return Objects.hash(mSignalStrength, mRsrp, mRsrq, mRssnr, mCqi, mTimingAdvance); 187b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 188b208a24cf521401912cfce16fce550a995cf1250Wink Saville 189b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 190b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals (Object o) { 191b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellSignalStrengthLte s; 192b208a24cf521401912cfce16fce550a995cf1250Wink Saville 193b208a24cf521401912cfce16fce550a995cf1250Wink Saville try { 194b208a24cf521401912cfce16fce550a995cf1250Wink Saville s = (CellSignalStrengthLte) o; 195b208a24cf521401912cfce16fce550a995cf1250Wink Saville } catch (ClassCastException ex) { 196b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 197b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 198b208a24cf521401912cfce16fce550a995cf1250Wink Saville 199b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (o == null) { 200b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 201b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 202b208a24cf521401912cfce16fce550a995cf1250Wink Saville 203b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mSignalStrength == s.mSignalStrength 204b208a24cf521401912cfce16fce550a995cf1250Wink Saville && mRsrp == s.mRsrp 205b208a24cf521401912cfce16fce550a995cf1250Wink Saville && mRsrq == s.mRsrq 206b208a24cf521401912cfce16fce550a995cf1250Wink Saville && mRssnr == s.mRssnr 207b208a24cf521401912cfce16fce550a995cf1250Wink Saville && mCqi == s.mCqi 208b208a24cf521401912cfce16fce550a995cf1250Wink Saville && mTimingAdvance == s.mTimingAdvance; 209b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 210b208a24cf521401912cfce16fce550a995cf1250Wink Saville 211b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 212b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @return string representation. 213b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 214b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 215b208a24cf521401912cfce16fce550a995cf1250Wink Saville public String toString() { 216b208a24cf521401912cfce16fce550a995cf1250Wink Saville return "CellSignalStrengthLte:" 217b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " ss=" + mSignalStrength 218b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " rsrp=" + mRsrp 219b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " rsrq=" + mRsrq 220b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " rssnr=" + mRssnr 221b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " cqi=" + mCqi 222b208a24cf521401912cfce16fce550a995cf1250Wink Saville + " ta=" + mTimingAdvance; 223b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 224b208a24cf521401912cfce16fce550a995cf1250Wink Saville 225b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 226b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 227b208a24cf521401912cfce16fce550a995cf1250Wink Saville public void writeToParcel(Parcel dest, int flags) { 228b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 229b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mSignalStrength); 230dbf09ffed27b35cf310e3c53402edf0f56f5e7d1Jaime Lopez // Need to multiply rsrp and rsrq by -1 231dbf09ffed27b35cf310e3c53402edf0f56f5e7d1Jaime Lopez // to ensure consistency when reading values written here 232efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold // unless the values are invalid 233efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold dest.writeInt(mRsrp * (mRsrp != Integer.MAX_VALUE ? -1 : 1)); 234efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold dest.writeInt(mRsrq * (mRsrq != Integer.MAX_VALUE ? -1 : 1)); 235b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mRssnr); 236b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mCqi); 237b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mTimingAdvance); 238b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 239b208a24cf521401912cfce16fce550a995cf1250Wink Saville 240b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 241b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Construct a SignalStrength object from the given parcel 242b208a24cf521401912cfce16fce550a995cf1250Wink Saville * where the token is already been processed. 243b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 244b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellSignalStrengthLte(Parcel in) { 245b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSignalStrength = in.readInt(); 246dbf09ffed27b35cf310e3c53402edf0f56f5e7d1Jaime Lopez // rsrp and rsrq are written into the parcel as positive values. 247efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold // Need to convert into negative values unless the values are invalid 248efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold mRsrp = in.readInt(); 249efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold if (mRsrp != Integer.MAX_VALUE) mRsrp *= -1; 250efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold mRsrq = in.readInt(); 251efbb8f337658f417a3af5f8e656eb5d23372596eNathan Harold if (mRsrq != Integer.MAX_VALUE) mRsrq *= -1; 252b208a24cf521401912cfce16fce550a995cf1250Wink Saville mRssnr = in.readInt(); 253b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCqi = in.readInt(); 254b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTimingAdvance = in.readInt(); 255b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("CellSignalStrengthLte(Parcel): " + toString()); 256b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 257b208a24cf521401912cfce16fce550a995cf1250Wink Saville 258b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 259b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 260b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int describeContents() { 261b208a24cf521401912cfce16fce550a995cf1250Wink Saville return 0; 262b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 263b208a24cf521401912cfce16fce550a995cf1250Wink Saville 264b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 265b208a24cf521401912cfce16fce550a995cf1250Wink Saville @SuppressWarnings("hiding") 266b208a24cf521401912cfce16fce550a995cf1250Wink Saville public static final Parcelable.Creator<CellSignalStrengthLte> CREATOR = 267b208a24cf521401912cfce16fce550a995cf1250Wink Saville new Parcelable.Creator<CellSignalStrengthLte>() { 268b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 269b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellSignalStrengthLte createFromParcel(Parcel in) { 270c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville return new CellSignalStrengthLte(in); 271b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 272b208a24cf521401912cfce16fce550a995cf1250Wink Saville 273b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 274b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellSignalStrengthLte[] newArray(int size) { 275b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellSignalStrengthLte[size]; 276b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 277b208a24cf521401912cfce16fce550a995cf1250Wink Saville }; 278b208a24cf521401912cfce16fce550a995cf1250Wink Saville 279b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 280b208a24cf521401912cfce16fce550a995cf1250Wink Saville * log 281b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 282b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static void log(String s) { 28322b1e80c24c5fbd702a19f2511ee2897baaf3e98Wink Saville Rlog.w(LOG_TAG, s); 284b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 285b208a24cf521401912cfce16fce550a995cf1250Wink Saville} 286