adsb-1090/scripts/detect_dongles.sh

54 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════════════════════════
# detect_dongles.sh v1.1 — source de vérité unique sur les récepteurs ADS-B
# Emplacement : /data/adsb/scripts/detect_dongles.sh
#
# Se source (ne s'exécute pas). Fournit :
# SLOTS[] catalogue statique des slots (ports, conteneurs, profile)
# MAX_RECEIVERS nombre de slots disponibles
# detect_serials() un numéro de série par ligne, ordre d'énumération USB
# detect_count() nombre de dongles présents
# slot_ports() calcule beast/raw/sbs pour un numéro de slot
#
# v1.1 (31/07/2026) : SLOTS remonté ici pour être partagé par check_adsb.sh et
# watchdog_readsb.sh — la duplication du catalogue entre les deux scripts était
# une source de désynchronisation.
#
# detect_serials fonctionne même si un dongle est déjà « claim » par un
# conteneur : rtl_test énumère AVANT de tenter l'ouverture, et l'erreur
# usb_claim_interface -6 qui suit n'affecte pas la liste produite.
# ═══════════════════════════════════════════════════════════════════════════════
# slot:port_tar1090:ctn_readsb:ctn_tar1090:ctn_adsb2pg:profile
SLOTS=(
"1:8090:adsb-readsb:adsb-tar1090:adsb-adsb2pg:rx1"
"2:8091:adsb-readsb2:adsb-tar10902:adsb-adsb2pg2:rx2"
"3:8092:adsb-readsb3:adsb-tar10903:adsb-adsb2pg3:rx3"
)
MAX_RECEIVERS=${#SLOTS[@]}
detect_serials() {
if command -v rtl_test >/dev/null 2>&1; then
rtl_test -t 2>&1 \
| sed -n 's/^[[:space:]]*[0-9]\+:.*SN:[[:space:]]*\([0-9A-Za-z]\+\).*/\1/p'
else
local n i
n=$(lsusb 2>/dev/null | grep -ci 'RTL2838\|RTL2832')
for ((i = 1; i <= n; i++)); do echo "unknown${i}"; done
fi
}
detect_count() { detect_serials | grep -c . ; }
# slot_ports <n> → écrit "beast raw sbs"
slot_ports() {
local n=$1
echo "$((30005 + (n - 1) * 10)) $((30002 + (n - 1) * 10)) $((30003 + (n - 1) * 10))"
}
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
mapfile -t _s < <(detect_serials)
echo "${#_s[@]} dongle(s) RTL-SDR détecté(s)"
for i in "${!_s[@]}"; do echo " slot rx$((i + 1)) → SN ${_s[$i]}"; done
fi