Merge branch 'dev' into staging
This commit is contained in:
commit
bd3ec0cbdc
4
Makefile
4
Makefile
|
|
@ -230,5 +230,5 @@ starchgen:
|
||||||
|
|
||||||
.PHONY: wisdom.local
|
.PHONY: wisdom.local
|
||||||
wisdom.local: starch-benchmark
|
wisdom.local: starch-benchmark
|
||||||
./starch-benchmark -i 15 -o wisdom.local mean_power_u16 mean_power_u16_aligned magnitude_uc8 magnitude_uc8_aligned
|
./starch-benchmark -i 5 -o wisdom.local mean_power_u16 mean_power_u16_aligned magnitude_uc8 magnitude_uc8_aligned
|
||||||
./starch-benchmark -i 15 -r wisdom.local -o wisdom.local
|
./starch-benchmark -i 5 -r wisdom.local -o wisdom.local
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,15 @@ about dump1090's operation to collectd for later graphing.
|
||||||
|
|
||||||
## Reading the json files
|
## Reading the json files
|
||||||
|
|
||||||
There are two ways to obtain the json files:
|
dump1090-fa writes json files periodically to the location specified by the `--write-json` command line option.
|
||||||
|
These json files can then be exposed via a separate standalone webserver e.g. lighttpd.
|
||||||
|
|
||||||
* By HTTP from dump1090's internal webserver, which defaults to running on port 8080. The json is served from the data/ path, e.g. http://somehost:8080/data/aircraft.json
|
The files are written periodically; for aircraft, typically once a second, for stats, once a minute.
|
||||||
* As a file in the directory specified by --write-json on dump1090's command line. These can be exposed via a
|
The interval between file updates can be controlled by the `--write-json-every` and `--json-stats-every` options.
|
||||||
separate webserver.
|
As these files are frequently updated, it's a good idea to put them in RAM rather than on disk. Package installs
|
||||||
|
default to putting the file under `/run`, which is in RAM.
|
||||||
|
|
||||||
The HTTP versions are always up to date.
|
New versions of each file are written to a temporary file, then atomically renamed to the right path, so you should never see partial copies.
|
||||||
The file versions are written periodically; for aircraft, typically once a second, for stats, once a minute.
|
|
||||||
The file versions are updated to a temporary file, then atomically renamed to the right path, so you should never see partial copies.
|
|
||||||
|
|
||||||
Each file contains a single JSON object. The file formats are:
|
Each file contains a single JSON object. The file formats are:
|
||||||
|
|
||||||
|
|
@ -164,3 +164,4 @@ Each period has the following subkeys:
|
||||||
* all: total tracks created
|
* all: total tracks created
|
||||||
* single_message: tracks consisting of only a single message. These are usually due to message decoding errors that produce a bad aircraft address.
|
* single_message: tracks consisting of only a single message. These are usually due to message decoding errors that produce a bad aircraft address.
|
||||||
* messages: total number of messages accepted by dump1090 from any source
|
* messages: total number of messages accepted by dump1090 from any source
|
||||||
|
* messages_by_df: an array of integers where entry N (0..31) is the total number of messages accepted with downlink format (DF) = N.
|
||||||
|
|
|
||||||
37
README.md
37
README.md
|
|
@ -19,7 +19,7 @@ many other Linux or Unix-like systems.
|
||||||
## Building under buster
|
## Building under buster
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo apt-get install build-essential debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev libhackrf-dev liblimesuite-dev
|
$ sudo apt-get install build-essential fakeroot debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev libhackrf-dev liblimesuite-dev
|
||||||
$ dpkg-buildpackage -b --no-sign
|
$ dpkg-buildpackage -b --no-sign
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -115,3 +115,38 @@ Minimal testing on 12.1-RELEASE, YMMV.
|
||||||
# pkg install hackrf
|
# pkg install hackrf
|
||||||
$ gmake
|
$ gmake
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Generating wisdom files
|
||||||
|
|
||||||
|
dump1090-fa uses [starch](https://github.com/flightaware/starch) to build
|
||||||
|
multiple versions of the DSP code and choose the fastest supported by the
|
||||||
|
hardware at runtime. The implementations chosen can been seen by running
|
||||||
|
`dump1090-fa --version`.
|
||||||
|
|
||||||
|
The implementations used are controlled by "wisdom files", a list of
|
||||||
|
implementations to use in order of priority. For each DSP function, the first
|
||||||
|
implementation listed that's supported by the current hardware is used.
|
||||||
|
By default dump1090-fa provides compiled-in wisdom for [x86](wisdom.x86),
|
||||||
|
[ARM 32-bit](wisdom.arm), and [ARM 64-bit](wisdom.aarch64). If the defaults
|
||||||
|
are not suitable for your hardware or if you're building on a different
|
||||||
|
architecture, you may want to generate your own external wisdom file.
|
||||||
|
|
||||||
|
Ideally, to get stable results, you want to do this on an idle system
|
||||||
|
with CPU frequency scaling disabled. Running the benchmarks will take
|
||||||
|
some time (10s of minutes).
|
||||||
|
|
||||||
|
### Package installs
|
||||||
|
|
||||||
|
Run `/usr/share/dump1090-fa/generate-wisdom`. Wait.
|
||||||
|
|
||||||
|
Follow the instructions to copy the resulting wisdom file to `/etc/dump1090-fa/wisdom.local`.
|
||||||
|
|
||||||
|
Restart dump1090.
|
||||||
|
|
||||||
|
### Manual installs
|
||||||
|
|
||||||
|
Run `make wisdom.local`. Wait.
|
||||||
|
|
||||||
|
Copy the resulting `wisdom.local` file somewhere appropriate.
|
||||||
|
|
||||||
|
Update the dump1090-fa command-line options to include `--wisdom /path/to/wisdom.local`
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,48 @@
|
||||||
dump1090-fa (5.0) UNRELEASED; urgency=medium
|
dump1090-fa (5.0) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* in development
|
* SkyAware: New Altitude, Speed, Aircraft Ident, and Aircraft Type filters to fine tune the select aircraft you want see
|
||||||
|
* SkyAware: Ability to toggle visibility of ADS-B, MLAT, UAT, TIS-B, and Other aircraft on SkyAware using the check boxes under the aircraft table
|
||||||
|
* SkyAware: Ability to show Aircraft Ident labels for all aircraft on your display (found in the View Toggles list in the settings menu)
|
||||||
|
* SkyAware: A merged SkyAware map of 1090 and UAT aircraft for those with dual 1090/978 setups.
|
||||||
|
* SkyAware: Direct link on the SkyAware map to go to your My ADS-B statistics page on FlightAware.com or a direct link to claim your receiver if it has not been claimed
|
||||||
|
* SkyAware: Bold aircraft Idents are used to indicate tail numbers in the aircraft table rather than using the previous prepended underscore syntax
|
||||||
|
* SkyAware: Default SkyAware link now at <local ip>/skyaware
|
||||||
|
|
||||||
-- Eric Tran <eric.tran@flightaware.com> Fri, 05 Mar 2021 07:21:00 -6000
|
* dump1090: limesdr: use --gain value if --limesdr-gain is not specified
|
||||||
|
* dump1090: Switch sample-conversion DSP code to use starch. Provide NEON implementations for ARM when the
|
||||||
|
hardware supports it. Update 8-bit unsigned zero offset to reflect actual rtlsdr behavior. This gives a
|
||||||
|
substantial speedup to sample processing for the 12/16-bit case, and a small speedup for the 8-bit case.
|
||||||
|
Default wisdom provided for arm, aarch64, and x86; see the README for details on generating hardware-
|
||||||
|
specific wisdom files.
|
||||||
|
* dump1090: Make console stats display fixed-width (courtesy @gtjoseph)
|
||||||
|
* dump1090: Add `--json-stats-every` option to control the update cycle of `stats.json`
|
||||||
|
* dump1090: Don't expire data when reading a capture at full speed via `--ifile`
|
||||||
|
* dump1090: Count received messages for each DF type, emit in console stats / `stats.json`
|
||||||
|
* dump1090: Write final stats.json on process exit (mostly useful for `--ifile`)
|
||||||
|
* dump1090: Attempt to correct DF11/17/18 messages where the DF field itself is damaged. This requires
|
||||||
|
a lot more CRC checks when receiving messages off-the-air, but slightly increases the decode rate for
|
||||||
|
DF11/17/18.
|
||||||
|
* dump1090: Add a `--no-df-fix` option to disable the extra DF field correction, for cases where the extra
|
||||||
|
messages are not worth the extra CPU
|
||||||
|
* dump1090: Track recently-seen DF18 addresses, but only count them as recently-seen for DF18 decoding,
|
||||||
|
not for Mode S / DF17
|
||||||
|
|
||||||
|
* dump1090: Support `--stats-every` intervals of less than 1 minute correctly
|
||||||
|
* dump1090: Don't erroneously consider ICAO 000000 as "recently seen" when decoding
|
||||||
|
* dump1090: Fix rare hang (1 in 1e9) in FIFO code due to an off-by-one error in normalize_timespec
|
||||||
|
* dump1090: Correctly expire stale emergency, nac_v data (courtesy @wiedehopf, issue #96)
|
||||||
|
* dump1090: Fix FIFO bounded memory leak / effective reduction in size of the FIFO, triggered if the
|
||||||
|
demodulator couldn't keep up with the input rate
|
||||||
|
* dump1090: Set at least airground = AG_UNCERTAIN for airborne position messages with valid altitudes (issue #113)
|
||||||
|
|
||||||
|
* view1090: Interactive mode enhancements to show min/max RSSI, distances (courtesy @gtjoseph, PR #81)
|
||||||
|
* view1090: Fix table alignment with `--interactive-ttl` > 99 (courtesy @MavEtJu, PR #99)
|
||||||
|
* view1090: Tweak Mode column to display more data-source info
|
||||||
|
* view1090: Fix librtlsdr output interfering with interactive mode display (courtesy @VasiliyTurchenko, PR #116)
|
||||||
|
|
||||||
|
* general: Fix linking against NetBSD curses library (courtesy @jvanwouw, PR #111)
|
||||||
|
|
||||||
|
-- Eric Tran <eric.tran@flightaware.com> Mon, 08 Feb 2021 19:26:07 -6000
|
||||||
|
|
||||||
dump1090-fa (4.0) stable; urgency=medium
|
dump1090-fa (4.0) stable; urgency=medium
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
public_html/* usr/share/dump1090-fa/html
|
public_html/* usr/share/dump1090-fa/html
|
||||||
|
public_html_merged/* usr/share/skyaware/html
|
||||||
debian/lighttpd/* etc/lighttpd/conf-available
|
debian/lighttpd/* etc/lighttpd/conf-available
|
||||||
bladerf/* usr/share/dump1090-fa/bladerf
|
bladerf/* usr/share/dump1090-fa/bladerf
|
||||||
debian/start-dump1090-fa usr/share/dump1090-fa/
|
debian/start-dump1090-fa usr/share/dump1090-fa/
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,13 @@ case "$1" in
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if dpkg --compare-versions "$2" le "5.0"
|
||||||
|
then
|
||||||
|
echo "Enabling lighttpd skyaware module.." >&2
|
||||||
|
lighty-enable-mod skyaware || true
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Restarting lighttpd.." >&2
|
echo "Restarting lighttpd.." >&2
|
||||||
invoke-rc.d lighttpd restart || true
|
invoke-rc.d lighttpd restart || true
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -21,27 +21,15 @@
|
||||||
# server.modules += ( "mod_alias" )
|
# server.modules += ( "mod_alias" )
|
||||||
|
|
||||||
alias.url += (
|
alias.url += (
|
||||||
"/skyaware/data/" => "/run/dump1090-fa/",
|
"/dump1090-fa/data/" => "/run/dump1090-fa/",
|
||||||
"/skyaware/data-978/" => "/run/skyaware978/",
|
"/dump1090-fa/" => "/usr/share/dump1090-fa/html/"
|
||||||
"/skyaware/" => "/usr/share/dump1090-fa/html/"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# redirect the slash-less URL
|
# redirect the slash-less URL
|
||||||
url.redirect += (
|
url.redirect += (
|
||||||
"^/skyaware$" => "/skyaware/",
|
"^/dump1090-fa$" => "/dump1090-fa/"
|
||||||
"^/dump1090-fa$" => "/skyaware/",
|
|
||||||
"^/dump1090-fa/" => "/skyaware/"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Listen on port 8080 and serve the map there, too.
|
|
||||||
$SERVER["socket"] == ":8080" {
|
|
||||||
alias.url += (
|
|
||||||
"/data/" => "/run/dump1090-fa/",
|
|
||||||
"/data-978/" => "/run/skyaware978/",
|
|
||||||
"/" => "/usr/share/dump1090-fa/html/"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add CORS header
|
# Add CORS header
|
||||||
server.modules += ( "mod_setenv" )
|
server.modules += ( "mod_setenv" )
|
||||||
$HTTP["url"] =~ "^/dump1090-fa/data/.*\.json$" {
|
$HTTP["url"] =~ "^/dump1090-fa/data/.*\.json$" {
|
||||||
|
|
@ -60,8 +48,8 @@ $HTTP["url"] =~ "^/dump1090-fa/data/.*\.json$" {
|
||||||
# ssl.honor-cipher-order = "enable"
|
# ssl.honor-cipher-order = "enable"
|
||||||
# ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
|
# ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
|
||||||
# ssl.use-sslv2 = "disable"
|
# ssl.use-sslv2 = "disable"
|
||||||
# ssl.use-sslv3 = "disable"
|
# ssl.use-sslv3 = "disable"
|
||||||
#
|
#
|
||||||
# alias.url += (
|
# alias.url += (
|
||||||
# "/data/" => "/run/dump1090-fa/",
|
# "/data/" => "/run/dump1090-fa/",
|
||||||
# "/" => "/usr/share/dump1090-fa/html/"
|
# "/" => "/usr/share/dump1090-fa/html/"
|
||||||
|
|
@ -75,4 +63,3 @@ $HTTP["url"] =~ "^/dump1090-fa/data/.*\.json$" {
|
||||||
# url.redirect = (".*" => "https://%0$0")
|
# url.redirect = (".*" => "https://%0$0")
|
||||||
# }
|
# }
|
||||||
#}
|
#}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
# Allows access to the static files that provide the dump1090 map view,
|
||||||
|
# and also to the dynamically-generated json parts that contain aircraft
|
||||||
|
# data and are periodically written by the dump1090 daemon.
|
||||||
|
|
||||||
|
# Enable alias module
|
||||||
|
#
|
||||||
|
## This module is normally already enabled in lighttpd, so you should not
|
||||||
|
## need to uncommment this line.
|
||||||
|
## There are some cases (e.g. when installing this on a Raspberry Pi
|
||||||
|
## that runs PiHole) in which the module has been removed from the
|
||||||
|
## default configuration, and the dump1090-fa web interface no longer
|
||||||
|
## loads properly.
|
||||||
|
## If this is what you are experiencing, or if you see messages in your
|
||||||
|
## error log like:
|
||||||
|
## (server.c.1493) WARNING: unknown config-key: alias.url (ignored)
|
||||||
|
## then uncommenting this line and then restarting lighttpd could fix
|
||||||
|
## the issue.
|
||||||
|
## This is not enabled by default as standard lighttpd will not start if
|
||||||
|
## modules are loaded multiple times.
|
||||||
|
#
|
||||||
|
# server.modules += ( "mod_alias" )
|
||||||
|
|
||||||
|
alias.url += (
|
||||||
|
"/skyaware/data/" => "/run/dump1090-fa/",
|
||||||
|
"/skyaware/data-978/" => "/run/skyaware978/",
|
||||||
|
"/skyaware/" => "/usr/share/skyaware/html/"
|
||||||
|
)
|
||||||
|
|
||||||
|
# redirect the slash-less URL
|
||||||
|
url.redirect += (
|
||||||
|
"^/skyaware$" => "/skyaware/"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Listen on port 8080 and serve the map there, too.
|
||||||
|
$SERVER["socket"] == ":8080" {
|
||||||
|
alias.url += (
|
||||||
|
"/data/" => "/run/dump1090-fa/",
|
||||||
|
"/data-978/" => "/run/skyaware978/",
|
||||||
|
"/" => "/usr/share/skyaware/html/"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add CORS header
|
||||||
|
server.modules += ( "mod_setenv" )
|
||||||
|
$HTTP["url"] =~ "^/skyaware/data/.*\.json$" {
|
||||||
|
setenv.set-response-header = ( "Access-Control-Allow-Origin" => "*" )
|
||||||
|
}
|
||||||
|
|
||||||
|
# Uncomment this section to enable SSL traffic (HTTPS) - especially useful
|
||||||
|
# for .dev domains
|
||||||
|
## Listen on 8443 for SSL connections
|
||||||
|
#server.modules += ( "mod_openssl" )
|
||||||
|
#$HTTP["host"] == "piaware.example.com" {
|
||||||
|
# $SERVER["socket"] == ":8443" {
|
||||||
|
# ssl.engine = "enable"
|
||||||
|
# ssl.pemfile = "/etc/ssl/certs/combined.pem"
|
||||||
|
# ssl.ca-file = "/etc/ssl/certs/fullchain.cer"
|
||||||
|
# ssl.honor-cipher-order = "enable"
|
||||||
|
# ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
|
||||||
|
# ssl.use-sslv2 = "disable"
|
||||||
|
# ssl.use-sslv3 = "disable"
|
||||||
|
#
|
||||||
|
# alias.url += (
|
||||||
|
# "/data/" => "/run/dump1090-fa/",
|
||||||
|
# "/" => "/usr/share/dump1090-fa/html/"
|
||||||
|
# )
|
||||||
|
# }
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
## Redirect HTTP to HTTPS
|
||||||
|
#$HTTP["scheme"] == "http" {
|
||||||
|
# $HTTP["host"] =~ ".*" {
|
||||||
|
# url.redirect = (".*" => "https://%0$0")
|
||||||
|
# }
|
||||||
|
#}
|
||||||
|
|
@ -113,6 +113,7 @@ static void modesInitConfig(void) {
|
||||||
Modes.gain = MODES_MAX_GAIN;
|
Modes.gain = MODES_MAX_GAIN;
|
||||||
Modes.freq = MODES_DEFAULT_FREQ;
|
Modes.freq = MODES_DEFAULT_FREQ;
|
||||||
Modes.check_crc = 1;
|
Modes.check_crc = 1;
|
||||||
|
Modes.fix_df = 1;
|
||||||
Modes.net_heartbeat_interval = MODES_NET_HEARTBEAT_INTERVAL;
|
Modes.net_heartbeat_interval = MODES_NET_HEARTBEAT_INTERVAL;
|
||||||
Modes.interactive_display_ttl = MODES_INTERACTIVE_DISPLAY_TTL;
|
Modes.interactive_display_ttl = MODES_INTERACTIVE_DISPLAY_TTL;
|
||||||
Modes.json_interval = 1000;
|
Modes.json_interval = 1000;
|
||||||
|
|
@ -334,6 +335,7 @@ static void showHelp(void)
|
||||||
"--fix Enable single-bit error correction using CRC\n"
|
"--fix Enable single-bit error correction using CRC\n"
|
||||||
"--fix-2bit Enable two-bit error correction using CRC (use with caution)\n"
|
"--fix-2bit Enable two-bit error correction using CRC (use with caution)\n"
|
||||||
"--no-fix Disable error correction using CRC\n"
|
"--no-fix Disable error correction using CRC\n"
|
||||||
|
"--no-fix-df Disable error correction of the DF message field (reduces CPU requirements)\n"
|
||||||
"--no-crc-check Disable messages with broken CRC (discouraged)\n"
|
"--no-crc-check Disable messages with broken CRC (discouraged)\n"
|
||||||
"--mlat display raw messages in Beast ascii mode\n"
|
"--mlat display raw messages in Beast ascii mode\n"
|
||||||
"--stats With --ifile print stats at exit. No other output\n"
|
"--stats With --ifile print stats at exit. No other output\n"
|
||||||
|
|
@ -547,6 +549,8 @@ int main(int argc, char **argv) {
|
||||||
Modes.nfix_crc = 2;
|
Modes.nfix_crc = 2;
|
||||||
} else if (!strcmp(argv[j],"--no-fix")) {
|
} else if (!strcmp(argv[j],"--no-fix")) {
|
||||||
Modes.nfix_crc = 0;
|
Modes.nfix_crc = 0;
|
||||||
|
} else if (!strcmp(argv[j],"--no-fix-df")) {
|
||||||
|
Modes.fix_df = 0;
|
||||||
} else if (!strcmp(argv[j],"--no-crc-check")) {
|
} else if (!strcmp(argv[j],"--no-crc-check")) {
|
||||||
Modes.check_crc = 0;
|
Modes.check_crc = 0;
|
||||||
} else if (!strcmp(argv[j],"--phase-enhance")) {
|
} else if (!strcmp(argv[j],"--phase-enhance")) {
|
||||||
|
|
@ -619,7 +623,7 @@ int main(int argc, char **argv) {
|
||||||
} else if (!strcmp(argv[j],"--hae") || !strcmp(argv[j],"--gnss")) {
|
} else if (!strcmp(argv[j],"--hae") || !strcmp(argv[j],"--gnss")) {
|
||||||
Modes.use_gnss = 1;
|
Modes.use_gnss = 1;
|
||||||
} else if (!strcmp(argv[j],"--aggressive")) {
|
} else if (!strcmp(argv[j],"--aggressive")) {
|
||||||
fprintf(stderr, "warning: --aggressive not supported in this build, option ignored (consider '--fix --fix' instead)\n");
|
fprintf(stderr, "warning: --aggressive not supported in this build, option ignored (consider '--fix-2bit' instead)\n");
|
||||||
} else if (!strcmp(argv[j],"--interactive")) {
|
} else if (!strcmp(argv[j],"--interactive")) {
|
||||||
Modes.interactive = 1;
|
Modes.interactive = 1;
|
||||||
} else if (!strcmp(argv[j],"--interactive-ttl") && more) {
|
} else if (!strcmp(argv[j],"--interactive-ttl") && more) {
|
||||||
|
|
|
||||||
|
|
@ -324,6 +324,7 @@ struct _Modes { // Internal state
|
||||||
sdr_type_t sdr_type; // where are we getting data from?
|
sdr_type_t sdr_type; // where are we getting data from?
|
||||||
int nfix_crc; // Number of crc bit error(s) to correct
|
int nfix_crc; // Number of crc bit error(s) to correct
|
||||||
int check_crc; // Only display messages with good CRC
|
int check_crc; // Only display messages with good CRC
|
||||||
|
int fix_df; // Try to correct damage to the DF field, as well as the main message body
|
||||||
int raw; // Raw output format
|
int raw; // Raw output format
|
||||||
int mode_ac; // Enable decoding of SSR Modes A & C
|
int mode_ac; // Enable decoding of SSR Modes A & C
|
||||||
int mode_ac_auto; // allow toggling of A/C by Beast commands
|
int mode_ac_auto; // allow toggling of A/C by Beast commands
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ static void faupInitConfig(void) {
|
||||||
// Now initialise things that should not be 0/NULL to their defaults
|
// Now initialise things that should not be 0/NULL to their defaults
|
||||||
Modes.nfix_crc = 1;
|
Modes.nfix_crc = 1;
|
||||||
Modes.check_crc = 1;
|
Modes.check_crc = 1;
|
||||||
|
Modes.fix_df = 1;
|
||||||
Modes.net = 1;
|
Modes.net = 1;
|
||||||
Modes.net_heartbeat_interval = MODES_NET_HEARTBEAT_INTERVAL;
|
Modes.net_heartbeat_interval = MODES_NET_HEARTBEAT_INTERVAL;
|
||||||
Modes.maxRange = 1852 * 360; // 360NM default max range; this also disables receiver-relative positions
|
Modes.maxRange = 1852 * 360; // 360NM default max range; this also disables receiver-relative positions
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ void interactiveNoConnection(void) {
|
||||||
void interactiveShowData(void) {
|
void interactiveShowData(void) {
|
||||||
struct aircraft *a = Modes.aircrafts;
|
struct aircraft *a = Modes.aircrafts;
|
||||||
static uint64_t next_update;
|
static uint64_t next_update;
|
||||||
|
static bool need_clear = true;
|
||||||
uint64_t now = mstime();
|
uint64_t now = mstime();
|
||||||
char progress;
|
char progress;
|
||||||
char spinner[4] = "|/-\\";
|
char spinner[4] = "|/-\\";
|
||||||
|
|
@ -149,6 +150,10 @@ void interactiveShowData(void) {
|
||||||
if (!Modes.interactive)
|
if (!Modes.interactive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (need_clear) {
|
||||||
|
clear();
|
||||||
|
need_clear = false;
|
||||||
|
}
|
||||||
// Refresh screen every (MODES_INTERACTIVE_REFRESH_TIME) miliseconde
|
// Refresh screen every (MODES_INTERACTIVE_REFRESH_TIME) miliseconde
|
||||||
if (now < next_update)
|
if (now < next_update)
|
||||||
return;
|
return;
|
||||||
|
|
@ -349,10 +354,9 @@ void interactiveShowData(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rowMaxd > 3 && Modes.interactive_show_distance) {
|
if (rowMaxd > 3 && Modes.interactive_show_distance) {
|
||||||
mvprintw(rowMaxd, 52, "^");
|
mvprintw(rowMaxd, 52, "+");
|
||||||
}
|
}
|
||||||
|
|
||||||
mvprintw(rowMaxd, 52, "+");
|
|
||||||
mvprintw(rowMaxRSSI, 68, "+");
|
mvprintw(rowMaxRSSI, 68, "+");
|
||||||
mvprintw(rowMinRSSI, 68, "-");
|
mvprintw(rowMinRSSI, 68, "-");
|
||||||
|
|
||||||
|
|
|
||||||
9
mode_s.c
9
mode_s.c
|
|
@ -268,8 +268,13 @@ static int correctMessage(const unsigned char *in, unsigned char *out)
|
||||||
const unsigned uncorrected_df = getbits(in, 1, 5);
|
const unsigned uncorrected_df = getbits(in, 1, 5);
|
||||||
const uint32_t df_bit = 1 << uncorrected_df;
|
const uint32_t df_bit = 1 << uncorrected_df;
|
||||||
|
|
||||||
|
// Select the right bitset based on the maximum number of bit errors in the DF field that we could correct.
|
||||||
|
// nb: strictly speaking, --no-fix-df doesn't _entirely_ disable correction of the DF field when nfix_crc == 2
|
||||||
|
// (DF17 could be corrected to DF18 or vice versa), but it does disable the CPU hungry part of it.
|
||||||
|
const unsigned fix_df_bits = (Modes.fix_df ? Modes.nfix_crc : 0);
|
||||||
|
|
||||||
struct errorinfo *long_ei = NULL;
|
struct errorinfo *long_ei = NULL;
|
||||||
if (df_correctable_long[Modes.nfix_crc] & df_bit) {
|
if (df_correctable_long[fix_df_bits] & df_bit) {
|
||||||
uint32_t long_syndrome = modesChecksum(in, MODES_LONG_MSG_BITS);
|
uint32_t long_syndrome = modesChecksum(in, MODES_LONG_MSG_BITS);
|
||||||
if (isLongPIMessage(in) && long_syndrome == 0) {
|
if (isLongPIMessage(in) && long_syndrome == 0) {
|
||||||
// DF17/18 message with correct checksum
|
// DF17/18 message with correct checksum
|
||||||
|
|
@ -281,7 +286,7 @@ static int correctMessage(const unsigned char *in, unsigned char *out)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct errorinfo *short_ei = NULL;
|
struct errorinfo *short_ei = NULL;
|
||||||
if (df_correctable_short[Modes.nfix_crc] & df_bit) {
|
if (df_correctable_short[fix_df_bits] & df_bit) {
|
||||||
uint32_t short_syndrome = modesChecksum(in, MODES_SHORT_MSG_BITS);
|
uint32_t short_syndrome = modesChecksum(in, MODES_SHORT_MSG_BITS);
|
||||||
if (isShortPIMessage(in) && (short_syndrome & 0xFFFF80) == 0) {
|
if (isShortPIMessage(in) && (short_syndrome & 0xFFFF80) == 0) {
|
||||||
// DF11 message with correct checksum
|
// DF11 message with correct checksum
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ Syntax: <ip_address>/dump1090-fa/?parameter=value
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
http://<ip_address>/dump1090-fa/?sidebar=hide
|
http://192.0.0.1/dump1090-fa/?sidebar=hide
|
||||||
|
|
||||||
http://<ip_address>/dump1090-fa/?altitudeChart=hide
|
http://192.0.0.1/dump1090-fa/?altitudeChart=hide
|
||||||
|
|
||||||
http://<ip_address>/dump1090-fa/?rangeRings=hide
|
http://192.0.0.1/dump1090-fa/?rangeRings=hide
|
||||||
|
|
||||||
http://<ip_address>/dump1090-fa/?ringCount=3&ringBaseDistance=100&ringInterval=50
|
http://192.0.0.1/dump1090-fa/?ringCount=3?ringBaseDistance=100?ringInterval=50
|
||||||
|
|
||||||
| Parameter | Possible Values |
|
| Parameter | Possible Values |
|
||||||
| :---------: | :---------: |
|
| :---------: | :---------: |
|
||||||
|
|
@ -31,7 +31,7 @@ Examples:
|
||||||
| rangeRings | show/hide |
|
| rangeRings | show/hide |
|
||||||
| ringCount | integer |
|
| ringCount | integer |
|
||||||
| ringBaseDistance | integer |
|
| ringBaseDistance | integer |
|
||||||
| ringInterval | integer |
|
| ringInteval | integer |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,8 +125,3 @@ BingMapsAPIKey = null;
|
||||||
// This is not polished yet (and so is disabled by default),
|
// This is not polished yet (and so is disabled by default),
|
||||||
// currently it's just a data dump of the new fields with no UX work.
|
// currently it's just a data dump of the new fields with no UX work.
|
||||||
ExtendedData = false;
|
ExtendedData = false;
|
||||||
|
|
||||||
DefaultMaxAltitudeFilter = 65000
|
|
||||||
DefaultMinAltitudeFilter = 0
|
|
||||||
DefaultMaxSpeedFilter = 1000
|
|
||||||
DefaultMinSpeedFilter = 0
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
{"01001":{"r":"V5-NAM","t":"F900"},"01028":{"r":"V5-NMF","t":"A343"},"01029":{"r":"V5-NME","t":"A343"},"0103F":{"r":"V5-GON"},"02031":{"r":"E3-AAQ","t":"B762"}}
|
{"01001":{"r":"V5-NAM","t":"F900"},"01028":{"r":"V5-NMF","t":"A343"},"01029":{"r":"V5-NME","t":"A343"},"02031":{"r":"E3-AAQ","t":"B762"}}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
||||||
{"00007":{"r":"EK-32011","t":"A319"},"0000B":{"r":"EK-32003","t":"A320"},"0000C":{"r":"EK-32008","t":"A320"},"00010":{"r":"EK-73736","t":"B735"},"00013":{"r":"EK-11001","t":"AN12"},"00023":{"r":"EK-73786","t":"B737"},"0002F":{"r":"EK-12104","t":"AN12"},"0003C":{"r":"EK-RA01","t":"A319"},"0004A":{"r":"EK-32007","t":"A319"},"00053":{"r":"EK-FAB","t":"B734"},"00059":{"r":"EK-95015","t":"SU95"},"0005A":{"r":"EK-95016","t":"SU95"},"0005F":{"r":"EW-412TH","t":"IL76"},"00076":{"r":"EK-74723","t":"B742"},"00079":{"r":"EK-74798","t":"B742"},"00087":{"r":"EK-74799","t":"B742"},"0009D":{"r":"EK-73775","t":"B735"},"0009F":{"r":"EK-73772","t":"B735"},"000A2":{"r":"EK-SHA","t":"B735"},"00801":{"r":"4K8888","t":"A319"},"00803":{"r":"4KAZ03","t":"A319"},"00804":{"r":"4KAZ04","t":"A319"},"00805":{"r":"4KAZ05","t":"A319"},"00806":{"r":"4KAI06","t":"GLF5"},"00807":{"r":"4KAI07","t":"A320"},"00808":{"r":"4K-MEK8","t":"GLF5"},"0080C":{"r":"4KAZ12","t":"B752"},"00826":{"r":"4K-AZ38","t":"B752"},"00828":{"r":"4KAZ40","t":"IL76"},"00829":{"r":"4KAZ41","t":"IL76"},"0082B":{"r":"4K-AZ43","t":"B752"},"00836":{"r":"4K-AZ54","t":"A320"},"00838":{"r":"4K-AZ56","t":"AN12"},"0083C":{"r":"4KAZ60","t":"IL76"},"00840":{"r":"4KAZ64","t":"E190"},"00841":{"r":"4KAZ65","t":"E190"},"00842":{"r":"4KAZ66","t":"E190"},"00843":{"r":"4KAZ67","t":"E190"},"0084D":{"r":"4KAZ77","t":"A320"},"0084E":{"r":"4KAZ78","t":"A320"},"0084F":{"r":"4KAZ79","t":"A320"},"00850":{"r":"4KAZ80","t":"A320"},"00851":{"r":"4KAZ81","t":"B763"},"00852":{"r":"4KAZ82","t":"B763"},"00853":{"r":"4KAZ83","t":"A320"},"00854":{"r":"4KAZ84","t":"A320"},"00855":{"r":"4KAZ85","t":"A345"},"00856":{"r":"4KAZ86","t":"A345"},"00858":{"r":"4KAZ88","t":"GALX"},"00864":{"r":"4KAZ100","t":"IL76"},"00865":{"r":"4KAZ101","t":"IL76"},"008D0":{"r":"4K-AZ208","t":"G280"},"00918":{"r":"4K-AZ280","t":"G280"},"00B20":{"r":"4KSW800","t":"B744"},"00B21":{"r":"4KSW888","t":"B744"},"00B70":{"r":"4K-SW880","t":"B763"},"00B78":{"r":"4KAZ888","t":"GLF4"},"00BB9":{"r":"4K-SW808","t":"B763"},"00BBE":{"r":"4KSW008","t":"B744"},"00BBF":{"r":"4KAZ11","t":"B752"},"00BC0":{"r":"4KAI08","t":"A346"},"00BC4":{"r":"4KAI88","t":"GLF6"},"00BC6":{"r":"4K-LAR","t":"GLF4"},"00BC7":{"r":"4KJJ888","t":"GLF5"},"00BE8":{"r":"4KAI01","t":"B763"},"00BE9":{"r":"4KAI001","t":"B77L"},"01097":{"r":"EX-37008"},"010F2":{"r":"EX-32001","t":"A320"},"010F4":{"r":"EX-37001","t":"B733"},"010F9":{"r":"EX-73401","t":"B734"},"01839":{"r":"EZ-A779","t":"B77L"},"0183A":{"r":"EZ-A778","t":"B77L"},"0183B":{"r":"EZ-A017","t":"B738"},"0183C":{"r":"EZ-A016","t":"B738"},"0183D":{"r":"EZ-A015","t":"B738"},"01842":{"r":"EZ-A010","t":"B752"},"01846":{"r":"EZ-A011","t":"B752"},"01847":{"r":"EZ-A012","t":"B752"},"01849":{"r":"EZ-A014","t":"B752"},"01854":{"r":"EZ-A106","t":"B712"},"01855":{"r":"EZ-A107","t":"B712"},"01858":{"r":"EZ-A004","t":"B738"},"01859":{"r":"EZ-A005","t":"B738"},"0185A":{"r":"EZ-A007","t":"B737"},"0185E":{"r":"EZ-A006","t":"B737"},"0185F":{"r":"EZ-A008","t":"B737"},"01860":{"r":"EZ-A009","t":"B737"},"01861":{"r":"EZ-A777","t":"B772"},"80001":{"r":"A5-RGF","t":"A319"},"80002":{"r":"A5-RGG","t":"A319"},"82209":{"r":"JU-1011","t":"B763"},"8220A":{"r":"JU-1012","t":"B763"},"83037":{"r":"UP-B5701","t":"B752"},"83065":{"r":"UP-Y4204","t":"YK42"},"83088":{"r":"UP-I7620","t":"IL76"},"830A5":{"r":"UP-A2001","t":"A320"},"830BD":{"r":"UP-CS302","t":"C25B"},"830C2":{"r":"UP-K3501","t":"B350"},"830ED":{"r":"UP-A3001","t":"A332"},"830FE":{"r":"UP-K3502","t":"B350"},"831E8":{"r":"UP-T5409","t":"T154"}}
|
{"00007":{"r":"EK-32011","t":"A319"},"0000A":{"r":"EK-32002","t":"A320"},"0000B":{"r":"EK-32003","t":"A320"},"0000C":{"r":"EK-32008","t":"A320"},"00010":{"r":"EK-73736","t":"B735"},"00013":{"r":"EK-11001","t":"AN12"},"00023":{"r":"EK-73786","t":"B737"},"0002F":{"r":"EK-12104","t":"AN12"},"0003C":{"r":"EK-RA01","t":"A319"},"0004A":{"r":"EK-32007","t":"A319"},"00059":{"r":"EK-95015","t":"SU95"},"0005A":{"r":"EK-95016","t":"SU95"},"0005F":{"r":"EW-412TH","t":"IL76"},"00076":{"r":"EK-74723","t":"B742"},"00079":{"r":"EK-74798","t":"B742"},"00087":{"r":"EK-74799","t":"B742"},"0009D":{"r":"EK-73775","t":"B735"},"0009F":{"r":"EK-73772","t":"B735"},"00801":{"r":"4K8888","t":"A319"},"00803":{"r":"4KAZ03","t":"A319"},"00804":{"r":"4KAZ04","t":"A319"},"00805":{"r":"4KAZ05","t":"A319"},"00806":{"r":"4KAI06","t":"GLF5"},"00807":{"r":"4KAI07","t":"A320"},"00808":{"r":"4K-MEK8","t":"GLF5"},"0080C":{"r":"4KAZ12","t":"B752"},"00826":{"r":"4K-AZ38","t":"B752"},"00828":{"r":"4KAZ40","t":"IL76"},"00829":{"r":"4KAZ41","t":"IL76"},"0082B":{"r":"4K-AZ43","t":"B752"},"00836":{"r":"4K-AZ54","t":"A320"},"00838":{"r":"4K-AZ56","t":"AN12"},"0083C":{"r":"4KAZ60","t":"IL76"},"00840":{"r":"4KAZ64","t":"E190"},"00841":{"r":"4KAZ65","t":"E190"},"00842":{"r":"4KAZ66","t":"E190"},"00843":{"r":"4KAZ67","t":"E190"},"0084D":{"r":"4KAZ77","t":"A320"},"0084E":{"r":"4KAZ78","t":"A320"},"0084F":{"r":"4KAZ79","t":"A320"},"00850":{"r":"4KAZ80","t":"A320"},"00851":{"r":"4KAZ81","t":"B763"},"00852":{"r":"4KAZ82","t":"B763"},"00853":{"r":"4KAZ83","t":"A320"},"00854":{"r":"4KAZ84","t":"A320"},"00855":{"r":"4KAZ85","t":"A345"},"00856":{"r":"4KAZ86","t":"A345"},"00858":{"r":"4KAZ88","t":"GALX"},"00864":{"r":"4KAZ100","t":"IL76"},"00865":{"r":"4KAZ101","t":"IL76"},"008D0":{"r":"4K-AZ208","t":"G280"},"00918":{"r":"4K-AZ280","t":"G280"},"00B20":{"r":"4KSW800","t":"B744"},"00B21":{"r":"4KSW888","t":"B744"},"00B70":{"r":"4K-SW880","t":"B763"},"00B78":{"r":"4KAZ888","t":"GLF4"},"00BB9":{"r":"4K-SW808","t":"B763"},"00BBE":{"r":"4KSW008","t":"B744"},"00BBF":{"r":"4KAZ11","t":"B752"},"00BC0":{"r":"4KAI08","t":"A346"},"00BC4":{"r":"4KAI88","t":"GLF6"},"00BC6":{"r":"4K-LAR","t":"GLF4"},"00BC7":{"r":"4KJJ888","t":"GLF5"},"00BE8":{"r":"4KAI01","t":"B763"},"00BE9":{"r":"4KAI001","t":"B77L"},"01097":{"r":"EX-37008"},"010F2":{"r":"EX-32001","t":"A320"},"010F4":{"r":"EX-37001","t":"B733"},"010F9":{"r":"EX-73401","t":"B734"},"01839":{"r":"EZ-A779","t":"B77L"},"0183A":{"r":"EZ-A778","t":"B77L"},"0183B":{"r":"EZ-A017","t":"B738"},"0183C":{"r":"EZ-A016","t":"B738"},"0183D":{"r":"EZ-A015","t":"B738"},"01842":{"r":"EZ-A010","t":"B752"},"01846":{"r":"EZ-A011","t":"B752"},"01847":{"r":"EZ-A012","t":"B752"},"01849":{"r":"EZ-A014","t":"B752"},"01854":{"r":"EZ-A106","t":"B712"},"01855":{"r":"EZ-A107","t":"B712"},"01858":{"r":"EZ-A004","t":"B738"},"01859":{"r":"EZ-A005","t":"B738"},"0185A":{"r":"EZ-A007","t":"B737"},"0185E":{"r":"EZ-A006","t":"B737"},"0185F":{"r":"EZ-A008","t":"B737"},"01860":{"r":"EZ-A009","t":"B737"},"01861":{"r":"EZ-A777","t":"B772"},"80001":{"r":"A5-RGF","t":"A319"},"80002":{"r":"A5-RGG","t":"A319"},"82209":{"r":"JU-1011","t":"B763"},"8220A":{"r":"JU-1012","t":"B763"},"83037":{"r":"UP-B5701","t":"B752"},"83065":{"r":"UP-Y4204","t":"YK42"},"83088":{"r":"UP-I7620","t":"IL76"},"830A5":{"r":"UP-A2001","t":"A320"},"830BD":{"r":"UP-CS302","t":"C25B"},"830C2":{"r":"UP-K3501","t":"B350"},"830ED":{"r":"UP-A3001","t":"A332"},"830FE":{"r":"UP-K3502","t":"B350"},"831E8":{"r":"UP-T5409","t":"T154"}}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue