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;
21b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.util.Log;
22b208a24cf521401912cfce16fce550a995cf1250Wink Saville
23b208a24cf521401912cfce16fce550a995cf1250Wink Saville/**
24b208a24cf521401912cfce16fce550a995cf1250Wink Saville * LTE signal strength related information.
25b208a24cf521401912cfce16fce550a995cf1250Wink Saville */
26c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellSignalStrengthCdma extends CellSignalStrength implements Parcelable {
27b208a24cf521401912cfce16fce550a995cf1250Wink Saville
28b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final String LOG_TAG = "CellSignalStrengthCdma";
29b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final boolean DBG = false;
30b208a24cf521401912cfce16fce550a995cf1250Wink Saville
31b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mCdmaDbm;   // This value is the RSSI value
32b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mCdmaEcio;  // This value is the Ec/Io
33b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mEvdoDbm;   // This value is the EVDO RSSI value
34b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mEvdoEcio;  // This value is the EVDO Ec/Io
35b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private int mEvdoSnr;   // Valid values are 0-8.  8 is the highest signal to noise ratio
36b208a24cf521401912cfce16fce550a995cf1250Wink Saville
37b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
38b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Empty constructor
39b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
40b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
41b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
42b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthCdma() {
43b208a24cf521401912cfce16fce550a995cf1250Wink Saville        setDefaultValues();
44b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
45b208a24cf521401912cfce16fce550a995cf1250Wink Saville
46b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
47b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Constructor
48b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
49b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
50b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
51b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthCdma(int cdmaDbm, int cdmaEcio, int evdoDbm, int evdoEcio,
52b208a24cf521401912cfce16fce550a995cf1250Wink Saville            int evdoSnr) {
53b208a24cf521401912cfce16fce550a995cf1250Wink Saville        initialize(cdmaDbm, cdmaEcio, evdoDbm, evdoEcio, evdoSnr);
54b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
55b208a24cf521401912cfce16fce550a995cf1250Wink Saville
56b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
57b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Copy constructors
58b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
59b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param s Source SignalStrength
60b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
61b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
62b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
63b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthCdma(CellSignalStrengthCdma s) {
64b208a24cf521401912cfce16fce550a995cf1250Wink Saville        copyFrom(s);
65b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
66b208a24cf521401912cfce16fce550a995cf1250Wink Saville
67b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
68b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Initialize all the values
69b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
70b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param cdmaDbm
71b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param cdmaEcio
72b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param evdoDbm
73b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param evdoEcio
74b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param evdoSnr
75b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
76b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
77b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
78b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void initialize(int cdmaDbm, int cdmaEcio, int evdoDbm, int evdoEcio, int evdoSnr) {
79b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = cdmaDbm;
80b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = cdmaEcio;
81b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = evdoDbm;
82b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = evdoEcio;
83b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = evdoSnr;
84b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
85b208a24cf521401912cfce16fce550a995cf1250Wink Saville
86b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
87b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
88b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
89b208a24cf521401912cfce16fce550a995cf1250Wink Saville    protected void copyFrom(CellSignalStrengthCdma s) {
90b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = s.mCdmaDbm;
91b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = s.mCdmaEcio;
92b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = s.mEvdoDbm;
93b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = s.mEvdoEcio;
94b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = s.mEvdoSnr;
95b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
96b208a24cf521401912cfce16fce550a995cf1250Wink Saville
97b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
98b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
99b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
100b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
101b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellSignalStrengthCdma copy() {
102b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return new CellSignalStrengthCdma(this);
103b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
104b208a24cf521401912cfce16fce550a995cf1250Wink Saville
105b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
106b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
107b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setDefaultValues() {
108b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = Integer.MAX_VALUE;
109b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = Integer.MAX_VALUE;
110b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = Integer.MAX_VALUE;
111b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = Integer.MAX_VALUE;
112b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = Integer.MAX_VALUE;
113b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
114b208a24cf521401912cfce16fce550a995cf1250Wink Saville
115b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
11682e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville     * Get signal level as an int from 0..4
117b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
118b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
119b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getLevel() {
120b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level;
121b208a24cf521401912cfce16fce550a995cf1250Wink Saville
122b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int cdmaLevel = getCdmaLevel();
123b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int evdoLevel = getEvdoLevel();
124b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
125b208a24cf521401912cfce16fce550a995cf1250Wink Saville            /* We don't know evdo, use cdma */
126b208a24cf521401912cfce16fce550a995cf1250Wink Saville            level = getCdmaLevel();
127b208a24cf521401912cfce16fce550a995cf1250Wink Saville        } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
128b208a24cf521401912cfce16fce550a995cf1250Wink Saville            /* We don't know cdma, use evdo */
129b208a24cf521401912cfce16fce550a995cf1250Wink Saville            level = getEvdoLevel();
130b208a24cf521401912cfce16fce550a995cf1250Wink Saville        } else {
131b208a24cf521401912cfce16fce550a995cf1250Wink Saville            /* We know both, use the lowest level */
132b208a24cf521401912cfce16fce550a995cf1250Wink Saville            level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
133b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
134b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getLevel=" + level);
135b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
136b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
137b208a24cf521401912cfce16fce550a995cf1250Wink Saville
138b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
139b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the LTE signal level as an asu value between 0..97, 99 is unknown
140b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
141b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
142b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
143b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getAsuLevel() {
144b208a24cf521401912cfce16fce550a995cf1250Wink Saville        final int cdmaDbm = getCdmaDbm();
145b208a24cf521401912cfce16fce550a995cf1250Wink Saville        final int cdmaEcio = getCdmaEcio();
146b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int cdmaAsuLevel;
147b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int ecioAsuLevel;
148b208a24cf521401912cfce16fce550a995cf1250Wink Saville
149b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (cdmaDbm >= -75) cdmaAsuLevel = 16;
150b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -82) cdmaAsuLevel = 8;
151b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -90) cdmaAsuLevel = 4;
152b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -95) cdmaAsuLevel = 2;
153b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -100) cdmaAsuLevel = 1;
154b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else cdmaAsuLevel = 99;
155b208a24cf521401912cfce16fce550a995cf1250Wink Saville
156b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // Ec/Io are in dB*10
157b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (cdmaEcio >= -90) ecioAsuLevel = 16;
158b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -100) ecioAsuLevel = 8;
159b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -115) ecioAsuLevel = 4;
160b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -130) ecioAsuLevel = 2;
161b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -150) ecioAsuLevel = 1;
162b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else ecioAsuLevel = 99;
163b208a24cf521401912cfce16fce550a995cf1250Wink Saville
164b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level = (cdmaAsuLevel < ecioAsuLevel) ? cdmaAsuLevel : ecioAsuLevel;
165b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getAsuLevel=" + level);
166b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
167b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
168b208a24cf521401912cfce16fce550a995cf1250Wink Saville
169b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
170b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get cdma as level 0..4
171b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
172b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getCdmaLevel() {
173b208a24cf521401912cfce16fce550a995cf1250Wink Saville        final int cdmaDbm = getCdmaDbm();
174b208a24cf521401912cfce16fce550a995cf1250Wink Saville        final int cdmaEcio = getCdmaEcio();
175b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int levelDbm;
176b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int levelEcio;
177b208a24cf521401912cfce16fce550a995cf1250Wink Saville
178b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;
179b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;
180b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;
181b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;
182b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
183b208a24cf521401912cfce16fce550a995cf1250Wink Saville
184b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // Ec/Io are in dB*10
185b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;
186b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;
187b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;
188b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;
189b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
190b208a24cf521401912cfce16fce550a995cf1250Wink Saville
191b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;
192b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getCdmaLevel=" + level);
193b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
194b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
195b208a24cf521401912cfce16fce550a995cf1250Wink Saville
196b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
197b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get Evdo as level 0..4
198b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
199b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getEvdoLevel() {
200b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int evdoDbm = getEvdoDbm();
201b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int evdoSnr = getEvdoSnr();
202b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int levelEvdoDbm;
203b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int levelEvdoSnr;
204b208a24cf521401912cfce16fce550a995cf1250Wink Saville
205b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (evdoDbm >= -65) levelEvdoDbm = SIGNAL_STRENGTH_GREAT;
206b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoDbm >= -75) levelEvdoDbm = SIGNAL_STRENGTH_GOOD;
207b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoDbm >= -90) levelEvdoDbm = SIGNAL_STRENGTH_MODERATE;
208b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoDbm >= -105) levelEvdoDbm = SIGNAL_STRENGTH_POOR;
209b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else levelEvdoDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
210b208a24cf521401912cfce16fce550a995cf1250Wink Saville
211b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (evdoSnr >= 7) levelEvdoSnr = SIGNAL_STRENGTH_GREAT;
212b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoSnr >= 5) levelEvdoSnr = SIGNAL_STRENGTH_GOOD;
213b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoSnr >= 3) levelEvdoSnr = SIGNAL_STRENGTH_MODERATE;
214b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else if (evdoSnr >= 1) levelEvdoSnr = SIGNAL_STRENGTH_POOR;
215b208a24cf521401912cfce16fce550a995cf1250Wink Saville        else levelEvdoSnr = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
216b208a24cf521401912cfce16fce550a995cf1250Wink Saville
217b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
218b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("getEvdoLevel=" + level);
219b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return level;
220b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
221b208a24cf521401912cfce16fce550a995cf1250Wink Saville
222b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
22382e6ee62b2be3c716c215e4ba72c8a12c58620fbWink Saville     * Get the signal strength as dBm
224b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
225b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
226b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getDbm() {
227b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int cdmaDbm = getCdmaDbm();
228b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int evdoDbm = getEvdoDbm();
229b208a24cf521401912cfce16fce550a995cf1250Wink Saville
230b208a24cf521401912cfce16fce550a995cf1250Wink Saville        // Use the lower value to be conservative
231b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return (cdmaDbm < evdoDbm) ? cdmaDbm : evdoDbm;
232b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
233b208a24cf521401912cfce16fce550a995cf1250Wink Saville
234b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
235b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the CDMA RSSI value in dBm
236b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
237b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getCdmaDbm() {
238b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mCdmaDbm;
239b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
240b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
241b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setCdmaDbm(int cdmaDbm) {
242b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = cdmaDbm;
243b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
244b208a24cf521401912cfce16fce550a995cf1250Wink Saville
245b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
246b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the CDMA Ec/Io value in dB*10
247b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
248b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getCdmaEcio() {
249b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mCdmaEcio;
250b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
251b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
252b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setCdmaEcio(int cdmaEcio) {
253b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = cdmaEcio;
254b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
255b208a24cf521401912cfce16fce550a995cf1250Wink Saville
256b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
257b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the EVDO RSSI value in dBm
258b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
259b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getEvdoDbm() {
260b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mEvdoDbm;
261b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
262b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
263b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setEvdoDbm(int evdoDbm) {
264b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = evdoDbm;
265b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
266b208a24cf521401912cfce16fce550a995cf1250Wink Saville
267b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
268b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the EVDO Ec/Io value in dB*10
269b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
270b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getEvdoEcio() {
271b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mEvdoEcio;
272b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
273b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
274b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setEvdoEcio(int evdoEcio) {
275b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = evdoEcio;
276b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
277b208a24cf521401912cfce16fce550a995cf1250Wink Saville
278b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
279b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest.
280b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
281b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getEvdoSnr() {
282b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mEvdoSnr;
283b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
284b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** @hide */
285b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void setEvdoSnr(int evdoSnr) {
286b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = evdoSnr;
287b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
288b208a24cf521401912cfce16fce550a995cf1250Wink Saville
289b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
290b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int hashCode() {
291b208a24cf521401912cfce16fce550a995cf1250Wink Saville        int primeNum = 31;
292b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return ((mCdmaDbm * primeNum) + (mCdmaEcio * primeNum)
293b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum));
294b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
295b208a24cf521401912cfce16fce550a995cf1250Wink Saville
296b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
297b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public boolean equals (Object o) {
298b208a24cf521401912cfce16fce550a995cf1250Wink Saville        CellSignalStrengthCdma s;
299b208a24cf521401912cfce16fce550a995cf1250Wink Saville
300b208a24cf521401912cfce16fce550a995cf1250Wink Saville        try {
301b208a24cf521401912cfce16fce550a995cf1250Wink Saville            s = (CellSignalStrengthCdma) o;
302b208a24cf521401912cfce16fce550a995cf1250Wink Saville        } catch (ClassCastException ex) {
303b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return false;
304b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
305b208a24cf521401912cfce16fce550a995cf1250Wink Saville
306b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (o == null) {
307b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return false;
308b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
309b208a24cf521401912cfce16fce550a995cf1250Wink Saville
310b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mCdmaDbm == s.mCdmaDbm
311b208a24cf521401912cfce16fce550a995cf1250Wink Saville                && mCdmaEcio == s.mCdmaEcio
312b208a24cf521401912cfce16fce550a995cf1250Wink Saville                && mEvdoDbm == s.mEvdoDbm
313b208a24cf521401912cfce16fce550a995cf1250Wink Saville                && mEvdoEcio == s.mEvdoEcio
314b208a24cf521401912cfce16fce550a995cf1250Wink Saville                && mEvdoSnr == s.mEvdoSnr;
315b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
316b208a24cf521401912cfce16fce550a995cf1250Wink Saville
317b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
318b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @return string representation.
319b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
320b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
321b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public String toString() {
322b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return "CellSignalStrengthCdma:"
323b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " cdmaDbm=" + mCdmaDbm
324b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " cdmaEcio=" + mCdmaEcio
325b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " evdoDbm=" + mEvdoDbm
326b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " evdoEcio=" + mEvdoEcio
327b208a24cf521401912cfce16fce550a995cf1250Wink Saville                + " evdoSnr=" + mEvdoSnr;
328b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
329b208a24cf521401912cfce16fce550a995cf1250Wink Saville
330b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
331b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
332b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void writeToParcel(Parcel dest, int flags) {
333b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("writeToParcel(Parcel, int): " + toString());
334b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mCdmaDbm);
335b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mCdmaEcio);
336b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mEvdoDbm);
337b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mEvdoEcio);
338b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mEvdoSnr);
339b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
340b208a24cf521401912cfce16fce550a995cf1250Wink Saville
341b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
342b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * Construct a SignalStrength object from the given parcel
343b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * where the TYPE_LTE token is already been processed.
344b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
345b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private CellSignalStrengthCdma(Parcel in) {
346b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaDbm = in.readInt();
347b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCdmaEcio = in.readInt();
348b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoDbm = in.readInt();
349b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoEcio = in.readInt();
350b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mEvdoSnr = in.readInt();
351b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("CellSignalStrengthCdma(Parcel): " + toString());
352b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
353b208a24cf521401912cfce16fce550a995cf1250Wink Saville
354b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
355b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
356b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int describeContents() {
357b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return 0;
358b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
359b208a24cf521401912cfce16fce550a995cf1250Wink Saville
360b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
361b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @SuppressWarnings("hiding")
362b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public static final Parcelable.Creator<CellSignalStrengthCdma> CREATOR =
363b208a24cf521401912cfce16fce550a995cf1250Wink Saville            new Parcelable.Creator<CellSignalStrengthCdma>() {
364b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
365b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellSignalStrengthCdma createFromParcel(Parcel in) {
366c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville            return new CellSignalStrengthCdma(in);
367b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
368b208a24cf521401912cfce16fce550a995cf1250Wink Saville
369b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
370b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellSignalStrengthCdma[] newArray(int size) {
371b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return new CellSignalStrengthCdma[size];
372b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
373b208a24cf521401912cfce16fce550a995cf1250Wink Saville    };
374b208a24cf521401912cfce16fce550a995cf1250Wink Saville
375b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
376b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * log
377b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
378b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static void log(String s) {
379b208a24cf521401912cfce16fce550a995cf1250Wink Saville        Log.w(LOG_TAG, s);
380b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
381b208a24cf521401912cfce16fce550a995cf1250Wink Saville}
382