1*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 2*4d7e907cSAndroid Build Coastguard Worker 3*4d7e907cSAndroid Build Coastguard Worker/** Extended interface for DEBUG support. */ 4*4d7e907cSAndroid Build Coastguard Workerinterface IGnssDebug { 5*4d7e907cSAndroid Build Coastguard Worker enum SatelliteEphemerisType : uint8_t { 6*4d7e907cSAndroid Build Coastguard Worker /** Ephemeris is known for this satellite. */ 7*4d7e907cSAndroid Build Coastguard Worker EPHEMERIS, 8*4d7e907cSAndroid Build Coastguard Worker /** 9*4d7e907cSAndroid Build Coastguard Worker * Ephemeris is not known, but Almanac (approximate location) is known. 10*4d7e907cSAndroid Build Coastguard Worker */ 11*4d7e907cSAndroid Build Coastguard Worker ALMANAC_ONLY, 12*4d7e907cSAndroid Build Coastguard Worker /** 13*4d7e907cSAndroid Build Coastguard Worker * Both ephemeris & almanac are not known (e.g. during a cold start 14*4d7e907cSAndroid Build Coastguard Worker * blind search.) 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker NOT_AVAILABLE 17*4d7e907cSAndroid Build Coastguard Worker }; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Worker enum SatelliteEphemerisSource : uint8_t { 20*4d7e907cSAndroid Build Coastguard Worker /** 21*4d7e907cSAndroid Build Coastguard Worker * The ephemeris (or almanac only) information was demodulated from the 22*4d7e907cSAndroid Build Coastguard Worker * signal received on the device 23*4d7e907cSAndroid Build Coastguard Worker */ 24*4d7e907cSAndroid Build Coastguard Worker DEMODULATED, 25*4d7e907cSAndroid Build Coastguard Worker /** 26*4d7e907cSAndroid Build Coastguard Worker * The ephemeris (or almanac only) information was received from a SUPL 27*4d7e907cSAndroid Build Coastguard Worker * server. 28*4d7e907cSAndroid Build Coastguard Worker */ 29*4d7e907cSAndroid Build Coastguard Worker SUPL_PROVIDED, 30*4d7e907cSAndroid Build Coastguard Worker /** 31*4d7e907cSAndroid Build Coastguard Worker * The ephemeris (or almanac only) information was provided by another 32*4d7e907cSAndroid Build Coastguard Worker * server. 33*4d7e907cSAndroid Build Coastguard Worker */ 34*4d7e907cSAndroid Build Coastguard Worker OTHER_SERVER_PROVIDED, 35*4d7e907cSAndroid Build Coastguard Worker /** 36*4d7e907cSAndroid Build Coastguard Worker * The ephemeris (or almanac only) information was provided by another 37*4d7e907cSAndroid Build Coastguard Worker * method, e.g. injected via a local debug tool, from build defaults 38*4d7e907cSAndroid Build Coastguard Worker * (e.g. almanac), or is from a satellite 39*4d7e907cSAndroid Build Coastguard Worker * with SatelliteEphemerisType::NOT_AVAILABLE. 40*4d7e907cSAndroid Build Coastguard Worker */ 41*4d7e907cSAndroid Build Coastguard Worker OTHER 42*4d7e907cSAndroid Build Coastguard Worker }; 43*4d7e907cSAndroid Build Coastguard Worker 44*4d7e907cSAndroid Build Coastguard Worker enum SatelliteEphemerisHealth : uint8_t { 45*4d7e907cSAndroid Build Coastguard Worker /** The ephemeris is known good. */ 46*4d7e907cSAndroid Build Coastguard Worker GOOD, 47*4d7e907cSAndroid Build Coastguard Worker /** The ephemeris is known bad. */ 48*4d7e907cSAndroid Build Coastguard Worker BAD, 49*4d7e907cSAndroid Build Coastguard Worker /** The ephemeris is unknown to be good or bad. */ 50*4d7e907cSAndroid Build Coastguard Worker UNKNOWN 51*4d7e907cSAndroid Build Coastguard Worker }; 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker /** 54*4d7e907cSAndroid Build Coastguard Worker * Provides the current best known position from any 55*4d7e907cSAndroid Build Coastguard Worker * source (GNSS or injected assistance). 56*4d7e907cSAndroid Build Coastguard Worker */ 57*4d7e907cSAndroid Build Coastguard Worker struct PositionDebug { 58*4d7e907cSAndroid Build Coastguard Worker /** 59*4d7e907cSAndroid Build Coastguard Worker * Validity of the data in this struct. False only if no 60*4d7e907cSAndroid Build Coastguard Worker * latitude/longitude information is known. 61*4d7e907cSAndroid Build Coastguard Worker */ 62*4d7e907cSAndroid Build Coastguard Worker bool valid; 63*4d7e907cSAndroid Build Coastguard Worker /** Latitude expressed in degrees */ 64*4d7e907cSAndroid Build Coastguard Worker double latitudeDegrees; 65*4d7e907cSAndroid Build Coastguard Worker /** Longitude expressed in degrees */ 66*4d7e907cSAndroid Build Coastguard Worker double longitudeDegrees; 67*4d7e907cSAndroid Build Coastguard Worker /** Altitude above ellipsoid expressed in meters */ 68*4d7e907cSAndroid Build Coastguard Worker float altitudeMeters; 69*4d7e907cSAndroid Build Coastguard Worker /** Represents horizontal speed in meters per second. */ 70*4d7e907cSAndroid Build Coastguard Worker float speedMetersPerSec; 71*4d7e907cSAndroid Build Coastguard Worker /** Represents heading in degrees. */ 72*4d7e907cSAndroid Build Coastguard Worker float bearingDegrees; 73*4d7e907cSAndroid Build Coastguard Worker /** 74*4d7e907cSAndroid Build Coastguard Worker * Estimated horizontal accuracy of position expressed in meters, 75*4d7e907cSAndroid Build Coastguard Worker * radial, 68% confidence. 76*4d7e907cSAndroid Build Coastguard Worker */ 77*4d7e907cSAndroid Build Coastguard Worker double horizontalAccuracyMeters; 78*4d7e907cSAndroid Build Coastguard Worker /** 79*4d7e907cSAndroid Build Coastguard Worker * Estimated vertical accuracy of position expressed in meters, with 80*4d7e907cSAndroid Build Coastguard Worker * 68% confidence. 81*4d7e907cSAndroid Build Coastguard Worker */ 82*4d7e907cSAndroid Build Coastguard Worker double verticalAccuracyMeters; 83*4d7e907cSAndroid Build Coastguard Worker /** 84*4d7e907cSAndroid Build Coastguard Worker * Estimated speed accuracy in meters per second with 68% confidence. 85*4d7e907cSAndroid Build Coastguard Worker */ 86*4d7e907cSAndroid Build Coastguard Worker double speedAccuracyMetersPerSecond; 87*4d7e907cSAndroid Build Coastguard Worker /** 88*4d7e907cSAndroid Build Coastguard Worker * estimated bearing accuracy degrees with 68% confidence. 89*4d7e907cSAndroid Build Coastguard Worker */ 90*4d7e907cSAndroid Build Coastguard Worker double bearingAccuracyDegrees; 91*4d7e907cSAndroid Build Coastguard Worker /** 92*4d7e907cSAndroid Build Coastguard Worker * Time duration before this report that this position information was 93*4d7e907cSAndroid Build Coastguard Worker * valid. This can, for example, be a previous injected location with 94*4d7e907cSAndroid Build Coastguard Worker * an age potentially thousands of seconds old, or 95*4d7e907cSAndroid Build Coastguard Worker * extrapolated to the current time (with appropriately increased 96*4d7e907cSAndroid Build Coastguard Worker * accuracy estimates), with a (near) zero age. 97*4d7e907cSAndroid Build Coastguard Worker */ 98*4d7e907cSAndroid Build Coastguard Worker float ageSeconds; 99*4d7e907cSAndroid Build Coastguard Worker }; 100*4d7e907cSAndroid Build Coastguard Worker 101*4d7e907cSAndroid Build Coastguard Worker /** 102*4d7e907cSAndroid Build Coastguard Worker * Provides the current best known UTC time estimate. 103*4d7e907cSAndroid Build Coastguard Worker * If no fresh information is available, e.g. after a delete all, 104*4d7e907cSAndroid Build Coastguard Worker * then whatever the effective defaults are on the device must be 105*4d7e907cSAndroid Build Coastguard Worker * provided (e.g. Jan. 1, 2017, with an uncertainty of 5 years) expressed 106*4d7e907cSAndroid Build Coastguard Worker * in the specified units. 107*4d7e907cSAndroid Build Coastguard Worker */ 108*4d7e907cSAndroid Build Coastguard Worker struct TimeDebug { 109*4d7e907cSAndroid Build Coastguard Worker /** UTC time estimate. */ 110*4d7e907cSAndroid Build Coastguard Worker GnssUtcTime timeEstimate; 111*4d7e907cSAndroid Build Coastguard Worker /** 68% error estimate in time. */ 112*4d7e907cSAndroid Build Coastguard Worker float timeUncertaintyNs; 113*4d7e907cSAndroid Build Coastguard Worker /** 114*4d7e907cSAndroid Build Coastguard Worker * 68% error estimate in local clock drift, 115*4d7e907cSAndroid Build Coastguard Worker * in nanoseconds per second (also known as parts per billion - ppb.) 116*4d7e907cSAndroid Build Coastguard Worker */ 117*4d7e907cSAndroid Build Coastguard Worker float frequencyUncertaintyNsPerSec; 118*4d7e907cSAndroid Build Coastguard Worker }; 119*4d7e907cSAndroid Build Coastguard Worker 120*4d7e907cSAndroid Build Coastguard Worker /** 121*4d7e907cSAndroid Build Coastguard Worker * Provides a single satellite info that has decoded navigation data. 122*4d7e907cSAndroid Build Coastguard Worker */ 123*4d7e907cSAndroid Build Coastguard Worker struct SatelliteData { 124*4d7e907cSAndroid Build Coastguard Worker /** Satellite vehicle ID number */ 125*4d7e907cSAndroid Build Coastguard Worker int16_t svid; 126*4d7e907cSAndroid Build Coastguard Worker /** Defines the constellation type of the given SV. */ 127*4d7e907cSAndroid Build Coastguard Worker GnssConstellationType constellation; 128*4d7e907cSAndroid Build Coastguard Worker 129*4d7e907cSAndroid Build Coastguard Worker /** 130*4d7e907cSAndroid Build Coastguard Worker * Defines the standard broadcast ephemeris or almanac availability for 131*4d7e907cSAndroid Build Coastguard Worker * the satellite. To report status of predicted orbit and clock 132*4d7e907cSAndroid Build Coastguard Worker * information, see the serverPrediction fields below. 133*4d7e907cSAndroid Build Coastguard Worker */ 134*4d7e907cSAndroid Build Coastguard Worker SatelliteEphemerisType ephemerisType; 135*4d7e907cSAndroid Build Coastguard Worker /** Defines the ephemeris source of the satellite. */ 136*4d7e907cSAndroid Build Coastguard Worker SatelliteEphemerisSource ephemerisSource; 137*4d7e907cSAndroid Build Coastguard Worker /** 138*4d7e907cSAndroid Build Coastguard Worker * Defines whether the satellite is known healthy 139*4d7e907cSAndroid Build Coastguard Worker * (safe for use in location calculation.) 140*4d7e907cSAndroid Build Coastguard Worker */ 141*4d7e907cSAndroid Build Coastguard Worker SatelliteEphemerisHealth ephemerisHealth; 142*4d7e907cSAndroid Build Coastguard Worker /** 143*4d7e907cSAndroid Build Coastguard Worker * Time duration from this report (current time), minus the 144*4d7e907cSAndroid Build Coastguard Worker * effective time of the ephemeris source (e.g. TOE, TOA.) 145*4d7e907cSAndroid Build Coastguard Worker * Set to 0 when ephemerisType is NOT_AVAILABLE. 146*4d7e907cSAndroid Build Coastguard Worker */ 147*4d7e907cSAndroid Build Coastguard Worker float ephemerisAgeSeconds; 148*4d7e907cSAndroid Build Coastguard Worker 149*4d7e907cSAndroid Build Coastguard Worker /** 150*4d7e907cSAndroid Build Coastguard Worker * True if a server has provided a predicted orbit and clock model for 151*4d7e907cSAndroid Build Coastguard Worker * this satellite. 152*4d7e907cSAndroid Build Coastguard Worker */ 153*4d7e907cSAndroid Build Coastguard Worker bool serverPredictionIsAvailable; 154*4d7e907cSAndroid Build Coastguard Worker /** 155*4d7e907cSAndroid Build Coastguard Worker * Time duration from this report (current time) minus the time of the 156*4d7e907cSAndroid Build Coastguard Worker * start of the server predicted information. For example, a 1 day 157*4d7e907cSAndroid Build Coastguard Worker * old prediction would be reported as 86400 seconds here. 158*4d7e907cSAndroid Build Coastguard Worker */ 159*4d7e907cSAndroid Build Coastguard Worker float serverPredictionAgeSeconds; 160*4d7e907cSAndroid Build Coastguard Worker }; 161*4d7e907cSAndroid Build Coastguard Worker 162*4d7e907cSAndroid Build Coastguard Worker /** 163*4d7e907cSAndroid Build Coastguard Worker * Provides a set of debug information that is filled by the GNSS chipset 164*4d7e907cSAndroid Build Coastguard Worker * when the method getDebugData() is invoked. 165*4d7e907cSAndroid Build Coastguard Worker */ 166*4d7e907cSAndroid Build Coastguard Worker struct DebugData { 167*4d7e907cSAndroid Build Coastguard Worker /** Current best known position. */ 168*4d7e907cSAndroid Build Coastguard Worker PositionDebug position; 169*4d7e907cSAndroid Build Coastguard Worker /** Current best know time estimate */ 170*4d7e907cSAndroid Build Coastguard Worker TimeDebug time; 171*4d7e907cSAndroid Build Coastguard Worker /** 172*4d7e907cSAndroid Build Coastguard Worker * Provides a list of the available satellite data, for all 173*4d7e907cSAndroid Build Coastguard Worker * satellites and constellations the device can track, 174*4d7e907cSAndroid Build Coastguard Worker * including GnssConstellationType UNKNOWN. 175*4d7e907cSAndroid Build Coastguard Worker */ 176*4d7e907cSAndroid Build Coastguard Worker vec<SatelliteData> satelliteDataArray; 177*4d7e907cSAndroid Build Coastguard Worker }; 178*4d7e907cSAndroid Build Coastguard Worker 179*4d7e907cSAndroid Build Coastguard Worker /** 180*4d7e907cSAndroid Build Coastguard Worker * This methods requests position, time and satellite ephemeris debug information 181*4d7e907cSAndroid Build Coastguard Worker * from the HAL. 182*4d7e907cSAndroid Build Coastguard Worker * 183*4d7e907cSAndroid Build Coastguard Worker * @return ret debugData information from GNSS Hal that contains the current best 184*4d7e907cSAndroid Build Coastguard Worker * known position, best known time estimate and a complete list of 185*4d7e907cSAndroid Build Coastguard Worker * constellations that the device can track. 186*4d7e907cSAndroid Build Coastguard Worker */ 187*4d7e907cSAndroid Build Coastguard Worker getDebugData() generates (DebugData debugData); 188*4d7e907cSAndroid Build Coastguard Worker}; 189