Files
Pluto-SDR/scripts/test_file_link.sh
Maxim 7b28ac8bd3 docs: 3-стадийный RX завершён — рабочая точка -p 3000 (§12.6)
Результаты свипа/соука 3-стадийного конвейера:
- FQ drops=0 на всех паузах (вкл. -p 0) — RS на ядре 1 не узкое место
- рабочая точка -p 6000 → -p 3000 (вдвое), соук 10 МБ чист (PER 0.26%)
- throughput 90 → 120 КБ/с = ×1.36 (исправлено с ошибочных ×4–5/×2:
  эфир кадра 5.33 мс доминирует над паузой)
- эмпирическое колено ~2500 против модели p_min 1333 (джиттер, запас 2×)
README §12.6; BENCHMARK p_min факт; test default
PAUSE=3000, TIMEOUT под 120 КБ/с. Исправлены ссылки §10 п.5→п.6 (ARQ
переехал при перенумерации). PHY не менялся.
2026-07-14 15:07:23 +03:00

73 lines
3.7 KiB
Bash
Executable File
Raw 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 между кадрами, мкс. Рабочая точка 3-стадийного
# RX (§12.6): чисто, ~120 КБ/с. Ниже ~2500 — Overrun на ядре 0
TIMEOUT=$(( SIZE_KB / 80 + 20 )) # ~120 КБ/с на -p 3000 + запас (см. §12.6)
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 -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