Files
Pluto-SDR/scripts/test_file_link.sh
Maxim 4bf1a6df7b docs: group-FEC 16+2 задокументирован, рабочая точка соука -p 4000 (§12.7)
- README §12.7 — журнал этапа (расчёт 16+2, таблица прогонов, находка overrun)
- README §10 — перенумерация: п.6=group-FEC, ARQ/FDD→п.7, туннель→п.8, видео→п.9
- README §9 — техдолг #6 обновлён (group-FEC закрывает симплекс-потери)
- docs/BENCHMARK.md, CLAUDE.md, test_file_link.sh — соук-точка -p 4000
- transmitter.c — снят -Wdiscarded-qualifiers на crc_generate_key (const-каст)
2026-07-15 09:48:26 +03:00

79 lines
4.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# test_file_link.sh — e2e-тест: файл → Pluto A → эфир → Pluto B → md5
# Использование: scripts/test_file_link.sh [ipA] [ipB] [размер_КБ]
# По умолчанию: адреса из toolchain.env, файл 1024 КБ, симплекс 915 МГц.
#
# ВНИМАНИЕ: сначала кабель + аттенюатор 3040 дБ (TX gain 40)!
set -euo pipefail
source "$(dirname "$0")/../toolchain.env"
A="${1:-$PLUTO_A}" # передатчик
B="${2:-$PLUTO_B}" # приёмник
SIZE_KB="${3:-1024}"
FREQ=915000000
RATE=1920000 # НЕ поднимать: бюджет CPU, docs/BENCHMARK.md
BW=1500000
TXGAIN="${TXGAIN:--30}" # OTA: переопредели, напр. TXGAIN=-20 scripts/test_file_link.sh
FEC="${FEC:-rs8}" # rs8 | none — фаза 3.2 гоняет сначала none, потом rs8
PAUSE="${PAUSE:-3000}" # пауза TX между кадрами, мкс. §12.6: `-p 3000` чист на
# коротких (≤1 МБ). §12.7: на 10 МБ-соуке ядро 0 срывается
# (~60 Overrun) — для длинных/group-FEC ставь PAUSE=4000.
# Ниже ~2500 — Overrun на ядре 0 сразу
GROUPFEC="${GROUPFEC:-1}" # 1 = групповой стирающий FEC 16+2 (§12.7): TX шлёт -G,
# RX автодетектит по hdr[11]. 0 = legacy (потери = дыры)
[ "$GROUPFEC" = 1 ] && GFLAG="-G" || GFLAG=""
# Group-FEC: +12.5% overhead → ~107 КБ/с (SIZE_KB/85); legacy — ~120 (SIZE_KB/95)
if [ "$GROUPFEC" = 1 ]; then TIMEOUT=$(( SIZE_KB / 85 + 20 )); else TIMEOUT=$(( SIZE_KB / 95 + 20 )); fi
if command -v sshpass >/dev/null; then
SSH=(sshpass -p "$PLUTO_PASS" ssh -o StrictHostKeyChecking=no)
SCP=(sshpass -p "$PLUTO_PASS" scp -O -o StrictHostKeyChecking=no)
else
SSH=(ssh); SCP=(scp -O)
echo "подсказка: apt install sshpass — и пароль вводить не придётся"
fi
echo "=== [1/5] Тестовый файл ${SIZE_KB} КБ ==="
dd if=/dev/urandom of=/tmp/link_test.bin bs=1024 count="$SIZE_KB" status=none
MD5_SRC=$(md5sum /tmp/link_test.bin | cut -d' ' -f1)
echo "md5: $MD5_SRC"
echo "=== [2/5] Заливка файла на Pluto A ($A) ==="
"${SCP[@]}" /tmp/link_test.bin "root@$A:/tmp/"
echo "=== [3/5] Старт приёмника на Pluto B ($B), таймаут ${TIMEOUT}с ==="
# busybox прошивки v0.38 без `timeout` → сторожевой sleep+kill на самой плате
"${SSH[@]}" "root@$B" \
"rm -f /tmp/out.bin; /tmp/receiver -f $FREQ -r $RATE \
-b $BW -c $FEC -u local: > /tmp/out.bin 2>/tmp/rx.log & \
RXP=\$!; (sleep $TIMEOUT; kill \$RXP 2>/dev/null) & wait \$RXP" &
RX_PID=$!
sleep 3 # дать RX прогреться до старта TX
echo "=== [4/5] Передача с Pluto A ==="
"${SSH[@]}" "root@$A" \
"cat /tmp/link_test.bin | /tmp/transmitter -f $FREQ -r $RATE -b $BW \
-g $TXGAIN -p $PAUSE -c $FEC $GFLAG -u local: 2>/tmp/tx.log"
sleep 3 # дохлебать хвост эфира
"${SSH[@]}" "root@$B" "killall receiver 2>/dev/null || true"
wait "$RX_PID" 2>/dev/null || true
echo "=== [5/5] Сверка ==="
MD5_DST=$("${SSH[@]}" "root@$B" "md5sum /tmp/out.bin 2>/dev/null | cut -d' ' -f1" || echo ет_файла")
SIZE_DST=$("${SSH[@]}" "root@$B" "wc -c < /tmp/out.bin 2>/dev/null" || echo 0)
echo "источник: $MD5_SRC ($((SIZE_KB*1024)) байт)"
echo "приёмник: $MD5_DST ($SIZE_DST байт)"
if [ "$MD5_SRC" = "$MD5_DST" ]; then
echo "РЕЗУЛЬТАТ: OK — файл передан без искажений"
else
echo "РЕЗУЛЬТАТ: FAIL"
echo "Диагностика (README §11):"
echo " - размер меньше исходного → потерянные кадры (нет ARQ, техдолг #6):"
echo " смотри лог RX и разрывы seq"
echo " - размер равен, md5 нет → техдолг #1 (header_len=12?) или #3"
echo " - размер 0 → RX не поймал ничего: частота/усиление/кабель"
"${SSH[@]}" "root@$B" "tail -5 /tmp/rx.log" || true
fi