Рефакторинг

This commit is contained in:
Maxim
2026-06-03 14:21:41 +03:00
parent 9d6452c860
commit 24b7cc402e
5 changed files with 257 additions and 532 deletions

View File

@@ -1,12 +1,6 @@
/**
* common.h — Общие определения и конфигурация для приёмника и передатчика
* OFDM + RS(255,223) FEC + PlutoSDR
*
* Включает:
* - Параметры OFDM-модуляции/демодуляции
* - Параметры помехоустойчивого кодирования Рида-Соломона
* - Настройки радиотракта по умолчанию
* - Общие макросы и прототипы функций
*/
#ifndef COMMON_H
@@ -24,128 +18,44 @@
#include <iio.h>
#include <liquid/liquid.h>
// ============================================================
// ПАРАМЕТРЫ OFDM-МОДУЛЯЦИИ (ОБЩИЕ ДЛЯ ПРИЁМНИКА И ПЕРЕДАТЧИКА)
// ============================================================
#define OFDM_M 64 // Количество поднесущих
#define OFDM_CP 16 // Длина циклического префикса
#define OFDM_TAPER 4 // Длина сглаживающего окна
// Параметры OFDM-модуляции
#define OFDM_M 64
#define OFDM_CP 16
#define OFDM_TAPER 4
// ============================================================
// ПАРАМЕТРЫ ПОМЕХОУСТОЙЧИВОГО КОДИРОВАНИЯ РИДА-СОЛОМОНА
// ============================================================
#define RS_DATA 223 // Размер блока данных (байт)
#define RS_ENC 255 // Размер кодированного блока (байт)
// Параметры Рида-Соломона
#define RS_DATA 223
#define RS_ENC 255
// ============================================================
// ПАРАМЕТРЫ РАДИОТРАКТА ПО УМОЛЧАНИЮ
// ============================================================
#define DEFAULT_FREQ 1265000000 // Частота несущей: 1265 МГц
#define DEFAULT_RATE 3840000 // Частота дискретизации: 3.84 МГц
#define DEFAULT_BW 3000000 // Полоса пропускания: 3 МГц
// Параметры радиотракта по умолчанию
#define DEFAULT_FREQ 1265000000LL
#define DEFAULT_RATE 3840000LL
#define DEFAULT_BW 3000000LL
// ============================================================
// АДРЕСА PLUTOSDR ПО УМОЛЧАНИЮ
// ============================================================
#define TX_URI_DEFAULT "ip:192.168.3.1" // Адрес передатчика
#define RX_URI_DEFAULT "ip:192.168.2.1" // Адрес приёмника
// Адреса PlutoSDR
#define TX_URI_DEFAULT "ip:192.168.3.1" // адрес Pluto передатчика
#define RX_URI_DEFAULT "ip:192.168.2.1" // адрес Pluto приемника
// ============================================================
// ОБЩИЕ ВСПОМОГАТЕЛЬНЫЕ МАКРОСЫ
// ============================================================
// Формат заголовка кадра
#define HDR_SIGNATURE_0 0xF0
#define HDR_SIGNATURE_1 0xAA
#define HDR_SIZE 12
/**
* Безопасное освобождение памяти с проверкой указателя
*/
#define SAFE_FREE(ptr) do { \
if ((ptr) != NULL) { \
free(ptr); \
(ptr) = NULL; \
} \
} while(0)
// Макросы логирования
#define LOG_ERROR(fmt, ...) fprintf(stderr, "[ОШИБКА] " fmt "\n", ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) fprintf(stderr, "[INFO] " fmt "\n", ##__VA_ARGS__)
/**
* Вывод отладочного сообщения с меткой времени
*/
#define LOG_INFO(fmt, ...) \
fprintf(stderr, "[INFO] " fmt "\n", ##__VA_ARGS__)
// Глобальный флаг завершения
extern volatile sig_atomic_t stop;
#define LOG_ERROR(fmt, ...) \
fprintf(stderr, "[ОШИБКА] " fmt "\n", ##__VA_ARGS__)
#define LOG_WARN(fmt, ...) \
fprintf(stderr, "[ВНИМ.] " fmt "\n", ##__VA_ARGS__)
// ============================================================
// СТРУКТУРА ЗАГОЛОВКА КАДРА (12 байт)
// ============================================================
/**
* Формат заголовка кадра:
* Байты 0-1: Сигнатура начала кадра (0xF0, 0xAA)
* Байты 2-5: Порядковый номер кадра (32 бита)
* Байты 6-7: Размер исходных данных (16 бит)
* Байты 8-9: Количество блоков FEC (16 бит)
* Байт 10: Размер последнего блока RS
* Байт 11: Зарезервирован
*/
#define HDR_SIGNATURE_0 0xF0 // Первый байт сигнатуры
#define HDR_SIGNATURE_1 0xAA // Второй байт сигнатуры
#define HDR_SIZE 12 // Размер заголовка в байтах
// ============================================================
// ПРОТОТИПЫ ОБЩИХ ФУНКЦИЙ
// ============================================================
/**
* Инициализация общего обработчика сигналов завершения
* Устанавливает обработчики для SIGINT и SIGTERM
*/
// Прототипы общих функций
void setup_signal_handlers(void);
/**
* Вывод справки по использованию
*
* @param prog_name Имя исполняемого файла
* @param mode Режим работы: "TX" или "RX"
*/
void print_usage(const char *prog_name, const char *mode);
/**
* Форматированный вывод конфигурации радиотракта
*
* @param mode Режим: "ПЕРЕДАТЧИК" или "ПРИЁМНИК"
* @param freq Частота несущей
* @param rate Частота дискретизации
* @param bw Полоса пропускания
* @param fec_on Флаг активации FEC
*/
void print_config(const char *mode, long long freq, long long rate,
long long bw, int fec_on);
/**
* Инициализация контекста PlutoSDR и базовых устройств
*
* @param uri URI подключения
* @param ctx Указатель на контекст (выход)
* @param phy Указатель на физическое устройство (выход)
* @param dev Указатель на устройство TX/RX (выход)
* @param is_tx Флаг направления (1=TX, 0=RX)
* @return 0 при успехе, -1 при ошибке
*/
int pluto_init(const char *uri, struct iio_context **ctx,
struct iio_device **phy, struct iio_device **dev, int is_tx);
/**
* Настройка параметров радиотракта
*
* @param phy Физическое устройство
* @param freq Частота несущей
* @param rate Частота дискретизации
* @param bw Полоса пропускания
* @param gain Усиление (только для TX и manual RX)
* @param is_tx Флаг направления
*/
void pluto_configure(struct iio_device *phy, long long freq, long long rate,
long long bw, double gain, int is_tx);
#endif // COMMON_H
#endif