1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.gnss@1.0;
/** Represents a GNSS navigation message (or a fragment of it). */
interface IGnssNavigationMessageCallback {
/**
* Enumeration of available values to indicate the GNSS Navigation message
* types.
*
* For convenience, first byte is the GnssConstellationType on which that signal
* is typically transmitted.
*/
@export(name="", value_prefix="GNSS_NAVIGATION_MESSAGE_TYPE_")
enum GnssNavigationMessageType : int16_t {
UNKNOWN = 0,
/** GPS L1 C/A message contained in the structure. */
GPS_L1CA = 0x0101,
/** GPS L2-CNAV message contained in the structure. */
GPS_L2CNAV = 0x0102,
/** GPS L5-CNAV message contained in the structure. */
GPS_L5CNAV = 0x0103,
/** GPS CNAV-2 message contained in the structure. */
GPS_CNAV2 = 0x0104,
/** Glonass L1 CA message contained in the structure. */
GLO_L1CA = 0x0301,
/** Beidou D1 message contained in the structure. */
BDS_D1 = 0x0501,
/** Beidou D2 message contained in the structure. */
BDS_D2 = 0x0502,
/** Galileo I/NAV message contained in the structure. */
GAL_I = 0x0601,
/** Galileo F/NAV message contained in the structure. */
GAL_F = 0x0602
};
/**
* Status of Navigation Message
* When a message is received properly without any parity error in its
* navigation words, the status must be set to PARITY_PASSED.
* If a message is received with words that failed a parity check, but the GNSS
* receiver has corrected those words, the status must be set to PARITY_REBUILT.
* Do not send any navigation message that contains words with parity errors
* that cannot be corrected.
*/
@export(name="navigation_message_status", value_prefix="NAV_MESSAGE_STATUS_")
enum NavigationMessageStatus : uint16_t {
PARITY_PASSED = (1 << 0),
PARITY_REBUILT = (1 << 1),
UNKNOWN = 0
};
struct GnssNavigationMessage {
/**
* Satellite vehicle ID number, as defined in GnssSvInfo::svid
* This is a mandatory value.
*/
int16_t svid;
/**
* The type of message contained in the structure.
* This is a mandatory value.
*/
GnssNavigationMessageType type;
/**
* The status of the received navigation message.
* No need to send any navigation message that contains words with parity
* errors that cannot be corrected.
*/
bitfield<NavigationMessageStatus> status;
/**
* Message identifier. It provides an index so the complete Navigation
* Message can be assembled.
*
* - For GNSS L1 C/A subframe 4 and 5, this value corresponds to the 'frame
* id' of the navigation message, in the range of 1-25 (Subframe 1, 2, 3
* does not contain a 'frame id' and this value can be set to -1.)
*
* - For Glonass L1 C/A, this refers to the frame ID, in the range of 1-5.
*
* - For BeiDou D1, this refers to the frame number in the range of 1-24
*
* - For Beidou D2, this refers to the frame number, in the range of 1-120
*
* - For Galileo F/NAV nominal frame structure, this refers to the subframe
* number, in the range of 1-12
*
* - For Galileo I/NAV nominal frame structure, this refers to the subframe
* number in the range of 1-24
*/
int16_t messageId;
/**
* Sub-message identifier. If required by the message 'type', this value
* contains a sub-index within the current message (or frame) that is being
* transmitted.
*
* - For GNSS L1 C/A, BeiDou D1 & BeiDou D2, the submessage id corresponds to
* the subframe number of the navigation message, in the range of 1-5.
*
* - For Glonass L1 C/A, this refers to the String number, in the range from
* 1-15
*
* - For Galileo F/NAV, this refers to the page type in the range 1-6
*
* - For Galileo I/NAV, this refers to the word type in the range 0-10+
* A value of 0 is only allowed if the Satellite is transmiting a Spare Word.
*/
int16_t submessageId;
/**
* The data of the reported GNSS message. The bytes (or words) are specified
* using big endian format (MSB first).
*
* - For GNSS L1 C/A, Beidou D1 & Beidou D2, each subframe contains 10 30-bit
* words. Each word (30 bits) must fit into the last 30 bits in a
* 4-byte word (skip B31 and B32), with MSB first, for a total of 40
* bytes, covering a time period of 6, 6, and 0.6 seconds, respectively.
* The standard followed is 1995 SPS Signal specification.
*
* - For Glonass L1 C/A, each string contains 85 data bits, including the
* checksum. These bits must fit into 11 bytes, with MSB first (skip
* B86-B88), covering a time period of 2 seconds.
* The standard followed is Glonass Interface Control Document Edition 5.1.
*
* - For Galileo F/NAV, each word consists of 238-bit (sync & tail symbols
* excluded). Each word must fit into 30-bytes, with MSB first (skip
* B239, B240), covering a time period of 10 seconds. The standard
* followed is European GNSS(Galileo) Signal in Space Interface
* Control Document Issue 1.2.
*
* - For Galileo I/NAV, each page contains 2 page parts, even and odd, with
* a total of 2x114 = 228 bits, (sync & tail excluded) that must fit
* into 29 bytes, with MSB first (skip B229-B232). The standard followed
* is same as above.
*
* The data reported here must be the raw data as demodulated by the GNSS
* receiver, not data received from an external source (i.e. not from a server
* download.)
*/
vec<uint8_t> data;
};
/**
* The callback to report an available fragment of a GNSS navigation messages
* from the HAL.
*
* @param message - The GNSS navigation submessage/subframe representation.
*/
gnssNavigationMessageCb(GnssNavigationMessage message);
};
|