Add isAccumulatedDeltaRangeCapabilityKnown for backward compatibility (frameworks/base)
Bug: 260002331 Test: atest GnssCapabilitiesTest Change-Id: I82356bc84abddf36b04da5576d34ba6d3f01f32f
This commit is contained in:
@@ -20020,6 +20020,7 @@ package android.location {
|
||||
method public boolean hasSatellitePvt();
|
||||
method public boolean hasScheduling();
|
||||
method public boolean hasSingleShotFix();
|
||||
method public boolean isAccumulatedDeltaRangeCapabilityKnown();
|
||||
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssCapabilities> CREATOR;
|
||||
}
|
||||
@@ -20028,6 +20029,7 @@ package android.location {
|
||||
ctor public GnssCapabilities.Builder();
|
||||
ctor public GnssCapabilities.Builder(@NonNull android.location.GnssCapabilities);
|
||||
method @NonNull public android.location.GnssCapabilities build();
|
||||
method @NonNull public android.location.GnssCapabilities.Builder clearIsAccumulatedDeltaRangeCapabilityKnown();
|
||||
method @NonNull public android.location.GnssCapabilities.Builder setGnssSignalTypes(@NonNull java.util.List<android.location.GnssSignalType>);
|
||||
method @NonNull public android.location.GnssCapabilities.Builder setHasAccumulatedDeltaRange(boolean);
|
||||
method @NonNull public android.location.GnssCapabilities.Builder setHasAntennaInfo(boolean);
|
||||
|
||||
@@ -129,21 +129,26 @@ public final class GnssCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
public static GnssCapabilities empty() {
|
||||
return new GnssCapabilities(0, 0, 0, Collections.emptyList());
|
||||
return new GnssCapabilities(/*topFlags=*/ 0, /*isAdrCapabilityKnown=*/ false,
|
||||
/*measurementCorrectionsFlags=*/ 0, /*powerFlags=*/ 0, /*gnssSignalTypes=*/
|
||||
Collections.emptyList());
|
||||
}
|
||||
|
||||
private final @TopHalCapabilityFlags int mTopFlags;
|
||||
private final boolean mIsAdrCapabilityKnown;
|
||||
private final @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
|
||||
private final @SubHalPowerCapabilityFlags int mPowerFlags;
|
||||
private final @NonNull List<GnssSignalType> mGnssSignalTypes;
|
||||
|
||||
private GnssCapabilities(
|
||||
@TopHalCapabilityFlags int topFlags,
|
||||
boolean isAdrCapabilityKnown,
|
||||
@SubHalMeasurementCorrectionsCapabilityFlags int measurementCorrectionsFlags,
|
||||
@SubHalPowerCapabilityFlags int powerFlags,
|
||||
@NonNull List<GnssSignalType> gnssSignalTypes) {
|
||||
Objects.requireNonNull(gnssSignalTypes);
|
||||
mTopFlags = topFlags;
|
||||
mIsAdrCapabilityKnown = isAdrCapabilityKnown;
|
||||
mMeasurementCorrectionsFlags = measurementCorrectionsFlags;
|
||||
mPowerFlags = powerFlags;
|
||||
mGnssSignalTypes = Collections.unmodifiableList(gnssSignalTypes);
|
||||
@@ -154,12 +159,13 @@ public final class GnssCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public GnssCapabilities withTopHalFlags(@TopHalCapabilityFlags int flags) {
|
||||
if (mTopFlags == flags) {
|
||||
public GnssCapabilities withTopHalFlags(@TopHalCapabilityFlags int flags,
|
||||
boolean isAdrCapabilityKnown) {
|
||||
if (mTopFlags == flags && mIsAdrCapabilityKnown == isAdrCapabilityKnown) {
|
||||
return this;
|
||||
} else {
|
||||
return new GnssCapabilities(flags, mMeasurementCorrectionsFlags, mPowerFlags,
|
||||
mGnssSignalTypes);
|
||||
return new GnssCapabilities(flags, isAdrCapabilityKnown,
|
||||
mMeasurementCorrectionsFlags, mPowerFlags, mGnssSignalTypes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +180,7 @@ public final class GnssCapabilities implements Parcelable {
|
||||
if (mMeasurementCorrectionsFlags == flags) {
|
||||
return this;
|
||||
} else {
|
||||
return new GnssCapabilities(mTopFlags, flags, mPowerFlags,
|
||||
return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown, flags, mPowerFlags,
|
||||
mGnssSignalTypes);
|
||||
}
|
||||
}
|
||||
@@ -189,8 +195,8 @@ public final class GnssCapabilities implements Parcelable {
|
||||
if (mPowerFlags == flags) {
|
||||
return this;
|
||||
} else {
|
||||
return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, flags,
|
||||
mGnssSignalTypes);
|
||||
return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
|
||||
mMeasurementCorrectionsFlags, flags, mGnssSignalTypes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,8 +210,8 @@ public final class GnssCapabilities implements Parcelable {
|
||||
if (mGnssSignalTypes.equals(gnssSignalTypes)) {
|
||||
return this;
|
||||
} else {
|
||||
return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags,
|
||||
new ArrayList<>(gnssSignalTypes));
|
||||
return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
|
||||
mMeasurementCorrectionsFlags, mPowerFlags, new ArrayList<>(gnssSignalTypes));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,15 +374,29 @@ public final class GnssCapabilities implements Parcelable {
|
||||
* Returns {@code true} if GNSS chipset supports accumulated delta range, {@code false}
|
||||
* otherwise.
|
||||
*
|
||||
* <p>The value is only known if {@link #isAccumulatedDeltaRangeCapabilityKnown()} is
|
||||
* true.
|
||||
*
|
||||
* <p>The accumulated delta range information can be queried in
|
||||
* {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeState()},
|
||||
* {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeMeters()}, and
|
||||
* {@link android.location.GnssMeasurement#getAccumulatedDeltaRangeUncertaintyMeters()}.
|
||||
*/
|
||||
public boolean hasAccumulatedDeltaRange() {
|
||||
if (!mIsAdrCapabilityKnown) {
|
||||
throw new IllegalStateException("Accumulated delta range capability is unknown.");
|
||||
}
|
||||
return (mTopFlags & TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if {@link #hasAccumulatedDeltaRange()} is known, {@code false}
|
||||
* otherwise.
|
||||
*/
|
||||
public boolean isAccumulatedDeltaRangeCapabilityKnown() {
|
||||
return mIsAdrCapabilityKnown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if GNSS chipset supports line-of-sight satellite identification
|
||||
* measurement corrections, {@code false} otherwise.
|
||||
@@ -484,6 +504,7 @@ public final class GnssCapabilities implements Parcelable {
|
||||
|
||||
GnssCapabilities that = (GnssCapabilities) o;
|
||||
return mTopFlags == that.mTopFlags
|
||||
&& mIsAdrCapabilityKnown == that.mIsAdrCapabilityKnown
|
||||
&& mMeasurementCorrectionsFlags == that.mMeasurementCorrectionsFlags
|
||||
&& mPowerFlags == that.mPowerFlags
|
||||
&& mGnssSignalTypes.equals(that.mGnssSignalTypes);
|
||||
@@ -491,15 +512,16 @@ public final class GnssCapabilities implements Parcelable {
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags, mGnssSignalTypes);
|
||||
return Objects.hash(mTopFlags, mIsAdrCapabilityKnown, mMeasurementCorrectionsFlags,
|
||||
mPowerFlags, mGnssSignalTypes);
|
||||
}
|
||||
|
||||
public static final @NonNull Creator<GnssCapabilities> CREATOR =
|
||||
new Creator<GnssCapabilities>() {
|
||||
@Override
|
||||
public GnssCapabilities createFromParcel(Parcel in) {
|
||||
return new GnssCapabilities(in.readInt(), in.readInt(), in.readInt(),
|
||||
in.createTypedArrayList(GnssSignalType.CREATOR));
|
||||
return new GnssCapabilities(in.readInt(), in.readBoolean(), in.readInt(),
|
||||
in.readInt(), in.createTypedArrayList(GnssSignalType.CREATOR));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -516,6 +538,7 @@ public final class GnssCapabilities implements Parcelable {
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel parcel, int flags) {
|
||||
parcel.writeInt(mTopFlags);
|
||||
parcel.writeBoolean(mIsAdrCapabilityKnown);
|
||||
parcel.writeInt(mMeasurementCorrectionsFlags);
|
||||
parcel.writeInt(mPowerFlags);
|
||||
parcel.writeTypedList(mGnssSignalTypes);
|
||||
@@ -570,8 +593,10 @@ public final class GnssCapabilities implements Parcelable {
|
||||
if (hasMeasurementCorrectionsForDriving()) {
|
||||
builder.append("MEASUREMENT_CORRECTIONS_FOR_DRIVING ");
|
||||
}
|
||||
if (hasAccumulatedDeltaRange()) {
|
||||
if (mIsAdrCapabilityKnown && hasAccumulatedDeltaRange()) {
|
||||
builder.append("ACCUMULATED_DELTA_RANGE ");
|
||||
} else if (!mIsAdrCapabilityKnown) {
|
||||
builder.append("ACCUMULATED_DELTA_RANGE(unknown) ");
|
||||
}
|
||||
if (hasMeasurementCorrectionsLosSats()) {
|
||||
builder.append("LOS_SATS ");
|
||||
@@ -618,12 +643,14 @@ public final class GnssCapabilities implements Parcelable {
|
||||
public static final class Builder {
|
||||
|
||||
private @TopHalCapabilityFlags int mTopFlags;
|
||||
private boolean mIsAdrCapabilityKnown;
|
||||
private @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
|
||||
private @SubHalPowerCapabilityFlags int mPowerFlags;
|
||||
private @NonNull List<GnssSignalType> mGnssSignalTypes;
|
||||
|
||||
public Builder() {
|
||||
mTopFlags = 0;
|
||||
mIsAdrCapabilityKnown = false;
|
||||
mMeasurementCorrectionsFlags = 0;
|
||||
mPowerFlags = 0;
|
||||
mGnssSignalTypes = Collections.emptyList();
|
||||
@@ -631,6 +658,7 @@ public final class GnssCapabilities implements Parcelable {
|
||||
|
||||
public Builder(@NonNull GnssCapabilities capabilities) {
|
||||
mTopFlags = capabilities.mTopFlags;
|
||||
mIsAdrCapabilityKnown = capabilities.mIsAdrCapabilityKnown;
|
||||
mMeasurementCorrectionsFlags = capabilities.mMeasurementCorrectionsFlags;
|
||||
mPowerFlags = capabilities.mPowerFlags;
|
||||
mGnssSignalTypes = capabilities.mGnssSignalTypes;
|
||||
@@ -764,11 +792,21 @@ public final class GnssCapabilities implements Parcelable {
|
||||
* Sets accumulated delta range capability.
|
||||
*/
|
||||
public @NonNull Builder setHasAccumulatedDeltaRange(boolean capable) {
|
||||
mIsAdrCapabilityKnown = true;
|
||||
mTopFlags = setFlag(mTopFlags, TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE,
|
||||
capable);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears accumulated delta range capability and sets it as unknown.
|
||||
*/
|
||||
public @NonNull Builder clearIsAccumulatedDeltaRangeCapabilityKnown() {
|
||||
mIsAdrCapabilityKnown = false;
|
||||
mTopFlags = setFlag(mTopFlags, TOP_HAL_CAPABILITY_ACCUMULATED_DELTA_RANGE, false);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets measurement corrections line-of-sight satellites capability.
|
||||
*/
|
||||
@@ -860,8 +898,8 @@ public final class GnssCapabilities implements Parcelable {
|
||||
* Builds a new GnssCapabilities.
|
||||
*/
|
||||
public @NonNull GnssCapabilities build() {
|
||||
return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags,
|
||||
new ArrayList<>(mGnssSignalTypes));
|
||||
return new GnssCapabilities(mTopFlags, mIsAdrCapabilityKnown,
|
||||
mMeasurementCorrectionsFlags, mPowerFlags, new ArrayList<>(mGnssSignalTypes));
|
||||
}
|
||||
|
||||
private static int setFlag(int value, int flag, boolean set) {
|
||||
|
||||
@@ -1127,13 +1127,14 @@ public class GnssNative {
|
||||
}
|
||||
|
||||
@NativeEntryPoint
|
||||
void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities) {
|
||||
void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities,
|
||||
boolean isAdrCapabilityKnown) {
|
||||
// Here the bits specified by 'capabilities' are turned on. It is handled differently from
|
||||
// sub hal because top hal capabilities could be set by HIDL HAL and/or AIDL HAL. Each of
|
||||
// them possesses a different set of capabilities.
|
||||
mTopFlags |= capabilities;
|
||||
GnssCapabilities oldCapabilities = mCapabilities;
|
||||
mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags);
|
||||
mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags, isAdrCapabilityKnown);
|
||||
onCapabilitiesChanged(oldCapabilities, mCapabilities);
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ void Gnss_class_init_once(JNIEnv* env, jclass& clazz) {
|
||||
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "(I[I[F[F[F[F[F)V");
|
||||
method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
|
||||
|
||||
method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(I)V");
|
||||
method_setTopHalCapabilities = env->GetMethodID(clazz, "setTopHalCapabilities", "(IZ)V");
|
||||
method_setSignalTypeCapabilities =
|
||||
env->GetMethodID(clazz, "setSignalTypeCapabilities", "(Ljava/util/List;)V");
|
||||
method_setGnssYearOfHardware = env->GetMethodID(clazz, "setGnssYearOfHardware", "(I)V");
|
||||
@@ -120,8 +120,10 @@ void Gnss_class_init_once(JNIEnv* env, jclass& clazz) {
|
||||
|
||||
Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) {
|
||||
ALOGD("%s: %du\n", __func__, capabilities);
|
||||
bool isAdrCapabilityKnown = (getInterfaceVersion() >= 3) ? true : false;
|
||||
JNIEnv* env = getJniEnv();
|
||||
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
|
||||
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities,
|
||||
isAdrCapabilityKnown);
|
||||
checkAndClearExceptionFromCallback(env, __FUNCTION__);
|
||||
return Status::ok();
|
||||
}
|
||||
@@ -409,7 +411,8 @@ Return<void> GnssCallbackHidl::gnssSetCapabilitesCb(uint32_t capabilities) {
|
||||
ALOGD("%s: %du\n", __func__, capabilities);
|
||||
|
||||
JNIEnv* env = getJniEnv();
|
||||
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities);
|
||||
env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities,
|
||||
/* isAdrCapabilityKnown= */ false);
|
||||
checkAndClearExceptionFromCallback(env, __FUNCTION__);
|
||||
return Void();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user