Files
go-service/SDR/common.h

151 lines
6.4 KiB
C
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.

/**
* common.h — Общие определения и конфигурация для приёмника и передатчика
* OFDM + RS(255,223) FEC + PlutoSDR
*
* Включает:
* - Параметры OFDM-модуляции/демодуляции
* - Параметры помехоустойчивого кодирования Рида-Соломона
* - Настройки радиотракта по умолчанию
* - Общие макросы и прототипы функций
*/
#ifndef COMMON_H
#define COMMON_H
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <signal.h>
#include <getopt.h>
#include <time.h>
#include <unistd.h>
#include <iio.h>
#include <liquid/liquid.h>
// ============================================================
// ПАРАМЕТРЫ OFDM-МОДУЛЯЦИИ (ОБЩИЕ ДЛЯ ПРИЁМНИКА И ПЕРЕДАТЧИКА)
// ============================================================
#define OFDM_M 64 // Количество поднесущих
#define OFDM_CP 16 // Длина циклического префикса
#define OFDM_TAPER 4 // Длина сглаживающего окна
// ============================================================
// ПАРАМЕТРЫ ПОМЕХОУСТОЙЧИВОГО КОДИРОВАНИЯ РИДА-СОЛОМОНА
// ============================================================
#define RS_DATA 223 // Размер блока данных (байт)
#define RS_ENC 255 // Размер кодированного блока (байт)
// ============================================================
// ПАРАМЕТРЫ РАДИОТРАКТА ПО УМОЛЧАНИЮ
// ============================================================
#define DEFAULT_FREQ 1265000000 // Частота несущей: 1265 МГц
#define DEFAULT_RATE 3840000 // Частота дискретизации: 3.84 МГц
#define DEFAULT_BW 3000000 // Полоса пропускания: 3 МГц
// ============================================================
// АДРЕСА PLUTOSDR ПО УМОЛЧАНИЮ
// ============================================================
#define TX_URI_DEFAULT "ip:192.168.3.1" // Адрес передатчика
#define RX_URI_DEFAULT "ip:192.168.2.1" // Адрес приёмника
// ============================================================
// ОБЩИЕ ВСПОМОГАТЕЛЬНЫЕ МАКРОСЫ
// ============================================================
/**
* Безопасное освобождение памяти с проверкой указателя
*/
#define SAFE_FREE(ptr) do { \
if ((ptr) != NULL) { \
free(ptr); \
(ptr) = NULL; \
} \
} while(0)
/**
* Вывод отладочного сообщения с меткой времени
*/
#define LOG_INFO(fmt, ...) \
fprintf(stderr, "[INFO] " fmt "\n", ##__VA_ARGS__)
#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