1e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/*
2e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Copyright (C) 2012 The Android Open Source Project
3e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
4e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * you may not use this file except in compliance with the License.
6e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * You may obtain a copy of the License at
7e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
8e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville *
10e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Unless required by applicable law or agreed to in writing, software
11e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * See the License for the specific language governing permissions and
14e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * limitations under the License.
15e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */
16e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
17e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepackage android.telephony;
18e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
19e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcel;
20e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcelable;
21e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.telephony.Rlog;
22e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
23e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/**
24e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Wcdma signal strength related information.
25e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */
26e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepublic final class CellSignalStrengthWcdma extends CellSignalStrength implements Parcelable {
27e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
28e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final String LOG_TAG = "CellSignalStrengthWcdma";
29e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final boolean DBG = false;
30e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
31e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final int WCDMA_SIGNAL_STRENGTH_GREAT = 12;
32e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final int WCDMA_SIGNAL_STRENGTH_GOOD = 8;
33e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static final int WCDMA_SIGNAL_STRENGTH_MODERATE = 5;
34e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
35e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private int mSignalStrength; // Valid values are (0-31, 99) as defined in TS 27.007 8.5
36e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private int mBitErrorRate;   // bit error rate (0-7, 99) as defined in TS 27.007 8.5
37e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
38e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
39e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Empty constructor
40e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
41e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
42e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
43e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellSignalStrengthWcdma() {
44e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        setDefaultValues();
45e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
46e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
47e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
48e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Constructor
49e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
50e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
51e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
52e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellSignalStrengthWcdma(int ss, int ber) {
53e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        initialize(ss, ber);
54e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
55e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
56e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
57e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Copy constructors
58e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
59e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @param s Source SignalStrength
60e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
61e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
62e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
63e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellSignalStrengthWcdma(CellSignalStrengthWcdma s) {
64e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        copyFrom(s);
65e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
66e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
67e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
68e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Initialize all the values
69e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
70e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @param ss SignalStrength as ASU value
71e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @param ber is Bit Error Rate
72e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     *
73e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
74e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
75e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void initialize(int ss, int ber) {
76e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mSignalStrength = ss;
77e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mBitErrorRate = ber;
78e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
79e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
80e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
81e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
82e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
83e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    protected void copyFrom(CellSignalStrengthWcdma s) {
84e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mSignalStrength = s.mSignalStrength;
85e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mBitErrorRate = s.mBitErrorRate;
86e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
87e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
88e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
89e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @hide
90e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
91e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
92e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public CellSignalStrengthWcdma copy() {
93e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return new CellSignalStrengthWcdma(this);
94e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
95e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
96e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** @hide */
97e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
98e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void setDefaultValues() {
99e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mSignalStrength = Integer.MAX_VALUE;
100e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mBitErrorRate = Integer.MAX_VALUE;
101e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
102e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
103e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
104e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Get signal level as an int from 0..4
105e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
106e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
107e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int getLevel() {
108e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int level;
109e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
110e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
111e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // asu = 0 (-113dB or less) is very weak
112e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // signal, its better to show 0 bars to the user in such cases.
113e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
114e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int asu = mSignalStrength;
115e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
116e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        else if (asu >= WCDMA_SIGNAL_STRENGTH_GREAT) level = SIGNAL_STRENGTH_GREAT;
117e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        else if (asu >= WCDMA_SIGNAL_STRENGTH_GOOD)  level = SIGNAL_STRENGTH_GOOD;
118e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        else if (asu >= WCDMA_SIGNAL_STRENGTH_MODERATE)  level = SIGNAL_STRENGTH_MODERATE;
119e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        else level = SIGNAL_STRENGTH_POOR;
120e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (DBG) log("getLevel=" + level);
121e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return level;
122e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
123e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
124e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
125e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Get the signal strength as dBm
126e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
127e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
128e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int getDbm() {
129e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int dBm;
130e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
131e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int level = mSignalStrength;
132e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int asu = (level == 99 ? Integer.MAX_VALUE : level);
133e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (asu != Integer.MAX_VALUE) {
134e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            dBm = -113 + (2 * asu);
135e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        } else {
136e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            dBm = Integer.MAX_VALUE;
137e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
138e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (DBG) log("getDbm=" + dBm);
139e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return dBm;
140e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
141e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
142e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
143e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Get the signal level as an asu value between 0..31, 99 is unknown
144e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
145e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
146e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
147e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int getAsuLevel() {
148e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
149e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // asu = 0 (-113dB or less) is very weak
150e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // signal, its better to show 0 bars to the user in such cases.
151e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        // asu = 99 is a special case, where the signal strength is unknown.
152e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int level = mSignalStrength;
153e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (DBG) log("getAsuLevel=" + level);
154e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return level;
155e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
156e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
157e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
158e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int hashCode() {
159e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        int primeNum = 31;
160e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return (mSignalStrength * primeNum) + (mBitErrorRate * primeNum);
161e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
162e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
163e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
164e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public boolean equals (Object o) {
165e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        CellSignalStrengthWcdma s;
166e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
167e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        try {
168e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            s = (CellSignalStrengthWcdma) o;
169e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        } catch (ClassCastException ex) {
170e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return false;
171e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
172e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
173e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (o == null) {
174e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return false;
175e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
176e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
177e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return mSignalStrength == s.mSignalStrength && mBitErrorRate == s.mBitErrorRate;
178e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
179e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
180e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
181e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return string representation.
182e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
183e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
184e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public String toString() {
185e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return "CellSignalStrengthWcdma:"
186e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville                + " ss=" + mSignalStrength
187e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville                + " ber=" + mBitErrorRate;
188e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
189e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
190e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
191e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
192e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public void writeToParcel(Parcel dest, int flags) {
193e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (DBG) log("writeToParcel(Parcel, int): " + toString());
194e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        dest.writeInt(mSignalStrength);
195e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        dest.writeInt(mBitErrorRate);
196e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
197e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
198e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
199e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * Construct a SignalStrength object from the given parcel
200e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * where the token is already been processed.
201e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
202e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private CellSignalStrengthWcdma(Parcel in) {
203e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mSignalStrength = in.readInt();
204e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        mBitErrorRate = in.readInt();
205e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        if (DBG) log("CellSignalStrengthWcdma(Parcel): " + toString());
206e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
207e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
208e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
209e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @Override
210e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public int describeContents() {
211e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        return 0;
212e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
213e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
214e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /** Implement the Parcelable interface */
215e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    @SuppressWarnings("hiding")
216e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    public static final Parcelable.Creator<CellSignalStrengthWcdma> CREATOR =
217e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            new Parcelable.Creator<CellSignalStrengthWcdma>() {
218e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        @Override
219e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        public CellSignalStrengthWcdma createFromParcel(Parcel in) {
220e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return new CellSignalStrengthWcdma(in);
221e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
222e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
223e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        @Override
224e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        public CellSignalStrengthWcdma[] newArray(int size) {
225e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville            return new CellSignalStrengthWcdma[size];
226e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        }
227e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    };
228e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville
229e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    /**
230e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * log
231e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     */
232e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    private static void log(String s) {
233e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        Rlog.w(LOG_TAG, s);
234e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville    }
235e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville}
236