aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorAtli Guðmundsson <atli@tern.is>2018-12-27 03:11:40 +0000
committerAnders Broman <a.broman58@gmail.com>2019-01-02 09:20:02 +0000
commit22588bb924347fd517ff757745b0f98ca781c298 (patch)
tree3a35e22c562e03987fe782b03bdb2540e5509a5a /epan/dissectors
parente307c703fb5eef509123aa9b7bd035a511e202b9 (diff)
Updates and bugfixes of ASTERIX I062
I062 v1.18 updates (now the default) - Updated I062/380#10.STAT, new enum values (6 & 7) - Added asterix.062/080.SFC - Added asterix.062/080.IDD - Added asterix.062/080.IEC I062 v1.17 updates - Added asterix.062/060.V - Added asterix.062/060.G I062 bugfixes: - Fixed I062 Capitalisation inconsistencies - Fixed I062/080.FPLT, incorrect value mask - Fixed I062/080.SDS, incorrect value mask - Fixed I062/110#1.M5, incorrect name (was I062/110#1.MD5) - Fixed I062/110#4, incorrect abbreviation (was asterix.062_11_04) - Fixed I062/110#4, missing spare bit - Fixed I062/110#4.RES, incorrect value mask - Fixed I062/110#6, incorrect abbreviation (was asterix.062_11_06) - Fixed I062/136.MFL, incorrect abbreviation (was asterix.062_136_ALT) - Fixed I062/245.STI, was missing - Fixed I062/245, did not display anything - Fixed I062/290, incorrect abbreviation, (was asterix.062_) - Fixed I062/295#7.MHG, incorrect name (was I062/295#07.MHD) - Fixed I062/340#4/5, incorrect abbreviations (was asterix.062_340_) - Fixed I062/380#4, incorrect abbreviation (was asterix.062_380_4) - Fixed I062/380#4.IAS, incorrect scaling (depends on IM bit) - Fixed I062/380#6.ALT, incorrect type (was unsigned) - Fixed I062/380#7.ALT, incorrect type (was unsigned) - Fixed I062/380#9.NC, incorrect value mask - Fixed I062/380#9.TD, incorrect field size - Fixed I062/380#9.TTR, incorrect type (was signed) - Fixed I062/380#17.TA, incorrect type (was signed) - Fixed I062/380#19.VUC, incorrect field size - Fixed I062/390#3, incorrect type (was 32-bit), incorrect value mask - Fixed I062/390#n, incorrect abbreviations (was asterix.062_nn) - Fixed I062/500#3.APWLAT, incorrect type (was signed) - Fixed I062/500#3.APWLON, incorrect type (was signed) - Fixed I062/500#n, incorrect abbreviations (was asterix.062_nn) - Fixed I062/510, missing support for slaved trackers - Fixed I062/510.SUD, incorrect name (was I062/510.SID) - Fixed I062/510.SUD, incorrect type (was 24-bit), incorrect value mask - Fixed I062/510.STN, incorrect value mask - Updated I062/RE.CST.SAC/SIC, now reports as asterix.SAC/SIC - Updated I062/RE.CSNT.SAC/SIC, now reports as asterix.SAC/SIC Note: incorrect value masks and field sizes would in most cases cause an exception when trying to decode those fields. Change-Id: If6b9662d20619dd30b4fe28907ab0630c6d55e44 Reviewed-on: https://code.wireshark.org/review/31214 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-asterix.c491
1 files changed, 323 insertions, 168 deletions
diff --git a/epan/dissectors/packet-asterix.c b/epan/dissectors/packet-asterix.c
index 2fe4912074..0e3570b8a8 100644
--- a/epan/dissectors/packet-asterix.c
+++ b/epan/dissectors/packet-asterix.c
@@ -984,6 +984,8 @@ static gint hf_062_015 = -1;
static gint hf_062_015_SI = -1;
static gint hf_062_040 = -1;
static gint hf_062_060 = -1;
+static gint hf_062_060_V = -1;
+static gint hf_062_060_G = -1;
static gint hf_062_060_CH = -1;
static gint hf_062_060_SQUAWK = -1;
static gint hf_062_070 = -1;
@@ -1019,6 +1021,9 @@ static gint hf_062_080_FPLT = -1;
static gint hf_062_080_DUPT = -1;
static gint hf_062_080_DUPF = -1;
static gint hf_062_080_DUPM = -1;
+static gint hf_062_080_SFC = -1;
+static gint hf_062_080_IDD = -1;
+static gint hf_062_080_IEC = -1;
static gint hf_062_080_FRIFOE = -1;
static gint hf_062_080_COA = -1;
static gint hf_062_100 = -1;
@@ -1074,7 +1079,7 @@ static gint hf_062_135 = -1;
static gint hf_062_135_QNH = -1;
static gint hf_062_135_ALT = -1;
static gint hf_062_136 = -1;
-static gint hf_062_136_ALT = -1;
+static gint hf_062_136_MFL = -1;
static gint hf_062_180 = -1;
static gint hf_062_180_SPEED = -1;
static gint hf_062_180_HEADING = -1;
@@ -1096,6 +1101,7 @@ static gint hf_062_220_ROCD = -1;
static gint hf_062_240 = -1;
static gint hf_062_240_ROT = -1;
static gint hf_062_245 = -1;
+static gint hf_062_245_STI = -1;
static gint hf_062_270 = -1;
static gint hf_062_270_LENGTH = -1;
static gint hf_062_270_ORIENTATION = -1;
@@ -1154,7 +1160,7 @@ static gint hf_062_295_05_MD4 = -1;
static gint hf_062_295_06 = -1;
static gint hf_062_295_06_MD5 = -1;
static gint hf_062_295_07 = -1;
-static gint hf_062_295_07_MHD = -1;
+static gint hf_062_295_07_MHG = -1;
static gint hf_062_295_08 = -1;
static gint hf_062_295_08_IAS = -1;
static gint hf_062_295_09 = -1;
@@ -1421,17 +1427,21 @@ static gint hf_062_500_06_ART = -1;
static gint hf_062_500_07_v0_17 = -1;
static gint hf_062_500_07_ALA = -1;
static gint hf_062_510 = -1;
-static gint hf_062_510_SID = -1;
+static gint hf_062_510_SUD = -1;
static gint hf_062_510_STN = -1;
+static gint hf_062_510_SLV_01_SUD = -1;
+static gint hf_062_510_SLV_01_STN = -1;
+static gint hf_062_510_SLV_02_SUD = -1;
+static gint hf_062_510_SLV_02_STN = -1;
+static gint hf_062_510_SLV_03_SUD = -1;
+static gint hf_062_510_SLV_03_STN = -1;
+static gint hf_062_510_SLV_04_SUD = -1;
+static gint hf_062_510_SLV_04_STN = -1;
static gint hf_062_RE = -1;
static gint hf_062_RE_CST = -1;
-static gint hf_062_RE_CST_SAC = -1;
-static gint hf_062_RE_CST_SIC = -1;
static gint hf_062_RE_CST_TYP = -1;
static gint hf_062_RE_CST_TRK_NUM = -1;
static gint hf_062_RE_CSNT = -1;
-static gint hf_062_RE_CSNT_SAC = -1;
-static gint hf_062_RE_CSNT_SIC = -1;
static gint hf_062_RE_CSNT_TYP = -1;
static gint hf_062_RE_TVS = -1;
static gint hf_062_RE_TVS_VX = -1;
@@ -2412,6 +2422,8 @@ static gint ett_062_015 = -1;
static gint ett_062_015_SI = -1;
static gint ett_062_040 = -1;
static gint ett_062_060 = -1;
+static gint ett_062_060_V = -1;
+static gint ett_062_060_G = -1;
static gint ett_062_060_CH = -1;
static gint ett_062_060_SQUAWK = -1;
static gint ett_062_070 = -1;
@@ -2447,6 +2459,9 @@ static gint ett_062_080_FPLT = -1;
static gint ett_062_080_DUPT = -1;
static gint ett_062_080_DUPF = -1;
static gint ett_062_080_DUPM = -1;
+static gint ett_062_080_SFC = -1;
+static gint ett_062_080_IDD = -1;
+static gint ett_062_080_IEC = -1;
static gint ett_062_080_FRIFOE = -1;
static gint ett_062_080_COA = -1;
static gint ett_062_100 = -1;
@@ -2502,7 +2517,7 @@ static gint ett_062_135 = -1;
static gint ett_062_135_QNH = -1;
static gint ett_062_135_ALT = -1;
static gint ett_062_136 = -1;
-static gint ett_062_136_ALT = -1;
+static gint ett_062_136_MFL = -1;
static gint ett_062_180 = -1;
static gint ett_062_180_SPEED = -1;
static gint ett_062_180_HEADING = -1;
@@ -2524,6 +2539,7 @@ static gint ett_062_220_ROCD = -1;
static gint ett_062_240 = -1;
static gint ett_062_240_ROT = -1;
static gint ett_062_245 = -1;
+static gint ett_062_245_STI = -1;
static gint ett_062_270 = -1;
static gint ett_062_270_LENGTH = -1;
static gint ett_062_270_ORIENTATION = -1;
@@ -2582,7 +2598,7 @@ static gint ett_062_295_05_MD4 = -1;
static gint ett_062_295_06 = -1;
static gint ett_062_295_06_MD5 = -1;
static gint ett_062_295_07 = -1;
-static gint ett_062_295_07_MHD = -1;
+static gint ett_062_295_07_MHG = -1;
static gint ett_062_295_08 = -1;
static gint ett_062_295_08_IAS = -1;
static gint ett_062_295_09 = -1;
@@ -2849,17 +2865,21 @@ static gint ett_062_500_06_ART = -1;
static gint ett_062_500_07_v0_17 = -1;
static gint ett_062_500_07_ALA = -1;
static gint ett_062_510 = -1;
-static gint ett_062_510_SID = -1;
+static gint ett_062_510_SUD = -1;
static gint ett_062_510_STN = -1;
+static gint ett_062_510_SLV_01_SUD = -1;
+static gint ett_062_510_SLV_01_STN = -1;
+static gint ett_062_510_SLV_02_SUD = -1;
+static gint ett_062_510_SLV_02_STN = -1;
+static gint ett_062_510_SLV_03_SUD = -1;
+static gint ett_062_510_SLV_03_STN = -1;
+static gint ett_062_510_SLV_04_SUD = -1;
+static gint ett_062_510_SLV_04_STN = -1;
static gint ett_062_RE = -1;
static gint ett_062_RE_CST = -1;
-static gint ett_062_RE_CST_SAC = -1;
-static gint ett_062_RE_CST_SIC = -1;
static gint ett_062_RE_CST_TYP = -1;
static gint ett_062_RE_CST_TRK_NUM = -1;
static gint ett_062_RE_CSNT = -1;
-static gint ett_062_RE_CSNT_SAC = -1;
-static gint ett_062_RE_CSNT_SIC = -1;
static gint ett_062_RE_CSNT_TYP = -1;
static gint ett_062_RE_TVS = -1;
static gint ett_062_RE_TVS_VX = -1;
@@ -2946,6 +2966,8 @@ static dissector_handle_t asterix_handle;
#define FIELD_PART_ASCII 6
#define FIELD_PART_FX 7
#define FIELD_PART_HEX 8
+#define FIELD_PART_IAS_IM 9
+#define FIELD_PART_IAS_ASPD 10
typedef struct FieldPart_s FieldPart;
struct FieldPart_s {
@@ -4882,8 +4904,8 @@ static const value_string valstr_021_150_IM[] = {
{ 1, "Air Speed = Mach" },
{ 0, NULL }
};
-static const FieldPart I021_150_IM = { 1, 1.0, FIELD_PART_UINT, &hf_021_150_IM, NULL };
-static const FieldPart I021_150_ASPD = { 15, 1.0, FIELD_PART_UFLOAT, &hf_021_150_ASPD, NULL };
+static const FieldPart I021_150_IM = { 1, 1.0, FIELD_PART_IAS_IM, &hf_021_150_IM, NULL };
+static const FieldPart I021_150_ASPD = { 15, 1.0, FIELD_PART_IAS_ASPD, &hf_021_150_ASPD, NULL };
static const FieldPart *I021_150_PARTS[] = { &I021_150_IM, &I021_150_ASPD, NULL };
/* True Airspeed */
@@ -6701,14 +6723,28 @@ static const FieldPart I062_015_SI = { 8, 1.0, FIELD_PART_UINT, &hf_062_015_SI,
static const FieldPart *I062_015_PARTS[] = { &I062_015_SI, NULL };
/* Track Mode 3/A Code */
+static const value_string valstr_062_060_V[] = {
+ { 0, "Code validated" },
+ { 1, "Code not validated" },
+ { 0, NULL }
+};
+static const value_string valstr_062_060_G[] = {
+ { 0, "Default" },
+ { 1, "Garbled code" },
+ { 0, NULL }
+};
static const value_string valstr_062_060_CH[] = {
- { 0, "No Change" },
+ { 0, "No change" },
{ 1, "Mode 3/A has changed" },
{ 0, NULL }
};
+
+static const FieldPart I062_060_V = { 1, 1.0, FIELD_PART_UINT, &hf_062_060_V, NULL };
+static const FieldPart I062_060_G = { 1, 1.0, FIELD_PART_UINT, &hf_062_060_G, NULL };
static const FieldPart I062_060_CH = { 1, 1.0, FIELD_PART_UINT, &hf_062_060_CH, NULL };
static const FieldPart I062_060_SQUAWK = { 12, 1.0, FIELD_PART_SQUAWK, &hf_062_060_SQUAWK, NULL };
-static const FieldPart *I062_060_PARTS[] = { &IXXX_2bit_spare, &I062_060_CH, &IXXX_1bit_spare, &I062_060_SQUAWK, NULL };
+static const FieldPart *I062_060_PARTS[] = { &I062_060_V, &I062_060_G, &I062_060_CH, &IXXX_1bit_spare, &I062_060_SQUAWK, NULL };
+static const FieldPart *I062_060_PARTS_v1_16[] = { &IXXX_2bit_spare, &I062_060_CH, &IXXX_1bit_spare, &I062_060_SQUAWK, NULL };
static const FieldPart *I062_060_PARTS_v0_17[] = { &IXXX_4bit_spare, &I062_060_SQUAWK, NULL };
/* Track Status */
@@ -6718,7 +6754,7 @@ static const value_string valstr_062_080_MON[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_SPI[] = {
- { 0, "default value" },
+ { 0, "Default value" },
{ 1, "SPI present in the last report received from a sensor capable of decoding this data" },
{ 0, NULL }
};
@@ -6728,14 +6764,14 @@ static const value_string valstr_062_080_MRH[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_SRC[] = {
- { 0, "no source" },
+ { 0, "No source" },
{ 1, "GNSS" },
{ 2, "3D radar" },
- { 3, "triangulation" },
- { 4, "height from coverage" },
- { 5, "speed look-up table" },
- { 6, "default height" },
- { 7, "multilateration" },
+ { 3, "Triangulation" },
+ { 4, "Height from coverage" },
+ { 5, "Speed look-up table" },
+ { 6, "Default height" },
+ { 7, "Multilateration" },
{ 0, NULL }
};
static const value_string valstr_062_080_CNF[] = {
@@ -6749,13 +6785,13 @@ static const value_string valstr_062_080_SIM[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_TSE[] = {
- { 0, "default value" },
- { 1, "last message transmitted to the user for the track" },
+ { 0, "Default value" },
+ { 1, "Last message transmitted to the user for the track" },
{ 0, NULL }
};
static const value_string valstr_062_080_TSB[] = {
- { 0, "default value" },
- { 1, "first message transmitted to the user for the track" },
+ { 0, "Default value" },
+ { 1, "First message transmitted to the user for the track" },
{ 0, NULL }
};
static const value_string valstr_062_080_FPC[] = {
@@ -6764,12 +6800,12 @@ static const value_string valstr_062_080_FPC[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_AFF[] = {
- { 0, "default value" },
+ { 0, "Default value" },
{ 1, "ADS-B data inconsistent with other surveillance information" },
{ 0, NULL }
};
static const value_string valstr_062_080_STP[] = {
- { 0, "default value" },
+ { 0, "Default value" },
{ 1, "Slave Track Promotion" },
{ 0, NULL }
};
@@ -6779,8 +6815,8 @@ static const value_string valstr_062_080_KOS[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_AMA[] = {
- { 0, "track not resulting from amalgamation process" },
- { 1, "track resulting from amalgamation process" },
+ { 0, "Track not resulting from amalgamation process" },
+ { 1, "Track resulting from amalgamation process" },
{ 0, NULL }
};
static const value_string valstr_062_080_MD4[] = {
@@ -6791,12 +6827,12 @@ static const value_string valstr_062_080_MD4[] = {
{ 0, NULL }
};
static const value_string valstr_062_080_ME[] = {
- { 0, "default value" },
+ { 0, "Default value" },
{ 1, "Military Emergency present in the last report received from a sensor capable of decoding this data" },
{ 0, NULL }
};
static const value_string valstr_062_080_MI[] = {
- { 0, "default value" },
+ { 0, "Default value" },
{ 1, "Military Identification present in the last report received from a sensor capable of decoding this data" },
{ 0, NULL }
};
@@ -6885,6 +6921,21 @@ static const value_string valstr_062_080_DUPM[] = {
{ 1, "Duplicate Flight Plan due to manual correlation" },
{ 0, NULL }
};
+static const value_string valstr_062_080_SFC[] = {
+ { 0, "Default value" },
+ { 1, "Surface target" },
+ { 0, NULL }
+};
+static const value_string valstr_062_080_IDD[] = {
+ { 0, "Default value" },
+ { 1, "Duplicate Flight-ID" },
+ { 0, NULL }
+};
+static const value_string valstr_062_080_IEC[] = {
+ { 0, "Default value" },
+ { 1, "Inconsistent Emergency Code" },
+ { 0, NULL }
+};
static const value_string valstr_062_080_FRIFOE[] = {
{ 0, "No Mode 4 interrogation" },
{ 1, "Friendly target" },
@@ -6925,10 +6976,13 @@ static const FieldPart I062_080_AAC = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_AAC
static const FieldPart I062_080_SDS = { 2, 1.0, FIELD_PART_UINT, &hf_062_080_SDS, NULL };
static const FieldPart I062_080_EMS = { 3, 1.0, FIELD_PART_UINT, &hf_062_080_EMS, NULL };
static const FieldPart I062_080_PFT = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_PFT, NULL };
-static const FieldPart I062_080_FPLT = { 2, 1.0, FIELD_PART_UINT, &hf_062_080_FPLT, NULL };
+static const FieldPart I062_080_FPLT = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_FPLT, NULL };
static const FieldPart I062_080_DUPT = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_DUPT, NULL };
static const FieldPart I062_080_DUPF = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_DUPF, NULL };
static const FieldPart I062_080_DUPM = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_DUPM, NULL };
+static const FieldPart I062_080_SFC = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_SFC, NULL };
+static const FieldPart I062_080_IDD = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_IDD, NULL };
+static const FieldPart I062_080_IEC = { 1, 1.0, FIELD_PART_UINT, &hf_062_080_IEC, NULL };
static const FieldPart I062_080_FRIFOE = { 2, 1.0, FIELD_PART_UINT, &hf_062_080_FRIFOE, NULL };
static const FieldPart I062_080_COA = { 2, 1.0, FIELD_PART_UINT, &hf_062_080_COA, NULL };
static const FieldPart *I062_080_PARTS[] = { &I062_080_MON, &I062_080_SPI, &I062_080_MRH, &I062_080_SRC, &I062_080_CNF, &IXXX_FX,
@@ -6936,6 +6990,12 @@ static const FieldPart *I062_080_PARTS[] = { &I062_080_MON, &I062_080_SPI, &I062
&I062_080_AMA, &I062_080_MD4, &I062_080_ME, &I062_080_MI, &I062_080_MD5, &IXXX_FX,
&I062_080_CST, &I062_080_PSR, &I062_080_SSR, &I062_080_MDS, &I062_080_ADS, &I062_080_SUC, &I062_080_AAC, &IXXX_FX,
&I062_080_SDS, &I062_080_EMS, &I062_080_PFT, &I062_080_FPLT, &IXXX_FX,
+ &I062_080_DUPT, &I062_080_DUPF, &I062_080_DUPM, &I062_080_SFC, &I062_080_IDD, &I062_080_IEC, &IXXX_1bit_spare, &IXXX_FX, NULL };
+static const FieldPart *I062_080_PARTS_v1_17[] = { &I062_080_MON, &I062_080_SPI, &I062_080_MRH, &I062_080_SRC, &I062_080_CNF, &IXXX_FX,
+ &I062_080_SIM, &I062_080_TSE, &I062_080_TSB, &I062_080_FPC, &I062_080_AFF, &I062_080_STP, &I062_080_KOS, &IXXX_FX,
+ &I062_080_AMA, &I062_080_MD4, &I062_080_ME, &I062_080_MI, &I062_080_MD5, &IXXX_FX,
+ &I062_080_CST, &I062_080_PSR, &I062_080_SSR, &I062_080_MDS, &I062_080_ADS, &I062_080_SUC, &I062_080_AAC, &IXXX_FX,
+ &I062_080_SDS, &I062_080_EMS, &I062_080_PFT, &I062_080_FPLT, &IXXX_FX,
&I062_080_DUPT, &I062_080_DUPF, &I062_080_DUPM, &IXXX_4bit_spare, &IXXX_FX, NULL };
static const FieldPart *I062_080_PARTS_v0_17[] = { &I062_080_MON, &I062_080_SPI, &I062_080_MRH, &I062_080_SRC, &I062_080_CNF, &IXXX_FX,
&I062_080_SIM, &I062_080_TSE, &I062_080_TSB, &I062_080_FPC, &IXXX_3bit_spare, &IXXX_FX,
@@ -7025,7 +7085,7 @@ static const value_string valstr_062_110_04_RES[] = {
};
static const FieldPart I062_110_04_RES = { 1, 1.0, FIELD_PART_UINT, &hf_062_110_04_RES, NULL };
static const FieldPart I062_110_04_GA = { 14, 25.0, FIELD_PART_FLOAT, &hf_062_110_04_GA, NULL };
-static const FieldPart *I062_110_04_PARTS[] = { &I062_110_04_RES, &I062_110_04_GA, NULL };
+static const FieldPart *I062_110_04_PARTS[] = { &IXXX_1bit_spare, &I062_110_04_RES, &I062_110_04_GA, NULL };
static const FieldPart I062_110_05_SQUAWK = { 12, 1.0, FIELD_PART_SQUAWK, &hf_062_110_05_SQUAWK, NULL };
static const FieldPart *I062_110_05_PARTS[] = { &IXXX_4bit_spare, &I062_110_05_SQUAWK, NULL };
@@ -7091,8 +7151,8 @@ static const FieldPart I062_135_ALT = { 15, 1.0/4.0, FIELD_PART_FLOAT, &hf_062_1
static const FieldPart *I062_135_PARTS[] = { &I062_135_QNH, &I062_135_ALT, NULL };
/* Measured Flight Level */
-static const FieldPart I062_136_ALT = { 16, 1.0/4.0, FIELD_PART_FLOAT, &hf_062_136_ALT, NULL };
-static const FieldPart *I062_136_PARTS[] = { &I062_136_ALT, NULL };
+static const FieldPart I062_136_MFL = { 16, 1.0/4.0, FIELD_PART_FLOAT, &hf_062_136_MFL, NULL };
+static const FieldPart *I062_136_PARTS[] = { &I062_136_MFL, NULL };
/* Calculated Track Velocity (Polar) */
static const FieldPart I062_180_SPEED = { 16, 1.0/16384.0, FIELD_PART_FLOAT, &hf_062_180_SPEED, NULL };
@@ -7153,6 +7213,17 @@ static const FieldPart *I062_220_PARTS[] = { &I062_220_ROCD, NULL };
static const FieldPart I062_240_ROT = { 8, 1.0/4.0, FIELD_PART_FLOAT, &hf_062_240_ROT, NULL };
static const FieldPart *I062_240_PARTS[] = { &I062_240_ROT, NULL };
+/* Target Identification */
+static const value_string valstr_062_245_STI[] = {
+ { 0, "Callsign or registration downlinked from target" },
+ { 1, "Callsign not downlinked from target" },
+ { 2, "Registration not downlinked from target" },
+ { 3, "Invalid" },
+ { 0, NULL }
+};
+static const FieldPart I062_245_STI = { 2, 1.0, FIELD_PART_UINT, &hf_062_245_STI, NULL };
+static const FieldPart *I062_245_PARTS[] = { &I062_245_STI, &IXXX_6bit_spare, &IXXX_AI, NULL };
+
/* Target Size & Orientation */
static const FieldPart I062_270_LENGTH = { 7, 1.0, FIELD_PART_UFLOAT, &hf_062_270_LENGTH, NULL };
static const FieldPart I062_270_ORIENTATION = { 7, 360.0/128.0, FIELD_PART_UFLOAT, &hf_062_270_ORIENTATION, NULL };
@@ -7215,8 +7286,8 @@ static const FieldPart I062_295_05_MD4 = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_2
static const FieldPart *I062_295_05_PARTS[] = { &I062_295_05_MD4, NULL };
static const FieldPart I062_295_06_MD5 = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_295_06_MD5, NULL };
static const FieldPart *I062_295_06_PARTS[] = { &I062_295_06_MD5, NULL };
-static const FieldPart I062_295_07_MHD = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_295_07_MHD, NULL };
-static const FieldPart *I062_295_07_PARTS[] = { &I062_295_07_MHD, NULL };
+static const FieldPart I062_295_07_MHG = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_295_07_MHG, NULL };
+static const FieldPart *I062_295_07_PARTS[] = { &I062_295_07_MHG, NULL };
static const FieldPart I062_295_08_IAS = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_295_08_IAS, NULL };
static const FieldPart *I062_295_08_PARTS[] = { &I062_295_08_IAS, NULL };
static const FieldPart I062_295_09_TAS = { 8, 0.25, FIELD_PART_UFLOAT, &hf_062_295_09_TAS, NULL };
@@ -7374,10 +7445,8 @@ static const FieldPart *I062_380_03_PARTS[] = { &I062_380_03_MH, NULL };
/* Indicated Airspeed/Mach Number */
/* The scaling factor of this field depends on IM field */
-/* Various scaling factors not supported. */
-/* Since field not used for compatibility purposes, it is OK. */
-static const FieldPart I062_380_04_IM = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_04_IM, NULL };
-static const FieldPart I062_380_04_IAS = { 15, 1.0, FIELD_PART_UFLOAT, &hf_062_380_04_IAS, NULL };
+static const FieldPart I062_380_04_IM = { 1, 1.0, FIELD_PART_IAS_IM, &hf_062_380_04_IM, NULL };
+static const FieldPart I062_380_04_IAS = { 15, 1.0, FIELD_PART_IAS_ASPD, &hf_062_380_04_IAS, NULL };
static const FieldPart *I062_380_04_PARTS[] = { &I062_380_04_IM, &I062_380_04_IAS, NULL };
/* v.0.17 */
@@ -7447,7 +7516,7 @@ static const value_string valstr_062_380_06_SOURCE[] = {
};
static const FieldPart I062_380_06_SAS = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_06_SAS, NULL };
static const FieldPart I062_380_06_SOURCE = { 2, 1.0, FIELD_PART_UINT, &hf_062_380_06_SOURCE, NULL };
-static const FieldPart I062_380_06_ALT = { 13, 25.0, FIELD_PART_UFLOAT, &hf_062_380_06_ALT, NULL };
+static const FieldPart I062_380_06_ALT = { 13, 25.0, FIELD_PART_FLOAT, &hf_062_380_06_ALT, NULL };
static const FieldPart *I062_380_06_PARTS[] = { &I062_380_06_SAS, &I062_380_06_SOURCE, &I062_380_06_ALT, NULL };
/* Final State Selected Altitude */
@@ -7459,7 +7528,7 @@ static const value_string valstr_062_380_07[] = {
static const FieldPart I062_380_07_MV = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_07_MV, NULL };
static const FieldPart I062_380_07_AH = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_07_AH, NULL };
static const FieldPart I062_380_07_AM = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_07_AM, NULL };
-static const FieldPart I062_380_07_ALT = { 13, 25.0, FIELD_PART_UFLOAT, &hf_062_380_07_ALT, NULL };
+static const FieldPart I062_380_07_ALT = { 13, 25.0, FIELD_PART_FLOAT, &hf_062_380_07_ALT, NULL };
static const FieldPart *I062_380_07_PARTS[] = { &I062_380_07_MV, &I062_380_07_AH, &I062_380_07_AM, &I062_380_07_ALT, NULL };
/* Trajectory Intent Status */
@@ -7527,11 +7596,11 @@ static const FieldPart I062_380_09_ALT = { 16, 10.0, FIELD_PART_FLOAT, &hf_062_3
static const FieldPart I062_380_09_LAT = { 24, 180.0/8388608.0, FIELD_PART_FLOAT, &hf_062_380_09_LAT, NULL };
static const FieldPart I062_380_09_LON = { 24, 180.0/8388608.0, FIELD_PART_FLOAT, &hf_062_380_09_LON, NULL };
static const FieldPart I062_380_09_PTYP = { 4, 1.0, FIELD_PART_UINT, &hf_062_380_09_PTYP, NULL };
-static const FieldPart I062_380_09_TD = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_09_TD, NULL };
+static const FieldPart I062_380_09_TD = { 2, 1.0, FIELD_PART_UINT, &hf_062_380_09_TD, NULL };
static const FieldPart I062_380_09_TRA = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_09_TRA, NULL };
static const FieldPart I062_380_09_TOA = { 1, 1.0, FIELD_PART_UINT, &hf_062_380_09_TOA, NULL };
static const FieldPart I062_380_09_TOV = { 24, 1.0, FIELD_PART_UFLOAT, &hf_062_380_09_TOV, NULL };
-static const FieldPart I062_380_09_TTR = { 16, 0.01, FIELD_PART_UINT, &hf_062_380_09_TTR, NULL };
+static const FieldPart I062_380_09_TTR = { 16, 0.01, FIELD_PART_UFLOAT, &hf_062_380_09_TTR, NULL };
static const FieldPart *I062_380_09_PARTS[] = { &I062_380_09_TCA, &I062_380_09_NC, &I062_380_09_TCP, &I062_380_09_ALT, &I062_380_09_LAT, &I062_380_09_LON,
&I062_380_09_PTYP, &I062_380_09_TD, &I062_380_09_TRA, &I062_380_09_TOA, &I062_380_09_TOV, &I062_380_09_TTR, NULL };
@@ -7551,6 +7620,8 @@ static const value_string valstr_062_380_10_STAT[] = {
{ 3, "Alert, no SPI, aircraft on ground" },
{ 4, "Alert, SPI, aircraft airborne or on ground" },
{ 5, "No alert, SPI, aircraft airborne or on ground" },
+ { 6, "Not defined" },
+ { 7, "Unknown or not yet extracted" },
{ 0, NULL }
};
static const value_string valstr_062_380_10_SSC[] = {
@@ -7579,24 +7650,24 @@ static const FieldPart *I062_380_10_PARTS[] = { &I062_380_10_COM, &I062_380_10_S
/* Status reported by ADS-B */
static const value_string valstr_062_380_11_AC[] = {
- { 0, "unknown" },
+ { 0, "Unknown" },
{ 1, "ACAS not operational" },
{ 2, "ACAS operational" },
- { 3, "invalid" },
+ { 3, "Invalid" },
{ 0, NULL }
};
static const value_string valstr_062_380_11_MN[] = {
- { 0, "unknown" },
+ { 0, "Unknown" },
{ 1, "Multiple navigational aids not operating" },
{ 2, "Multiple navigational aids operating" },
- { 3, "invalid" },
+ { 3, "Invalid" },
{ 0, NULL }
};
static const value_string valstr_062_380_11_DC[] = {
- { 0, "unknown" },
+ { 0, "Unknown" },
{ 1, "Differential correction" },
{ 2, "No differential correction" },
- { 3, "invalid" },
+ { 3, "Invalid" },
{ 0, NULL }
};
static const value_string valstr_062_380_11_GBS[] = {
@@ -7651,7 +7722,7 @@ static const FieldPart I062_380_16_RATE = { 7, 1.0/4.0, FIELD_PART_FLOAT, &hf_06
static const FieldPart *I062_380_16_PARTS[] = { &I062_380_16_TI, &IXXX_6bit_spare, &I062_380_16_RATE, NULL };
/* Track Angle */
-static const FieldPart I062_380_17_TA = { 16, 360.0/65536.0, FIELD_PART_FLOAT, &hf_062_380_17_TA, NULL };
+static const FieldPart I062_380_17_TA = { 16, 360.0/65536.0, FIELD_PART_UFLOAT, &hf_062_380_17_TA, NULL };
static const FieldPart *I062_380_17_PARTS[] = { &I062_380_17_TA, NULL };
/* Ground Speed */
@@ -7659,7 +7730,7 @@ static const FieldPart I062_380_18_GS = { 16, 1.0/16384.0, FIELD_PART_FLOAT, &hf
static const FieldPart *I062_380_18_PARTS[] = { &I062_380_18_GS, NULL };
/* Velocity Uncertainty */
-static const FieldPart I062_380_19_VUC = { 16, 1.0, FIELD_PART_UINT, &hf_062_380_19_VUC, NULL };
+static const FieldPart I062_380_19_VUC = { 8, 1.0, FIELD_PART_UINT, &hf_062_380_19_VUC, NULL };
static const FieldPart *I062_380_19_PARTS[] = { &I062_380_19_VUC, NULL };
/* Meteorological Data */
@@ -7697,29 +7768,29 @@ static const FieldPart *I062_380_20_PARTS[] = { &I062_380_20_WS, &I062_380_20_WD
/* Emitter Category */
static const value_string valstr_062_380_21_ECAT[] = {
{ 1, "light aircraft <= 7000 kg" },
- { 2, "reserved" },
+ { 2, "Reserved" },
{ 3, "7000 kg < medium aircraft < 136000 kg" },
- { 4, "reserved" },
+ { 4, "Reserved" },
{ 5, "136000 kg <= heavy aircraft" },
- { 6, "highly manoeuvrable (5g acceleration capability) and high speed (>400 knots cruise)" },
- { 7, "reserved" },
- { 8, "reserved" },
- { 9, "reserved" },
- { 10, "rotocraft" },
- { 11, "glider / sailplane" },
- { 12, "lighter-than-air" },
- { 13, "unmanned aerial vehicle" },
- { 14, "space / transatmospheric vehicle" },
- { 15, "ultralight / handglider / paraglider" },
- { 16, "parachutist / skydiver" },
- { 17, "reserved" },
- { 18, "reserved" },
- { 19, "reserved" },
- { 20, "surface emergency vehicle" },
- { 21, "surface service vehicle" },
- { 22, "fixed ground or tethered obstruction" },
- { 23, "reserved" },
- { 24, "reserved" },
+ { 6, "Highly manoeuvrable (5g acceleration capability) and high speed (>400 knots cruise)" },
+ { 7, "Reserved" },
+ { 8, "Reserved" },
+ { 9, "Reserved" },
+ { 10, "Rotocraft" },
+ { 11, "Glider / sailplane" },
+ { 12, "Lighter-than-air" },
+ { 13, "Unmanned aerial vehicle" },
+ { 14, "Space / transatmospheric vehicle" },
+ { 15, "Ultralight / handglider / paraglider" },
+ { 16, "Parachutist / skydiver" },
+ { 17, "Reserved" },
+ { 18, "Reserved" },
+ { 19, "Reserved" },
+ { 20, "Surface emergency vehicle" },
+ { 21, "Surface service vehicle" },
+ { 22, "Fixed ground or tethered obstruction" },
+ { 23, "Reserved" },
+ { 24, "Reserved" },
{ 0, NULL }
};
static const FieldPart I062_380_21_ECAT = { 8, 1.0, FIELD_PART_UINT, &hf_062_380_21_ECAT, NULL };
@@ -7937,8 +8008,8 @@ static const FieldPart I062_500_02_APWLON = { 16, 180.0/8388608.0, FIELD_PART_FL
static const FieldPart *I062_500_02_PARTS_v0_17[] = { &I062_500_02_APWLAT, &I062_500_02_APWLON, NULL };
/* Estimated Accuracy Of Track Position (WGS-84) */
-static const FieldPart I062_500_03_APWLAT = { 16, 180.0/33554432.0, FIELD_PART_FLOAT, &hf_062_500_03_APWLAT, NULL };
-static const FieldPart I062_500_03_APWLON = { 16, 180.0/33554432.0, FIELD_PART_FLOAT, &hf_062_500_03_APWLON, NULL };
+static const FieldPart I062_500_03_APWLAT = { 16, 180.0/33554432.0, FIELD_PART_UFLOAT, &hf_062_500_03_APWLAT, NULL };
+static const FieldPart I062_500_03_APWLON = { 16, 180.0/33554432.0, FIELD_PART_UFLOAT, &hf_062_500_03_APWLON, NULL };
static const FieldPart *I062_500_03_PARTS[] = { &I062_500_03_APWLAT, &I062_500_03_APWLON, NULL };
/* v.0.17 */
/* Estimated Accuracy Of Calculated Track Altitude */
@@ -7984,10 +8055,29 @@ static const FieldPart *I062_500_07_PARTS_v0_17[] = { &I062_500_07_ALA, NULL };
static const FieldPart I062_500_08_ARC = { 8, 6.25, FIELD_PART_UFLOAT, &hf_062_500_08_ARC, NULL };
static const FieldPart *I062_500_08_PARTS[] = { &I062_500_08_ARC, NULL };
+/* Note: I062/510 is an FX field that has no limit on the number of extensions.
+ * There is currently no function available for us to deal dynamically with that so we
+ * will just hardcode support for a maximum of 5 extensions (4 slaves).
+ **/
+
/* Composed Track Number */
-static const FieldPart I062_510_SID = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SID, NULL };
+static const FieldPart I062_510_SUD = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SUD, NULL };
static const FieldPart I062_510_STN = { 15, 1.0, FIELD_PART_UINT, &hf_062_510_STN, NULL };
-static const FieldPart *I062_510_PARTS[] = { &I062_510_SID, &I062_510_STN, &IXXX_3FX, NULL };
+static const FieldPart I062_510_SLV_01_SUD = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_01_SUD, NULL };
+static const FieldPart I062_510_SLV_01_STN = { 15, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_01_STN, NULL };
+static const FieldPart I062_510_SLV_02_SUD = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_02_SUD, NULL };
+static const FieldPart I062_510_SLV_02_STN = { 15, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_02_STN, NULL };
+static const FieldPart I062_510_SLV_03_SUD = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_03_SUD, NULL };
+static const FieldPart I062_510_SLV_03_STN = { 15, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_03_STN, NULL };
+static const FieldPart I062_510_SLV_04_SUD = { 8, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_04_SUD, NULL };
+static const FieldPart I062_510_SLV_04_STN = { 15, 1.0, FIELD_PART_UINT, &hf_062_510_SLV_04_STN, NULL };
+static const FieldPart *I062_510_PARTS[] = {
+ &I062_510_SUD, &I062_510_STN, &IXXX_3FX,
+ &I062_510_SLV_01_SUD, &I062_510_SLV_01_STN, &IXXX_3FX,
+ &I062_510_SLV_02_SUD, &I062_510_SLV_02_STN, &IXXX_3FX,
+ &I062_510_SLV_03_SUD, &I062_510_SLV_03_STN, &IXXX_3FX,
+ &I062_510_SLV_04_SUD, &I062_510_SLV_04_STN, &IXXX_3FX,
+ NULL };
/*Reserved Expansion*/
static const value_string valstr_062_RE_CST_TYPE[] = {
@@ -8011,17 +8101,13 @@ static const value_string valstr_062_RE_STS_FDR[] = {
};
/*Contributing Sensors with Local Track Numbers*/
-static const FieldPart I062_RE_CST_SAC = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CST_SAC, NULL };
-static const FieldPart I062_RE_CST_SIC = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CST_SIC, NULL };
static const FieldPart I062_RE_CST_TYPE = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CST_TYP, NULL };
static const FieldPart I062_RE_CST_TRK_NUM = { 16, 1.0, FIELD_PART_UINT, &hf_062_RE_CST_TRK_NUM, NULL };
-static const FieldPart *I062_RE_CST_PARTS[] = { &I062_RE_CST_SAC, &I062_RE_CST_SIC, &I062_RE_CST_TYPE, &I062_RE_CST_TRK_NUM, NULL };
+static const FieldPart *I062_RE_CST_PARTS[] = { &IXXX_SAC, &IXXX_SIC, &I062_RE_CST_TYPE, &I062_RE_CST_TRK_NUM, NULL };
/*Contributing Sensors with No Local Track Numbers*/
-static const FieldPart I062_RE_CSNT_SAC = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CSNT_SAC, NULL };
-static const FieldPart I062_RE_CSNT_SIC = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CSNT_SIC, NULL };
static const FieldPart I062_RE_CSNT_TYPE = { 8, 1.0, FIELD_PART_UINT, &hf_062_RE_CSNT_TYP, NULL };
-static const FieldPart *I062_RE_CSNT_PARTS[] = { &I062_RE_CSNT_SAC, &I062_RE_CSNT_SIC, &I062_RE_CSNT_TYPE, NULL };
+static const FieldPart *I062_RE_CSNT_PARTS[] = { &IXXX_SAC, &IXXX_SIC, &I062_RE_CSNT_TYPE, NULL };
/*Calculated Track Velocity Relative to System Reference Point*/
static const FieldPart I062_RE_TVS_VX = { 16, 0.25, FIELD_PART_FLOAT, &hf_062_RE_TVS_VX, NULL };
@@ -8030,7 +8116,7 @@ static const FieldPart *I062_RE_TVS_PARTS[] = { &I062_RE_TVS_VX, &I062_RE_TVS_VY
/*Supplementary Track Status*/
static const FieldPart I062_RE_STS_FDR = { 1, 1.0, FIELD_PART_UINT, &hf_062_RE_STS_FDR, NULL };
-static const FieldPart *I062_RE_STS_PARTS[] = { &I062_RE_STS_FDR, NULL };
+static const FieldPart *I062_RE_STS_PARTS[] = { &I062_RE_STS_FDR, &IXXX_6bit_spare, &IXXX_FX, NULL };
/* Items */
@@ -8039,9 +8125,11 @@ static const AsterixField I062_010 = { FIXED, 2, 0, 0, &hf_062_010, IXXX_SAC_SIC
static const AsterixField I062_015 = { FIXED, 1, 0, 0, &hf_062_015, I062_015_PARTS, { NULL } };
static const AsterixField I062_040 = { FIXED, 2, 0, 0, &hf_062_040, IXXX_TN_16_PARTS, { NULL } };
static const AsterixField I062_060 = { FIXED, 2, 0, 0, &hf_062_060, I062_060_PARTS, { NULL } };
+static const AsterixField I062_060_v1_16 = { FIXED, 2, 0, 0, &hf_062_060, I062_060_PARTS_v1_16, { NULL } };
static const AsterixField I062_060_v0_17 = { FIXED, 2, 0, 0, &hf_062_060, I062_060_PARTS_v0_17, { NULL } };
static const AsterixField I062_070 = { FIXED, 3, 0, 0, &hf_062_070, IXXX_TOD, { NULL } };
static const AsterixField I062_080 = { FX, 1, 0, 0, &hf_062_080, I062_080_PARTS, { NULL } };
+static const AsterixField I062_080_v1_17 = { FX, 1, 0, 0, &hf_062_080, I062_080_PARTS_v1_17, { NULL } };
static const AsterixField I062_080_v0_17 = { FX, 1, 0, 0, &hf_062_080, I062_080_PARTS_v0_17, { NULL } };
static const AsterixField I062_100 = { FIXED, 6, 0, 0, &hf_062_100, I062_100_PARTS, { NULL } };
static const AsterixField I062_100_v0_17 = { FIXED, 4, 0, 0, &hf_062_100, I062_100_PARTS_v0_17, { NULL } };
@@ -8075,7 +8163,7 @@ static const AsterixField I062_210 = { FIXED, 2, 0, 0, &hf_062_210, I062_210_PAR
static const AsterixField I062_210_v0_17 = { FIXED, 2, 0, 0, &hf_062_210_v0_17, I062_210_PARTS_v0_17, { NULL } };
static const AsterixField I062_220 = { FIXED, 2, 0, 0, &hf_062_220, I062_220_PARTS, { NULL } };
static const AsterixField I062_240 = { FIXED, 1, 0, 0, &hf_062_240, I062_240_PARTS, { NULL } };
-static const AsterixField I062_245 = { FIXED, 7, 0, 0, &hf_062_245, NULL, { NULL } };
+static const AsterixField I062_245 = { FIXED, 7, 0, 0, &hf_062_245, I062_245_PARTS, { NULL } };
static const AsterixField I062_270 = { FX, 1, 0, 0, &hf_062_270, I062_270_PARTS, { NULL } };
static const AsterixField I062_290_01 = { FIXED, 1, 0, 0, &hf_062_290_01, I062_290_01_PARTS, { NULL } };
static const AsterixField I062_290_02 = { FIXED, 1, 0, 0, &hf_062_290_02, I062_290_02_PARTS, { NULL } };
@@ -8342,23 +8430,37 @@ static const AsterixField I062_RE_STS = { FX, 1, 0, 0, &hf_062_RE_STS, I062_RE_S
static const AsterixField I062_RE = { RE, 0, 0, 1, &hf_062_RE, NULL, { &I062_RE_CST, &I062_RE_CSNT, &I062_RE_TVS, &I062_RE_STS, NULL } };
static const AsterixField I062_SP = { SP, 0, 0, 1, &hf_062_SP, NULL, { NULL } };
-static const AsterixField *I062_v1_16_uap[] = { &I062_010, &IX_SPARE, &I062_015, &I062_070, &I062_105, &I062_100, &I062_185,
+static const AsterixField *I062_v1_18_uap[] = { &I062_010, &IX_SPARE, &I062_015, &I062_070, &I062_105, &I062_100, &I062_185,
&I062_210, &I062_060, &I062_245, &I062_380, &I062_040, &I062_080, &I062_290,
&I062_200, &I062_295, &I062_136, &I062_130, &I062_135, &I062_220, &I062_390,
&I062_270, &I062_300, &I062_110, &I062_120, &I062_510, &I062_500, &I062_340,
&IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &I062_RE, &I062_SP, NULL };
+static const AsterixField *I062_v1_17_uap[] = { &I062_010, &IX_SPARE, &I062_015, &I062_070, &I062_105, &I062_100, &I062_185,
+ &I062_210, &I062_060, &I062_245, &I062_380, &I062_040, &I062_080_v1_17, &I062_290,
+ &I062_200, &I062_295, &I062_136, &I062_130, &I062_135, &I062_220, &I062_390,
+ &I062_270, &I062_300, &I062_110, &I062_120, &I062_510, &I062_500, &I062_340,
+ &IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &I062_RE, &I062_SP, NULL };
+static const AsterixField *I062_v1_16_uap[] = { &I062_010, &IX_SPARE, &I062_015, &I062_070, &I062_105, &I062_100, &I062_185,
+ &I062_210, &I062_060_v1_16, &I062_245, &I062_380, &I062_040, &I062_080, &I062_290,
+ &I062_200, &I062_295, &I062_136, &I062_130, &I062_135, &I062_220, &I062_390,
+ &I062_270, &I062_300, &I062_110, &I062_120, &I062_510, &I062_500, &I062_340,
+ &IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &IX_SPARE, &I062_RE, &I062_SP, NULL };
static const AsterixField *I062_v0_17_uap[] = { &I062_010, &I062_015, &I062_070, &I062_040, &I062_105_v0_17, &I062_100_v0_17, &I062_060_v0_17,
&I062_130, &I062_135, &I062_136, &I062_180, &I062_200_v0_17, &I062_220, &I062_240,
&I062_210_v0_17, &I062_080_v0_17, &I062_290_v0_17, &I062_340, &I062_380_v0_17, &I062_500_v0_17, &I062_390,
&I062_110_v0_17, &I062_120, &I062_510, &IX_SPARE, &IX_SPARE, &I062_RE, &I062_SP, NULL };
+static const AsterixField **I062_v1_18[] = { I062_v1_18_uap, NULL };
+static const AsterixField **I062_v1_17[] = { I062_v1_17_uap, NULL };
static const AsterixField **I062_v1_16[] = { I062_v1_16_uap, NULL };
static const AsterixField **I062_v0_17[] = { I062_v0_17_uap, NULL };
-static const AsterixField ***I062[] = { I062_v1_16, I062_v0_17 };
+static const AsterixField ***I062[] = { I062_v1_18, I062_v1_17, I062_v1_16, I062_v0_17 };
DIAG_ON_PEDANTIC
static const enum_val_t I062_versions[] = {
- { "I062_v1_16", "Version 1.16", 0 },
- { "I062_v0_17", "Version 0.17", 1 },
+ { "I062_v1_18", "Version 1.18", 0 },
+ { "I062_v1_17", "Version 1.17", 1 },
+ { "I062_v1_16", "Version 1.16", 2 },
+ { "I062_v0_17", "Version 0.17", 3 },
{ NULL, NULL, 0 }
};
@@ -9188,6 +9290,37 @@ static void dissect_asterix_packet (tvbuff_t *tvb, packet_info *pinfo, proto_tre
proto_tree *asterix_packet_tree;
for (i = 0; i < tvb_reported_length (tvb); i += length + 3) {
+ /* all ASTERIX messages have the same structure:
+ *
+ * header:
+ *
+ * 1 byte category even though a category is referenced as I019,
+ * this is just stored as decimal 19 (i.e. 0x13)
+ * 2 bytes length the total length of this ASTERIX message, the
+ * length includes the size of the header.
+ * Note that the there was a structural change at
+ * one point that changes whether multiple
+ * records can occur after the header or not
+ * (each category specifies this explicitly. All
+ * of the currently supported categories can have
+ * multiple records so this implementation just
+ * assumes that is always the case)
+ *
+ * record (multiple records can exists):
+ *
+ * n bytes FSPEC the field specifier is a bit mask where the
+ * lowest bit of each byte is called the FX bit.
+ * When the FX bit is set this indicates that
+ * the FSPEC extends into the next byte.
+ * Any other bit indicates the presence of the
+ * field that owns that bit (as per the User
+ * Application Profile (UAP)).
+ * X bytes Field Y X is as per the specification for field Y.
+ * etc.
+ *
+ * The User Application Profile (UAP) is simply a mapping from the
+ * FSPEC to fields. Each category has its own UAP.
+ */
category = tvb_get_guint8 (tvb, i);
length = (tvb_get_guint8 (tvb, i + 1) << 8) + tvb_get_guint8 (tvb, i + 2) - 3; /* -3 for category and length */
@@ -9209,6 +9342,9 @@ static void dissect_asterix_data_block (tvbuff_t *tvb, packet_info *pinfo, guint
proto_tree *asterix_message_tree = NULL;
for (counter = 1, inner_offset = 0; inner_offset < length; counter++) {
+
+ /* This loop handles parsing of each ASTERIX record */
+
active_uap = asterix_get_active_uap (tvb, offset + inner_offset, category);
size = asterix_message_length (tvb, offset + inner_offset, category, active_uap);
if (size > 0) {
@@ -9275,7 +9411,7 @@ static gint dissect_asterix_fields (tvbuff_t *tvb, packet_info *pinfo, guint off
proto_tree_add_item (asterix_field_tree, hf_asterix_fspec, tvb, offset + start, fspec_len, ENC_NA);
dissect_asterix_fields (tvb, pinfo, offset + start, asterix_field_tree, category, (const AsterixField **)current_uap[i]->field);
}
- else {
+ else { /* FIXED, FX, UAP, SP */
asterix_field_item = proto_tree_add_item (tree, *current_uap[i]->hf, tvb, offset + start, len, ENC_NA);
asterix_field_tree = proto_item_add_subtree (asterix_field_item, ett_asterix_subtree);
asterix_build_subtree (tvb, pinfo, offset + start, asterix_field_tree, current_uap[i]);
@@ -9292,7 +9428,7 @@ static void asterix_build_subtree (tvbuff_t *tvb, packet_info *pinfo, guint offs
gint64 value;
char *str_buffer = NULL;
double scaling_factor = 1.0;
- guint8 *set_im_021_150, *get_im_021_150;
+ guint8 *air_speed_im_bit;
if (field->part != NULL) {
for (i = 0, inner_offset = 0, go_on = 1; go_on && field->part[i] != NULL; i++) {
@@ -9304,14 +9440,6 @@ static void asterix_build_subtree (tvbuff_t *tvb, packet_info *pinfo, guint offs
/* Fall through */
case FIELD_PART_INT:
case FIELD_PART_UINT:
- /* special processing for I021/150 because ASPD depends on IM subfield */
- if (field->part[i] == &I021_150_IM) {
- set_im_021_150 = wmem_new (wmem_packet_scope (), guint8);
- *set_im_021_150 = (tvb_get_guint8 (tvb, offset + inner_offset / 8) & 0x80) >> 7;
- /* Save IAS info for the packet. Cat 21 and field number 150 used for key = 21150. */
- p_add_proto_data (pinfo->pool, pinfo, proto_asterix, 21150, set_im_021_150);
- }
- /* Fall through */
case FIELD_PART_HEX:
case FIELD_PART_ASCII:
case FIELD_PART_SQUAWK:
@@ -9321,17 +9449,7 @@ static void asterix_build_subtree (tvbuff_t *tvb, packet_info *pinfo, guint offs
twos_complement (&value, field->part[i]->bit_length);
/* Fall through */
case FIELD_PART_UFLOAT:
- /* Special processing for I021/150 depends on another field, which stores the value in static variable im_021_150 */
- if (field->part[i] == &I021_150_ASPD) {
- get_im_021_150 = (guint8 *)p_get_proto_data (pinfo->pool, pinfo, proto_asterix, 21150);
- if (*get_im_021_150 == 0)
- scaling_factor = 1.0/16384.0;
- else
- scaling_factor = 0.001;
- }
- else
- scaling_factor = field->part[i]->scaling_factor;
-
+ scaling_factor = field->part[i]->scaling_factor;
if (field->part[i]->format_string != NULL)
proto_tree_add_double_format_value (parent, *field->part[i]->hf, tvb, offset + inner_offset / 8, byte_length (field->part[i]->bit_length), value * scaling_factor, field->part[i]->format_string, value * scaling_factor);
else
@@ -9351,6 +9469,23 @@ static void asterix_build_subtree (tvbuff_t *tvb, packet_info *pinfo, guint offs
AISCode[value & 63]);
proto_tree_add_string (parent, *field->part[i]->hf, tvb, offset + inner_offset / 8, byte_length (field->part[i]->bit_length), str_buffer);
break;
+ case FIELD_PART_IAS_IM:
+ /* special processing for I021/150 and I062/380#4 because Air Speed depends on IM subfield */
+ air_speed_im_bit = wmem_new (wmem_packet_scope (), guint8);
+ *air_speed_im_bit = (tvb_get_guint8 (tvb, offset + inner_offset / 8) & 0x80) >> 7;
+ /* Save IM info for the packet. key = 21150. */
+ p_add_proto_data (pinfo->pool, pinfo, proto_asterix, 21150, air_speed_im_bit);
+ proto_tree_add_item (parent, *field->part[i]->hf, tvb, offset + inner_offset / 8, byte_length (field->part[i]->bit_length), ENC_BIG_ENDIAN);
+ break;
+ case FIELD_PART_IAS_ASPD:
+ /* special processing for I021/150 and I062/380#4 because Air Speed depends on IM subfield */
+ air_speed_im_bit = (guint8 *)p_get_proto_data (pinfo->pool, pinfo, proto_asterix, 21150);
+ if (!air_speed_im_bit || *air_speed_im_bit == 0)
+ scaling_factor = 1.0/16384.0;
+ else
+ scaling_factor = 0.001;
+ proto_tree_add_double (parent, *field->part[i]->hf, tvb, offset + inner_offset / 8, byte_length (field->part[i]->bit_length), value * scaling_factor);
+ break;
}
}
inner_offset += field->part[i]->bit_length;
@@ -10451,6 +10586,8 @@ void proto_register_asterix (void)
{ &hf_062_015_SI, { "SI", "asterix.062_015_SI", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_062_040, { "040, Track Number", "asterix.062_040", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_060, { "060, Track Mode 3/A Code", "asterix.062_060", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_060_V, { "V", "asterix.062_060_V", FT_UINT8, BASE_DEC, VALS (valstr_062_060_V), 0x80, "Validated", HFILL } },
+ { &hf_062_060_G, { "G", "asterix.062_060_G", FT_UINT8, BASE_DEC, VALS (valstr_062_060_G), 0x40, "Garbled", HFILL } },
{ &hf_062_060_CH, { "CH", "asterix.062_060_CH", FT_UINT8, BASE_DEC, VALS (valstr_062_060_CH), 0x20, "Change in Mode 3/A", HFILL } },
{ &hf_062_060_SQUAWK, { "SQUAWK", "asterix.062_060_SQUAWK", FT_UINT16, BASE_OCT, NULL, 0x0fff, NULL, HFILL } },
{ &hf_062_070, { "070, Time Of Track Information", "asterix.062_070", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10479,13 +10616,16 @@ void proto_register_asterix (void)
{ &hf_062_080_ADS, { "ADS", "asterix.062_080_ADS", FT_UINT8, BASE_DEC, VALS (valstr_062_080_ADS), 0x08, NULL, HFILL } },
{ &hf_062_080_SUC, { "SUC", "asterix.062_080_SUC", FT_UINT8, BASE_DEC, VALS (valstr_062_080_SUC), 0x04, NULL, HFILL } },
{ &hf_062_080_AAC, { "AAC", "asterix.062_080_AAC", FT_UINT8, BASE_DEC, VALS (valstr_062_080_AAC), 0x02, NULL, HFILL } },
- { &hf_062_080_SDS, { "SDS", "asterix.062_080_SDS", FT_UINT8, BASE_DEC, VALS (valstr_062_080_SDS), 0xe0, NULL, HFILL } },
+ { &hf_062_080_SDS, { "SDS", "asterix.062_080_SDS", FT_UINT8, BASE_DEC, VALS (valstr_062_080_SDS), 0xc0, NULL, HFILL } },
{ &hf_062_080_EMS, { "EMS", "asterix.062_080_EMS", FT_UINT8, BASE_DEC, VALS (valstr_062_080_EMS), 0x38, NULL, HFILL } },
{ &hf_062_080_PFT, { "PFT", "asterix.062_080_PFT", FT_UINT8, BASE_DEC, VALS (valstr_062_080_PFT), 0x04, NULL, HFILL } },
{ &hf_062_080_FPLT, { "FPLT", "asterix.062_080_FPLT", FT_UINT8, BASE_DEC, VALS (valstr_062_080_FPLT), 0x02, NULL, HFILL } },
{ &hf_062_080_DUPT, { "DUPT", "asterix.062_080_DUPT", FT_UINT8, BASE_DEC, VALS (valstr_062_080_DUPT), 0x80, NULL, HFILL } },
{ &hf_062_080_DUPF, { "DUPT", "asterix.062_080_DUPF", FT_UINT8, BASE_DEC, VALS (valstr_062_080_DUPF), 0x40, NULL, HFILL } },
{ &hf_062_080_DUPM, { "DUPM", "asterix.062_080_DUPM", FT_UINT8, BASE_DEC, VALS (valstr_062_080_DUPM), 0x20, NULL, HFILL } },
+ { &hf_062_080_SFC, { "SFC", "asterix.062_080_SFC", FT_UINT8, BASE_DEC, VALS (valstr_062_080_SFC), 0x10, NULL, HFILL } },
+ { &hf_062_080_IDD, { "IDD", "asterix.062_080_IDD", FT_UINT8, BASE_DEC, VALS (valstr_062_080_IDD), 0x08, NULL, HFILL } },
+ { &hf_062_080_IEC, { "IEC", "asterix.062_080_IEC", FT_UINT8, BASE_DEC, VALS (valstr_062_080_IEC), 0x04, NULL, HFILL } },
{ &hf_062_080_FRIFOE, { "FRI/FOE", "asterix.062_080_FRIFOE", FT_UINT8, BASE_DEC, VALS (valstr_062_080_FRIFOE), 0x60, NULL, HFILL } },
{ &hf_062_080_COA, { "COA", "asterix.062_080_COA", FT_UINT8, BASE_DEC, VALS (valstr_062_080_COA), 0x80, NULL, HFILL } },
{ &hf_062_100, { "100, Calculated Track Position (Cartesian)", "asterix.062_100", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10498,7 +10638,7 @@ void proto_register_asterix (void)
{ &hf_062_105_LON, { "LON[deg]", "asterix.062_105_LON", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110, { "110, Mode 5 Data reports & Extended Mode 1 Code", "asterix.062_110", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_01, { "#1: Mode 5 Summary", "asterix.062_110_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_110_01_M5, { "MD5", "asterix.062_110_01_MD5", FT_UINT8, BASE_DEC, VALS (valstr_062_110_01_M5), 0x80, NULL, HFILL } },
+ { &hf_062_110_01_M5, { "M5", "asterix.062_110_01_M5", FT_UINT8, BASE_DEC, VALS (valstr_062_110_01_M5), 0x80, NULL, HFILL } },
{ &hf_062_110_01_ID, { "ID", "asterix.062_110_01_ID", FT_UINT8, BASE_DEC, VALS (valstr_062_110_01_ID), 0x40, NULL, HFILL } },
{ &hf_062_110_01_DA, { "DA", "asterix.062_110_01_DA", FT_UINT8, BASE_DEC, VALS (valstr_062_110_01_DA), 0x20, NULL, HFILL } },
{ &hf_062_110_01_M1, { "M1", "asterix.062_110_01_M1", FT_UINT8, BASE_DEC, VALS (valstr_062_110_01_M1), 0x10, NULL, HFILL } },
@@ -10510,15 +10650,15 @@ void proto_register_asterix (void)
{ &hf_062_110_02_PIN, { "PIN", "asterix.062_110_02_PIN", FT_UINT16, BASE_DEC, NULL, 0x3fff, NULL, HFILL } },
{ &hf_062_110_02_NAT, { "NAT", "asterix.062_110_02_NAT", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL } },
{ &hf_062_110_02_MIS, { "MIS", "asterix.062_110_02_MIS", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL } },
- { &hf_062_110_03, { "#3: Mode 5 Reported Position", "asterix.062_", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_110_03, { "#3: Mode 5 Reported Position", "asterix.062_110_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_03_LAT, { "LAT[deg]", "asterix.062_110_03_LAT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_03_LON, { "LON[deg]", "asterix.062_110_03_LON", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_110_04, { "#4: Mode 5 GNSS-derived Altitude", "asterix.062_11_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_110_04_RES, { "RES", "asterix.062_110_04_RES", FT_UINT8, BASE_DEC, VALS (valstr_062_110_04_RES), 0x60, NULL, HFILL } },
+ { &hf_062_110_04, { "#4: Mode 5 GNSS-derived Altitude", "asterix.062_110_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_110_04_RES, { "RES", "asterix.062_110_04_RES", FT_UINT8, BASE_DEC, VALS (valstr_062_110_04_RES), 0x40, NULL, HFILL } },
{ &hf_062_110_04_GA, { "GA[feet]", "asterix.062_110_04_GA", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_05, { "#5: Extended Mode 1 Code in Octal Representation", "asterix.062_110_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_05_SQUAWK, { "SQUAWK", "asterix.062_110_05_SQUAWK", FT_UINT16, BASE_OCT, NULL, 0x0fff, NULL, HFILL } },
- { &hf_062_110_06, { "#6: Time Offset for POS and GA", "asterix.062_11_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_110_06, { "#6: Time Offset for POS and GA", "asterix.062_110_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_06_TOS, { "TOS[s]", "asterix.062_110_06_TOS", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_07, { "#7: X Pulse Presence", "asterix.062_110_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_110_07_X5, { "X5", "asterix.062_110_07_X5", FT_UINT8, BASE_DEC, VALS (valstr_062_110_07_X5), 0x10, NULL, HFILL } },
@@ -10541,7 +10681,7 @@ void proto_register_asterix (void)
{ &hf_062_135_QNH, { "QNH", "asterix.062_135_QNH", FT_UINT8, BASE_DEC, VALS (valstr_062_135_QNH), 0x80, NULL, HFILL } },
{ &hf_062_135_ALT, { "Altitude[FL]", "asterix.062_135_ALT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_136, { "136, Measured Flight Level", "asterix.062_136", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_136_ALT, { "Measured Flight Level[FL]", "asterix.062_136_ALT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_136_MFL, { "Measured Flight Level[FL]", "asterix.062_136_MFL", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_180, { "180, Calculated Track Velocity (Polar)", "asterix.062_180", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_180_SPEED, { "Speed[NM/s]", "asterix.062_180_SPEED", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_180_HEADING, { "Heading[deg]", "asterix.062_180_HEADING", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10564,11 +10704,12 @@ void proto_register_asterix (void)
{ &hf_062_240, { "240, Calculated Rate Of Turn", "asterix.062_240", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_240_ROT, { "TOR[deg/s]", "asterix.062_240_ROT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_245, { "245, Target Identification", "asterix.062_245", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_245_STI, { "STI", "asterix.062_245_STI", FT_UINT8, BASE_DEC, VALS (valstr_062_245_STI), 0xc0, NULL, HFILL } },
{ &hf_062_270, { "270, Target Size & Orientation", "asterix.062_270", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_270_LENGTH, { "Length[m]", "asterix.062_270_LENGTH", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_270_ORIENTATION, { "Orientation[m]", "asterix.062_270_ORIENTATION", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_270_WIDTH, { "Width[m]", "asterix.062_270_WIDTH", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_290, { "290, System Track Update Ages", "asterix.062_", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_290, { "290, System Track Update Ages", "asterix.062_290", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_290_01, { "#1: Track Age", "asterix.062_290_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_290_01_TRK, { "TRK[s]", "asterix.062_290_01_TRK", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_290_02, { "#2: PSR Age", "asterix.062_290_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10622,7 +10763,7 @@ void proto_register_asterix (void)
{ &hf_062_295_06, { "#6: Mode 5 Age", "asterix.062_295_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_295_06_MD5, { "MD5[s]", "asterix.062_295_06_MD5", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_295_07, { "#7: Magnetic Heading Age", "asterix.062_295_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_295_07_MHD, { "MHD[s]", "asterix.062_295_07_MHD", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_295_07_MHG, { "MHG[s]", "asterix.062_295_07_MHG", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_295_08, { "#8: Indicated Airspeed / Mach Nb age", "asterix.062_295_08", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_295_08_IAS, { "IAS[s]", "asterix.062_295_08_IAS", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_295_09, { "#9: True Airspeed Age", "asterix.062_295_09", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10680,11 +10821,11 @@ void proto_register_asterix (void)
{ &hf_062_340_02_THETA, { "THETA[deg]", "asterix.062_340_02_THETA", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_340_03, { "#3: Measured 3-D Height", "asterix.062_340_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_340_03_H, { "HEIGHT[feet]", "asterix.062_340_03_H", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_340_04, { "#4: Last Measured Mode C Code", "asterix.062_340_", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_340_04, { "#4: Last Measured Mode C Code", "asterix.062_340_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_340_04_V, { "V", "asterix.062_340_04_V", FT_UINT8, BASE_DEC, VALS (valstr_062_340_04_V), 0x80, NULL, HFILL } },
{ &hf_062_340_04_G, { "G", "asterix.062_340_04_G", FT_UINT8, BASE_DEC, VALS (valstr_062_340_04_G), 0x40, NULL, HFILL } },
{ &hf_062_340_04_FL, { "HEIGHT[FL]", "asterix.062_340_04_FL", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_340_05, { "#5: Last Measured Mode 3/A Code", "asterix.062_340_", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_340_05, { "#5: Last Measured Mode 3/A Code", "asterix.062_340_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_340_05_V, { "V", "asterix.062_340_05_V", FT_UINT8, BASE_DEC, VALS (valstr_062_340_05_V), 0x80, NULL, HFILL } },
{ &hf_062_340_05_G, { "G", "asterix.062_340_05_G", FT_UINT8, BASE_DEC, VALS (valstr_062_340_05_G), 0x40, NULL, HFILL } },
{ &hf_062_340_05_L, { "L", "asterix.062_340_05_L", FT_UINT8, BASE_DEC, VALS (valstr_062_340_05_L), 0x20, NULL, HFILL } },
@@ -10699,7 +10840,7 @@ void proto_register_asterix (void)
{ &hf_062_380_02, { "#2: Target Identification", "asterix.062_380_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_03, { "#3: Magnetic Heading", "asterix.062_380_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_03_MH, { "MH[deg]", "asterix.062_380_03_MH", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_380_04, { "#4: Indicated Airspeed / Mach No", "asterix.062_380_4", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_380_04, { "#4: Indicated Airspeed / Mach No", "asterix.062_380_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_04_IM, { "IM", "asterix.062_380_04_IM", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL } },
{ &hf_062_380_04_IAS, { "IAS[NM/s or Mach]", "asterix.062_380_04_IAS", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_05, { "#5: True Airspeed", "asterix.062_380_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10718,7 +10859,7 @@ void proto_register_asterix (void)
{ &hf_062_380_08_NVB, { "NVB", "asterix.062_380_08_NVB", FT_UINT8, BASE_DEC, VALS (valstr_062_380_08_NVB), 0x40, NULL, HFILL } },
{ &hf_062_380_09, { "#9: ", "asterix.062_380_09", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_09_TCA, { "TCA", "asterix.062_380_09_TCA", FT_UINT8, BASE_DEC, VALS (valstr_062_380_09_TCA), 0x80, NULL, HFILL } },
- { &hf_062_380_09_NC, { "NC", "asterix.062_380_09_NC", FT_UINT8, BASE_DEC, VALS (valstr_062_380_09_NC), 0x80, NULL, HFILL } },
+ { &hf_062_380_09_NC, { "NC", "asterix.062_380_09_NC", FT_UINT8, BASE_DEC, VALS (valstr_062_380_09_NC), 0x40, NULL, HFILL } },
{ &hf_062_380_09_TCP, { "TCP", "asterix.062_380_09_TCP", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL } },
{ &hf_062_380_09_ALT, { "ALT[feet]", "asterix.062_380_09_ALT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_09_LAT, { "LAT[deg]", "asterix.062_380_09_LAT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10801,75 +10942,75 @@ void proto_register_asterix (void)
{ &hf_062_380_05_v0_17, { "#5: ACAS Resolution Advisory Report", "asterix.062_380_05_v0_17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_380_05_MB, { "#4: ACAS Resolution Advisory Report", "asterix.062_380_05_MB", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390, { "390, Flight Plan Related Data", "asterix.062_390", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_01, { "#1: FPPS Identification Tag", "asterix.062_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_02, { "#2: Callsign", "asterix.062_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_01, { "#1: FPPS Identification Tag", "asterix.062_390_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_02, { "#2: Callsign", "asterix.062_390_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_02_CS, { "CS", "asterix.062_390_02_CS", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_03, { "#3: IFPS_FLIGHT_ID", "asterix.062_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_03_TYP, { "TYP", "asterix.062_390_03_TYP", FT_UINT32, BASE_DEC, VALS (valstr_062_390_03_TYP), 0xc0000000, NULL, HFILL } },
+ { &hf_062_390_03, { "#3: IFPS_FLIGHT_ID", "asterix.062_390_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_03_TYP, { "TYP", "asterix.062_390_03_TYP", FT_UINT8, BASE_DEC, VALS (valstr_062_390_03_TYP), 0xc0, NULL, HFILL } },
{ &hf_062_390_03_NBR, { "NBR", "asterix.062_390_03_NBR", FT_UINT32, BASE_DEC, NULL, 0x07ffffff, NULL, HFILL } },
- { &hf_062_390_04, { "#4: Flight Category", "asterix.062_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_04, { "#4: Flight Category", "asterix.062_390_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_04_GAT_OAT, { "GAT/OAT", "asterix.062_390_04_GAT_OAT", FT_UINT8, BASE_DEC, VALS (valstr_062_390_04_GAT_OAT), 0xc0, NULL, HFILL } },
{ &hf_062_390_04_FR12, { "FR1/FR2", "asterix.062_390_04_FR12", FT_UINT8, BASE_DEC, VALS (valstr_062_390_04_FR12), 0x30, NULL, HFILL } },
{ &hf_062_390_04_RVSM, { "RVSM", "asterix.062_390_04_RVSM", FT_UINT8, BASE_DEC, VALS (valstr_062_390_04_RVSM), 0x0c, NULL, HFILL } },
{ &hf_062_390_04_HPR, { "HPR", "asterix.062_390_04_HPR", FT_UINT8, BASE_DEC, VALS (valstr_062_390_04_HPR), 0x02, NULL, HFILL } },
- { &hf_062_390_05, { "#5: Type of Aircraft", "asterix.062_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_05, { "#5: Type of Aircraft", "asterix.062_390_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_05_ACTYP, { "ACTYP", "asterix.062_390_05_ACTYP", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_06, { "#6: Wake Turbulence Category", "asterix.062_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_06, { "#6: Wake Turbulence Category", "asterix.062_390_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_06_WTC, { "WTC", "asterix.062_390_06_WTC", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_07, { "#7: Departure Airport", "asterix.062_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_07, { "#7: Departure Airport", "asterix.062_390_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_07_ADEP, { "ADEP", "asterix.062_390_07_ADEP", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_08, { "#8: Destination Airport", "asterix.062_08", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_08, { "#8: Destination Airport", "asterix.062_390_08", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_08_ADES, { "ADES", "asterix.062_390_08_ADES", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_09, { "#9: Runway Designation", "asterix.062_09", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_09, { "#9: Runway Designation", "asterix.062_390_09", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_09_NU1, { "NU1", "asterix.062_390_09_NU1", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_09_NU2, { "NU2", "asterix.062_390_09_NU2", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_09_LTR, { "LTR", "asterix.062_390_09_LTR", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_10, { "#10: Current Cleared Flight Level", "asterix.062_10", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_10, { "#10: Current Cleared Flight Level", "asterix.062_390_10", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_10_CFL, { "CFL[FL]", "asterix.062_390_10_CFL", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_11, { "#11: Current Control Position", "asterix.062_11", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_11, { "#11: Current Control Position", "asterix.062_390_11", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_11_CNTR, { "CNTR", "asterix.062_390_11_CNTR", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_11_POS, { "POS", "asterix.062_390_11_POS", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_12, { "#12: Time of Departure / Arrival", "asterix.062_12", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_12, { "#12: Time of Departure / Arrival", "asterix.062_390_12", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_12_TYP, { "TYP", "asterix.062_390_12_TYP", FT_UINT8, BASE_DEC, VALS (valstr_062_390_12_TYP), 0xf8, NULL, HFILL } },
{ &hf_062_390_12_DAY, { "DAY", "asterix.062_390_12_DAY", FT_UINT8, BASE_DEC, VALS (valstr_062_390_12_DAY), 0x06, NULL, HFILL } },
{ &hf_062_390_12_HOR, { "HOUR", "asterix.062_390_12_HOR", FT_UINT8, BASE_DEC, NULL, 0x1f, NULL, HFILL } },
{ &hf_062_390_12_MIN, { "MIN", "asterix.062_390_12_MIN", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL } },
{ &hf_062_390_12_AVS, { "AVS", "asterix.062_390_12_AVS", FT_UINT8, BASE_DEC, VALS (valstr_062_390_12_AVS), 0x80, NULL, HFILL } },
{ &hf_062_390_12_SEC, { "SEC", "asterix.062_390_12_SEC", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL } },
- { &hf_062_390_13, { "#13: Aircraft Stand", "asterix.062_13", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_13, { "#13: Aircraft Stand", "asterix.062_390_13", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_13_STAND, { "STAND", "asterix.062_390_13_STAND", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_14, { "#14: Stand Status", "asterix.062_14", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_14, { "#14: Stand Status", "asterix.062_390_14", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_14_EMP, { "EMP", "asterix.062_390_14_EMP", FT_UINT8, BASE_DEC, VALS (valstr_062_390_14_EMP), 0xc0, NULL, HFILL } },
{ &hf_062_390_14_AVL, { "AVL", "asterix.062_390_14_AVL", FT_UINT8, BASE_DEC, VALS (valstr_062_390_14_AVL), 0x30, NULL, HFILL } },
- { &hf_062_390_15, { "#15: Standard Instrument Departure", "asterix.062_15", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_15, { "#15: Standard Instrument Departure", "asterix.062_390_15", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_15_SID, { "SID", "asterix.062_390_15_SID", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_16, { "#16: Standard Instrument Arrival", "asterix.062_16", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_16, { "#16: Standard Instrument Arrival", "asterix.062_390_16", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_16_STAR, { "STAR", "asterix.062_390_16_STAR", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_390_17, { "#17: Pre-Emergency Mode 3/A", "asterix.062_17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_17, { "#17: Pre-Emergency Mode 3/A", "asterix.062_390_17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_17_VA, { "VA", "asterix.062_390_17_VA", FT_UINT8, BASE_DEC, VALS (valstr_062_390_17_VA), 0x10, NULL, HFILL } },
{ &hf_062_390_17_SQUAWK, { "SQUAWK", "asterix.062_390_17_SQUAWK", FT_UINT16, BASE_OCT, NULL, 0x0fff, NULL, HFILL } },
- { &hf_062_390_18, { "#18: Pre-Emergency Callsign", "asterix.062_18", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_390_18, { "#18: Pre-Emergency Callsign", "asterix.062_390_18", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_390_18_CS, { "CS", "asterix.062_390_18_CS", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500, { "500, Estimated Accuracies", "asterix.062_500", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_01, { "#1: Estimated Accuracy Of Track Position (Cartesian)", "asterix.062_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_01, { "#1: Estimated Accuracy Of Track Position (Cartesian)", "asterix.062_500_01", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_01_APCX, { "APC X[m]", "asterix.062_500_01_APCX", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_01_APCY, { "APC Y[m]", "asterix.062_500_01_APCY", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_02, { "#2: XY covariance component", "asterix.062_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_02, { "#2: XY covariance component", "asterix.062_500_02", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_02_COV, { "COV[m]", "asterix.062_500_02_COV", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_03, { "#3: Estimated Accuracy Of Track Position (WGS-84)", "asterix.062_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_03, { "#3: Estimated Accuracy Of Track Position (WGS-84)", "asterix.062_500_03", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_03_APWLAT, { "APW LAT[deg]", "asterix.062_500_03_APWLAT", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_03_APWLON, { "APW LON[deg]", "asterix.062_500_03_APWLON", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_04, { "#4: Estimated Accuracy Of Calculated Track Geometric Altitude", "asterix.062_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_04, { "#4: Estimated Accuracy Of Calculated Track Geometric Altitude", "asterix.062_500_04", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_04_AGA, { "AGA[feet]", "asterix.062_500_04_AGA", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_05, { "#5: Estimated Accuracy Of Calculated Track Barometric Altitude", "asterix.062_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_05, { "#5: Estimated Accuracy Of Calculated Track Barometric Altitude", "asterix.062_500_05", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_05_ABA, { "ABA[FL]", "asterix.062_500_05_ABA", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_06, { "#6: ", "asterix.062_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_06, { "#6: ", "asterix.062_500_06", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_06_ATVX, { "ATV X[m/s]", "asterix.062_500_06_ATVX", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_06_ATVY, { "ATV Y[m/s]", "asterix.062_500_06_ATVY", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_07, { "#7: Estimated Accuracy Of Acceleration (Cartesian)", "asterix.062_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_07, { "#7: Estimated Accuracy Of Acceleration (Cartesian)", "asterix.062_500_07", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_07_AAX, { "AA X[m/s^2]", "asterix.062_500_07_AAX", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_07_AAY, { "AA X[m/s^2]", "asterix.062_500_07_AAY", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_500_08, { "#8: Estimated Accuracy Of Rate Of Climb/Descent", "asterix.062_08", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_500_08, { "#8: Estimated Accuracy Of Rate Of Climb/Descent", "asterix.062_500_08", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_08_ARC, { "ARC[feet/min]", "asterix.062_500_08_ARC", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
/* v.0.17 */
{ &hf_062_500_01_APCX_8bit, { "APC X[NM]", "asterix.062_500_01_APCX_8bit", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -10889,17 +11030,21 @@ void proto_register_asterix (void)
{ &hf_062_500_07_v0_17, { "#7: Estimated Accuracy Of Longitudinal Acceleration", "asterix.062_500_07_v0_17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_500_07_ALA, { "ALA[NM/s^2]", "asterix.062_500_07_ALA", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_510, { "510, Composed Track Number", "asterix.062_510", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_510_SID, { "SID", "asterix.062_510_SID", FT_UINT24, BASE_DEC, NULL, 0xfffffe, NULL, HFILL } },
- { &hf_062_510_STN, { "STN", "asterix.062_510_STN", FT_UINT24, BASE_DEC, NULL, 0xfffffe, NULL, HFILL } },
+ { &hf_062_510_SUD, { "SUD", "asterix.062_510_SUD", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_510_STN, { "STN", "asterix.062_510_STN", FT_UINT24, BASE_DEC, NULL, 0x00fffe, NULL, HFILL } },
+ { &hf_062_510_SLV_01_SUD, { "SLV1_SUD", "asterix.062_510_SLV_01_SUD", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_510_SLV_01_STN, { "SLV1_STN", "asterix.062_510_SLV_01_STN", FT_UINT24, BASE_DEC, NULL, 0x00fffe, NULL, HFILL } },
+ { &hf_062_510_SLV_02_SUD, { "SLV2_SUD", "asterix.062_510_SLV_02_SUD", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_510_SLV_02_STN, { "SLV2_STN", "asterix.062_510_SLV_02_STN", FT_UINT24, BASE_DEC, NULL, 0x00fffe, NULL, HFILL } },
+ { &hf_062_510_SLV_03_SUD, { "SLV3_SUD", "asterix.062_510_SLV_03_SUD", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_510_SLV_03_STN, { "SLV3_STN", "asterix.062_510_SLV_03_STN", FT_UINT24, BASE_DEC, NULL, 0x00fffe, NULL, HFILL } },
+ { &hf_062_510_SLV_04_SUD, { "SLV4_SUD", "asterix.062_510_SLV_04_SUD", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
+ { &hf_062_510_SLV_04_STN, { "SLV4_STN", "asterix.062_510_SLV_04_STN", FT_UINT24, BASE_DEC, NULL, 0x00fffe, NULL, HFILL } },
{ &hf_062_RE, { "Reserved Expansion Field", "asterix.062_RE", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_RE_CST, {"CST", "asterix.062_RE_CST", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_RE_CST_SAC, {"Sensor SAC", "asterix.062_RE_SAC", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
- { &hf_062_RE_CST_SIC, {"Sensor SIC", "asterix.062_RE_SIC", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_062_RE_CST_TYP, {"TYP", "asterix.062_RE_CST_TYP", FT_UINT8, BASE_DEC, VALS(valstr_062_RE_CST_TYPE), 0x0F, NULL, HFILL } },
{ &hf_062_RE_CST_TRK_NUM, {"TRK NUM", "asterix.062_RE_CST_TRK_NUM", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_062_RE_CSNT, {"CSNT", "asterix.062_RE_CSNT", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
- { &hf_062_RE_CSNT_SAC, {"Sensor SAC", "asterix.062_RE_CSNT_SAC", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
- { &hf_062_RE_CSNT_SIC, {"Sensor SIC", "asterix.062_RE_CSNT_SIC", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_062_RE_CSNT_TYP, {"TYP", "asterix.062_RE_CSNT_TYP", FT_UINT8, BASE_DEC, VALS(valstr_062_RE_CST_TYPE), 0x0F, NULL, HFILL } },
{ &hf_062_RE_TVS, {"TVS", "asterix.062_RE_TVS", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
{ &hf_062_RE_TVS_VX, {"VX[m/s]", "asterix.062_RE_TVS_VX", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
@@ -11882,6 +12027,8 @@ void proto_register_asterix (void)
&ett_062_015_SI,
&ett_062_040,
&ett_062_060,
+ &ett_062_060_V,
+ &ett_062_060_G,
&ett_062_060_CH,
&ett_062_060_SQUAWK,
&ett_062_070,
@@ -11917,6 +12064,9 @@ void proto_register_asterix (void)
&ett_062_080_DUPT,
&ett_062_080_DUPF,
&ett_062_080_DUPM,
+ &ett_062_080_SFC,
+ &ett_062_080_IDD,
+ &ett_062_080_IEC,
&ett_062_080_FRIFOE,
&ett_062_080_COA,
&ett_062_100,
@@ -11972,7 +12122,7 @@ void proto_register_asterix (void)
&ett_062_135_QNH,
&ett_062_135_ALT,
&ett_062_136,
- &ett_062_136_ALT,
+ &ett_062_136_MFL,
&ett_062_180,
&ett_062_180_SPEED,
&ett_062_180_HEADING,
@@ -11994,6 +12144,7 @@ void proto_register_asterix (void)
&ett_062_240,
&ett_062_240_ROT,
&ett_062_245,
+ &ett_062_245_STI,
&ett_062_270,
&ett_062_270_LENGTH,
&ett_062_270_ORIENTATION,
@@ -12052,7 +12203,7 @@ void proto_register_asterix (void)
&ett_062_295_06,
&ett_062_295_06_MD5,
&ett_062_295_07,
- &ett_062_295_07_MHD,
+ &ett_062_295_07_MHG,
&ett_062_295_08,
&ett_062_295_08_IAS,
&ett_062_295_09,
@@ -12319,17 +12470,21 @@ void proto_register_asterix (void)
&ett_062_500_07_v0_17,
&ett_062_500_07_ALA,
&ett_062_510,
- &ett_062_510_SID,
+ &ett_062_510_SUD,
&ett_062_510_STN,
+ &ett_062_510_SLV_01_SUD,
+ &ett_062_510_SLV_01_STN,
+ &ett_062_510_SLV_02_SUD,
+ &ett_062_510_SLV_02_STN,
+ &ett_062_510_SLV_03_SUD,
+ &ett_062_510_SLV_03_STN,
+ &ett_062_510_SLV_04_SUD,
+ &ett_062_510_SLV_04_STN,
&ett_062_RE,
&ett_062_RE_CST,
- &ett_062_RE_CST_SAC,
- &ett_062_RE_CST_SIC,
&ett_062_RE_CST_TYP,
&ett_062_RE_CST_TRK_NUM,
&ett_062_RE_CSNT,
- &ett_062_RE_CSNT_SAC,
- &ett_062_RE_CSNT_SIC,
&ett_062_RE_CSNT_TYP,
&ett_062_RE_TVS,
&ett_062_RE_TVS_VX,