From ec69b94544202f3b001753e7f6f1af859b8f10d5 Mon Sep 17 00:00:00 2001 From: Oliver Jowett Date: Mon, 19 Jul 2021 15:44:08 +0800 Subject: [PATCH] Overhaul of /etc/default/dump1090-fa Now we have specific config options for different features rather than just a big list of command-line options. You can still provide custom options via EXTRA_OPTIONS or OVERRIDE_OPTIONS. Also adds adaptive gain settings, and a "slow cpu" setting which can turn on cpu-reducing options automatically when a slower (armv6) CPU is in use. --- debian/dump1090-fa.default | 62 ++++++++++++++++++++++++++++-------- debian/dump1090-fa.service | 2 +- debian/start-dump1090-fa | 64 ++++++++++++++++++++++++++++++++++---- 3 files changed, 108 insertions(+), 20 deletions(-) diff --git a/debian/dump1090-fa.default b/debian/dump1090-fa.default index 12c3e31..21bb492 100644 --- a/debian/dump1090-fa.default +++ b/debian/dump1090-fa.default @@ -2,20 +2,56 @@ # This is sourced by /usr/share/dump1090-fa/start-dump1090-fa as a # shellscript fragment. -# If you are using a PiAware sdcard image, this config file is regenerated -# on boot based on the contents of piaware-config.txt; any changes made to this -# file will be lost. - # dump1090-fa won't automatically start unless ENABLED=yes ENABLED=yes -RECEIVER_OPTIONS="--device-index 0 --gain -10 --ppm 0" -DECODER_OPTIONS="--max-range 360 --fix" -NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1300 --net-ro-interval 0.2 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005" -JSON_OPTIONS="--json-location-accuracy 1" +# SDR device type. Use "none" for a net-only configuration +RECEIVER=rtlsdr +# serial number or device index of device to use (only needed if there is more than one SDR connected) +RECEIVER_SERIAL= +# Initial receiver gain, in dB. If adaptive gain is enabled (see below) the actual gain +# may change over time +RECEIVER_GAIN=60 -# Use a machine-specific wisdom file if it exists -if [ -f /etc/dump1090-fa/wisdom.local ] -then - RECEIVER_OPTIONS="${RECEIVER_OPTIONS} --wisdom /etc/dump1090-fa/wisdom.local" -fi +# Adjust gain to try to achieve optimal dynamic range / noise floor? +ADAPTIVE_DYNAMIC_RANGE=yes +# Reduce gain when loud message bursts from nearby aircraft are seen? +ADAPTIVE_BURST=no +# Gain range to allow when changing gain, in dB (empty = no limit) +ADAPTIVE_MIN_GAIN= +ADAPTIVE_MAX_GAIN= + +# Turn on options to reduce load on slower CPUs, at the expense of slightly worse decoder performance. +# Setting "auto" will enable these options only if the CPU appears to be a slow CPU (currently this +# means armv6 only, e.g. Pi Zero) +SLOW_CPU=auto +# Local wisdom file used to select DSP implementations; uses built-in ranking if the file is missing +WISDOM=/etc/dump1090-fa/wisdom.local + +# Correct CRC errors where possible +ERROR_CORRECTION=yes + +# Receiver location, used for some types of position decoding. Provide the location as +# signed decimal degrees. If not given here, dump1090 will also try to read a receiver +# location from /var/cache/piaware/location.env (written automatically by PiAware, if installed) +RECEIVER_LAT= +RECEIVER_LON= +# Maximum range, in NM. Positions more distant than this are ignored. No limit if not set. +MAX_RANGE=360 + +# Network ports to listen on for connections +NET_RAW_INPUT_PORTS= +NET_RAW_OUTPUT_PORTS=30002 +NET_SBS_OUTPUT_PORTS=30003 +NET_BEAST_INPUT_PORTS=30004,30104 +NET_BEAST_OUTPUT_PORTS=30005 + +# Accuracy of location written to JSON output +JSON_LOCATION_ACCURACY=1 + +# Additional options can be added here: +EXTRA_OPTIONS="" + +# If OVERRIDE_OPTIONS is set, only those options are used; all other options +# in this config file are ignored. +OVERRIDE_OPTIONS="" diff --git a/debian/dump1090-fa.service b/debian/dump1090-fa.service index f05607d..617276a 100644 --- a/debian/dump1090-fa.service +++ b/debian/dump1090-fa.service @@ -10,7 +10,7 @@ After=network.target User=dump1090 RuntimeDirectory=dump1090-fa RuntimeDirectoryMode=0755 -ExecStart=/usr/share/dump1090-fa/start-dump1090-fa --write-json %t/dump1090-fa --quiet +ExecStart=/usr/share/dump1090-fa/start-dump1090-fa --write-json %t/dump1090-fa SyslogIdentifier=dump1090-fa Type=simple Restart=on-failure diff --git a/debian/start-dump1090-fa b/debian/start-dump1090-fa index 37186fe..f8b0507 100755 --- a/debian/start-dump1090-fa +++ b/debian/start-dump1090-fa @@ -15,19 +15,71 @@ then . /var/cache/piaware/location.env fi -if [ "x$ENABLED" != "xyes" ] +if [ "$ENABLED" != "yes" ] then echo "dump1090-fa not enabled in /etc/default/dump1090-fa" >&2 exit 64 fi -if [ -n "$PIAWARE_LAT" -a -n "$PIAWARE_LON" ] +# process options + +is_slow_cpu() { + case "$SLOW_CPU" in + yes) return 0 ;; + auto) + case $(uname -m) in + armv6*) return 0 ;; + *) return 1 ;; + esac + ;; + *) return 1 ;; + esac +} + +OPTS="--quiet" + +if [ "${RECEIVER:-none}" = "none" ] then - POSITION="--lat $PIAWARE_LAT --lon $PIAWARE_LON" + OPTS="$OPTS --device-type none" +else + if [ -n "$RECEIVER" ]; then OPTS="$OPTS --device-type $RECEIVER"; fi + if [ -n "$RECEIVER_SERIAL" ]; then OPTS="$OPTS --device-index $RECEIVER_SERIAL"; fi + if [ -n "$RECEIVER_GAIN" ]; then OPTS="$OPTS --gain $RECEIVER_GAIN"; fi + if [ -n "$WISDOM" -a -f "$WISDOM" ]; then OPTS="$OPTS --wisdom $WISDOM"; fi + + if [ "$ADAPTIVE_DYNAMIC_RANGE" = "yes" ]; then OPTS="$OPTS --adaptive-range"; fi + if [ "$ADAPTIVE_BURST" = "yes" ]; then OPTS="$OPTS --adaptive-burst"; fi + if [ -n "$ADAPTIVE_MIN_GAIN" ]; then OPTS="$OPTS --adaptive-min-gain $ADAPTIVE_MIN_GAIN"; fi + if [ -n "$ADAPTIVE_MAX_GAIN" ]; then OPTS="$OPTS --adaptive-max-gain $ADAPTIVE_MAX_GAIN"; fi + + if is_slow_cpu + then + OPTS="$OPTS --adaptive-duty-cycle 10 --no-fix-df" + fi fi -exec /usr/bin/dump1090-fa \ - $RECEIVER_OPTIONS $DECODER_OPTIONS $NET_OPTIONS $JSON_OPTIONS $POSITION \ - "$@" +if [ "$ERROR_CORRECTION" = "yes" ]; then OPTS="$OPTS --fix"; fi + +if [ -n "$RECEIVER_LAT" -a -n "$RECEIVER_LON" ]; then + OPTS="$OPTS --lat $RECEIVER_LAT --lon $RECEIVER_LON" +elif [ -n "$PIAWARE_LAT" -a -n "$PIAWARE_LON" ]; then + OPTS="$OPTS --lat $PIAWARE_LAT --lon $PIAWARE_LON" +fi + +if [ -n "$MAX_RANGE" ]; then OPTS="$OPTS --max-range $MAX_RANGE"; fi + +if [ -n "$NET_RAW_INPUT_PORTS" ]; then OPTS="$OPTS --net-ri-port $NET_RAW_INPUT_PORTS"; fi +if [ -n "$NET_RAW_OUTPUT_PORTS" ]; then OPTS="$OPTS --net-ro-port $NET_RAW_OUTPUT_PORTS"; fi +if [ -n "$NET_SBS_OUTPUT_PORTS" ]; then OPTS="$OPTS --net-sbs-port $NET_SBS_OUTPUT_PORTS"; fi +if [ -n "$NET_BEAST_INPUT_PORTS" ]; then OPTS="$OPTS --net-bi-port $NET_BEAST_INPUT_PORTS"; fi +if [ -n "$NET_BEAST_OUTPUT_PORTS" ]; then OPTS="$OPTS --net-bo-port $NET_BEAST_OUTPUT_PORTS"; fi + +if [ -n "$JSON_LOCATION_ACCURACY" ]; then OPTS="$OPTS --json-location-accuracy $JSON_LOCATION_ACCURACY"; fi + +if [ -n "$EXTRA_OPTIONS" ]; then OPTS="$OPTS $EXTRA_OPTIONS"; fi + +if [ -n "$OVERRIDE_OPTIONS" ]; then OPTS="$OVERRIDE_OPTIONS"; fi + +exec /usr/bin/dump1090-fa $OPTS "$@" # exec failed, do not restart exit 64