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 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 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 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 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 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