54 lines
2.4 KiB
Bash
Executable File
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
|