Add intervalMillis to GnssMeasurement JNI
Bug: 206670536 Test: atest GnssMeasurementRegistrationTest Change-Id: I3691e8bd2052667c9ffc0e50a5da86e3f5b91bd9
This commit is contained in:
@@ -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 + ")");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user