1/*
2 * Copyright (C) 2018 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
17package android.hardware.gnss@2.0;
18
19import @1.0::GnssLocation;
20
21/** Network handle type. */
22typedef uint64_t net_handle_t;
23
24/**
25 * Flags indicating the validity of the fields in ElapsedRealtime.
26 */
27@export(name="", value_prefix="ELAPSED_REALTIME_")
28enum ElapsedRealtimeFlags : uint16_t {
29    /** A valid timestampNs is stored in the data structure. */
30    HAS_TIMESTAMP_NS        = 1 << 0,
31    /** A valid timeUncertaintyNs is stored in the data structure. */
32    HAS_TIME_UNCERTAINTY_NS = 1 << 1,
33};
34
35/**
36 * Represents an estimate of elapsed time since boot of Android for a given event.
37 *
38 * This timestamp MUST represent the time the event happened and MUST be synchronized
39 * with the SystemClock.elapsedRealtimeNanos() clock.
40 */
41struct ElapsedRealtime {
42    /**
43     * A set of flags indicating the validity of each field in this data structure.
44     *
45     * Fields may have invalid information in them, if not marked as valid by the
46     * corresponding bit in flags.
47     */
48    bitfield<ElapsedRealtimeFlags> flags;
49
50    /**
51     * Estimate of the elapsed time since boot value for the corresponding event in nanoseconds.
52     */
53    uint64_t timestampNs;
54
55    /**
56     * Estimate of the relative precision of the alignment of this SystemClock
57     * timestamp, with the reported measurements in nanoseconds (68% confidence).
58     */
59    uint64_t timeUncertaintyNs;
60};
61
62/** Represents a location. */
63struct GnssLocation {
64    @1.0::GnssLocation v1_0;
65
66    /**
67     * Timing information of the GNSS location synchronized with SystemClock.elapsedRealtimeNanos()
68     * clock.
69     *
70     * This clock information can be obtained from SystemClock.elapsedRealtimeNanos(), when the GNSS
71     * is attached straight to the AP/SOC. When it is attached to a separate module the timestamp
72     * needs to be estimated by syncing the notion of time via PTP or some other mechanism.
73     */
74    ElapsedRealtime elapsedRealtime;
75};
76
77/**
78 * GNSS constellation type
79 *
80 * This is to specify the navigation satellite system, for example, as listed in Section 3.5 in
81 * RINEX Version 3.04.
82 */
83enum GnssConstellationType : uint8_t {
84    UNKNOWN = 0,
85    /** Global Positioning System. */
86    GPS     = 1,
87    /** Satellite-Based Augmentation System. */
88    SBAS    = 2,
89    /** Global Navigation Satellite System. */
90    GLONASS = 3,
91    /** Quasi-Zenith Satellite System. */
92    QZSS    = 4,
93    /** BeiDou Navigation Satellite System. */
94    BEIDOU  = 5,
95    /** Galileo Navigation Satellite System. */
96    GALILEO = 6,
97    /** Indian Regional Navigation Satellite System. */
98    IRNSS   = 7,
99};
100