GnssNavigationMessage.java revision 0f1ab04516d3e9a72eda22c998910f49f2bd40bb
14b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa/* 24b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Copyright (C) 2014 The Android Open Source Project 34b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * 44b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Licensed under the Apache License, Version 2.0 (the "License"); 54b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * you may not use this file except in compliance with the License. 64b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * You may obtain a copy of the License at 74b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * 84b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * http://www.apache.org/licenses/LICENSE-2.0 94b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * 104b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Unless required by applicable law or agreed to in writing, software 114b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * distributed under the License is distributed on an "AS IS" BASIS, 124b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * See the License for the specific language governing permissions and 144b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * limitations under the License 154b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 164b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 174b3e3931270f8e406fc806bc7fa1c2788256687ddestradaapackage android.location; 184b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tangimport android.annotation.TestApi; 20a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport android.annotation.IntDef; 214b3e3931270f8e406fc806bc7fa1c2788256687ddestradaaimport android.annotation.NonNull; 224b3e3931270f8e406fc806bc7fa1c2788256687ddestradaaimport android.os.Parcel; 234b3e3931270f8e406fc806bc7fa1c2788256687ddestradaaimport android.os.Parcelable; 244b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 25a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport java.lang.annotation.Retention; 26a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tangimport java.lang.annotation.RetentionPolicy; 274b3e3931270f8e406fc806bc7fa1c2788256687ddestradaaimport java.security.InvalidParameterException; 284b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 294b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa/** 30120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang * A class containing a GNSS satellite Navigation Message. 314b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 32818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tangpublic final class GnssNavigationMessage implements Parcelable { 33c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa 344b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa private static final byte[] EMPTY_ARRAY = new byte[0]; 354b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 36a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang /** The type of the GPS Clock. */ 37a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang @Retention(RetentionPolicy.SOURCE) 3876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang @IntDef({TYPE_UNKNOWN, TYPE_GPS_L1CA, TYPE_GPS_L2CNAV, TYPE_GPS_L5CNAV, TYPE_GPS_CNAV2, 3976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang TYPE_GLO_L1CA, TYPE_BDS_D1, TYPE_BDS_D2, TYPE_GAL_I, TYPE_GAL_F}) 40818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public @interface GnssNavigationMessageType {} 41a8b7bb5a50d8ad197c6f32eb308919c11b52ce74Lifu Tang 424b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa // The following enumerations must be in sync with the values declared in gps.h 434b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 449363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Message type unknown */ 4576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_UNKNOWN = 0; 469363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** GPS L1 C/A message contained in the structure. */ 4776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GPS_L1CA = 0x0101; 489363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** GPS L2-CNAV message contained in the structure. */ 4976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GPS_L2CNAV = 0x0102; 509363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** GPS L5-CNAV message contained in the structure. */ 5176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GPS_L5CNAV = 0x0103; 529363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** GPS CNAV-2 message contained in the structure. */ 5376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GPS_CNAV2 = 0x0104; 549363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Glonass L1 CA message contained in the structure. */ 5576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GLO_L1CA = 0x0301; 569363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Beidou D1 message contained in the structure. */ 5776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_BDS_D1 = 0x0501; 589363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Beidou D2 message contained in the structure. */ 5976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_BDS_D2 = 0x0502; 609363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Galileo I/NAV message contained in the structure. */ 6176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GAL_I = 0x0601; 629363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang /** Galileo F/NAV message contained in the structure. */ 6376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int TYPE_GAL_F = 0x0602; 644b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 655e72118f193258259912c0a51688bd4434c8896edestradaa /** 665e72118f193258259912c0a51688bd4434c8896edestradaa * The Navigation Message Status is 'unknown'. 675e72118f193258259912c0a51688bd4434c8896edestradaa */ 6876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATUS_UNKNOWN = 0; 695e72118f193258259912c0a51688bd4434c8896edestradaa 705e72118f193258259912c0a51688bd4434c8896edestradaa /** 715e72118f193258259912c0a51688bd4434c8896edestradaa * The Navigation Message was received without any parity error in its navigation words. 725e72118f193258259912c0a51688bd4434c8896edestradaa */ 7376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATUS_PARITY_PASSED = (1<<0); 745e72118f193258259912c0a51688bd4434c8896edestradaa 755e72118f193258259912c0a51688bd4434c8896edestradaa /** 765e72118f193258259912c0a51688bd4434c8896edestradaa * The Navigation Message was received with words that failed parity check, but the receiver was 775e72118f193258259912c0a51688bd4434c8896edestradaa * able to correct those words. 785e72118f193258259912c0a51688bd4434c8896edestradaa */ 7976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public static final int STATUS_PARITY_REBUILT = (1<<1); 805e72118f193258259912c0a51688bd4434c8896edestradaa 814b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa // End enumerations in sync with gps.h 824b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 8376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mType; 8476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mSvid; 8576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mMessageId; 8676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mSubmessageId; 874b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa private byte[] mData; 8876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang private int mStatus; 894b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 900f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang /** 910f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 920f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang */ 930f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 940f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang public GnssNavigationMessage() { 954b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa initialize(); 964b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 974b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 984b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 994b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets all contents to the values stored in the provided object. 1000f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1014b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 1020f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 103818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public void set(GnssNavigationMessage navigationMessage) { 1044b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mType = navigationMessage.mType; 105120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = navigationMessage.mSvid; 1064b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mMessageId = navigationMessage.mMessageId; 1074b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mSubmessageId = navigationMessage.mSubmessageId; 1084b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mData = navigationMessage.mData; 1095e72118f193258259912c0a51688bd4434c8896edestradaa mStatus = navigationMessage.mStatus; 1104b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1114b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1124b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1134b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Resets all the contents to its original state. 1140f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1154b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 1160f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 1174b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public void reset() { 1184b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa initialize(); 1194b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1204b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1214b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1224b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets the type of the navigation message contained in the object. 1234b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 124818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang @GnssNavigationMessageType 12576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getType() { 1264b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return mType; 1274b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1284b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1294b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1304b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets the type of the navigation message. 1310f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1324b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 1330f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 13476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setType(@GnssNavigationMessageType int value) { 135c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa mType = value; 1364b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1374b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1384b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1394b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets a string representation of the 'type'. 1404b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * For internal and logging use only. 1414b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 1424b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa private String getTypeString() { 1434b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa switch (mType) { 14476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_UNKNOWN: 1454b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return "Unknown"; 14676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GPS_L1CA: 1479363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "GPS L1 C/A"; 14876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GPS_L2CNAV: 1499363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "GPS L2-CNAV"; 15076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GPS_L5CNAV: 1519363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "GPS L5-CNAV"; 15276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GPS_CNAV2: 1539363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "GPS CNAV2"; 15476a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GLO_L1CA: 1559363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "Glonass L1 C/A"; 15676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_BDS_D1: 1579363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "Beidou D1"; 15876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_BDS_D2: 1599363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "Beidou D2"; 16076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GAL_I: 1619363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "Galileo I"; 16276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang case TYPE_GAL_F: 1639363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang return "Galileo F"; 1644b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa default: 165c91ac688295e3d64ad1dd7539a713f5de60fea05destradaa return "<Invalid:" + mType + ">"; 1664b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1674b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1684b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1694b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1704b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets the Pseudo-random number. 1714b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Range: [1, 32]. 1724b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 17376a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getSvid() { 174120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang return mSvid; 1754b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1764b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1774b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1784b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets the Pseud-random number. 1790f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1804b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 1810f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 18276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setSvid(int value) { 183120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = value; 1844b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1854b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1864b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1874b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets the Message Identifier. 1884b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * It provides an index so the complete Navigation Message can be assembled. i.e. for L1 C/A 1894b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * subframe 4 and 5, this value corresponds to the 'frame id' of the navigation message. 1904b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Subframe 1, 2, 3 does not contain a 'frame id' and this might be reported as -1. 1914b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 19276a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getMessageId() { 1934b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return mMessageId; 1944b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 1954b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 1964b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 1974b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets the Message Identifier. 1980f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 1994b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 2000f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 20176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setMessageId(int value) { 2024b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mMessageId = value; 2034b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2044b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2054b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 2064b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets the Sub-message Identifier. 2074b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * If required by {@link #getType()}, this value contains a sub-index within the current message 2084b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * (or frame) that is being transmitted. i.e. for L1 C/A the sub-message identifier corresponds 2094b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * to the sub-frame Id of the navigation message. 2104b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 21176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getSubmessageId() { 2124b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return mSubmessageId; 2134b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2144b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2154b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 2164b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets the Sub-message identifier. 2170f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2184b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 2190f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 22076a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setSubmessageId(int value) { 2214b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mSubmessageId = value; 2224b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2234b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2244b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 2254b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Gets the data associated with the Navigation Message. 2264b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * The bytes (or words) specified using big endian format (MSB first). 2274b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 2284b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa @NonNull 2294b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public byte[] getData() { 2304b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return mData; 2314b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2324b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2334b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa /** 2344b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa * Sets the data associated with the Navigation Message. 2350f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2364b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa */ 2370f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 2384b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public void setData(byte[] value) { 2394b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa if (value == null) { 2404b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa throw new InvalidParameterException("Data must be a non-null array"); 2414b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2424b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2434b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mData = value; 2444b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 2454b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2465e72118f193258259912c0a51688bd4434c8896edestradaa /** 2475e72118f193258259912c0a51688bd4434c8896edestradaa * Gets the Status of the navigation message contained in the object. 2485e72118f193258259912c0a51688bd4434c8896edestradaa */ 24976a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public int getStatus() { 2505e72118f193258259912c0a51688bd4434c8896edestradaa return mStatus; 2515e72118f193258259912c0a51688bd4434c8896edestradaa } 2525e72118f193258259912c0a51688bd4434c8896edestradaa 2535e72118f193258259912c0a51688bd4434c8896edestradaa /** 2545e72118f193258259912c0a51688bd4434c8896edestradaa * Sets the status of the navigation message. 2550f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang * @hide 2565e72118f193258259912c0a51688bd4434c8896edestradaa */ 2570f1ab04516d3e9a72eda22c998910f49f2bd40bbLifu Tang @TestApi 25876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang public void setStatus(int value) { 2595e72118f193258259912c0a51688bd4434c8896edestradaa mStatus = value; 2605e72118f193258259912c0a51688bd4434c8896edestradaa } 2615e72118f193258259912c0a51688bd4434c8896edestradaa 2625e72118f193258259912c0a51688bd4434c8896edestradaa /** 2635e72118f193258259912c0a51688bd4434c8896edestradaa * Gets a string representation of the 'status'. 2645e72118f193258259912c0a51688bd4434c8896edestradaa * For internal and logging use only. 2655e72118f193258259912c0a51688bd4434c8896edestradaa */ 2665e72118f193258259912c0a51688bd4434c8896edestradaa private String getStatusString() { 2675e72118f193258259912c0a51688bd4434c8896edestradaa switch (mStatus) { 2685e72118f193258259912c0a51688bd4434c8896edestradaa case STATUS_UNKNOWN: 2695e72118f193258259912c0a51688bd4434c8896edestradaa return "Unknown"; 2705e72118f193258259912c0a51688bd4434c8896edestradaa case STATUS_PARITY_PASSED: 2715e72118f193258259912c0a51688bd4434c8896edestradaa return "ParityPassed"; 2725e72118f193258259912c0a51688bd4434c8896edestradaa case STATUS_PARITY_REBUILT: 2735e72118f193258259912c0a51688bd4434c8896edestradaa return "ParityRebuilt"; 2745e72118f193258259912c0a51688bd4434c8896edestradaa default: 2755e72118f193258259912c0a51688bd4434c8896edestradaa return "<Invalid:" + mStatus + ">"; 2765e72118f193258259912c0a51688bd4434c8896edestradaa } 2775e72118f193258259912c0a51688bd4434c8896edestradaa } 2785e72118f193258259912c0a51688bd4434c8896edestradaa 279818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public static final Creator<GnssNavigationMessage> CREATOR = 280818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang new Creator<GnssNavigationMessage>() { 2814b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa @Override 282818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssNavigationMessage createFromParcel(Parcel parcel) { 283818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang GnssNavigationMessage navigationMessage = new GnssNavigationMessage(); 2844b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 28576a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang navigationMessage.setType(parcel.readInt()); 28676a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang navigationMessage.setSvid(parcel.readInt()); 28776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang navigationMessage.setMessageId(parcel.readInt()); 28876a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang navigationMessage.setSubmessageId(parcel.readInt()); 2894b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2904b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa int dataLength = parcel.readInt(); 2914b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa byte[] data = new byte[dataLength]; 2924b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa parcel.readByteArray(data); 2934b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa navigationMessage.setData(data); 2944b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 2955e72118f193258259912c0a51688bd4434c8896edestradaa if (parcel.dataAvail() >= Integer.SIZE) { 2965e72118f193258259912c0a51688bd4434c8896edestradaa int status = parcel.readInt(); 29776a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang navigationMessage.setStatus(status); 2985e72118f193258259912c0a51688bd4434c8896edestradaa } else { 2995e72118f193258259912c0a51688bd4434c8896edestradaa navigationMessage.setStatus(STATUS_UNKNOWN); 3005e72118f193258259912c0a51688bd4434c8896edestradaa } 3015e72118f193258259912c0a51688bd4434c8896edestradaa 3024b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return navigationMessage; 3034b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3044b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3054b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa @Override 306818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang public GnssNavigationMessage[] newArray(int size) { 307818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang return new GnssNavigationMessage[size]; 3084b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3094b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa }; 3104b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 311120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang @Override 3124b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public void writeToParcel(Parcel parcel, int flags) { 3139363b949a104786c87cd2cd18f206ff3c1957e5eLifu Tang parcel.writeInt(mType); 314120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang parcel.writeInt(mSvid); 3154b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa parcel.writeInt(mMessageId); 3164b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa parcel.writeInt(mSubmessageId); 3174b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa parcel.writeInt(mData.length); 3184b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa parcel.writeByteArray(mData); 3195e72118f193258259912c0a51688bd4434c8896edestradaa parcel.writeInt(mStatus); 3204b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3214b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3224b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa @Override 3234b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public int describeContents() { 3244b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return 0; 3254b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3264b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3274b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa @Override 3284b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa public String toString() { 3294b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa final String format = " %-15s = %s\n"; 330818aa2c2c46addae934fb6cd42f889affc9ef747Lifu Tang StringBuilder builder = new StringBuilder("GnssNavigationMessage:\n"); 3314b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3324b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(String.format(format, "Type", getTypeString())); 333120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang builder.append(String.format(format, "Svid", mSvid)); 3345e72118f193258259912c0a51688bd4434c8896edestradaa builder.append(String.format(format, "Status", getStatusString())); 3354b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(String.format(format, "MessageId", mMessageId)); 3364b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(String.format(format, "SubmessageId", mSubmessageId)); 3374b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3384b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(String.format(format, "Data", "{")); 3394b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa String prefix = " "; 3404b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa for(byte value : mData) { 3414b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(prefix); 3424b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(value); 3434b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa prefix = ", "; 3444b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3454b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa builder.append(" }"); 3464b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3474b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa return builder.toString(); 3484b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3494b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa 3504b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa private void initialize() { 35176a620f0482ba54a4921c7c7e7eeb8ea87c12d3eLifu Tang mType = TYPE_UNKNOWN; 352120480f17ae18bbe8c6fa7ec4854281fdf349b59Lifu Tang mSvid = 0; 3534b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mMessageId = -1; 3544b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mSubmessageId = -1; 3554b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa mData = EMPTY_ARRAY; 3565e72118f193258259912c0a51688bd4434c8896edestradaa mStatus = STATUS_UNKNOWN; 3574b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa } 3584b3e3931270f8e406fc806bc7fa1c2788256687ddestradaa} 359