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