Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b627abc authored by Zhanghao Wen's avatar Zhanghao Wen Committed by Android (Google) Code Review
Browse files

Merge "Add gnss capability - Accumulated Delta Range in AIDL HAL (hardware/interfaces)"

parents 97258c51 28a8edfe
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ interface IGnssCallback {
  const int CAPABILITY_CORRELATION_VECTOR = 4096;
  const int CAPABILITY_SATELLITE_PVT = 8192;
  const int CAPABILITY_MEASUREMENT_CORRECTIONS_FOR_DRIVING = 16384;
  const int CAPABILITY_ACCUMULATED_DELTA_RANGE = 32768;
  @Backing(type="int") @VintfStability
  enum GnssStatusValue {
    NONE = 0,
+3 −0
Original line number Diff line number Diff line
@@ -82,6 +82,9 @@ interface IGnssCallback {
    /** Capability bit mask indicating that GNSS supports measurement corrections for driving */
    const int CAPABILITY_MEASUREMENT_CORRECTIONS_FOR_DRIVING = 1 << 14;

    /** Capability bit mask indicating that GNSS supports accumulated delta range */
    const int CAPABILITY_ACCUMULATED_DELTA_RANGE = 1 << 15;

    /**
     * Callback to inform framework of the GNSS HAL implementation's capabilities.
     *
+2 −1
Original line number Diff line number Diff line
@@ -60,7 +60,8 @@ ScopedAStatus Gnss::setCallback(const std::shared_ptr<IGnssCallback>& callback)
                  IGnssCallback::CAPABILITY_SATELLITE_BLOCKLIST |
                  IGnssCallback::CAPABILITY_SATELLITE_PVT |
                  IGnssCallback::CAPABILITY_CORRELATION_VECTOR |
                  IGnssCallback::CAPABILITY_ANTENNA_INFO);
                  IGnssCallback::CAPABILITY_ANTENNA_INFO |
                  IGnssCallback::CAPABILITY_ACCUMULATED_DELTA_RANGE);
    auto status = sGnssCallback->gnssSetCapabilitiesCb(capabilities);
    if (!status.isOk()) {
        ALOGE("%s: Unable to invoke callback.gnssSetCapabilitiesCb", __func__);
+58 −3
Original line number Diff line number Diff line
@@ -1505,10 +1505,11 @@ TEST_P(GnssHalTest, TestGnssMeasurementIntervals_LocationOnAfterMeasurement) {
}

/*
 * TestGnssMeasurementSetCallback
 * 1. Start measurement with 20s interval. Expect the first measurement received in 10s.
 * TestGnssMeasurementSetCallback:
 * This test ensures setCallback() can be called consecutively without close().
 * 1. Start measurement with 20s interval and wait for 1 measurement.
 * 2. Start measurement with 1s interval and wait for 5 measurements.
 * 3. Verify the received measurement intervals have expected mean and stddev.
 *    Verify the measurements were received at 1Hz.
 */
TEST_P(GnssHalTest, TestGnssMeasurementSetCallback) {
    if (aidl_gnss_hal_->getInterfaceVersion() <= 2) {
@@ -1581,3 +1582,57 @@ TEST_P(GnssHalTest, TestGnssMeasurementIsFullTracking) {
    status = iGnssMeasurement->close();
    ASSERT_TRUE(status.isOk());
}

/*
 * TestAccumulatedDeltaRange:
 * 1. Gets the GnssMeasurementExtension and verifies that it returns a non-null extension.
 * 2. Start measurement with 1s interval and wait for up to 15 measurements.
 * 3. Verify at least one measurement has a valid AccumulatedDeltaRange state.
 */
TEST_P(GnssHalTest, TestAccumulatedDeltaRange) {
    if (aidl_gnss_hal_->getInterfaceVersion() <= 2) {
        return;
    }
    if ((aidl_gnss_cb_->last_capabilities_ & IGnssCallback::CAPABILITY_ACCUMULATED_DELTA_RANGE) ==
        0) {
        return;
    }

    ALOGD("TestAccumulatedDeltaRange");

    auto callback = sp<GnssMeasurementCallbackAidl>::make();
    sp<IGnssMeasurementInterface> iGnssMeasurement;
    auto status = aidl_gnss_hal_->getExtensionGnssMeasurement(&iGnssMeasurement);

    IGnssMeasurementInterface::Options options;
    options.intervalMs = 1000;
    options.enableFullTracking = true;
    status = iGnssMeasurement->setCallbackWithOptions(callback, options);

    ASSERT_TRUE(status.isOk());
    ASSERT_TRUE(iGnssMeasurement != nullptr);

    bool accumulatedDeltaRangeFound = false;
    const int kNumMeasurementEvents = 15;

    // setCallback at 1s interval and wait for 15 measurements
    for (int i = 0; i < kNumMeasurementEvents; i++) {
        GnssData lastGnssData;
        ASSERT_TRUE(callback->gnss_data_cbq_.retrieve(lastGnssData, 10));
        EXPECT_EQ(callback->gnss_data_cbq_.calledCount(), i + 1);
        ASSERT_TRUE(lastGnssData.measurements.size() > 0);

        // Validity check GnssData fields
        checkGnssMeasurementClockFields(lastGnssData);
        for (const auto& measurement : lastGnssData.measurements) {
            if ((measurement.accumulatedDeltaRangeState & measurement.ADR_STATE_VALID) > 0) {
                accumulatedDeltaRangeFound = true;
                break;
            }
        }
        if (accumulatedDeltaRangeFound) break;
    }
    ASSERT_TRUE(accumulatedDeltaRangeFound);
    status = iGnssMeasurement->close();
    ASSERT_TRUE(status.isOk());
}
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ GnssData Utils::getMockMeasurement(const bool enableCorrVecOutputs, const bool e
            .agcLevelDb = 2.3,
            .pseudorangeRateMps = -484.13739013671875,
            .pseudorangeRateUncertaintyMps = 1.0379999876022339,
            .accumulatedDeltaRangeState = GnssMeasurement::ADR_STATE_UNKNOWN,
            .accumulatedDeltaRangeState = GnssMeasurement::ADR_STATE_VALID,
            .accumulatedDeltaRangeM = 1.52,
            .accumulatedDeltaRangeUncertaintyM = 2.43,
            .multipathIndicator = aidl::android::hardware::gnss::GnssMultipathIndicator::UNKNOWN,