From 30eecd45d2b03a32fcf6806130518f9931c1c8cb Mon Sep 17 00:00:00 2001 From: Yu-Han Yang <yuhany@google.com> Date: Thu, 12 Oct 2023 16:06:40 +0000 Subject: [PATCH] Add NavIC L1 support in GnssNavigationMessage Bug: 302199306 Test: atest GnssNavigationMessageTest Change-Id: I306ddf27c77899f3b61bd2ca7a2e574366597092 --- AconfigFlags.bp | 16 ++++++++ location/api/current.txt | 4 +- .../location/GnssNavigationMessage.java | 41 +++++++++++++++---- .../java/android/location/flags/gnss.aconfig | 8 ++++ 4 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 location/java/android/location/flags/gnss.aconfig diff --git a/AconfigFlags.bp b/AconfigFlags.bp index 2d164f891590..383ddb3d37e0 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -17,6 +17,7 @@ aconfig_srcjars = [ ":android.companion.flags-aconfig-java{.generated_srcjars}", ":android.content.pm.flags-aconfig-java{.generated_srcjars}", ":android.hardware.radio.flags-aconfig-java{.generated_srcjars}", + ":android.location.flags-aconfig-java{.generated_srcjars}", ":android.nfc.flags-aconfig-java{.generated_srcjars}", ":android.os.flags-aconfig-java{.generated_srcjars}", ":android.os.vibrator.flags-aconfig-java{.generated_srcjars}", @@ -134,6 +135,21 @@ cc_aconfig_library { aconfig_declarations: "com.android.text.flags-aconfig", } +// Location +aconfig_declarations { + name: "android.location.flags-aconfig", + package: "android.location.flags", + srcs: [ + "location/java/android/location/flags/*.aconfig", + ], +} + +java_aconfig_library { + name: "android.location.flags-aconfig-java", + aconfig_declarations: "android.location.flags-aconfig", + defaults: ["framework-minus-apex-aconfig-java-defaults"], +} + // NFC aconfig_declarations { name: "android.nfc.flags-aconfig", diff --git a/location/api/current.txt b/location/api/current.txt index 33effdd6cd6c..0c23d8cd77e0 100644 --- a/location/api/current.txt +++ b/location/api/current.txt @@ -412,7 +412,9 @@ package android.location { field public static final int TYPE_GPS_L1CA = 257; // 0x101 field public static final int TYPE_GPS_L2CNAV = 258; // 0x102 field public static final int TYPE_GPS_L5CNAV = 259; // 0x103 - field public static final int TYPE_IRN_L5CA = 1793; // 0x701 + field @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) public static final int TYPE_IRN_L1 = 1795; // 0x703 + field @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) public static final int TYPE_IRN_L5 = 1794; // 0x702 + field @Deprecated public static final int TYPE_IRN_L5CA = 1793; // 0x701 field public static final int TYPE_QZS_L1CA = 1025; // 0x401 field public static final int TYPE_SBS = 513; // 0x201 field public static final int TYPE_UNKNOWN = 0; // 0x0 diff --git a/location/java/android/location/GnssNavigationMessage.java b/location/java/android/location/GnssNavigationMessage.java index 637f90536125..32e636f8658b 100644 --- a/location/java/android/location/GnssNavigationMessage.java +++ b/location/java/android/location/GnssNavigationMessage.java @@ -16,10 +16,12 @@ package android.location; +import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.TestApi; +import android.location.flags.Flags; import android.os.Parcel; import android.os.Parcelable; @@ -41,7 +43,7 @@ public final class GnssNavigationMessage implements Parcelable { @Retention(RetentionPolicy.SOURCE) @IntDef({TYPE_UNKNOWN, TYPE_GPS_L1CA, TYPE_GPS_L2CNAV, TYPE_GPS_L5CNAV, TYPE_GPS_CNAV2, TYPE_SBS, TYPE_GLO_L1CA, TYPE_QZS_L1CA, TYPE_BDS_D1, TYPE_BDS_D2, TYPE_BDS_CNAV1, - TYPE_BDS_CNAV2, TYPE_GAL_I, TYPE_GAL_F, TYPE_IRN_L5CA}) + TYPE_BDS_CNAV2, TYPE_GAL_I, TYPE_GAL_F, TYPE_IRN_L5CA, TYPE_IRN_L5, TYPE_IRN_L1}) public @interface GnssNavigationMessageType {} // The following enumerations must be in sync with the values declared in gps.h @@ -74,8 +76,18 @@ public final class GnssNavigationMessage implements Parcelable { public static final int TYPE_GAL_I = 0x0601; /** Galileo F/NAV message contained in the structure. */ public static final int TYPE_GAL_F = 0x0602; - /** IRNSS L5 C/A message contained in the structure. */ + /** + * NavIC L5 C/A message contained in the structure. + * @deprecated Use {@link #TYPE_IRN_L5} instead. + */ + @Deprecated public static final int TYPE_IRN_L5CA = 0x0701; + /** NavIC L5 message contained in the structure. */ + @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) + public static final int TYPE_IRN_L5 = 0x0702; + /** NavIC L1 message contained in the structure. */ + @FlaggedApi(Flags.FLAG_GNSS_API_NAVIC_L1) + public static final int TYPE_IRN_L1 = 0x0703; /** * The status of the GNSS Navigation Message @@ -254,8 +266,15 @@ public final class GnssNavigationMessage implements Parcelable { case TYPE_GAL_F: return "Galileo F"; case TYPE_IRN_L5CA: - return "IRNSS L5 C/A"; + return "NavIC L5 C/A"; default: + if (Flags.gnssApiNavicL1()) { + if (mType == TYPE_IRN_L5) { + return "NavIC L5"; + } else if (mType == TYPE_IRN_L1) { + return "NavIC L1"; + } + } return "<Invalid:" + mType + ">"; } } @@ -303,9 +322,12 @@ public final class GnssNavigationMessage implements Parcelable { * 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.)</li> * <li> For Beidou CNAV1 this refers to the page type number in the range of 1-63.</li> - * <li> For IRNSS L5 C/A subframe 3 and 4, this value corresponds to the Message Id of the + * <li> For NavIC L5 subframe 3 and 4, this value corresponds to the Message Id of the * navigation message, in the range of 1-63. (Subframe 1 and 2 does not contain a message type * id and this value can be set to -1.)</li> + * <li> For NavIC L1 subframe 3, this value corresponds to the Message Id of the navigation + * message, in the range of 1-63. (Subframe 1 and 2 does not contain a message type id and this + * value can be set to -1.)</li> * </ul> */ @IntRange(from = -1, to = 120) @@ -339,8 +361,10 @@ public final class GnssNavigationMessage implements Parcelable { * navigation message, in the range of 1-3.</li> * <li> For Beidou CNAV2, the submessage id corresponds to the message type, in the range * 1-63.</li> - * <li> For IRNSS L5 C/A, the submessage id corresponds to the subframe number of the - * navigation message, in the range of 1-4.</li> + * <li> For NavIC L5, the submessage id corresponds to the subframe number of the navigation + * message, in the range of 1-4.</li> + * <li> For NavIC L1, the submessage id corresponds to the subframe number of the navigation + * message, in the range of 1-3.</li> * </ul> */ @IntRange(from = 1) @@ -363,7 +387,7 @@ public final class GnssNavigationMessage implements Parcelable { * <p>The bytes (or words) specified using big endian format (MSB first). * * <ul> - * <li>For GPS L1 C/A, IRNSS L5 C/A, Beidou D1 & Beidou D2, each subframe contains 10 + * <li>For GPS L1 C/A, NavIC L5, Beidou D1 & Beidou D2, each subframe contains 10 * 30-bit words. Each word (30 bits) should be 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.</li> @@ -383,6 +407,9 @@ public final class GnssNavigationMessage implements Parcelable { * 75 bytes. subframe #3 consists of 264 data bits that should be fit into 33 bytes.</li> * <li>For Beidou CNAV2, each subframe consists of 288 data bits, that should be fit into 36 * bytes.</li> + * <li> For NavIC L1, subframe #1 consists of 9 data bits that should be fit into 2 bytes (skip + * B10-B16). subframe #2 consists of 600 bits that should be fit into 75 bytes. subframe #3 + * consists of 274 data bits that should be fit into 35 bytes (skip B275-B280).</li> * </ul> */ @NonNull diff --git a/location/java/android/location/flags/gnss.aconfig b/location/java/android/location/flags/gnss.aconfig new file mode 100644 index 000000000000..c471a2749617 --- /dev/null +++ b/location/java/android/location/flags/gnss.aconfig @@ -0,0 +1,8 @@ +package: "android.location.flags" + +flag { + name: "gnss_api_navic_l1" + namespace: "location" + description: "Flag for GNSS API for NavIC L1" + bug: "302199306" +} \ No newline at end of file -- GitLab