[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