1 /* Copyright (c) 2017, The Linux Foundation. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation, nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30 #include <LocationUtil.h>
31
32 namespace android {
33 namespace hardware {
34 namespace gnss {
35 namespace V1_0 {
36 namespace implementation {
37
convertGnssLocation(Location & in,GnssLocation & out)38 void convertGnssLocation(Location& in, GnssLocation& out)
39 {
40 memset(&out, 0, sizeof(GnssLocation));
41 if (in.flags & LOCATION_HAS_LAT_LONG_BIT)
42 out.gnssLocationFlags |= GnssLocationFlags::HAS_LAT_LONG;
43 if (in.flags & LOCATION_HAS_ALTITUDE_BIT)
44 out.gnssLocationFlags |= GnssLocationFlags::HAS_ALTITUDE;
45 if (in.flags & LOCATION_HAS_SPEED_BIT)
46 out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED;
47 if (in.flags & LOCATION_HAS_BEARING_BIT)
48 out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING;
49 if (in.flags & LOCATION_HAS_ACCURACY_BIT)
50 out.gnssLocationFlags |= GnssLocationFlags::HAS_HORIZONTAL_ACCURACY;
51 if (in.flags & LOCATION_HAS_VERTICAL_ACCURACY_BIT)
52 out.gnssLocationFlags |= GnssLocationFlags::HAS_VERTICAL_ACCURACY;
53 if (in.flags & LOCATION_HAS_SPEED_ACCURACY_BIT)
54 out.gnssLocationFlags |= GnssLocationFlags::HAS_SPEED_ACCURACY;
55 if (in.flags & LOCATION_HAS_BEARING_ACCURACY_BIT)
56 out.gnssLocationFlags |= GnssLocationFlags::HAS_BEARING_ACCURACY;
57 out.latitudeDegrees = in.latitude;
58 out.longitudeDegrees = in.longitude;
59 out.altitudeMeters = in.altitude;
60 out.speedMetersPerSec = in.speed;
61 out.bearingDegrees = in.bearing;
62 out.horizontalAccuracyMeters = in.accuracy;
63 out.verticalAccuracyMeters = in.verticalAccuracy;
64 out.speedAccuracyMetersPerSecond = in.speedAccuracy;
65 out.bearingAccuracyDegrees = in.bearingAccuracy;
66 out.timestamp = static_cast<GnssUtcTime>(in.timestamp);
67 }
68
convertGnssConstellationType(GnssSvType & in,GnssConstellationType & out)69 void convertGnssConstellationType(GnssSvType& in, GnssConstellationType& out)
70 {
71 switch(in) {
72 case GNSS_SV_TYPE_GPS:
73 out = GnssConstellationType::GPS;
74 break;
75 case GNSS_SV_TYPE_SBAS:
76 out = GnssConstellationType::SBAS;
77 break;
78 case GNSS_SV_TYPE_GLONASS:
79 out = GnssConstellationType::GLONASS;
80 break;
81 case GNSS_SV_TYPE_QZSS:
82 out = GnssConstellationType::QZSS;
83 break;
84 case GNSS_SV_TYPE_BEIDOU:
85 out = GnssConstellationType::BEIDOU;
86 break;
87 case GNSS_SV_TYPE_GALILEO:
88 out = GnssConstellationType::GALILEO;
89 break;
90 case GNSS_SV_TYPE_UNKNOWN:
91 default:
92 out = GnssConstellationType::UNKNOWN;
93 break;
94 }
95 }
96
convertGnssEphemerisType(GnssEphemerisType & in,GnssDebug::SatelliteEphemerisType & out)97 void convertGnssEphemerisType(GnssEphemerisType& in, GnssDebug::SatelliteEphemerisType& out)
98 {
99 switch(in) {
100 case GNSS_EPH_TYPE_EPHEMERIS:
101 out = GnssDebug::SatelliteEphemerisType::EPHEMERIS;
102 break;
103 case GNSS_EPH_TYPE_ALMANAC:
104 out = GnssDebug::SatelliteEphemerisType::ALMANAC_ONLY;
105 break;
106 case GNSS_EPH_TYPE_UNKNOWN:
107 default:
108 out = GnssDebug::SatelliteEphemerisType::NOT_AVAILABLE;
109 break;
110 }
111 }
112
convertGnssEphemerisSource(GnssEphemerisSource & in,GnssDebug::SatelliteEphemerisSource & out)113 void convertGnssEphemerisSource(GnssEphemerisSource& in, GnssDebug::SatelliteEphemerisSource& out)
114 {
115 switch(in) {
116 case GNSS_EPH_SOURCE_DEMODULATED:
117 out = GnssDebug::SatelliteEphemerisSource::DEMODULATED;
118 break;
119 case GNSS_EPH_SOURCE_SUPL_PROVIDED:
120 out = GnssDebug::SatelliteEphemerisSource::SUPL_PROVIDED;
121 break;
122 case GNSS_EPH_SOURCE_OTHER_SERVER_PROVIDED:
123 out = GnssDebug::SatelliteEphemerisSource::OTHER_SERVER_PROVIDED;
124 break;
125 case GNSS_EPH_SOURCE_LOCAL:
126 case GNSS_EPH_SOURCE_UNKNOWN:
127 default:
128 out = GnssDebug::SatelliteEphemerisSource::OTHER;
129 break;
130 }
131 }
132
convertGnssEphemerisHealth(GnssEphemerisHealth & in,GnssDebug::SatelliteEphemerisHealth & out)133 void convertGnssEphemerisHealth(GnssEphemerisHealth& in, GnssDebug::SatelliteEphemerisHealth& out)
134 {
135 switch(in) {
136 case GNSS_EPH_HEALTH_GOOD:
137 out = GnssDebug::SatelliteEphemerisHealth::GOOD;
138 break;
139 case GNSS_EPH_HEALTH_BAD:
140 out = GnssDebug::SatelliteEphemerisHealth::BAD;
141 break;
142 case GNSS_EPH_HEALTH_UNKNOWN:
143 default:
144 out = GnssDebug::SatelliteEphemerisHealth::UNKNOWN;
145 break;
146 }
147 }
148
149 } // namespace implementation
150 } // namespace V1_0
151 } // namespace gnss
152 } // namespace hardware
153 } // namespace android
154