Merge "Update handling of enum/flag fields in GPS data structures."

This commit is contained in:
destradaa
2015-02-11 22:52:36 +00:00
committed by Android (Google) Code Review
3 changed files with 65 additions and 106 deletions

View File

@@ -19,7 +19,6 @@ package android.location;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
/**
* A class containing a GPS clock timestamp.
@@ -29,7 +28,6 @@ import android.util.Log;
*/
@SystemApi
public class GpsClock implements Parcelable {
private static final String TAG = "GpsClock";
// The following enumerations must be in sync with the values declared in gps.h
@@ -109,17 +107,7 @@ public class GpsClock implements Parcelable {
* Sets the type of time reported.
*/
public void setType(byte value) {
switch (value) {
case TYPE_UNKNOWN:
case TYPE_GPS_TIME:
case TYPE_LOCAL_HW_TIME:
mType = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'type': " + value);
mType = TYPE_UNKNOWN;
break;
}
mType = value;
}
/**
@@ -135,7 +123,7 @@ public class GpsClock implements Parcelable {
case TYPE_LOCAL_HW_TIME:
return "LocalHwClock";
default:
return "<Invalid>";
return "<Invalid:" + mType + ">";
}
}

View File

@@ -19,7 +19,6 @@ package android.location;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
/**
* A class representing a GPS satellite measurement, containing raw and computed information.
@@ -28,8 +27,6 @@ import android.util.Log;
*/
@SystemApi
public class GpsMeasurement implements Parcelable {
private static final String TAG = "GpsMeasurement";
private int mFlags;
private byte mPrn;
private double mTimeOffsetInNs;
@@ -139,6 +136,12 @@ public class GpsMeasurement implements Parcelable {
*/
public static final short STATE_TOW_DECODED = (1<<3);
/**
* All the GPS receiver state flags.
*/
private static final short STATE_ALL =
STATE_CODE_LOCK | STATE_BIT_SYNC | STATE_SUBFRAME_SYNC | STATE_TOW_DECODED;
/**
* The state of the 'Accumulated Delta Range' is invalid or unknown.
*/
@@ -159,6 +162,11 @@ public class GpsMeasurement implements Parcelable {
*/
public static final short ADR_STATE_CYCLE_SLIP = (1<<2);
/**
* All the 'Accumulated Delta Range' flags.
*/
private static final short ADR_ALL = ADR_STATE_VALID | ADR_STATE_RESET | ADR_STATE_CYCLE_SLIP;
// End enumerations in sync with gps.h
GpsMeasurement() {
@@ -263,19 +271,7 @@ public class GpsMeasurement implements Parcelable {
* Sets the sync state.
*/
public void setState(short value) {
switch (value) {
case STATE_UNKNOWN:
case STATE_BIT_SYNC:
case STATE_CODE_LOCK:
case STATE_SUBFRAME_SYNC:
case STATE_TOW_DECODED:
mState = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'sync state': " + value);
mState = STATE_UNKNOWN;
break;
}
mState = value;
}
/**
@@ -283,20 +279,30 @@ public class GpsMeasurement implements Parcelable {
* For internal and logging use only.
*/
private String getStateString() {
switch (mState) {
case STATE_UNKNOWN:
return "Unknown";
case STATE_BIT_SYNC:
return "BitSync";
case STATE_CODE_LOCK:
return "CodeLock";
case STATE_SUBFRAME_SYNC:
return "SubframeSync";
case STATE_TOW_DECODED:
return "TowDecoded";
default:
return "<Invalid>";
if (mState == STATE_UNKNOWN) {
return "Unknown";
}
StringBuilder builder = new StringBuilder();
if ((mState & STATE_CODE_LOCK) == STATE_CODE_LOCK) {
builder.append("CodeLock|");
}
if ((mState & STATE_BIT_SYNC) == STATE_BIT_SYNC) {
builder.append("BitSync|");
}
if ((mState & STATE_SUBFRAME_SYNC) == STATE_SUBFRAME_SYNC) {
builder.append("SubframeSync|");
}
if ((mState & STATE_TOW_DECODED) == STATE_TOW_DECODED) {
builder.append("TowDecoded|");
}
int remainingStates = mState & ~STATE_ALL;
if (remainingStates > 0) {
builder.append("Other(");
builder.append(Integer.toBinaryString(remainingStates));
builder.append(")|");
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
/**
@@ -395,18 +401,7 @@ public class GpsMeasurement implements Parcelable {
* Sets the 'Accumulated Delta Range' state.
*/
public void setAccumulatedDeltaRangeState(short value) {
switch (value) {
case ADR_STATE_UNKNOWN:
case ADR_STATE_VALID:
case ADR_STATE_RESET:
case ADR_STATE_CYCLE_SLIP:
mAccumulatedDeltaRangeState = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'Accumulated Delta Range state': " + value);
mAccumulatedDeltaRangeState = ADR_STATE_UNKNOWN;
break;
}
mAccumulatedDeltaRangeState = value;
}
/**
@@ -414,18 +409,27 @@ public class GpsMeasurement implements Parcelable {
* For internal and logging use only.
*/
private String getAccumulatedDeltaRangeStateString() {
switch (mAccumulatedDeltaRangeState) {
case ADR_STATE_UNKNOWN:
return "Unknown";
case ADR_STATE_VALID:
return "Valid";
case ADR_STATE_RESET:
return "Reset";
case ADR_STATE_CYCLE_SLIP:
return "CycleSlip";
default:
return "<Invalid>";
if (mAccumulatedDeltaRangeState == ADR_STATE_UNKNOWN) {
return "Unknown";
}
StringBuilder builder = new StringBuilder();
if ((mAccumulatedDeltaRangeState & ADR_STATE_VALID) == ADR_STATE_VALID) {
builder.append("Valid|");
}
if ((mAccumulatedDeltaRangeState & ADR_STATE_RESET) == ADR_STATE_RESET) {
builder.append("Reset|");
}
if ((mAccumulatedDeltaRangeState & ADR_STATE_CYCLE_SLIP) == ADR_STATE_CYCLE_SLIP) {
builder.append("CycleSlip|");
}
int remainingStates = mAccumulatedDeltaRangeState & ~ADR_ALL;
if (remainingStates > 0) {
builder.append("Other(");
builder.append(Integer.toBinaryString(remainingStates));
builder.append(")|");
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
/**
@@ -744,17 +748,7 @@ public class GpsMeasurement implements Parcelable {
* Sets the 'loss of lock' status.
*/
public void setLossOfLock(byte value) {
switch (value) {
case LOSS_OF_LOCK_UNKNOWN:
case LOSS_OF_LOCK_OK:
case LOSS_OF_LOCK_CYCLE_SLIP:
mLossOfLock = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'loss of lock': " + value);
mLossOfLock = LOSS_OF_LOCK_UNKNOWN;
break;
}
mLossOfLock = value;
}
/**
@@ -770,7 +764,7 @@ public class GpsMeasurement implements Parcelable {
case LOSS_OF_LOCK_CYCLE_SLIP:
return "CycleSlip";
default:
return "<Invalid>";
return "<Invalid:" + mLossOfLock + ">";
}
}
@@ -919,17 +913,7 @@ public class GpsMeasurement implements Parcelable {
* Sets the 'multi-path' indicator.
*/
public void setMultipathIndicator(byte value) {
switch (value) {
case MULTIPATH_INDICATOR_UNKNOWN:
case MULTIPATH_INDICATOR_DETECTED:
case MULTIPATH_INDICATOR_NOT_USED:
mMultipathIndicator = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'muti-path indicator': " + value);
mMultipathIndicator = MULTIPATH_INDICATOR_UNKNOWN;
break;
}
mMultipathIndicator = value;
}
/**
@@ -945,7 +929,7 @@ public class GpsMeasurement implements Parcelable {
case MULTIPATH_INDICATOR_NOT_USED:
return "NotUsed";
default:
return "<Invalid>";
return "<Invalid:" + mMultipathIndicator + ">";
}
}

View File

@@ -20,7 +20,6 @@ import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import java.security.InvalidParameterException;
@@ -31,7 +30,7 @@ import java.security.InvalidParameterException;
*/
@SystemApi
public class GpsNavigationMessage implements Parcelable {
private static final String TAG = "GpsNavigationMessage";
private static final byte[] EMPTY_ARRAY = new byte[0];
// The following enumerations must be in sync with the values declared in gps.h
@@ -102,19 +101,7 @@ public class GpsNavigationMessage implements Parcelable {
* Sets the type of the navigation message.
*/
public void setType(byte value) {
switch (value) {
case TYPE_UNKNOWN:
case TYPE_L1CA:
case TYPE_L2CNAV:
case TYPE_L5CNAV:
case TYPE_CNAV2:
mType = value;
break;
default:
Log.d(TAG, "Sanitizing invalid 'type': " + value);
mType = TYPE_UNKNOWN;
break;
}
mType = value;
}
/**
@@ -134,7 +121,7 @@ public class GpsNavigationMessage implements Parcelable {
case TYPE_CNAV2:
return "CNAV-2";
default:
return "<Invalid>";
return "<Invalid:" + mType + ">";
}
}