[hamradio-commits] [dump1090] 218/373: Move declarations into a headed file

Matthew Ernisse mernisse-guest at moszumanska.debian.org
Thu Oct 23 14:58:21 UTC 2014


This is an automated email from the git hooks/post-receive script.

mernisse-guest pushed a commit to branch backport
in repository dump1090.

commit 228b770be8dddfbf60b8d46d5ffa0deb619184e4
Author: Malcolm Robb <Support at ATTAvionics.com>
Date:   Fri May 24 23:32:12 2013 +0100

    Move declarations into a headed file
    
    This is the start of breaking the main dump109.c file into smaller
    modules to make it a bit more maintainable.
    
    Move all the #define and structure declarations into dump1090.h
---
 dump1090.c | 347 +---------------------------------------------------
 dump1090.h | 403 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 407 insertions(+), 343 deletions(-)

diff --git a/dump1090.c b/dump1090.c
index d758cef..c6f41f1 100644
--- a/dump1090.c
+++ b/dump1090.c
@@ -27,348 +27,8 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-#ifndef _WIN32
-    #include <stdio.h>
-    #include <string.h>
-    #include <stdlib.h>
-    #include <pthread.h>
-    #include <stdint.h>
-    #include <errno.h>
-    #include <unistd.h>
-    #include <math.h>
-    #include <sys/time.h>
-    #include <sys/timeb.h>
-    #include <signal.h>
-    #include <fcntl.h>
-    #include <ctype.h>
-    #include <sys/stat.h>
-    #include "rtl-sdr.h"
-    #include "anet.h"
-#else
-    #include "dump1090.h" //Put everything Windows specific in here
-    #include "rtl-sdr.h"
-#endif
-
-// File Version number 
-// ====================
-// Format is : MajorVer.MinorVer.DayMonth.Year"
-// MajorVer changes only with significant changes
-// MinorVer changes when additional features are added, but not for bug fixes (range 00-99)
-// DayDate & Year changes for all changes, including for bug fixes. It represent the release date of the update
-//
-#define MODES_DUMP1090_VERSION     "1.07.2305.13"
-#define MODES_USER_LATITUDE_DFLT   (0.0)
-#define MODES_USER_LONGITUDE_DFLT  (0.0)
-
-#define MODES_DEFAULT_RATE         2000000
-#define MODES_DEFAULT_FREQ         1090000000
-#define MODES_DEFAULT_WIDTH        1000
-#define MODES_DEFAULT_HEIGHT       700
-#define MODES_ASYNC_BUF_NUMBER     12
-#define MODES_ASYNC_BUF_SIZE       (16*16384)   /* 256k */
-#define MODES_ASYNC_BUF_SAMPLES    (MODES_ASYNC_BUF_SIZE / 2) /* Each sample is 2 bytes */
-#define MODES_AUTO_GAIN            -100         /* Use automatic gain. */
-#define MODES_MAX_GAIN             999999       /* Use max available gain. */
-#define MODES_MSG_SQUELCH_LEVEL    0x02FF       /* Average signal strength limit */
-#define MODES_MSG_ENCODER_ERRS     3            /* Maximum number of encoding errors */
-
-/* When changing, change also fixBitErrors() and modesInitErrorTable() !! */
-#define MODES_MAX_BITERRORS        2            /* Global max for fixable bit erros */
-
-#define MODEAC_MSG_SAMPLES       (25 * 2)        /* include up to the SPI bit */
-#define MODEAC_MSG_BYTES          2
-#define MODEAC_MSG_SQUELCH_LEVEL  0x07FF         /* Average signal strength limit */
-#define MODEAC_MSG_FLAG          (1<<0)
-#define MODEAC_MSG_MODES_HIT     (1<<1)
-#define MODEAC_MSG_MODEA_HIT     (1<<2)
-#define MODEAC_MSG_MODEC_HIT     (1<<3)
-#define MODEAC_MSG_MODEA_ONLY    (1<<4)
-#define MODEAC_MSG_MODEC_OLD     (1<<5)
-
-#define MODES_PREAMBLE_US        8              /* microseconds = bits */
-#define MODES_PREAMBLE_SAMPLES  (MODES_PREAMBLE_US       * 2)
-#define MODES_PREAMBLE_SIZE     (MODES_PREAMBLE_SAMPLES  * sizeof(uint16_t))
-#define MODES_LONG_MSG_BYTES     14
-#define MODES_SHORT_MSG_BYTES    7
-#define MODES_LONG_MSG_BITS     (MODES_LONG_MSG_BYTES    * 8)
-#define MODES_SHORT_MSG_BITS    (MODES_SHORT_MSG_BYTES   * 8)
-#define MODES_LONG_MSG_SAMPLES  (MODES_LONG_MSG_BITS     * 2)
-#define MODES_SHORT_MSG_SAMPLES (MODES_SHORT_MSG_BITS    * 2)
-#define MODES_LONG_MSG_SIZE     (MODES_LONG_MSG_SAMPLES  * sizeof(uint16_t))
-#define MODES_SHORT_MSG_SIZE    (MODES_SHORT_MSG_SAMPLES * sizeof(uint16_t))
-
-#define MODES_RAWOUT_BUF_SIZE   (1500)           
-#define MODES_RAWOUT_BUF_FLUSH  (MODES_RAWOUT_BUF_SIZE - 200)
-#define MODES_RAWOUT_BUF_RATE   (1000)            // 1000 * 64mS = 1 Min approx
-
-#define MODES_ICAO_CACHE_LEN 1024 /* Power of two required. */
-#define MODES_ICAO_CACHE_TTL 60   /* Time to live of cached addresses. */
-#define MODES_UNIT_FEET 0
-#define MODES_UNIT_METERS 1
-
-#define MODES_USER_LATLON_VALID (1<<0)
-
-#define MODES_ACFLAGS_LATLON_VALID   (1<<0)  // Aircraft Lat/Lon is decoded
-#define MODES_ACFLAGS_ALTITUDE_VALID (1<<1)  // Aircraft altitude is known
-#define MODES_ACFLAGS_HEADING_VALID  (1<<2)  // Aircraft heading is known
-#define MODES_ACFLAGS_SPEED_VALID    (1<<3)  // Aircraft speed is known
-#define MODES_ACFLAGS_VERTRATE_VALID (1<<4)  // Aircraft vertical rate is known
-#define MODES_ACFLAGS_SQUAWK_VALID   (1<<5)  // Aircraft Mode A Squawk is known
-#define MODES_ACFLAGS_CALLSIGN_VALID (1<<6)  // Aircraft Callsign Identity
-#define MODES_ACFLAGS_EWSPEED_VALID  (1<<7)  // Aircraft East West Speed is known
-#define MODES_ACFLAGS_NSSPEED_VALID  (1<<8)  // Aircraft North South Speed is known
-#define MODES_ACFLAGS_AOG            (1<<9)  // Aircraft is On the Ground
-#define MODES_ACFLAGS_LLEVEN_VALID   (1<<10) // Aircraft Even Lot/Lon is known
-#define MODES_ACFLAGS_LLODD_VALID    (1<<11) // Aircraft Odd Lot/Lon is known
-#define MODES_ACFLAGS_AOG_VALID      (1<<12) // MODES_ACFLAGS_AOG is valid 
-#define MODES_ACFLAGS_FS_VALID       (1<<13) // Aircraft Flight Status is known 
-#define MODES_ACFLAGS_NSEWSPD_VALID  (1<<14) // Aircraft EW and NS Speed is known
-#define MODES_ACFLAGS_LATLON_REL_OK  (1<<15) // Indicates it's OK to do a relative CPR
-
-#define MODES_ACFLAGS_LLEITHER_VALID (MODES_ACFLAGS_LLEVEN_VALID | MODES_ACFLAGS_LLODD_VALID) 
-#define MODES_ACFLAGS_LLBOTH_VALID   (MODES_ACFLAGS_LLEVEN_VALID | MODES_ACFLAGS_LLODD_VALID)
-#define MODES_ACFLAGS_AOG_GROUND     (MODES_ACFLAGS_AOG_VALID    | MODES_ACFLAGS_AOG)
-
-#define MODES_DEBUG_DEMOD (1<<0)
-#define MODES_DEBUG_DEMODERR (1<<1)
-#define MODES_DEBUG_BADCRC (1<<2)
-#define MODES_DEBUG_GOODCRC (1<<3)
-#define MODES_DEBUG_NOPREAMBLE (1<<4)
-#define MODES_DEBUG_NET (1<<5)
-#define MODES_DEBUG_JS (1<<6)
-
-/* When debug is set to MODES_DEBUG_NOPREAMBLE, the first sample must be
- * at least greater than a given level for us to dump the signal. */
-#define MODES_DEBUG_NOPREAMBLE_LEVEL 25
-
-#define MODES_INTERACTIVE_REFRESH_TIME 250      /* Milliseconds */
-#define MODES_INTERACTIVE_ROWS 15               /* Rows on screen */
-#define MODES_INTERACTIVE_TTL 60                /* TTL before being removed */
-
-#define MODES_NET_MAX_FD 1024
-#define MODES_NET_INPUT_RAW_PORT    30001
-#define MODES_NET_OUTPUT_RAW_PORT   30002
-#define MODES_NET_OUTPUT_SBS_PORT   30003
-#define MODES_NET_INPUT_BEAST_PORT  30004
-#define MODES_NET_OUTPUT_BEAST_PORT 30005
-#define MODES_NET_HTTP_PORT          8080
-#define MODES_CLIENT_BUF_SIZE  1024
-#define MODES_NET_SNDBUF_SIZE (1024*64)
-
-#ifndef HTMLPATH
-#define HTMLPATH   "./public_html"      /* default path for gmap.html etc. */
-#endif
-
-#define MODES_NOTUSED(V) ((void) V)
-
-/* Structure used to describe a networking client. */
-struct client {
-    int fd;         /* File descriptor. */
-    int service;    /* TCP port the client is connected to. */
-    char buf[MODES_CLIENT_BUF_SIZE+1];    /* Read buffer. */
-    int buflen;                         /* Amount of data on buffer. */
-};
 
-// Structure used to describe an aircraft in iteractive mode
-struct aircraft {
-    uint32_t addr;                // ICAO address
-    char flight[16];              // Flight number
-    unsigned char signalLevel[8]; // Last 8 Signal Amplitudes
-    int altitude;                 // Altitude
-    int speed;                    // Velocity
-    int track;                    // Angle of flight
-    int vert_rate;                // Vertical rate.
-    time_t seen;                  // Time at which the last packet was received
-    time_t seenLatLon;            // Time at which the last lat long was calculated
-    uint64_t timestamp;           // Timestamp at which the last packet was received
-    uint64_t timestampLatLon;     // Timestamp at which the last lat long was calculated
-    long messages;                // Number of Mode S messages received
-    int  modeA;                   // Squawk
-    int  modeC;                   // Altitude
-    long modeAcount;              // Mode A Squawk hit Count
-    long modeCcount;              // Mode C Altitude hit Count
-    int  modeACflags;             // Flags for mode A/C recognition
-    // Encoded latitude and longitude as extracted by odd and even CPR encoded messages
-    int odd_cprlat;
-    int odd_cprlon;
-    int even_cprlat;
-    int even_cprlon;
-    double lat, lon;              // Coordinated obtained from CPR encoded data
-    int bFlags;                   // Flags related to valid fields in this structure
-    uint64_t odd_cprtime, even_cprtime;
-    struct aircraft *next;        // Next aircraft in our linked list
-};
-
-/* Program global state. */
-struct {
-    /* Internal state */
-    pthread_t reader_thread;
-    pthread_mutex_t data_mutex;     /* Mutex to synchronize buffer access. */
-    pthread_cond_t data_cond;       /* Conditional variable associated. */
-    uint16_t *data;                 /* Raw IQ samples buffer */
-    uint16_t *magnitude;            /* Magnitude vector */
-    struct timeb stSystemTimeRTL;   /* System time when RTL passed us the Latest block */
-    uint64_t timestampBlk;          /* Timestamp of the start of the current block */
-    struct timeb stSystemTimeBlk;   /* System time when RTL passed us currently processing this block */
-    int fd;                         /* --ifile option file descriptor. */
-    int data_ready;                 /* Data ready to be processed. */
-    uint32_t *icao_cache;           /* Recently seen ICAO addresses cache. */
-    uint16_t *maglut;               /* I/Q -> Magnitude lookup table. */
-    int exit;                       /* Exit from the main loop when true. */
-
-    /* RTLSDR */
-    int dev_index;
-    int gain;
-    int enable_agc;
-    rtlsdr_dev_t *dev;
-    int freq;
-    int ppm_error;
-
-    /* Networking */
-    char aneterr[ANET_ERR_LEN];
-    struct client *clients[MODES_NET_MAX_FD]; /* Our clients. */
-    int maxfd;                      /* Greatest fd currently active. */
-    int sbsos;                      /* SBS output listening socket. */
-    int ros;                        /* Raw output listening socket. */
-    int ris;                        /* Raw input listening socket. */
-    int bos;                        /* Beast output listening socket */
-    int bis;                        /* Beast input listening socket */
-    int https;                      /* HTTP listening socket. */
-    char * rawOut;                  /* Buffer for building raw output data */
-    int rawOutUsed;                 /* How much if the buffer is currently used */
-    char *beastOut;                 /* Buffer for building beast output data */
-    int beastOutUsed;               /* How much if the buffer is currently used */
-
-    /* Configuration */
-    char *filename;                 /* Input form file, --ifile option. */
-    int phase_enhance;              /* Enable phase enhancement if true */
-    int nfix_crc;                   /* Number of crc bit error(s) to correct */
-    int check_crc;                  /* Only display messages with good CRC. */
-    int raw;                        /* Raw output format. */
-    int beast;                      /* Beast binary format output. */
-    int mode_ac;                    /* Enable decoding of SSR Modes A & C. */
-    int debug;                      /* Debugging mode. */
-    int net;                        /* Enable networking. */
-    int net_only;                   /* Enable just networking. */
-    int net_output_sbs_port;        /* SBS output TCP port. */
-    int net_output_raw_size;        /* Minimum Size of the output raw data */     
-    int net_output_raw_rate;        /* Rate (in 64mS increments) of output raw data */     
-    int net_output_raw_rate_count;  /* Rate (in 64mS increments) of output raw data */     
-    int net_output_raw_port;        /* Raw output TCP port. */
-    int net_input_raw_port;         /* Raw input TCP port. */
-    int net_output_beast_port;      /* Beast output TCP port */
-    int net_input_beast_port;       /* Beast input TCP port */
-    int net_http_port;              /* HTTP port. */
-    int quiet;                      /* Suppress stdout */
-    int interactive;                /* Interactive mode */
-    int interactive_rows;           /* Interactive mode: max number of rows. */
-    int interactive_ttl;            /* Interactive mode: TTL before deletion. */
-    int stats;                      /* Print stats at exit in --ifile mode. */
-    int onlyaddr;                   /* Print only ICAO addresses. */
-    int metric;                     /* Use metric units. */
-    int mlat;                       /* Use Beast ascii format for raw data output, i.e. @...; iso *...; */
-    int interactive_rtl1090;        /* flight table in interactive mode is formatted like RTL1090 */
-
-    // User details
-    double fUserLat;                // Users receiver/antenna lat/lon needed for initial surface location
-    double fUserLon;                // Users receiver/antenna lat/lon needed for initial surface location
-    int    bUserFlags;              // Flags relating to the user details
-
-    /* Interactive mode */
-    struct aircraft *aircrafts;
-    uint64_t interactive_last_update;  /* Last screen update in milliseconds */
-
-    /* Statistics */
-    unsigned int stat_valid_preamble;
-    unsigned int stat_demodulated0;
-    unsigned int stat_demodulated1;
-    unsigned int stat_demodulated2;
-    unsigned int stat_demodulated3;
-    unsigned int stat_goodcrc;
-    unsigned int stat_badcrc;
-    unsigned int stat_fixed;
-
-    // Histogram of fixed bit errors: index 0 for single bit erros,
-    // index 1 for double bit errors etc.
-    unsigned int stat_bit_fix[MODES_MAX_BITERRORS];
-							
-    unsigned int stat_http_requests;
-    unsigned int stat_sbs_connections;
-    unsigned int stat_raw_connections;
-    unsigned int stat_beast_connections;
-    unsigned int stat_out_of_phase;
-    unsigned int stat_ph_demodulated0;
-    unsigned int stat_ph_demodulated1;
-    unsigned int stat_ph_demodulated2;
-    unsigned int stat_ph_demodulated3;
-    unsigned int stat_ph_goodcrc;
-    unsigned int stat_ph_badcrc;
-    unsigned int stat_ph_fixed;
-    // Histogram of fixed bit errors: index 0 for single bit erros,
-    // index 1 for double bit errors etc.
-    unsigned int stat_ph_bit_fix[MODES_MAX_BITERRORS];
-							
-    unsigned int stat_DF_Len_Corrected;
-    unsigned int stat_DF_Type_Corrected;
-    unsigned int stat_ModeAC;
-} Modes;
-
-// The struct we use to store information about a decoded message.
-struct modesMessage {
-    // Generic fields
-    unsigned char msg[MODES_LONG_MSG_BYTES];      // Binary message.
-    int           msgbits;                        // Number of bits in message 
-    int           msgtype;                        // Downlink format #
-    int           crcok;                          // True if CRC was valid
-    uint32_t      crc;                            // Message CRC
-    int           correctedbits;                  // No. of bits corrected 
-    char          corrected[MODES_MAX_BITERRORS]; // corrected bit positions
-    uint32_t      addr;                           // ICAO Address from bytes 1 2 and 3
-    int           phase_corrected;                // True if phase correction was applied
-    uint64_t      timestampMsg;                   // Timestamp of the message
-    int           remote;                         // If set this message is from a remote station
-    unsigned char signalLevel;                    // Signal Amplitude
-
-    // DF 11
-    int  ca;                    // Responder capabilities
-    int  iid;
-
-    // DF 17, DF 18
-    int  metype;                // Extended squitter message type.
-    int  mesub;                 // Extended squitter message subtype.
-    int  heading;               // Reported by aircraft, or computed from from EW and NS velocity
-    int  raw_latitude;          // Non decoded latitude.
-    int  raw_longitude;         // Non decoded longitude.
-    double fLat;                // Coordinates obtained from CPR encoded data if/when decoded
-    double fLon;                // Coordinates obtained from CPR encoded data if/when decoded
-    char flight[16];            // 8 chars flight number.
-    int  ew_velocity;           // E/W velocity.
-    int  ns_velocity;           // N/S velocity.
-    int  vert_rate;             // Vertical rate.
-    int  velocity;              // Reported by aircraft, or computed from from EW and NS velocity
-
-    // DF4, DF5, DF20, DF21
-    int  fs;                    // Flight status for DF4,5,20,21
-    int  modeA;                 // 13 bits identity (Squawk).
-
-    // Fields used by multiple message types.
-    int  altitude;
-    int  unit; 
-    int  bFlags;                // Flags related to fields in this structure
-};
-
-void interactiveShowData(void);
-struct aircraft* interactiveReceiveData(struct modesMessage *mm);
-void modesSendAllClients(int service, void *msg, int len);
-void modesSendRawOutput(struct modesMessage *mm);
-void modesSendBeastOutput(struct modesMessage *mm);
-void modesSendSBSOutput(struct modesMessage *mm);
-void useModesMessage(struct modesMessage *mm);
-int fixBitErrors(unsigned char *msg, int bits, int maxfix, char *fixedbits);
-int fixSingleBitErrors(unsigned char *msg, int bits);
-int fixTwoBitsErrors(unsigned char *msg, int bits);
-void modesInitErrorInfo();
-int modesMessageLenByType(int type);
+#include "dump1090.h"
 
 /* ============================= Utility functions ========================== */
 
@@ -4259,9 +3919,10 @@ int main(int argc, char **argv) {
         } else if (!strcmp(argv[j],"--net-ro-rate") && more) {
             Modes.net_output_raw_rate = atoi(argv[++j]);
         } else if (!strcmp(argv[j],"--net-ro-port") && more) {
-            Modes.net_output_raw_port = atoi(argv[++j]);
             if (Modes.beast) // Required for legacy backward compatibility
-                {Modes.net_output_beast_port = Modes.net_output_raw_port;}
+                {Modes.net_output_beast_port = atoi(argv[++j]);;}
+            else
+                {Modes.net_output_raw_port = atoi(argv[++j]);}
         } else if (!strcmp(argv[j],"--net-ri-port") && more) {
             Modes.net_input_raw_port = atoi(argv[++j]);
         } else if (!strcmp(argv[j],"--net-bo-port") && more) {
diff --git a/dump1090.h b/dump1090.h
new file mode 100644
index 0000000..e2f6ff7
--- /dev/null
+++ b/dump1090.h
@@ -0,0 +1,403 @@
+/* dump1090, a Mode S messages decoder for RTLSDR devices.
+ *
+ * Copyright (C) 2012 by Salvatore Sanfilippo <antirez at gmail.com>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *  *  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *  *  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef __DUMP1090_H
+#define __DUMP1090_H
+
+// File Version number 
+// ====================
+// Format is : MajorVer.MinorVer.DayMonth.Year"
+// MajorVer changes only with significant changes
+// MinorVer changes when additional features are added, but not for bug fixes (range 00-99)
+// DayDate & Year changes for all changes, including for bug fixes. It represent the release date of the update
+//
+#define MODES_DUMP1090_VERSION     "1.07.2305.13"
+
+/* ============================= Include files ========================== */
+
+#ifndef _WIN32
+    #include <stdio.h>
+    #include <string.h>
+    #include <stdlib.h>
+    #include <pthread.h>
+    #include <stdint.h>
+    #include <errno.h>
+    #include <unistd.h>
+    #include <math.h>
+    #include <sys/time.h>
+    #include <sys/timeb.h>
+    #include <signal.h>
+    #include <fcntl.h>
+    #include <ctype.h>
+    #include <sys/stat.h>
+    #include "rtl-sdr.h"
+    #include "anet.h"
+#else
+    #include "winstubs.h" //Put everything Windows specific in here
+    #include "rtl-sdr.h"
+#endif
+
+/* ============================= #defines =============================== */
+
+#ifdef USER_LATITUDE
+    #define MODES_USER_LATITUDE_DFLT   (USER_LATITUDE)
+    #define MODES_USER_LONGITUDE_DFLT  (USER_LONGITUDE)
+#else
+    #define MODES_USER_LATITUDE_DFLT   (0.0)
+    #define MODES_USER_LONGITUDE_DFLT  (0.0)
+#endif 
+
+#define MODES_DEFAULT_RATE         2000000
+#define MODES_DEFAULT_FREQ         1090000000
+#define MODES_DEFAULT_WIDTH        1000
+#define MODES_DEFAULT_HEIGHT       700
+#define MODES_ASYNC_BUF_NUMBER     12
+#define MODES_ASYNC_BUF_SIZE       (16*16384)                 // 256k
+#define MODES_ASYNC_BUF_SAMPLES    (MODES_ASYNC_BUF_SIZE / 2) // Each sample is 2 bytes
+#define MODES_AUTO_GAIN            -100                       // Use automatic gain
+#define MODES_MAX_GAIN             999999                     // Use max available gain
+#define MODES_MSG_SQUELCH_LEVEL    0x02FF                     // Average signal strength limit
+#define MODES_MSG_ENCODER_ERRS     3                          // Maximum number of encoding errors
+
+// When changing, change also fixBitErrors() and modesInitErrorTable() !!
+#define MODES_MAX_BITERRORS        2                          // Global max for fixable bit erros
+
+#define MODEAC_MSG_SAMPLES       (25 * 2)                     // include up to the SPI bit
+#define MODEAC_MSG_BYTES          2
+#define MODEAC_MSG_SQUELCH_LEVEL  0x07FF                      // Average signal strength limit
+#define MODEAC_MSG_FLAG          (1<<0)
+#define MODEAC_MSG_MODES_HIT     (1<<1)
+#define MODEAC_MSG_MODEA_HIT     (1<<2)
+#define MODEAC_MSG_MODEC_HIT     (1<<3)
+#define MODEAC_MSG_MODEA_ONLY    (1<<4)
+#define MODEAC_MSG_MODEC_OLD     (1<<5)
+
+#define MODES_PREAMBLE_US        8              // microseconds = bits
+#define MODES_PREAMBLE_SAMPLES  (MODES_PREAMBLE_US       * 2)
+#define MODES_PREAMBLE_SIZE     (MODES_PREAMBLE_SAMPLES  * sizeof(uint16_t))
+#define MODES_LONG_MSG_BYTES     14
+#define MODES_SHORT_MSG_BYTES    7
+#define MODES_LONG_MSG_BITS     (MODES_LONG_MSG_BYTES    * 8)
+#define MODES_SHORT_MSG_BITS    (MODES_SHORT_MSG_BYTES   * 8)
+#define MODES_LONG_MSG_SAMPLES  (MODES_LONG_MSG_BITS     * 2)
+#define MODES_SHORT_MSG_SAMPLES (MODES_SHORT_MSG_BITS    * 2)
+#define MODES_LONG_MSG_SIZE     (MODES_LONG_MSG_SAMPLES  * sizeof(uint16_t))
+#define MODES_SHORT_MSG_SIZE    (MODES_SHORT_MSG_SAMPLES * sizeof(uint16_t))
+
+#define MODES_RAWOUT_BUF_SIZE   (1500)           
+#define MODES_RAWOUT_BUF_FLUSH  (MODES_RAWOUT_BUF_SIZE - 200)
+#define MODES_RAWOUT_BUF_RATE   (1000)            // 1000 * 64mS = 1 Min approx
+
+#define MODES_ICAO_CACHE_LEN 1024 // Power of two required
+#define MODES_ICAO_CACHE_TTL 60   // Time to live of cached addresses
+#define MODES_UNIT_FEET 0
+#define MODES_UNIT_METERS 1
+
+#define MODES_USER_LATLON_VALID (1<<0)
+
+#define MODES_ACFLAGS_LATLON_VALID   (1<<0)  // Aircraft Lat/Lon is decoded
+#define MODES_ACFLAGS_ALTITUDE_VALID (1<<1)  // Aircraft altitude is known
+#define MODES_ACFLAGS_HEADING_VALID  (1<<2)  // Aircraft heading is known
+#define MODES_ACFLAGS_SPEED_VALID    (1<<3)  // Aircraft speed is known
+#define MODES_ACFLAGS_VERTRATE_VALID (1<<4)  // Aircraft vertical rate is known
+#define MODES_ACFLAGS_SQUAWK_VALID   (1<<5)  // Aircraft Mode A Squawk is known
+#define MODES_ACFLAGS_CALLSIGN_VALID (1<<6)  // Aircraft Callsign Identity
+#define MODES_ACFLAGS_EWSPEED_VALID  (1<<7)  // Aircraft East West Speed is known
+#define MODES_ACFLAGS_NSSPEED_VALID  (1<<8)  // Aircraft North South Speed is known
+#define MODES_ACFLAGS_AOG            (1<<9)  // Aircraft is On the Ground
+#define MODES_ACFLAGS_LLEVEN_VALID   (1<<10) // Aircraft Even Lot/Lon is known
+#define MODES_ACFLAGS_LLODD_VALID    (1<<11) // Aircraft Odd Lot/Lon is known
+#define MODES_ACFLAGS_AOG_VALID      (1<<12) // MODES_ACFLAGS_AOG is valid 
+#define MODES_ACFLAGS_FS_VALID       (1<<13) // Aircraft Flight Status is known 
+#define MODES_ACFLAGS_NSEWSPD_VALID  (1<<14) // Aircraft EW and NS Speed is known
+#define MODES_ACFLAGS_LATLON_REL_OK  (1<<15) // Indicates it's OK to do a relative CPR
+
+#define MODES_ACFLAGS_LLEITHER_VALID (MODES_ACFLAGS_LLEVEN_VALID | MODES_ACFLAGS_LLODD_VALID) 
+#define MODES_ACFLAGS_LLBOTH_VALID   (MODES_ACFLAGS_LLEVEN_VALID | MODES_ACFLAGS_LLODD_VALID)
+#define MODES_ACFLAGS_AOG_GROUND     (MODES_ACFLAGS_AOG_VALID    | MODES_ACFLAGS_AOG)
+
+#define MODES_DEBUG_DEMOD (1<<0)
+#define MODES_DEBUG_DEMODERR (1<<1)
+#define MODES_DEBUG_BADCRC (1<<2)
+#define MODES_DEBUG_GOODCRC (1<<3)
+#define MODES_DEBUG_NOPREAMBLE (1<<4)
+#define MODES_DEBUG_NET (1<<5)
+#define MODES_DEBUG_JS (1<<6)
+
+// When debug is set to MODES_DEBUG_NOPREAMBLE, the first sample must be
+// at least greater than a given level for us to dump the signal.
+#define MODES_DEBUG_NOPREAMBLE_LEVEL 25
+
+#define MODES_INTERACTIVE_REFRESH_TIME 250      // Milliseconds
+#define MODES_INTERACTIVE_ROWS 15               // Rows on screen
+#define MODES_INTERACTIVE_TTL 60                // TTL before being removed
+
+#define MODES_NET_MAX_FD 1024
+#define MODES_NET_INPUT_RAW_PORT    30001
+#define MODES_NET_OUTPUT_RAW_PORT   30002
+#define MODES_NET_OUTPUT_SBS_PORT   30003
+#define MODES_NET_INPUT_BEAST_PORT  30004
+#define MODES_NET_OUTPUT_BEAST_PORT 30005
+#define MODES_NET_HTTP_PORT          8080
+#define MODES_CLIENT_BUF_SIZE  1024
+#define MODES_NET_SNDBUF_SIZE (1024*64)
+
+#ifndef HTMLPATH
+#define HTMLPATH   "./public_html"      // default path for gmap.html etc
+#endif
+
+#define MODES_NOTUSED(V) ((void) V)
+
+/* ======================== structure declarations ========================= */
+
+// Structure used to describe a networking client
+struct client {
+    int  fd;                           // File descriptor
+    int  service;                      // TCP port the client is connected to
+    char buf[MODES_CLIENT_BUF_SIZE+1]; // Read buffer
+    int  buflen;                       // Amount of data on buffer
+};
+
+// Structure used to describe an aircraft in iteractive mode
+struct aircraft {
+    uint32_t      addr;           // ICAO address
+    char          flight[16];     // Flight number
+    unsigned char signalLevel[8]; // Last 8 Signal Amplitudes
+    int           altitude;       // Altitude
+    int           speed;          // Velocity
+    int           track;          // Angle of flight
+    int           vert_rate;      // Vertical rate.
+    time_t        seen;           // Time at which the last packet was received
+    time_t        seenLatLon;     // Time at which the last lat long was calculated
+    uint64_t      timestamp;      // Timestamp at which the last packet was received
+    uint64_t      timestampLatLon;// Timestamp at which the last lat long was calculated
+    long          messages;       // Number of Mode S messages received
+    int           modeA;          // Squawk
+    int           modeC;          // Altitude
+    long          modeAcount;     // Mode A Squawk hit Count
+    long          modeCcount;     // Mode C Altitude hit Count
+    int           modeACflags;    // Flags for mode A/C recognition
+
+    // Encoded latitude and longitude as extracted by odd and even CPR encoded messages
+    int           odd_cprlat;
+    int           odd_cprlon;
+    int           even_cprlat;
+    int           even_cprlon;
+    uint64_t      odd_cprtime;
+    uint64_t      even_cprtime;
+    double        lat, lon;       // Coordinated obtained from CPR encoded data
+    int           bFlags;         // Flags related to valid fields in this structure
+    struct aircraft *next;        // Next aircraft in our linked list
+};
+
+// Program global state
+struct {                             // Internal state
+    pthread_t       reader_thread;
+    pthread_mutex_t data_mutex;      // Mutex to synchronize buffer access
+    pthread_cond_t  data_cond;       // Conditional variable associated
+    uint16_t       *data;            // Raw IQ samples buffer
+    uint16_t       *magnitude;       // Magnitude vector
+    struct timeb    stSystemTimeRTL; // System time when RTL passed us the Latest block
+    uint64_t        timestampBlk;    // Timestamp of the start of the current block
+    struct timeb    stSystemTimeBlk; // System time when RTL passed us currently processing this block
+    int             fd;              // --ifile option file descriptor
+    int             data_ready;      // Data ready to be processed
+    uint32_t       *icao_cache;      // Recently seen ICAO addresses cache
+    uint16_t       *maglut;          // I/Q -> Magnitude lookup table
+    int             exit;            // Exit from the main loop when true
+
+    // RTLSDR
+    int           dev_index;
+    int           gain;
+    int           enable_agc;
+    rtlsdr_dev_t *dev;
+    int           freq;
+    int           ppm_error;
+
+    // Networking
+    char           aneterr[ANET_ERR_LEN];
+    struct client *clients[MODES_NET_MAX_FD]; // Our clients
+    int            maxfd;                     // Greatest fd currently active
+    int            sbsos;                     // SBS output listening socket
+    int            ros;                       // Raw output listening socket
+    int            ris;                       // Raw input listening socket
+    int            bos;                       // Beast output listening socket
+    int            bis;                       // Beast input listening socket
+    int            https;                     // HTTP listening socket
+    char          *rawOut;                    // Buffer for building raw output data
+    int            rawOutUsed;                // How much of the buffer is currently used
+    char          *beastOut;                  // Buffer for building beast output data
+    int            beastOutUsed;              // How much if the buffer is currently used
+
+    // Configuration
+    char *filename;                  // Input form file, --ifile option
+    int   phase_enhance;             // Enable phase enhancement if true
+    int   nfix_crc;                  // Number of crc bit error(s) to correct
+    int   check_crc;                 // Only display messages with good CRC
+    int   raw;                       // Raw output format
+    int   beast;                     // Beast binary format output
+    int   mode_ac;                   // Enable decoding of SSR Modes A & C
+    int   debug;                     // Debugging mode
+    int   net;                       // Enable networking
+    int   net_only;                  // Enable just networking
+    int   net_output_sbs_port;       // SBS output TCP port
+    int   net_output_raw_size;       // Minimum Size of the output raw data
+    int   net_output_raw_rate;       // Rate (in 64mS increments) of output raw data
+    int   net_output_raw_rate_count; // Rate (in 64mS increments) of output raw data
+    int   net_output_raw_port;       // Raw output TCP port
+    int   net_input_raw_port;        // Raw input TCP port
+    int   net_output_beast_port;     // Beast output TCP port
+    int   net_input_beast_port;      // Beast input TCP port
+    int   net_http_port;             // HTTP port
+    int   quiet;                     // Suppress stdout
+    int   interactive;               // Interactive mode
+    int   interactive_rows;          // Interactive mode: max number of rows
+    int   interactive_ttl;           // Interactive mode: TTL before deletion
+    int   stats;                     // Print stats at exit in --ifile mode
+    int   onlyaddr;                  // Print only ICAO addresses
+    int   metric;                    // Use metric units
+    int   mlat;                      // Use Beast ascii format for raw data output, i.e. @...; iso *...;
+    int   interactive_rtl1090;       // flight table in interactive mode is formatted like RTL1090
+
+    // User details
+    double fUserLat;                // Users receiver/antenna lat/lon needed for initial surface location
+    double fUserLon;                // Users receiver/antenna lat/lon needed for initial surface location
+    int    bUserFlags;              // Flags relating to the user details
+
+    // Interactive mode
+    struct aircraft *aircrafts;
+    uint64_t         interactive_last_update; // Last screen update in milliseconds
+
+    // Statistics
+    unsigned int stat_valid_preamble;
+    unsigned int stat_demodulated0;
+    unsigned int stat_demodulated1;
+    unsigned int stat_demodulated2;
+    unsigned int stat_demodulated3;
+    unsigned int stat_goodcrc;
+    unsigned int stat_badcrc;
+    unsigned int stat_fixed;
+
+    // Histogram of fixed bit errors: index 0 for single bit erros,
+    // index 1 for double bit errors etc.
+    unsigned int stat_bit_fix[MODES_MAX_BITERRORS];
+							
+    unsigned int stat_http_requests;
+    unsigned int stat_sbs_connections;
+    unsigned int stat_raw_connections;
+    unsigned int stat_beast_connections;
+    unsigned int stat_out_of_phase;
+    unsigned int stat_ph_demodulated0;
+    unsigned int stat_ph_demodulated1;
+    unsigned int stat_ph_demodulated2;
+    unsigned int stat_ph_demodulated3;
+    unsigned int stat_ph_goodcrc;
+    unsigned int stat_ph_badcrc;
+    unsigned int stat_ph_fixed;
+    // Histogram of fixed bit errors: index 0 for single bit erros,
+    // index 1 for double bit errors etc.
+    unsigned int stat_ph_bit_fix[MODES_MAX_BITERRORS];
+							
+    unsigned int stat_DF_Len_Corrected;
+    unsigned int stat_DF_Type_Corrected;
+    unsigned int stat_ModeAC;
+} Modes;
+
+// The struct we use to store information about a decoded message.
+struct modesMessage {
+    // Generic fields
+    unsigned char msg[MODES_LONG_MSG_BYTES];      // Binary message.
+    int           msgbits;                        // Number of bits in message 
+    int           msgtype;                        // Downlink format #
+    int           crcok;                          // True if CRC was valid
+    uint32_t      crc;                            // Message CRC
+    int           correctedbits;                  // No. of bits corrected 
+    char          corrected[MODES_MAX_BITERRORS]; // corrected bit positions
+    uint32_t      addr;                           // ICAO Address from bytes 1 2 and 3
+    int           phase_corrected;                // True if phase correction was applied
+    uint64_t      timestampMsg;                   // Timestamp of the message
+    int           remote;                         // If set this message is from a remote station
+    unsigned char signalLevel;                    // Signal Amplitude
+
+    // DF 11
+    int  ca;                    // Responder capabilities
+    int  iid;
+
+    // DF 17, DF 18
+    int    metype;              // Extended squitter message type.
+    int    mesub;               // Extended squitter message subtype.
+    int    heading;             // Reported by aircraft, or computed from from EW and NS velocity
+    int    raw_latitude;        // Non decoded latitude.
+    int    raw_longitude;       // Non decoded longitude.
+    double fLat;                // Coordinates obtained from CPR encoded data if/when decoded
+    double fLon;                // Coordinates obtained from CPR encoded data if/when decoded
+    char   flight[16];          // 8 chars flight number.
+    int    ew_velocity;         // E/W velocity.
+    int    ns_velocity;         // N/S velocity.
+    int    vert_rate;           // Vertical rate.
+    int    velocity;            // Reported by aircraft, or computed from from EW and NS velocity
+
+    // DF4, DF5, DF20, DF21
+    int  fs;                    // Flight status for DF4,5,20,21
+    int  modeA;                 // 13 bits identity (Squawk).
+
+    // Fields used by multiple message types.
+    int  altitude;
+    int  unit; 
+    int  bFlags;                // Flags related to fields in this structure
+};
+
+/* ======================== function declarations ========================= */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int  detectModeA       (uint16_t *m, struct modesMessage *mm);
+void decodeModeAMessage(struct modesMessage *mm, int ModeA);
+int  ModeAToModeC      (unsigned int ModeA);
+
+void interactiveShowData(void);
+struct aircraft* interactiveReceiveData(struct modesMessage *mm);
+void modesSendAllClients  (int service, void *msg, int len);
+void modesSendRawOutput   (struct modesMessage *mm);
+void modesSendBeastOutput (struct modesMessage *mm);
+void modesSendSBSOutput   (struct modesMessage *mm);
+void useModesMessage      (struct modesMessage *mm);
+
+int  fixBitErrors         (unsigned char *msg, int bits, int maxfix, char *fixedbits);
+
+void modesInitErrorInfo   ();
+int  modesMessageLenByType(int type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __DUMP1090_H

-- 
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