• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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