diff options
author | Wink Saville <wink@google.com> | 2009-05-18 21:47:50 -0700 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2009-05-18 21:47:50 -0700 |
commit | e9b06d754af03faf27012fbed1e7559ec1ba7c79 (patch) | |
tree | 44e2dd9f47661d5ae3e6d38a63f3592f4ded4cd2 /telephony/java/android/telephony/SignalStrength.java | |
parent | ce2372de58ad018623748f63e61ffc70c9eb8895 (diff) | |
download | frameworks_base-e9b06d754af03faf27012fbed1e7559ec1ba7c79.zip frameworks_base-e9b06d754af03faf27012fbed1e7559ec1ba7c79.tar.gz frameworks_base-e9b06d754af03faf27012fbed1e7559ec1ba7c79.tar.bz2 |
Teleca 2b changes
Diffstat (limited to 'telephony/java/android/telephony/SignalStrength.java')
-rw-r--r-- | telephony/java/android/telephony/SignalStrength.java | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java new file mode 100644 index 0000000..8ed0065 --- /dev/null +++ b/telephony/java/android/telephony/SignalStrength.java @@ -0,0 +1,311 @@ +/* + * Copyright (C) 2009 Qualcomm Innovation Center, Inc. All Rights Reserved. + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony; + +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +/** + * Contains phone signal strength related information. + * + * @hide + */ +public class SignalStrength implements Parcelable { + + static final String LOG_TAG = "PHONE"; + + private int mGsmSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5 + private int mGsmBitErrorRate; // bit error rate (0-7, 99) as defined in TS 27.007 8.5 + private int mCdmaDbm; // This value is the RSSI value + private int mCdmaEcio; // This value is the Ec/Io + private int mEvdoDbm; // This value is the EVDO RSSI value + private int mEvdoEcio; // This value is the EVDO Ec/Io + private int mEvdoSnr; // Valid values are 0-8. 8 is the highest signal to noise ratio + + private boolean isGsm; // This value is set by the ServiceStateTracker onSignalStrengthResult + + /** + * Create a new SignalStrength from a intent notifier Bundle + * + * This method is used by PhoneStateIntentReceiver and maybe by + * external applications. + * + * @param m Bundle from intent notifier + * @return newly created SignalStrength + * + */ + public static SignalStrength newFromBundle(Bundle m) { + SignalStrength ret; + ret = new SignalStrength(); + ret.setFromNotifierBundle(m); + return ret; + } + + /** + * Empty constructor + * + */ + public SignalStrength() { + mGsmSignalStrength = 99; + mGsmBitErrorRate = -1; + mCdmaDbm = -1; + mCdmaEcio = -1; + mEvdoDbm = -1; + mEvdoEcio = -1; + mEvdoSnr = -1; + isGsm = true; + } + + /** + * Constructor + * + */ + public SignalStrength(int gsmSignalStrength, int gsmBitErrorRate, + int cdmaDbm, int cdmaEcio, + int evdoDbm, int evdoEcio, int evdoSnr, boolean gsm) { + mGsmSignalStrength = gsmSignalStrength; + mGsmBitErrorRate = gsmBitErrorRate; + mCdmaDbm = cdmaDbm; + mCdmaEcio = cdmaEcio; + mEvdoDbm = evdoDbm; + mEvdoEcio = evdoEcio; + mEvdoSnr = evdoSnr; + isGsm = gsm; + } + + /** + * Copy constructors + * + * @param s Source SignalStrength + */ + public SignalStrength(SignalStrength s) { + copyFrom(s); + } + + /** + * @hide + */ + protected void copyFrom(SignalStrength s) { + mGsmSignalStrength = s.mGsmSignalStrength; + mGsmBitErrorRate = s.mGsmBitErrorRate; + mCdmaDbm = s.mCdmaDbm; + mCdmaEcio = s.mCdmaEcio; + mEvdoDbm = s.mEvdoDbm; + mEvdoEcio = s.mEvdoEcio; + mEvdoSnr = s.mEvdoSnr; + isGsm = s.isGsm; + } + + /** + * Construct a SignalStrength object from the given parcel. + */ + public SignalStrength(Parcel in) { + mGsmSignalStrength = in.readInt(); + mGsmBitErrorRate = in.readInt(); + mCdmaDbm = in.readInt(); + mCdmaEcio = in.readInt(); + mEvdoDbm = in.readInt(); + mEvdoEcio = in.readInt(); + mEvdoSnr = in.readInt(); + isGsm = (in.readInt() != 0); + } + + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mGsmSignalStrength); + out.writeInt(mGsmBitErrorRate); + out.writeInt(mCdmaDbm); + out.writeInt(mCdmaEcio); + out.writeInt(mEvdoDbm); + out.writeInt(mEvdoEcio); + out.writeInt(mEvdoSnr); + out.writeInt(isGsm ? 1 : 0); + } + + public int describeContents() { + return 0; + } + + public static final Parcelable.Creator<SignalStrength> CREATOR = new Parcelable.Creator() { + public SignalStrength createFromParcel(Parcel in) { + return new SignalStrength(in); + } + + public SignalStrength[] newArray(int size) { + return new SignalStrength[size]; + } + }; + + /** + * Get the GSM Signal Strength, valid values are (0-31, 99) as defined in TS 27.007 8.5 + */ + public int getGsmSignalStrength() { + return this.mGsmSignalStrength; + } + + /** + * Get the GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5 + */ + public int getGsmBitErrorRate() { + return this.mGsmBitErrorRate; + } + + /** + * Get the CDMA RSSI value in dBm + */ + public int getCdmaDbm() { + return this.mCdmaDbm; + } + + /** + * Get the CDMA Ec/Io value in dB*10 + */ + public int getCdmaEcio() { + return this.mCdmaEcio; + } + + /** + * Get the EVDO RSSI value in dBm + */ + public int getEvdoDbm() { + return this.mEvdoDbm; + } + + /** + * Get the EVDO Ec/Io value in dB*10 + */ + public int getEvdoEcio() { + return this.mEvdoEcio; + } + + /** + * Get the signal to noise ratio. Valid values are 0-8. 8 is the highest. + */ + public int getEvdoSnr() { + return this.mEvdoSnr; + } + + /** + * @hide + */ + public boolean isGsm() { + return this.isGsm; + } + + /** + * @hide + */ + @Override + public int hashCode() { + return ((mGsmSignalStrength * 0x1234) + + mGsmBitErrorRate + + mCdmaDbm + mCdmaEcio + + mEvdoDbm + mEvdoEcio + mEvdoSnr + + (isGsm ? 1 : 0)); + } + + /** + * @hide + */ + @Override + public boolean equals (Object o) { + SignalStrength s; + + try { + s = (SignalStrength) o; + } catch (ClassCastException ex) { + return false; + } + + if (o == null) { + return false; + } + + return (mGsmSignalStrength == s.mGsmSignalStrength + && mGsmBitErrorRate == s.mGsmBitErrorRate + && mCdmaDbm == s.mCdmaDbm + && mCdmaEcio == s.mCdmaEcio + && mEvdoDbm == s.mEvdoDbm + && mEvdoEcio == s.mEvdoEcio + && mEvdoSnr == s.mEvdoSnr + && isGsm == s.isGsm); + } + + /** + * @hide + */ + @Override + public String toString() { + return ("SignalStrength:" + + " " + mGsmSignalStrength + + " " + mGsmBitErrorRate + + " " + mCdmaDbm + + " " + mCdmaEcio + + " " + mEvdoDbm + + " " + mEvdoEcio + + " " + mEvdoSnr + + " " + (isGsm ? "gsm" : "cdma")); + } + + /** + * Test whether two objects hold the same data values or both are null + * + * @param a first obj + * @param b second obj + * @return true if two objects equal or both are null + * @hide + */ + private static boolean equalsHandlesNulls (Object a, Object b) { + return (a == null) ? (b == null) : a.equals (b); + } + + /** + * Set SignalStrength based on intent notifier map + * + * @param m intent notifier map + * @hide + */ + private void setFromNotifierBundle(Bundle m) { + mGsmSignalStrength = m.getInt("GsmSignalStrength"); + mGsmBitErrorRate = m.getInt("GsmBitErrorRate"); + mCdmaDbm = m.getInt("CdmaDbm"); + mCdmaEcio = m.getInt("CdmaEcio"); + mEvdoDbm = m.getInt("EvdoDbm"); + mEvdoEcio = m.getInt("EvdoEcio"); + mEvdoSnr = m.getInt("EvdoSnr"); + isGsm = m.getBoolean("isGsm"); + } + + /** + * Set intent notifier Bundle based on SignalStrength + * + * @param m intent notifier Bundle + * @hide + */ + public void fillInNotifierBundle(Bundle m) { + m.putInt("GsmSignalStrength", mGsmSignalStrength); + m.putInt("GsmBitErrorRate", mGsmBitErrorRate); + m.putInt("CdmaDbm", mCdmaDbm); + m.putInt("CdmaEcio", mCdmaEcio); + m.putInt("EvdoDbm", mEvdoDbm); + m.putInt("EvdoEcio", mEvdoEcio); + m.putInt("EvdoSnr", mEvdoSnr); + m.putBoolean("isGsm", Boolean.valueOf(isGsm)); + } +} |