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

Commit 21f5ee74 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add IGnss AIDL HAL (frameworks/base)"

parents 8fff72a0 5eaf444d
Loading
Loading
Loading
Loading
+48 −6
Original line number Diff line number Diff line
@@ -623,8 +623,38 @@ public class GnssNative {
    public void injectLocation(Location location) {
        Preconditions.checkState(mRegistered);
        if (location.hasAccuracy()) {
            mGnssHal.injectLocation(location.getLatitude(), location.getLongitude(),
                    location.getAccuracy());

            int gnssLocationFlags = GNSS_LOCATION_HAS_LAT_LONG
                    | (location.hasAltitude() ? GNSS_LOCATION_HAS_ALTITUDE : 0)
                    | (location.hasSpeed() ? GNSS_LOCATION_HAS_SPEED : 0)
                    | (location.hasBearing() ? GNSS_LOCATION_HAS_BEARING : 0)
                    | (location.hasAccuracy() ? GNSS_LOCATION_HAS_HORIZONTAL_ACCURACY : 0)
                    | (location.hasVerticalAccuracy() ? GNSS_LOCATION_HAS_VERTICAL_ACCURACY : 0)
                    | (location.hasSpeedAccuracy() ? GNSS_LOCATION_HAS_SPEED_ACCURACY : 0)
                    | (location.hasBearingAccuracy() ? GNSS_LOCATION_HAS_BEARING_ACCURACY : 0);

            double latitudeDegrees = location.getLatitude();
            double longitudeDegrees = location.getLongitude();
            double altitudeMeters = location.getAltitude();
            float speedMetersPerSec = location.getSpeed();
            float bearingDegrees = location.getBearing();
            float horizontalAccuracyMeters = location.getAccuracy();
            float verticalAccuracyMeters = location.getVerticalAccuracyMeters();
            float speedAccuracyMetersPerSecond = location.getSpeedAccuracyMetersPerSecond();
            float bearingAccuracyDegrees = location.getBearingAccuracyDegrees();
            long timestamp = location.getTime();

            int elapsedRealtimeFlags = GNSS_REALTIME_HAS_TIMESTAMP_NS
                    | (location.hasElapsedRealtimeUncertaintyNanos()
                    ? GNSS_REALTIME_HAS_TIME_UNCERTAINTY_NS : 0);
            long elapsedRealtimeNanos = location.getElapsedRealtimeNanos();
            double elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos();

            mGnssHal.injectLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees,
                    altitudeMeters, speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters,
                    verticalAccuracyMeters, speedAccuracyMetersPerSecond, bearingAccuracyDegrees,
                    timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos,
                    elapsedRealtimeUncertaintyNanos);
        }
    }

@@ -1263,8 +1293,15 @@ public class GnssNative {
            return native_read_nmea(buffer, bufferSize);
        }

        protected void injectLocation(double latitude, double longitude, float accuracy) {
            native_inject_location(latitude, longitude, accuracy);
        protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude,
                double longitude, double altitude, float speed, float bearing,
                float horizontalAccuracy, float verticalAccuracy, float speedAccuracy,
                float bearingAccuracy, long timestamp, @GnssRealtimeFlags int elapsedRealtimeFlags,
                long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos) {
            native_inject_location(gnssLocationFlags, latitude, longitude, altitude, speed,
                    bearing, horizontalAccuracy, verticalAccuracy, speedAccuracy, bearingAccuracy,
                    timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos,
                    elapsedRealtimeUncertaintyNanos);
        }

        protected void injectBestLocation(@GnssLocationFlags int gnssLocationFlags, double latitude,
@@ -1438,8 +1475,13 @@ public class GnssNative {

    // location injection APIs

    private static native void native_inject_location(double latitude, double longitude,
            float accuracy);
    private static native void native_inject_location(
            int gnssLocationFlags, double latitudeDegrees, double longitudeDegrees,
            double altitudeMeters, float speedMetersPerSec, float bearingDegrees,
            float horizontalAccuracyMeters, float verticalAccuracyMeters,
            float speedAccuracyMetersPerSecond, float bearingAccuracyDegrees,
            long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos,
            double elapsedRealtimeUncertaintyNanos);


    private static native void native_inject_best_location(
+280 −77

File changed.

Preview size limit exceeded, changes collapsed.

+3 −3
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ jboolean AGnss::setCallback(const std::unique_ptr<AGnssCallback>& callback) {

jboolean AGnss::dataConnOpen(JNIEnv* env, jlong networkHandle, jstring apn, jint apnIpType) {
    ScopedJniString jniApn{env, apn};
    auto status = mIAGnss->dataConnOpen(networkHandle, String16(jniApn.c_str()),
    auto status = mIAGnss->dataConnOpen(networkHandle, std::string(jniApn.c_str()),
                                        static_cast<IAGnss::ApnIpType>(apnIpType));
    return checkAidlStatus(status,
                           "IAGnssAidl dataConnOpen() failed. APN and its IP type not set.");
@@ -61,8 +61,8 @@ jboolean AGnss::dataConnFailed() {

jboolean AGnss::setServer(JNIEnv* env, jint type, jstring hostname, jint port) {
    ScopedJniString jniHostName{env, hostname};
    auto status =
            mIAGnss->setServer(static_cast<AGnssType>(type), String16(jniHostName.c_str()), port);
    auto status = mIAGnss->setServer(static_cast<AGnssType>(type), std::string(jniHostName.c_str()),
                                     port);
    return checkAidlStatus(status, "IAGnssAidl setServer() failed. Host name and port not set.");
}

+6 −2
Original line number Diff line number Diff line
@@ -429,11 +429,15 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
    }

    @Override
    protected void injectLocation(double latitude, double longitude, float accuracy) {
    protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude,
            double longitude, double altitude, float speed, float bearing, float horizontalAccuracy,
            float verticalAccuracy, float speedAccuracy, float bearingAccuracy, long timestamp,
            @GnssRealtimeFlags int elapsedRealtimeFlags, long elapsedRealtimeNanos,
            double elapsedRealtimeUncertaintyNanos) {
        mState.mInjectedLocation = new Location("injected");
        mState.mInjectedLocation.setLatitude(latitude);
        mState.mInjectedLocation.setLongitude(longitude);
        mState.mInjectedLocation.setAccuracy(accuracy);
        mState.mInjectedLocation.setAccuracy(horizontalAccuracy);
    }

    @Override