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