[hamradio-commits] [dump1090] 291/389: B"H decode more data, etc.
Matthew Ernisse
mernisse-guest at moszumanska.debian.org
Wed Nov 5 00:20:06 UTC 2014
This is an automated email from the git hooks/post-receive script.
mernisse-guest pushed a commit to branch master
in repository dump1090.
commit 506be6e054eccb546d1e73ed6c0aa3e8e542e897
Author: hhm <heehooman+vcs-ci at gmail.com>
Date: Sun Jun 22 13:05:39 2014 -0400
B"H decode more data, etc.
- decodes a bit more information
- misc. small changes
---
mode_s.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 54 insertions(+), 8 deletions(-)
diff --git a/mode_s.c b/mode_s.c
index 780e650..e92cd9b 100644
--- a/mode_s.c
+++ b/mode_s.c
@@ -746,7 +746,7 @@ int decodeMovementField(int movement) {
//
// Capability table
char *ca_str[8] = {
- /* 0 */ "Level 1 (Survillance Only)",
+ /* 0 */ "Level 1 (Surveillance Only)",
/* 1 */ "Level 2 (DF0,4,5,11)",
/* 2 */ "Level 3 (DF0,4,5,11,20,21)",
/* 3 */ "Level 4 (DF0,4,5,11,20,21,24)",
@@ -779,6 +779,20 @@ char *fs_str[8] = {
/* 6 */ "Value 6 is not assigned",
/* 7 */ "Value 7 is not assigned"
};
+
+// Emergency state table
+// from https://www.ll.mit.edu/mission/aviation/publications/publication-files/atc-reports/Grappel_2007_ATC-334_WW-15318.pdf
+// and 1090-DO-260B_FRAC
+char *es_str[8] = {
+ /* 0 */ "No emergency",
+ /* 1 */ "General emergency (squawk 7700)",
+ /* 2 */ "Lifeguard/Medical",
+ /* 3 */ "Minimum fuel",
+ /* 4 */ "No communications (squawk 7600)",
+ /* 5 */ "Unlawful interference (squawk 7500)",
+ /* 6 */ "Downed Aircraft",
+ /* 7 */ "Reserved"
+};
//
//=========================================================================
//
@@ -797,6 +811,8 @@ char *getMEDescription(int metype, int mesub) {
mename = "Airborne Position (GNSS Height)";
else if (metype == 23 && mesub == 0)
mename = "Test Message";
+ else if (metype == 23 && mesub == 7)
+ mename = "Test Message -- Squawk";
else if (metype == 24 && mesub == 1)
mename = "Surface System Status";
else if (metype == 28 && mesub == 1)
@@ -944,7 +960,7 @@ void decodeModesMessage(struct modesMessage *mm, unsigned char *msg) {
if ( (mm->msgtype == 17)
|| ((mm->msgtype == 18) && ((mm->ca == 0) || (mm->ca == 1) || (mm->ca == 6)) )) {
int metype = mm->metype = msg[4] >> 3; // Extended squitter message type
- int mesub = mm->mesub = msg[4] & 7; // Extended squitter message subtype
+ int mesub = mm->mesub = (metype == 29 ? ((msg[4]&6)>>1) : (msg[4] & 7)); // Extended squitter message subtype
// Decode the extended squitter message
@@ -1060,7 +1076,23 @@ void decodeModesMessage(struct modesMessage *mm, unsigned char *msg) {
mm->heading = ((((msg[5] & 0x03) << 8) | msg[6]) * 45) >> 7;
}
}
- }
+ } else if (mm->metype == 23) { // Test metype squawk field
+ if (mm->mesub == 7) { // (see 1090-WP-15-20)
+ int ID13Field = (((msg[5] << 8) | msg[6]) & 0xFFF1)>>3;
+ if (ID13Field) {
+ mm->bFlags |= MODES_ACFLAGS_SQUAWK_VALID;
+ mm->modeA = decodeID13Field(ID13Field);
+ }
+ }
+ } else if (mm->metype == 28) { // Emergency status squawk field
+ if (mm->mesub == 1) {
+ int ID13Field = (((msg[5] << 8) | msg[6]) & 0x1FFF);
+ if (ID13Field) {
+ mm->bFlags |= MODES_ACFLAGS_SQUAWK_VALID;
+ mm->modeA = decodeID13Field(ID13Field);
+ }
+ }
+ }
}
// Fields for DF20, DF21 Comm-B
@@ -1159,8 +1191,8 @@ void displayModesMessage(struct modesMessage *mm) {
} else if ( mm->msg[4] == 0x30) { // BDS 3,0 ACAS Active Resolution Advisory
printf(" BDS 3,0 ACAS Active Resolution Advisory\n");
- } else if ((mm->msg[4] >> 3) == 28) { // BDS 6,1 Extended Squitter Emergecy/Priority Status
- printf(" BDS 6,1 Emergecy/Priority Status\n");
+ } else if ((mm->msg[4] >> 3) == 28) { // BDS 6,1 Extended Squitter Emergency/Priority Status
+ printf(" BDS 6,1 Emergency/Priority Status\n");
} else if ((mm->msg[4] >> 3) == 29) { // BDS 6,2 Target State and Status
printf(" BDS 6,2 Target State and Status\n");
@@ -1177,7 +1209,7 @@ void displayModesMessage(struct modesMessage *mm) {
printf(" Flight Status : %s\n", fs_str[mm->fs]);
printf(" DR : %d\n", ((mm->msg[1] >> 3) & 0x1F));
printf(" UM : %d\n", (((mm->msg[1] & 7) << 3) | (mm->msg[2] >> 5)));
- printf(" Squawk : %x\n", mm->modeA);
+ printf(" Squawk : %04x\n", mm->modeA);
printf(" ICAO Address : %06x\n", mm->addr);
if (mm->msgtype == 21) {
@@ -1193,8 +1225,8 @@ void displayModesMessage(struct modesMessage *mm) {
} else if ( mm->msg[4] == 0x30) { // BDS 3,0 ACAS Active Resolution Advisory
printf(" BDS 3,0 ACAS Active Resolution Advisory\n");
- } else if ((mm->msg[4] >> 3) == 28) { // BDS 6,1 Extended Squitter Emergecy/Priority Status
- printf(" BDS 6,1 Emergecy/Priority Status\n");
+ } else if ((mm->msg[4] >> 3) == 28) { // BDS 6,1 Extended Squitter Emergency/Priority Status
+ printf(" BDS 6,1 Emergency/Priority Status\n");
} else if ((mm->msg[4] >> 3) == 29) { // BDS 6,2 Target State and Status
printf(" BDS 6,2 Target State and Status\n");
@@ -1275,6 +1307,20 @@ void displayModesMessage(struct modesMessage *mm) {
//} else if (mm->metype >= 20 && mm->metype <= 22) { // Airborne position GNSS
+ } else if (mm->metype == 28) { // Extended Squitter Aircraft Status
+ if (mm->mesub == 1) {
+ printf(" Emergency State: %s\n", es_str[(mm->msg[5] & 0xE0) >> 5]);
+ printf(" Squawk: %04x\n", mm->modeA);
+ } else {
+ printf(" Unrecognized ME subtype: %d subtype: %d\n", mm->metype, mm->mesub);
+ }
+
+ } else if (mm->metype == 23) { // Test Message
+ if (mm->mesub == 7) {
+ printf(" Squawk: %04x\n", mm->modeA);
+ } else {
+ printf(" Unrecognized ME subtype: %d subtype: %d\n", mm->metype, mm->mesub);
+ }
} else {
printf(" Unrecognized ME type: %d subtype: %d\n", mm->metype, mm->mesub);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/dump1090.git
More information about the pkg-hamradio-commits
mailing list