Этап 1. Промежуточные результаты
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#define DEFAULT_PAUSE 2000 // Пауза между кадрами: 2000 мкс
|
||||
#define BUF_SAMPLES 16384 // Размер буфера в отсчётах
|
||||
#define MAX_PAYLOAD GF_CHUNK // 1024: размер чанка данных (== GF_CHUNK)
|
||||
#define FB_RX_GAIN 50.0 // Усиление RX обратного канала (ручное), §10 п.7
|
||||
|
||||
// Внешняя переменная флага завершения (определена в common.c)
|
||||
extern volatile sig_atomic_t stop;
|
||||
@@ -30,10 +31,11 @@ int main(int argc, char *argv[]) {
|
||||
float amp = DEFAULT_AMP;
|
||||
const char *uri = TX_URI_DEFAULT;
|
||||
int pause_us = DEFAULT_PAUSE, use_fec = 1, group_fec = 0;
|
||||
long long fb_freq = 0; // 0 = симплекс; иначе FDD, LO обратного RX
|
||||
|
||||
// Обработка аргументов командной строки
|
||||
int opt;
|
||||
while ((opt = getopt(argc, argv, "f:r:b:g:a:p:u:c:Gh")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "f:r:b:g:a:p:u:c:F:Gh")) != -1) {
|
||||
switch (opt) {
|
||||
case 'f': freq = atoll(optarg); break;
|
||||
case 'r': rate = atoll(optarg); break;
|
||||
@@ -43,6 +45,7 @@ int main(int argc, char *argv[]) {
|
||||
case 'p': pause_us = atoi(optarg); break;
|
||||
case 'u': uri = optarg; break;
|
||||
case 'c': use_fec = strcmp(optarg, "none") ? 1 : 0; break;
|
||||
case 'F': fb_freq = atoll(optarg); break;
|
||||
case 'G': group_fec = 1; break;
|
||||
case 'h':
|
||||
print_usage(argv[0], "ПЕРЕДАТЧИК");
|
||||
@@ -51,6 +54,7 @@ int main(int argc, char *argv[]) {
|
||||
fprintf(stderr, " -a АМПЛИТ. Амплитуда сигнала (по умолчанию: %.2f)\n", DEFAULT_AMP);
|
||||
fprintf(stderr, " -p ПАУЗА Пауза между кадрами в мкс (по умолчанию: %d)\n", DEFAULT_PAUSE);
|
||||
fprintf(stderr, " -G Групповой стирающий FEC 16+2 (§10 п.6)\n");
|
||||
fprintf(stderr, " -F ЧАСТОТА FDD: частота обратного RX в Гц (§10 п.7). Без -F — симплекс\n");
|
||||
fprintf(stderr, "\nОПТИМАЛЬНЫЙ ЗАПУСК:\n");
|
||||
fprintf(stderr, " cat test.bin | %s -f %lld -r %lld -b %lld -c rs8 > /dev/null\n",
|
||||
argv[0], DEFAULT_FREQ, DEFAULT_RATE, DEFAULT_BW);
|
||||
@@ -69,19 +73,30 @@ int main(int argc, char *argv[]) {
|
||||
fprintf(stderr, "Амплитуда: %.2f\n", amp);
|
||||
fprintf(stderr, "Пауза: %d мкс\n", pause_us);
|
||||
fprintf(stderr, "Group-FEC: %s\n", group_fec ? "16+2 (§10 п.6)" : "выкл");
|
||||
fprintf(stderr, "Дуплекс: %s\n", fb_freq
|
||||
? "FDD (обратный RX настроен, трафик — этап 2)" : "симплекс");
|
||||
if (fb_freq) fprintf(stderr, "Обр. RX LO: %.1f МГц\n", fb_freq / 1e6);
|
||||
fprintf(stderr, "URI: %s\n", uri);
|
||||
fprintf(stderr, "═══════════════════════════════════════════════════\n");
|
||||
|
||||
// Инициализация PlutoSDR
|
||||
// Инициализация PlutoSDR. С -F открываем оба cf-девайса и настраиваем оба
|
||||
// LO (обратный RX пока только сконфигурирован; приём по нему — этап 2).
|
||||
struct iio_context *ctx = NULL;
|
||||
struct iio_device *phy = NULL, *tx = NULL;
|
||||
if (pluto_init(uri, &ctx, &phy, &tx, 1) != 0) return 1;
|
||||
|
||||
// Настройка радиотракта
|
||||
if (pluto_configure(phy, freq, rate, bw, gain, 1) != 0) {
|
||||
LOG_ERROR("Настройка радиотракта не удалась");
|
||||
iio_context_destroy(ctx);
|
||||
return 1;
|
||||
struct iio_device *phy = NULL, *tx = NULL, *rxfb = NULL;
|
||||
if (fb_freq) {
|
||||
if (pluto_init_fdd(uri, &ctx, &phy, &tx, &rxfb) != 0) return 1;
|
||||
if (pluto_configure_fdd(phy, freq, fb_freq, rate, bw, gain, FB_RX_GAIN) != 0) {
|
||||
LOG_ERROR("Настройка FDD-радиотракта не удалась");
|
||||
iio_context_destroy(ctx);
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (pluto_init(uri, &ctx, &phy, &tx, 1) != 0) return 1;
|
||||
if (pluto_configure(phy, freq, rate, bw, gain, 1) != 0) {
|
||||
LOG_ERROR("Настройка радиотракта не удалась");
|
||||
iio_context_destroy(ctx);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Включение каналов передатчика
|
||||
|
||||
Reference in New Issue
Block a user