1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _ANDROID_SERVER_GNSSASSITANCE_H 18 #define _ANDROID_SERVER_GNSSASSITANCE_H 19 20 #include <sys/stat.h> 21 #pragma once 22 23 #ifndef LOG_TAG 24 #error LOG_TAG must be defined before including this file. 25 #endif 26 27 #include <android/hardware/gnss/gnss_assistance/BnGnssAssistanceInterface.h> 28 #include <log/log.h> 29 30 #include "GnssAssistanceCallback.h" 31 #include "jni.h" 32 33 namespace android::gnss { 34 35 using IGnssAssistanceInterface = android::hardware::gnss::gnss_assistance::IGnssAssistanceInterface; 36 using IGnssAssistanceCallback = android::hardware::gnss::gnss_assistance::IGnssAssistanceCallback; 37 using BeidouAssistance = android::hardware::gnss::gnss_assistance::GnssAssistance::BeidouAssistance; 38 using BeidouSatelliteEphemeris = android::hardware::gnss::gnss_assistance::BeidouSatelliteEphemeris; 39 using GalileoAssistance = 40 android::hardware::gnss::gnss_assistance::GnssAssistance::GalileoAssistance; 41 using GalileoSatelliteEphemeris = 42 android::hardware::gnss::gnss_assistance::GalileoSatelliteEphemeris; 43 using GalileoIonosphericModel = android::hardware::gnss::gnss_assistance::GalileoIonosphericModel; 44 using GlonassAssistance = 45 android::hardware::gnss::gnss_assistance::GnssAssistance::GlonassAssistance; 46 using GlonassAlmanac = android::hardware::gnss::gnss_assistance::GlonassAlmanac; 47 using GlonassSatelliteEphemeris = 48 android::hardware::gnss::gnss_assistance::GlonassSatelliteEphemeris; 49 using GnssAssistance = android::hardware::gnss::gnss_assistance::GnssAssistance; 50 using GnssSignalType = android::hardware::gnss::GnssSignalType; 51 using GpsAssistance = android::hardware::gnss::gnss_assistance::GnssAssistance::GpsAssistance; 52 using QzssAssistance = android::hardware::gnss::gnss_assistance::GnssAssistance::QzssAssistance; 53 using GnssAlmanac = android::hardware::gnss::gnss_assistance::GnssAlmanac; 54 using GnssSatelliteCorrections = 55 android::hardware::gnss::gnss_assistance::GnssAssistance::GnssSatelliteCorrections; 56 using GpsSatelliteEphemeris = android::hardware::gnss::gnss_assistance::GpsSatelliteEphemeris; 57 using SatelliteEphemerisTime = android::hardware::gnss::gnss_assistance::SatelliteEphemerisTime; 58 using UtcModel = android::hardware::gnss::gnss_assistance::UtcModel; 59 using LeapSecondsModel = android::hardware::gnss::gnss_assistance::LeapSecondsModel; 60 using KeplerianOrbitModel = android::hardware::gnss::gnss_assistance::KeplerianOrbitModel; 61 using KlobucharIonosphericModel = 62 android::hardware::gnss::gnss_assistance::KlobucharIonosphericModel; 63 using TimeModel = android::hardware::gnss::gnss_assistance::TimeModel; 64 using RealTimeIntegrityModel = android::hardware::gnss::gnss_assistance::RealTimeIntegrityModel; 65 using AuxiliaryInformation = android::hardware::gnss::gnss_assistance::AuxiliaryInformation; 66 67 void GnssAssistance_class_init_once(JNIEnv* env, jclass clazz); 68 69 class GnssAssistanceInterface { 70 public: 71 GnssAssistanceInterface(const sp<IGnssAssistanceInterface>& iGnssAssistance); 72 jboolean injectGnssAssistance(JNIEnv* env, jobject gnssAssistanceObj); 73 jboolean setCallback(const sp<IGnssAssistanceCallback>& callback); 74 75 private: 76 const sp<IGnssAssistanceInterface> mGnssAssistanceInterface; 77 }; 78 79 struct GnssAssistanceUtil { 80 static void setGlonassAssistance(JNIEnv* env, jobject glonassAssistanceObj, 81 std::optional<GlonassAssistance>& glonassAssistanceOpt); 82 static void setGlonassSatelliteEphemeris( 83 JNIEnv* env, jobject glonassSatelliteEphemerisObj, 84 std::vector<GlonassSatelliteEphemeris>& glonassSatelliteEphemerisList); 85 static void setGlonassAlmanac(JNIEnv* env, jobject glonassAlmanacObj, 86 std::optional<GlonassAlmanac>& glonassAlmanacOpt); 87 static void setBeidouAssistance(JNIEnv* env, jobject beidouAssistanceObj, 88 std::optional<BeidouAssistance>& beidouAssistanceOpt); 89 static void setBeidouSatelliteEphemeris( 90 JNIEnv* env, jobject beidouSatelliteEphemerisObj, 91 std::vector<BeidouSatelliteEphemeris>& beidouSatelliteEphemerisList); 92 static void setGalileoAssistance(JNIEnv* env, jobject galileoAssistanceObj, 93 std::optional<GalileoAssistance>& galileoAssistanceOpt); 94 static void setGalileoSatelliteEphemeris( 95 JNIEnv* env, jobject galileoSatelliteEphemerisObj, 96 std::vector<GalileoSatelliteEphemeris>& galileoSatelliteEphemerisList); 97 static void setGalileoIonosphericModel( 98 JNIEnv* env, jobject galileoIonosphericModelObj, 99 std::optional<GalileoIonosphericModel>& ionosphericModelOpt); 100 static void setGnssAssistance(JNIEnv* env, jobject gnssAssistanceObj, 101 GnssAssistance& gnssAssistance); 102 static void setGpsAssistance(JNIEnv* env, jobject gpsAssistanceObj, 103 std::optional<GpsAssistance>& gpsAssistanceOpt); 104 template <class T> 105 static void setGpsOrQzssSatelliteEphemeris(JNIEnv* env, jobject satelliteEphemerisObj, 106 std::vector<T>& satelliteEphemeris); 107 static void setQzssAssistance(JNIEnv* env, jobject qzssAssistanceObj, 108 std::optional<QzssAssistance>& qzssAssistanceOpt); 109 static void setGnssAlmanac(JNIEnv* env, jobject gnssAlmanacObj, 110 std::optional<GnssAlmanac>& gnssAlmanacOpt); 111 static void setGnssSignalType(JNIEnv* env, jobject gnssSignalTypeObj, 112 GnssSignalType& gnssSignalType); 113 static void setKeplerianOrbitModel(JNIEnv* env, jobject keplerianOrbitModelObj, 114 KeplerianOrbitModel& keplerianOrbitModel); 115 static void setKlobucharIonosphericModel( 116 JNIEnv* env, jobject klobucharIonosphericModelObj, 117 std::optional<KlobucharIonosphericModel>& klobucharIonosphericModelOpt); 118 static void setTimeModels(JNIEnv* env, jobject timeModelsObj, 119 std::vector<TimeModel>& timeModels); 120 static void setLeapSecondsModel(JNIEnv* env, jobject leapSecondsModelObj, 121 std::optional<LeapSecondsModel>& leapSecondsModelOpt); 122 static void setRealTimeIntegrityModels( 123 JNIEnv* env, jobject realTimeIntegrityModelsObj, 124 std::vector<RealTimeIntegrityModel>& realTimeIntegrityModels); 125 static void setSatelliteEphemerisTime(JNIEnv* env, jobject satelliteEphemerisTimeObj, 126 SatelliteEphemerisTime& satelliteEphemerisTime); 127 static void setUtcModel(JNIEnv* env, jobject utcModelObj, std::optional<UtcModel>& utcModelOpt); 128 static void setSatelliteCorrections( 129 JNIEnv* env, jobject satelliteCorrectionsObj, 130 std::vector<GnssSatelliteCorrections>& satelliteCorrections); 131 static void setAuxiliaryInformations(JNIEnv* env, jobject auxiliaryInformationListObj, 132 std::vector<AuxiliaryInformation>& auxiliaryInformations); 133 }; 134 135 } // namespace android::gnss 136 137 #endif // _ANDROID_SERVER_GNSSASSITANCE__H 138