OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / telephony / java / android / telephony / SignalStrength.java
1 /*
2  * Copyright (C) 2009 Qualcomm Innovation Center, Inc.  All Rights Reserved.
3  * Copyright (C) 2009 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 package android.telephony;
19
20 import android.os.Bundle;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 import android.util.Log;
24
25 /**
26  * Contains phone signal strength related information.
27  */
28 public class SignalStrength implements Parcelable {
29
30     static final String LOG_TAG = "PHONE";
31
32     private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
33     private int mGsmBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
34     private int mCdmaDbm;   // This value is the RSSI value
35     private int mCdmaEcio;  // This value is the Ec/Io
36     private int mEvdoDbm;   // This value is the EVDO RSSI value
37     private int mEvdoEcio;  // This value is the EVDO Ec/Io
38     private int mEvdoSnr;   // Valid values are 0-8.  8 is the highest signal to noise ratio
39
40     private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult
41
42     /**
43      * Create a new SignalStrength from a intent notifier Bundle
44      *
45      * This method is used by PhoneStateIntentReceiver and maybe by
46      * external applications.
47      *
48      * @param m Bundle from intent notifier
49      * @return newly created SignalStrength
50      *
51      * @hide
52      */
53     public static SignalStrength newFromBundle(Bundle m) {
54         SignalStrength ret;
55         ret = new SignalStrength();
56         ret.setFromNotifierBundle(m);
57         return ret;
58     }
59
60     /**
61      * Empty constructor
62      *
63      * @hide
64      */
65     public SignalStrength() {
66         mGsmSignalStrength = 99;
67         mGsmBitErrorRate = -1;
68         mCdmaDbm = -1;
69         mCdmaEcio = -1;
70         mEvdoDbm = -1;
71         mEvdoEcio = -1;
72         mEvdoSnr = -1;
73         isGsm = true;
74     }
75
76     /**
77      * Constructor
78      *
79      * @hide
80      */
81     public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
82             int cdmaDbm, int cdmaEcio,
83             int evdoDbm, int evdoEcio, int evdoSnr, boolean gsm) {
84         mGsmSignalStrength = gsmSignalStrength;
85         mGsmBitErrorRate = gsmBitErrorRate;
86         mCdmaDbm = cdmaDbm;
87         mCdmaEcio = cdmaEcio;
88         mEvdoDbm = evdoDbm;
89         mEvdoEcio = evdoEcio;
90         mEvdoSnr = evdoSnr;
91         isGsm = gsm;
92     }
93
94     /**
95      * Copy constructors
96      *
97      * @param s Source SignalStrength
98      *
99      * @hide
100      */
101     public SignalStrength(SignalStrength s) {
102         copyFrom(s);
103     }
104
105     /**
106      * @hide
107      */
108     protected void copyFrom(SignalStrength s) {
109         mGsmSignalStrength = s.mGsmSignalStrength;
110         mGsmBitErrorRate = s.mGsmBitErrorRate;
111         mCdmaDbm = s.mCdmaDbm;
112         mCdmaEcio = s.mCdmaEcio;
113         mEvdoDbm = s.mEvdoDbm;
114         mEvdoEcio = s.mEvdoEcio;
115         mEvdoSnr = s.mEvdoSnr;
116         isGsm = s.isGsm;
117     }
118
119     /**
120      * Construct a SignalStrength object from the given parcel.
121      *
122      * @hide
123      */
124     public SignalStrength(Parcel in) {
125         mGsmSignalStrength = in.readInt();
126         mGsmBitErrorRate = in.readInt();
127         mCdmaDbm = in.readInt();
128         mCdmaEcio = in.readInt();
129         mEvdoDbm = in.readInt();
130         mEvdoEcio = in.readInt();
131         mEvdoSnr = in.readInt();
132         isGsm = (in.readInt() != 0);
133     }
134
135     /**
136      * {@link Parcelable#writeToParcel}
137      */
138     public void writeToParcel(Parcel out, int flags) {
139         out.writeInt(mGsmSignalStrength);
140         out.writeInt(mGsmBitErrorRate);
141         out.writeInt(mCdmaDbm);
142         out.writeInt(mCdmaEcio);
143         out.writeInt(mEvdoDbm);
144         out.writeInt(mEvdoEcio);
145         out.writeInt(mEvdoSnr);
146         out.writeInt(isGsm ? 1 : 0);
147     }
148
149     /**
150      * {@link Parcelable#describeContents}
151      */
152     public int describeContents() {
153         return 0;
154     }
155
156     /**
157      * {@link Parcelable.Creator}
158      *
159      * @hide
160      */
161     public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
162         public SignalStrength createFromParcel(Parcel in) {
163             return new SignalStrength(in);
164         }
165
166         public SignalStrength[] newArray(int size) {
167             return new SignalStrength[size];
168         }
169     };
170
171     /**
172      * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS 27.007 8.5
173      */
174     public int getGsmSignalStrength() {
175         return this.mGsmSignalStrength;
176     }
177
178     /**
179      * Get the GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5
180      */
181     public int getGsmBitErrorRate() {
182         return this.mGsmBitErrorRate;
183     }
184
185     /**
186      * Get the CDMA RSSI value in dBm
187      */
188     public int getCdmaDbm() {
189         return this.mCdmaDbm;
190     }
191
192     /**
193      * Get the CDMA Ec/Io value in dB*10
194      */
195     public int getCdmaEcio() {
196         return this.mCdmaEcio;
197     }
198
199     /**
200      * Get the EVDO RSSI value in dBm
201      */
202     public int getEvdoDbm() {
203         return this.mEvdoDbm;
204     }
205
206     /**
207      * Get the EVDO Ec/Io value in dB*10
208      */
209     public int getEvdoEcio() {
210         return this.mEvdoEcio;
211     }
212
213     /**
214      * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest.
215      */
216     public int getEvdoSnr() {
217         return this.mEvdoSnr;
218     }
219
220     /**
221      * @return true if this is for GSM
222      */
223     public boolean isGsm() {
224         return this.isGsm;
225     }
226
227     /**
228      * @return hash code
229      */
230     @Override
231     public int hashCode() {
232         return ((mGsmSignalStrength * 0x1234)
233                 + mGsmBitErrorRate
234                 + mCdmaDbm + mCdmaEcio
235                 + mEvdoDbm + mEvdoEcio + mEvdoSnr
236                 + (isGsm ? 1 : 0));
237     }
238
239     /**
240      * @return true if the signal strengths are the same
241      */
242     @Override
243     public boolean equals (Object o) {
244         SignalStrength s;
245
246         try {
247             s = (SignalStrength) o;
248         } catch (ClassCastException ex) {
249             return false;
250         }
251
252         if (o == null) {
253             return false;
254         }
255
256         return (mGsmSignalStrength == s.mGsmSignalStrength
257                 && mGsmBitErrorRate == s.mGsmBitErrorRate
258                 && mCdmaDbm == s.mCdmaDbm
259                 && mCdmaEcio == s.mCdmaEcio
260                 && mEvdoDbm == s.mEvdoDbm
261                 && mEvdoEcio == s.mEvdoEcio
262                 && mEvdoSnr == s.mEvdoSnr
263                 && isGsm == s.isGsm);
264     }
265
266     /**
267      * @return string representation.
268      */
269     @Override
270     public String toString() {
271         return ("SignalStrength:"
272                 + " " + mGsmSignalStrength
273                 + " " + mGsmBitErrorRate
274                 + " " + mCdmaDbm
275                 + " " + mCdmaEcio
276                 + " " + mEvdoDbm
277                 + " " + mEvdoEcio
278                 + " " + mEvdoSnr
279                 + " " + (isGsm ? "gsm" : "cdma"));
280     }
281
282     /**
283      * Test whether two objects hold the same data values or both are null
284      *
285      * @param a first obj
286      * @param b second obj
287      * @return true if two objects equal or both are null
288      * @hide
289      */
290     private static boolean equalsHandlesNulls (Object a, Object b) {
291         return (a == null) ? (b == null) : a.equals (b);
292     }
293
294     /**
295      * Set SignalStrength based on intent notifier map
296      *
297      * @param m intent notifier map
298      * @hide
299      */
300     private void setFromNotifierBundle(Bundle m) {
301         mGsmSignalStrength = m.getInt("GsmSignalStrength");
302         mGsmBitErrorRate = m.getInt("GsmBitErrorRate");
303         mCdmaDbm = m.getInt("CdmaDbm");
304         mCdmaEcio = m.getInt("CdmaEcio");
305         mEvdoDbm = m.getInt("EvdoDbm");
306         mEvdoEcio = m.getInt("EvdoEcio");
307         mEvdoSnr = m.getInt("EvdoSnr");
308         isGsm = m.getBoolean("isGsm");
309     }
310
311     /**
312      * Set intent notifier Bundle based on SignalStrength
313      *
314      * @param m intent notifier Bundle
315      * @hide
316      */
317     public void fillInNotifierBundle(Bundle m) {
318         m.putInt("GsmSignalStrength", mGsmSignalStrength);
319         m.putInt("GsmBitErrorRate", mGsmBitErrorRate);
320         m.putInt("CdmaDbm", mCdmaDbm);
321         m.putInt("CdmaEcio", mCdmaEcio);
322         m.putInt("EvdoDbm", mEvdoDbm);
323         m.putInt("EvdoEcio", mEvdoEcio);
324         m.putInt("EvdoSnr", mEvdoSnr);
325         m.putBoolean("isGsm", Boolean.valueOf(isGsm));
326     }
327 }