Add intervalMillis to GnssMeasurement JNI

Bug: 206670536
Test: atest GnssMeasurementRegistrationTest
Change-Id: I3691e8bd2052667c9ffc0e50a5da86e3f5b91bd9
This commit is contained in:
Yu-Han Yang
2021-12-15 14:45:32 -08:00
parent 8cb6bedf8e
commit 67ae4f5a38
6 changed files with 75 additions and 37 deletions

View File

@@ -114,7 +114,8 @@ public final class GnssMeasurementsProvider extends
protected boolean registerWithService(GnssMeasurementRequest request,
Collection<GnssListenerRegistration> registrations) {
if (mGnssNative.startMeasurementCollection(request.isFullTracking(),
request.isCorrelationVectorOutputsEnabled())) {
request.isCorrelationVectorOutputsEnabled(),
request.getIntervalMillis())) {
if (D) {
Log.d(TAG, "starting gnss measurements (" + request + ")");
}

View File

@@ -735,9 +735,10 @@ public class GnssNative {
* Starts measurement collection.
*/
public boolean startMeasurementCollection(boolean enableFullTracking,
boolean enableCorrVecOutputs) {
boolean enableCorrVecOutputs, int intervalMillis) {
Preconditions.checkState(mRegistered);
return mGnssHal.startMeasurementCollection(enableFullTracking, enableCorrVecOutputs);
return mGnssHal.startMeasurementCollection(enableFullTracking, enableCorrVecOutputs,
intervalMillis);
}
/**
@@ -1310,8 +1311,9 @@ public class GnssNative {
}
protected boolean startMeasurementCollection(boolean enableFullTracking,
boolean enableCorrVecOutputs) {
return native_start_measurement_collection(enableFullTracking, enableCorrVecOutputs);
boolean enableCorrVecOutputs, int intervalMillis) {
return native_start_measurement_collection(enableFullTracking, enableCorrVecOutputs,
intervalMillis);
}
protected boolean stopMeasurementCollection() {
@@ -1475,7 +1477,7 @@ public class GnssNative {
private static native boolean native_is_measurement_supported();
private static native boolean native_start_measurement_collection(boolean enableFullTracking,
boolean enableCorrVecOutputs);
boolean enableCorrVecOutputs, int intervalMillis);
private static native boolean native_stop_measurement_collection();

View File

@@ -1806,15 +1806,20 @@ static jboolean android_location_gnss_hal_GnssNative_is_measurement_supported(JN
}
static jboolean android_location_gnss_hal_GnssNative_start_measurement_collection(
JNIEnv* /* env */, jclass, jboolean enableFullTracking, jboolean enableCorrVecOutputs) {
JNIEnv* /* env */, jclass, jboolean enableFullTracking, jboolean enableCorrVecOutputs,
jint intervalMs) {
if (gnssMeasurementIface == nullptr) {
ALOGE("%s: IGnssMeasurement interface not available.", __func__);
return JNI_FALSE;
}
hardware::gnss::IGnssMeasurementInterface::Options options;
options.enableFullTracking = enableFullTracking;
options.enableCorrVecOutputs = enableCorrVecOutputs;
options.intervalMs = intervalMs;
return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>(
mCallbacksObj),
enableFullTracking, enableCorrVecOutputs);
options);
}
static jboolean android_location_gnss_hal_GnssNative_stop_measurement_collection(JNIEnv* env,
@@ -2269,7 +2274,7 @@ static const JNINativeMethod sMeasurementMethods[] = {
/* name, signature, funcPtr */
{"native_is_measurement_supported", "()Z",
reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_is_measurement_supported)},
{"native_start_measurement_collection", "(ZZ)Z",
{"native_start_measurement_collection", "(ZZI)Z",
reinterpret_cast<void*>(
android_location_gnss_hal_GnssNative_start_measurement_collection)},
{"native_stop_measurement_collection", "()Z",

View File

@@ -50,9 +50,15 @@ GnssMeasurement::GnssMeasurement(const sp<IGnssMeasurementInterface>& iGnssMeasu
: mIGnssMeasurement(iGnssMeasurement) {}
jboolean GnssMeasurement::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) {
auto status = mIGnssMeasurement->setCallback(callback->getAidl(), enableFullTracking,
enableCorrVecOutputs);
const IGnssMeasurementInterface::Options& options) {
if (mIGnssMeasurement->getInterfaceVersion() >= 2) {
auto status = mIGnssMeasurement->setCallbackWithOptions(callback->getAidl(), options);
if (checkAidlStatus(status, "IGnssMeasurement setCallbackWithOptions() failed.")) {
return true;
}
}
auto status = mIGnssMeasurement->setCallback(callback->getAidl(), options.enableFullTracking,
options.enableCorrVecOutputs);
return checkAidlStatus(status, "IGnssMeasurement setCallback() failed.");
}
@@ -67,13 +73,16 @@ GnssMeasurement_V1_0::GnssMeasurement_V1_0(const sp<IGnssMeasurement_V1_0>& iGns
: mIGnssMeasurement_V1_0(iGnssMeasurement) {}
jboolean GnssMeasurement_V1_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) {
if (enableFullTracking == true) {
const IGnssMeasurementInterface::Options& options) {
if (options.enableFullTracking == true) {
ALOGW("Full tracking mode is not supported in 1.0 GNSS HAL.");
}
if (enableCorrVecOutputs == true) {
if (options.enableCorrVecOutputs == true) {
ALOGW("Correlation vector output is not supported in 1.0 GNSS HAL.");
}
if (options.intervalMs > 1000) {
ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
}
auto status = mIGnssMeasurement_V1_0->setCallback(callback->getHidl());
if (!checkHidlReturn(status, "IGnssMeasurement setCallback() failed.")) {
return JNI_FALSE;
@@ -93,11 +102,15 @@ GnssMeasurement_V1_1::GnssMeasurement_V1_1(const sp<IGnssMeasurement_V1_1>& iGns
: GnssMeasurement_V1_0{iGnssMeasurement}, mIGnssMeasurement_V1_1(iGnssMeasurement) {}
jboolean GnssMeasurement_V1_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) {
if (enableCorrVecOutputs == true) {
const IGnssMeasurementInterface::Options& options) {
if (options.enableCorrVecOutputs == true) {
ALOGW("Correlation vector output is not supported in 1.1 GNSS HAL.");
}
auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(), enableFullTracking);
if (options.intervalMs > 1000) {
ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
}
auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(),
options.enableFullTracking);
if (!checkHidlReturn(status, "IGnssMeasurement setCallback_V1_1() failed.")) {
return JNI_FALSE;
}
@@ -111,11 +124,15 @@ GnssMeasurement_V2_0::GnssMeasurement_V2_0(const sp<IGnssMeasurement_V2_0>& iGns
: GnssMeasurement_V1_1{iGnssMeasurement}, mIGnssMeasurement_V2_0(iGnssMeasurement) {}
jboolean GnssMeasurement_V2_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) {
if (enableCorrVecOutputs == true) {
const IGnssMeasurementInterface::Options& options) {
if (options.enableCorrVecOutputs == true) {
ALOGW("Correlation vector output is not supported in 2.0 GNSS HAL.");
}
auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(), enableFullTracking);
if (options.intervalMs > 1000) {
ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
}
auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(),
options.enableFullTracking);
if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_0() failed.")) {
return JNI_FALSE;
}
@@ -129,11 +146,15 @@ GnssMeasurement_V2_1::GnssMeasurement_V2_1(const sp<IGnssMeasurement_V2_1>& iGns
: GnssMeasurement_V2_0{iGnssMeasurement}, mIGnssMeasurement_V2_1(iGnssMeasurement) {}
jboolean GnssMeasurement_V2_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) {
if (enableCorrVecOutputs == true) {
const IGnssMeasurementInterface::Options& options) {
if (options.enableCorrVecOutputs == true) {
ALOGW("Correlation vector output is not supported in 2.1 GNSS HAL.");
}
auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(), enableFullTracking);
if (options.intervalMs > 1000) {
ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
}
auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(),
options.enableFullTracking);
if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_1() failed.")) {
return JNI_FALSE;
}

View File

@@ -37,16 +37,18 @@ namespace android::gnss {
class GnssMeasurementInterface {
public:
virtual ~GnssMeasurementInterface() {}
virtual jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) = 0;
virtual jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) = 0;
virtual jboolean close() = 0;
};
class GnssMeasurement : public GnssMeasurementInterface {
public:
GnssMeasurement(const sp<android::hardware::gnss::IGnssMeasurementInterface>& iGnssMeasurement);
jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) override;
jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
jboolean close() override;
private:
@@ -57,8 +59,9 @@ class GnssMeasurement_V1_0 : public GnssMeasurementInterface {
public:
GnssMeasurement_V1_0(
const sp<android::hardware::gnss::V1_0::IGnssMeasurement>& iGnssMeasurement);
jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) override;
jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
jboolean close() override;
private:
@@ -69,8 +72,9 @@ class GnssMeasurement_V1_1 : public GnssMeasurement_V1_0 {
public:
GnssMeasurement_V1_1(
const sp<android::hardware::gnss::V1_1::IGnssMeasurement>& iGnssMeasurement);
jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) override;
jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
private:
const sp<android::hardware::gnss::V1_1::IGnssMeasurement> mIGnssMeasurement_V1_1;
@@ -80,8 +84,9 @@ class GnssMeasurement_V2_0 : public GnssMeasurement_V1_1 {
public:
GnssMeasurement_V2_0(
const sp<android::hardware::gnss::V2_0::IGnssMeasurement>& iGnssMeasurement);
jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) override;
jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
private:
const sp<android::hardware::gnss::V2_0::IGnssMeasurement> mIGnssMeasurement_V2_0;
@@ -91,8 +96,9 @@ class GnssMeasurement_V2_1 : public GnssMeasurement_V2_0 {
public:
GnssMeasurement_V2_1(
const sp<android::hardware::gnss::V2_1::IGnssMeasurement>& iGnssMeasurement);
jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
bool enableFullTracking, bool enableCorrVecOutputs) override;
jboolean setCallback(
const std::unique_ptr<GnssMeasurementCallback>& callback,
const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
private:
const sp<android::hardware::gnss::V2_1::IGnssMeasurement> mIGnssMeasurement_V2_1;

View File

@@ -234,6 +234,7 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
private boolean mMeasurementCollectionStarted = false;
private boolean mMeasurementCollectionFullTracking = false;
private boolean mMeasurementCollectionCorrVecOutputsEnabled = false;
private int mMeasurementCollectionIntervalMillis = 0;
private GnssHalPositionMode mPositionMode = new GnssHalPositionMode();
private GnssHalBatchingMode mBatchingMode = new GnssHalBatchingMode();
private final ArrayList<Location> mBatchedLocations = new ArrayList<>();
@@ -523,10 +524,11 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
@Override
protected boolean startMeasurementCollection(boolean enableFullTracking,
boolean enableCorrVecOutputs) {
boolean enableCorrVecOutputs, int intervalMillis) {
mState.mMeasurementCollectionStarted = true;
mState.mMeasurementCollectionFullTracking = enableFullTracking;
mState.mMeasurementCollectionCorrVecOutputsEnabled = enableCorrVecOutputs;
mState.mMeasurementCollectionIntervalMillis = intervalMillis;
return true;
}
@@ -535,6 +537,7 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
mState.mMeasurementCollectionStarted = false;
mState.mMeasurementCollectionFullTracking = false;
mState.mMeasurementCollectionCorrVecOutputsEnabled = false;
mState.mMeasurementCollectionIntervalMillis = 0;
return true;
}