OSDN Git Service

am 0fbe1dfb: Merge "cherrypick from master: Change-Id: I169749dc594ca1d79a802db4c53ec...
[android-x86/frameworks-base.git] / 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     private static final String LOG_TAG = "SignalStrength";
31     private static final boolean DBG = false;
32
33     /** @hide */
34     public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
35     /** @hide */
36     public static final int SIGNAL_STRENGTH_POOR = 1;
37     /** @hide */
38     public static final int SIGNAL_STRENGTH_MODERATE = 2;
39     /** @hide */
40     public static final int SIGNAL_STRENGTH_GOOD = 3;
41     /** @hide */
42     public static final int SIGNAL_STRENGTH_GREAT = 4;
43     /** @hide */
44     public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
45     /** @hide */
46     public static final String[] SIGNAL_STRENGTH_NAMES = {
47         "none", "poor", "moderate", "good", "great"
48     };
49
50     private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
51     private int mGsmBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
52     private int mCdmaDbm;   // This value is the RSSI value
53     private int mCdmaEcio;  // This value is the Ec/Io
54     private int mEvdoDbm;   // This value is the EVDO RSSI value
55     private int mEvdoEcio;  // This value is the EVDO Ec/Io
56     private int mEvdoSnr;   // Valid values are 0-8.  8 is the highest signal to noise ratio
57     private int mLteSignalStrength;
58     private int mLteRsrp;
59     private int mLteRsrq;
60     private int mLteRssnr;
61     private int mLteCqi;
62
63     private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult
64
65     /**
66      * Create a new SignalStrength from a intent notifier Bundle
67      *
68      * This method is used by PhoneStateIntentReceiver and maybe by
69      * external applications.
70      *
71      * @param m Bundle from intent notifier
72      * @return newly created SignalStrength
73      *
74      * @hide
75      */
76     public static SignalStrength newFromBundle(Bundle m) {
77         SignalStrength ret;
78         ret = new SignalStrength();
79         ret.setFromNotifierBundle(m);
80         return ret;
81     }
82
83     /**
84      * Empty constructor
85      *
86      * @hide
87      */
88     public SignalStrength() {
89         mGsmSignalStrength = 99;
90         mGsmBitErrorRate = -1;
91         mCdmaDbm = -1;
92         mCdmaEcio = -1;
93         mEvdoDbm = -1;
94         mEvdoEcio = -1;
95         mEvdoSnr = -1;
96         mLteSignalStrength = -1;
97         mLteRsrp = -1;
98         mLteRsrq = -1;
99         mLteRssnr = -1;
100         mLteCqi = -1;
101         isGsm = true;
102     }
103
104     /**
105      * Constructor
106      *
107      * @hide
108      */
109     public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
110             int cdmaDbm, int cdmaEcio,
111             int evdoDbm, int evdoEcio, int evdoSnr,
112             int lteSignalStrength, int lteRsrp, int lteRsrq, int lteRssnr, int lteCqi,
113             boolean gsm) {
114         mGsmSignalStrength = gsmSignalStrength;
115         mGsmBitErrorRate = gsmBitErrorRate;
116         mCdmaDbm = cdmaDbm;
117         mCdmaEcio = cdmaEcio;
118         mEvdoDbm = evdoDbm;
119         mEvdoEcio = evdoEcio;
120         mEvdoSnr = evdoSnr;
121         mLteSignalStrength = lteSignalStrength;
122         mLteRsrp = lteRsrp;
123         mLteRsrq = lteRsrq;
124         mLteRssnr = lteRssnr;
125         mLteCqi = lteCqi;
126         isGsm = gsm;
127     }
128
129     /**
130      * Constructor
131      *
132      * @hide
133      */
134     public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate,
135             int cdmaDbm, int cdmaEcio,
136             int evdoDbm, int evdoEcio, int evdoSnr,
137             boolean gsm) {
138         this(gsmSignalStrength, gsmBitErrorRate, cdmaDbm, cdmaEcio,
139                 evdoDbm, evdoEcio, evdoSnr, -1, -1, -1, -1, -1, gsm);
140     }
141
142     /**
143      * Copy constructors
144      *
145      * @param s Source SignalStrength
146      *
147      * @hide
148      */
149     public SignalStrength(SignalStrength s) {
150         copyFrom(s);
151     }
152
153     /**
154      * @hide
155      */
156     protected void copyFrom(SignalStrength s) {
157         mGsmSignalStrength = s.mGsmSignalStrength;
158         mGsmBitErrorRate = s.mGsmBitErrorRate;
159         mCdmaDbm = s.mCdmaDbm;
160         mCdmaEcio = s.mCdmaEcio;
161         mEvdoDbm = s.mEvdoDbm;
162         mEvdoEcio = s.mEvdoEcio;
163         mEvdoSnr = s.mEvdoSnr;
164         mLteSignalStrength = s.mLteSignalStrength;
165         mLteRsrp = s.mLteRsrp;
166         mLteRsrq = s.mLteRsrq;
167         mLteRssnr = s.mLteRssnr;
168         mLteCqi = s.mLteCqi;
169         isGsm = s.isGsm;
170     }
171
172     /**
173      * Construct a SignalStrength object from the given parcel.
174      *
175      * @hide
176      */
177     public SignalStrength(Parcel in) {
178         mGsmSignalStrength = in.readInt();
179         mGsmBitErrorRate = in.readInt();
180         mCdmaDbm = in.readInt();
181         mCdmaEcio = in.readInt();
182         mEvdoDbm = in.readInt();
183         mEvdoEcio = in.readInt();
184         mEvdoSnr = in.readInt();
185         mLteSignalStrength = in.readInt();
186         mLteRsrp = in.readInt();
187         mLteRsrq = in.readInt();
188         mLteRssnr = in.readInt();
189         mLteCqi = in.readInt();
190         isGsm = (in.readInt() != 0);
191     }
192
193     /**
194      * {@link Parcelable#writeToParcel}
195      */
196     public void writeToParcel(Parcel out, int flags) {
197         out.writeInt(mGsmSignalStrength);
198         out.writeInt(mGsmBitErrorRate);
199         out.writeInt(mCdmaDbm);
200         out.writeInt(mCdmaEcio);
201         out.writeInt(mEvdoDbm);
202         out.writeInt(mEvdoEcio);
203         out.writeInt(mEvdoSnr);
204         out.writeInt(mLteSignalStrength);
205         out.writeInt(mLteRsrp);
206         out.writeInt(mLteRsrq);
207         out.writeInt(mLteRssnr);
208         out.writeInt(mLteCqi);
209         out.writeInt(isGsm ? 1 : 0);
210     }
211
212     /**
213      * {@link Parcelable#describeContents}
214      */
215     public int describeContents() {
216         return 0;
217     }
218
219     /**
220      * {@link Parcelable.Creator}
221      *
222      * @hide
223      */
224     public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() {
225         public SignalStrength createFromParcel(Parcel in) {
226             return new SignalStrength(in);
227         }
228
229         public SignalStrength[] newArray(int size) {
230             return new SignalStrength[size];
231         }
232     };
233
234     /**
235      * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS 27.007 8.5
236      */
237     public int getGsmSignalStrength() {
238         return this.mGsmSignalStrength;
239     }
240
241     /**
242      * Get the GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5
243      */
244     public int getGsmBitErrorRate() {
245         return this.mGsmBitErrorRate;
246     }
247
248     /**
249      * Get the CDMA RSSI value in dBm
250      */
251     public int getCdmaDbm() {
252         return this.mCdmaDbm;
253     }
254
255     /**
256      * Get the CDMA Ec/Io value in dB*10
257      */
258     public int getCdmaEcio() {
259         return this.mCdmaEcio;
260     }
261
262     /**
263      * Get the EVDO RSSI value in dBm
264      */
265     public int getEvdoDbm() {
266         return this.mEvdoDbm;
267     }
268
269     /**
270      * Get the EVDO Ec/Io value in dB*10
271      */
272     public int getEvdoEcio() {
273         return this.mEvdoEcio;
274     }
275
276     /**
277      * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest.
278      */
279     public int getEvdoSnr() {
280         return this.mEvdoSnr;
281     }
282
283     /**
284      * Get signal level as an int from 0..4
285      *
286      * @hide
287      */
288     public int getLevel() {
289         int level;
290
291         if (isGsm) {
292             if ((mLteSignalStrength == -1)
293                     && (mLteRsrp == -1)
294                     && (mLteRsrq == -1)
295                     && (mLteRssnr == -1)
296                     && (mLteCqi == -1)) {
297                 level = getGsmLevel();
298             } else {
299                 level = getLteLevel();
300             }
301         } else {
302             int cdmaLevel = getCdmaLevel();
303             int evdoLevel = getEvdoLevel();
304             if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
305                 /* We don't know evdo, use cdma */
306                 level = getCdmaLevel();
307             } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
308                 /* We don't know cdma, use evdo */
309                 level = getEvdoLevel();
310             } else {
311                 /* We know both, use the lowest level */
312                 level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel;
313             }
314         }
315         if (DBG) log("getLevel=" + level);
316         return level;
317     }
318
319     /**
320      * Get the signal level as an asu value between 0..31, 99 is unknown
321      *
322      * @hide
323      */
324     public int getAsuLevel() {
325         int asuLevel;
326         if (isGsm) {
327             if ((mLteSignalStrength == -1)
328                     && (mLteRsrp == -1)
329                     && (mLteRsrq == -1)
330                     && (mLteRssnr == -1)
331                     && (mLteCqi == -1)) {
332                 asuLevel = getGsmAsuLevel();
333             } else {
334                 asuLevel = getLteAsuLevel();
335             }
336         } else {
337             int cdmaAsuLevel = getCdmaAsuLevel();
338             int evdoAsuLevel = getEvdoAsuLevel();
339             if (evdoAsuLevel == 0) {
340                 /* We don't know evdo use, cdma */
341                 asuLevel = cdmaAsuLevel;
342             } else if (cdmaAsuLevel == 0) {
343                 /* We don't know cdma use, evdo */
344                 asuLevel = evdoAsuLevel;
345             } else {
346                 /* We know both, use the lowest level */
347                 asuLevel = cdmaAsuLevel < evdoAsuLevel ? cdmaAsuLevel : evdoAsuLevel;
348             }
349         }
350         if (DBG) log("getAsuLevel=" + asuLevel);
351         return asuLevel;
352     }
353
354     /**
355      * Get the signal strength as dBm
356      *
357      * @hide
358      */
359     public int getDbm() {
360         int dBm;
361
362         if(isGsm()) {
363             if ((mLteSignalStrength == -1)
364                     && (mLteRsrp == -1)
365                     && (mLteRsrq == -1)
366                     && (mLteRssnr == -1)
367                     && (mLteCqi == -1)) {
368                 dBm = getGsmDbm();
369             } else {
370                 dBm = getLteDbm();
371             }
372         } else {
373             dBm = getCdmaDbm();
374         }
375         if (DBG) log("getDbm=" + dBm);
376         return dBm;
377     }
378
379     /**
380      * Get Gsm signal strength as dBm
381      *
382      * @hide
383      */
384     public int getGsmDbm() {
385         int dBm;
386
387         int gsmSignalStrength = getGsmSignalStrength();
388         int asu = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength);
389         if (asu != -1) {
390             dBm = -113 + (2 * asu);
391         } else {
392             dBm = -1;
393         }
394         if (DBG) log("getGsmDbm=" + dBm);
395         return dBm;
396     }
397
398     /**
399      * Get gsm as level 0..4
400      *
401      * @hide
402      */
403     public int getGsmLevel() {
404         int level;
405
406         // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
407         // asu = 0 (-113dB or less) is very weak
408         // signal, its better to show 0 bars to the user in such cases.
409         // asu = 99 is a special case, where the signal strength is unknown.
410         int asu = getGsmSignalStrength();
411         if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
412         else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT;
413         else if (asu >= 8)  level = SIGNAL_STRENGTH_GOOD;
414         else if (asu >= 5)  level = SIGNAL_STRENGTH_MODERATE;
415         else level = SIGNAL_STRENGTH_POOR;
416         if (DBG) log("getGsmLevel=" + level);
417         return level;
418     }
419
420     /**
421      * Get the gsm signal level as an asu value between 0..31, 99 is unknown
422      *
423      * @hide
424      */
425     public int getGsmAsuLevel() {
426         // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
427         // asu = 0 (-113dB or less) is very weak
428         // signal, its better to show 0 bars to the user in such cases.
429         // asu = 99 is a special case, where the signal strength is unknown.
430         int level = getGsmSignalStrength();
431         if (DBG) log("getGsmAsuLevel=" + level);
432         return level;
433     }
434
435     /**
436      * Get cdma as level 0..4
437      *
438      * @hide
439      */
440     public int getCdmaLevel() {
441         final int cdmaDbm = getCdmaDbm();
442         final int cdmaEcio = getCdmaEcio();
443         int levelDbm;
444         int levelEcio;
445
446         if (cdmaDbm >= -75) levelDbm = SIGNAL_STRENGTH_GREAT;
447         else if (cdmaDbm >= -85) levelDbm = SIGNAL_STRENGTH_GOOD;
448         else if (cdmaDbm >= -95) levelDbm = SIGNAL_STRENGTH_MODERATE;
449         else if (cdmaDbm >= -100) levelDbm = SIGNAL_STRENGTH_POOR;
450         else levelDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
451
452         // Ec/Io are in dB*10
453         if (cdmaEcio >= -90) levelEcio = SIGNAL_STRENGTH_GREAT;
454         else if (cdmaEcio >= -110) levelEcio = SIGNAL_STRENGTH_GOOD;
455         else if (cdmaEcio >= -130) levelEcio = SIGNAL_STRENGTH_MODERATE;
456         else if (cdmaEcio >= -150) levelEcio = SIGNAL_STRENGTH_POOR;
457         else levelEcio = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
458
459         int level = (levelDbm < levelEcio) ? levelDbm : levelEcio;
460         if (DBG) log("getCdmaLevel=" + level);
461         return level;
462     }
463
464     /**
465      * Get the cdma signal level as an asu value between 0..31, 99 is unknown
466      *
467      * @hide
468      */
469     public int getCdmaAsuLevel() {
470         final int cdmaDbm = getCdmaDbm();
471         final int cdmaEcio = getCdmaEcio();
472         int cdmaAsuLevel;
473         int ecioAsuLevel;
474
475         if (cdmaDbm >= -75) cdmaAsuLevel = 16;
476         else if (cdmaDbm >= -82) cdmaAsuLevel = 8;
477         else if (cdmaDbm >= -90) cdmaAsuLevel = 4;
478         else if (cdmaDbm >= -95) cdmaAsuLevel = 2;
479         else if (cdmaDbm >= -100) cdmaAsuLevel = 1;
480         else cdmaAsuLevel = 99;
481
482         // Ec/Io are in dB*10
483         if (cdmaEcio >= -90) ecioAsuLevel = 16;
484         else if (cdmaEcio >= -100) ecioAsuLevel = 8;
485         else if (cdmaEcio >= -115) ecioAsuLevel = 4;
486         else if (cdmaEcio >= -130) ecioAsuLevel = 2;
487         else if (cdmaEcio >= -150) ecioAsuLevel = 1;
488         else ecioAsuLevel = 99;
489
490         int level = (cdmaAsuLevel < ecioAsuLevel) ? cdmaAsuLevel : ecioAsuLevel;
491         if (DBG) log("getCdmaAsuLevel=" + level);
492         return level;
493     }
494
495     /**
496      * Get Evdo as level 0..4
497      *
498      * @hide
499      */
500     public int getEvdoLevel() {
501         int evdoDbm = getEvdoDbm();
502         int evdoSnr = getEvdoSnr();
503         int levelEvdoDbm;
504         int levelEvdoSnr;
505
506         if (evdoDbm >= -65) levelEvdoDbm = SIGNAL_STRENGTH_GREAT;
507         else if (evdoDbm >= -75) levelEvdoDbm = SIGNAL_STRENGTH_GOOD;
508         else if (evdoDbm >= -90) levelEvdoDbm = SIGNAL_STRENGTH_MODERATE;
509         else if (evdoDbm >= -105) levelEvdoDbm = SIGNAL_STRENGTH_POOR;
510         else levelEvdoDbm = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
511
512         if (evdoSnr >= 7) levelEvdoSnr = SIGNAL_STRENGTH_GREAT;
513         else if (evdoSnr >= 5) levelEvdoSnr = SIGNAL_STRENGTH_GOOD;
514         else if (evdoSnr >= 3) levelEvdoSnr = SIGNAL_STRENGTH_MODERATE;
515         else if (evdoSnr >= 1) levelEvdoSnr = SIGNAL_STRENGTH_POOR;
516         else levelEvdoSnr = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
517
518         int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
519         if (DBG) log("getEvdoLevel=" + level);
520         return level;
521     }
522
523     /**
524      * Get the evdo signal level as an asu value between 0..31, 99 is unknown
525      *
526      * @hide
527      */
528     public int getEvdoAsuLevel() {
529         int evdoDbm = getEvdoDbm();
530         int evdoSnr = getEvdoSnr();
531         int levelEvdoDbm;
532         int levelEvdoSnr;
533
534         if (evdoDbm >= -65) levelEvdoDbm = 16;
535         else if (evdoDbm >= -75) levelEvdoDbm = 8;
536         else if (evdoDbm >= -85) levelEvdoDbm = 4;
537         else if (evdoDbm >= -95) levelEvdoDbm = 2;
538         else if (evdoDbm >= -105) levelEvdoDbm = 1;
539         else levelEvdoDbm = 99;
540
541         if (evdoSnr >= 7) levelEvdoSnr = 16;
542         else if (evdoSnr >= 6) levelEvdoSnr = 8;
543         else if (evdoSnr >= 5) levelEvdoSnr = 4;
544         else if (evdoSnr >= 3) levelEvdoSnr = 2;
545         else if (evdoSnr >= 1) levelEvdoSnr = 1;
546         else levelEvdoSnr = 99;
547
548         int level = (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
549         if (DBG) log("getEvdoAsuLevel=" + level);
550         return level;
551     }
552
553     /**
554      * Get LTE as dBm
555      *
556      * @hide
557      */
558     public int getLteDbm() {
559         return mLteRsrp;
560     }
561
562     /**
563      * Get LTE as level 0..4
564      *
565      * @hide
566      */
567     public int getLteLevel() {
568         int levelLteRsrp = 0;
569
570         if (mLteRsrp == -1) levelLteRsrp = 0;
571         else if (mLteRsrp >= -85) levelLteRsrp = SIGNAL_STRENGTH_GREAT;
572         else if (mLteRsrp >= -95) levelLteRsrp = SIGNAL_STRENGTH_GOOD;
573         else if (mLteRsrp >= -105) levelLteRsrp = SIGNAL_STRENGTH_MODERATE;
574         else if (mLteRsrp >= -115) levelLteRsrp = SIGNAL_STRENGTH_POOR;
575         else levelLteRsrp = 0;
576
577         if (DBG) log("Lte level: "+levelLteRsrp);
578         return levelLteRsrp;
579     }
580
581     /**
582      * Get the LTE signal level as an asu value between 0..97, 99 is unknown
583      * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
584      *
585      * @hide
586      */
587     public int getLteAsuLevel() {
588         int lteAsuLevel = 99;
589         int lteDbm = getLteDbm();
590         if (lteDbm <= -140) lteAsuLevel = 0;
591         else if (lteDbm >= -43) lteAsuLevel = 97;
592         else lteAsuLevel = lteDbm + 140;
593         if (DBG) log("Lte Asu level: "+lteAsuLevel);
594         return lteAsuLevel;
595     }
596
597     /**
598      * @return true if this is for GSM
599      */
600     public boolean isGsm() {
601         return this.isGsm;
602     }
603
604     /**
605      * @return hash code
606      */
607     @Override
608     public int hashCode() {
609         int primeNum = 31;
610         return ((mGsmSignalStrength * primeNum)
611                 + (mGsmBitErrorRate * primeNum)
612                 + (mCdmaDbm * primeNum) + (mCdmaEcio * primeNum)
613                 + (mEvdoDbm * primeNum) + (mEvdoEcio * primeNum) + (mEvdoSnr * primeNum)
614                 + (mLteSignalStrength * primeNum) + (mLteRsrp * primeNum)
615                 + (mLteRsrq * primeNum) + (mLteRssnr * primeNum) + (mLteCqi * primeNum)
616                 + (isGsm ? 1 : 0));
617     }
618
619     /**
620      * @return true if the signal strengths are the same
621      */
622     @Override
623     public boolean equals (Object o) {
624         SignalStrength s;
625
626         try {
627             s = (SignalStrength) o;
628         } catch (ClassCastException ex) {
629             return false;
630         }
631
632         if (o == null) {
633             return false;
634         }
635
636         return (mGsmSignalStrength == s.mGsmSignalStrength
637                 && mGsmBitErrorRate == s.mGsmBitErrorRate
638                 && mCdmaDbm == s.mCdmaDbm
639                 && mCdmaEcio == s.mCdmaEcio
640                 && mEvdoDbm == s.mEvdoDbm
641                 && mEvdoEcio == s.mEvdoEcio
642                 && mEvdoSnr == s.mEvdoSnr
643                 && mLteSignalStrength == s.mLteSignalStrength
644                 && mLteRsrp == s.mLteRsrp
645                 && mLteRsrq == s.mLteRsrq
646                 && mLteRssnr == s.mLteRssnr
647                 && mLteCqi == s.mLteCqi
648                 && isGsm == s.isGsm);
649     }
650
651     /**
652      * @return string representation.
653      */
654     @Override
655     public String toString() {
656         return ("SignalStrength:"
657                 + " " + mGsmSignalStrength
658                 + " " + mGsmBitErrorRate
659                 + " " + mCdmaDbm
660                 + " " + mCdmaEcio
661                 + " " + mEvdoDbm
662                 + " " + mEvdoEcio
663                 + " " + mEvdoSnr
664                 + " " + mLteSignalStrength
665                 + " " + mLteRsrp
666                 + " " + mLteRsrq
667                 + " " + mLteRssnr
668                 + " " + mLteCqi
669                 + " " + (isGsm ? "gsm|lte" : "cdma"));
670     }
671
672     /**
673      * Set SignalStrength based on intent notifier map
674      *
675      * @param m intent notifier map
676      * @hide
677      */
678     private void setFromNotifierBundle(Bundle m) {
679         mGsmSignalStrength = m.getInt("GsmSignalStrength");
680         mGsmBitErrorRate = m.getInt("GsmBitErrorRate");
681         mCdmaDbm = m.getInt("CdmaDbm");
682         mCdmaEcio = m.getInt("CdmaEcio");
683         mEvdoDbm = m.getInt("EvdoDbm");
684         mEvdoEcio = m.getInt("EvdoEcio");
685         mEvdoSnr = m.getInt("EvdoSnr");
686         mLteSignalStrength = m.getInt("LteSignalStrength");
687         mLteRsrp = m.getInt("LteRsrp");
688         mLteRsrq = m.getInt("LteRsrq");
689         mLteRssnr = m.getInt("LteRssnr");
690         mLteCqi = m.getInt("LteCqi");
691         isGsm = m.getBoolean("isGsm");
692     }
693
694     /**
695      * Set intent notifier Bundle based on SignalStrength
696      *
697      * @param m intent notifier Bundle
698      * @hide
699      */
700     public void fillInNotifierBundle(Bundle m) {
701         m.putInt("GsmSignalStrength", mGsmSignalStrength);
702         m.putInt("GsmBitErrorRate", mGsmBitErrorRate);
703         m.putInt("CdmaDbm", mCdmaDbm);
704         m.putInt("CdmaEcio", mCdmaEcio);
705         m.putInt("EvdoDbm", mEvdoDbm);
706         m.putInt("EvdoEcio", mEvdoEcio);
707         m.putInt("EvdoSnr", mEvdoSnr);
708         m.putInt("LteSignalStrength", mLteSignalStrength);
709         m.putInt("LteRsrp", mLteRsrp);
710         m.putInt("LteRsrq", mLteRsrq);
711         m.putInt("LteRssnr", mLteRssnr);
712         m.putInt("LteCqi", mLteCqi);
713         m.putBoolean("isGsm", Boolean.valueOf(isGsm));
714     }
715
716     /**
717      * log
718      */
719     private static void log(String s) {
720         Log.w(LOG_TAG, s);
721     }
722 }