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

Commit 4d739e72 authored by Anil Admal's avatar Anil Admal
Browse files

Non-framework location access visibility and control (HAL)

Define IGnssVisibilityControl(Callback).hal interfaces to tell
the GNSS HAL implementation for which non-framework non-user
initiated emergency use cases, the framework user has granted
permission to the HAL implementation to provide GNSS location
information and to notify the framework user of these GNSS location
information deliveries.

Bug: 119560261
Test: Partial testing with cuttlefish
Change-Id: Ife704eb9fa4e6113196729b002bc9dc08bb47bc3
parent 9bed22a4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ hidl_interface {
    ],
    interfaces: [
        "android.hardware.gnss.measurement_corrections@1.0",
        "android.hardware.gnss.visibility_control@1.0",
        "android.hardware.gnss@1.0",
        "android.hardware.gnss@1.1",
        "android.hidl.base@1.0",
+19 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.hardware.gnss@2.0;

import android.hardware.gnss.measurement_corrections@1.0::IMeasurementCorrections;
import android.hardware.gnss.visibility_control@1.0::IGnssVisibilityControl;
import @1.1::IGnss;

import IGnssCallback;
@@ -25,7 +26,15 @@ import IGnssMeasurement;
import IAGnss;
import IAGnssRil;

/** Represents the standard GNSS (Global Navigation Satellite System) interface. */
/**
 * Represents the standard GNSS (Global Navigation Satellite System) interface.
 *
 * Due to the introduction of new GNSS HAL package android.hardware.gnss.visibility_control@1.0
 * the interface @1.0::IGnssNi.hal and @1.0::IGnssNiCallback.hal are deprecated in this version
 * and are not supported by the framework. The GNSS HAL implementation of this interface
 * must return nullptr for the following @1.0::IGnss method.
 *      getExtensionGnssNi() generates (IGnssNi gnssNiIface);
 */
interface IGnss extends @1.1::IGnss {
    /**
     * Opens the interface and provides the callback routines to the implementation of this
@@ -78,4 +87,11 @@ interface IGnss extends @1.1::IGnss {
     */
    getExtensionMeasurementCorrections()
            generates (IMeasurementCorrections measurementCorrectionsIface);

    /**
     * This method returns the IGnssVisibilityControl interface.
     *
     * @return visibilityControlIface Handle to the IGnssVisibilityControl interface.
     */
    getExtensionVisibilityControl() generates (IGnssVisibilityControl visibilityControlIface);
};
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ cc_binary {
        "AGnssRil.cpp",
        "Gnss.cpp",
        "GnssMeasurement.cpp",
        "GnssVisibilityControl.cpp",
        "service.cpp"
    ],
    shared_libs: [
@@ -35,6 +36,7 @@ cc_binary {
        "liblog",
        "android.hardware.gnss@2.0",
        "android.hardware.gnss.measurement_corrections@1.0",
        "android.hardware.gnss.visibility_control@1.0",
        "android.hardware.gnss@1.0",
        "android.hardware.gnss@1.1",
    ],
+9 −2
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@
#include "AGnssRil.h"
#include "GnssConfiguration.h"
#include "GnssMeasurement.h"
#include "GnssVisibilityControl.h"

using ::android::hardware::Status;
using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl;

namespace android {
namespace hardware {
@@ -93,8 +95,8 @@ Return<sp<V1_0::IAGnss>> Gnss::getExtensionAGnss() {
}

Return<sp<V1_0::IGnssNi>> Gnss::getExtensionGnssNi() {
    // TODO implement
    return sp<V1_0::IGnssNi>{};
    // The IGnssNi.hal interface is deprecated in 2.0.
    return nullptr;
}

Return<sp<V1_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
@@ -205,6 +207,11 @@ Gnss::getExtensionMeasurementCorrections() {
    return sp<measurement_corrections::V1_0::IMeasurementCorrections>{};
}

Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> Gnss::getExtensionVisibilityControl() {
    ALOGD("Gnss::getExtensionVisibilityControl");
    return new GnssVisibilityControl();
}

Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
    ALOGD("Gnss::setCallback_2_0");
    if (callback == nullptr) {
+2 −0
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@ struct Gnss : public IGnss {
    Return<bool> setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) override;
    Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
    getExtensionMeasurementCorrections() override;
    Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> getExtensionVisibilityControl()
            override;

   private:
    static sp<V2_0::IGnssCallback> sGnssCallback_2_0;
Loading