31 lines
2.3 KiB
C
31 lines
2.3 KiB
C
// frame_tx.h — сборка и передача одного OFDM-кадра (общий путь для TX данных
|
||
// и, начиная с этапа 2 roadmap §10 п.7, обратного канала STATUS/END).
|
||
|
||
#ifndef FRAME_TX_H
|
||
#define FRAME_TX_H
|
||
|
||
#include "common.h"
|
||
|
||
// Кодирует и передаёт один кадр: если enc задан — CRC32 поверх исходных данных
|
||
// ДО RS (техдолг #3: fec_decode() liquid не сообщает об ошибках, это единственный
|
||
// надёжный критерий на RX), затем блочный RS(255,223); иначе payload как есть.
|
||
// sig[0..1] — байты 0-1 заголовка (различают тип кадра: данные/паритет F0 AA,
|
||
// END F0 E7, STATUS F0 55 — см. docs/NOTES.md §10 п.7). hdr11 — байт флагов
|
||
// group-FEC (0 = legacy). buf_samples — размер TX-буфера DMA (BUF_SAMPLES
|
||
// вызывающего). Кадр пишется частичным push_partial (техдолг #5), затем пауза.
|
||
void phy_tx_frame(ofdmflexframegen fg, struct iio_buffer *buf, int buf_samples,
|
||
fec enc, const uint8_t sig[2], uint32_t seq, uint8_t hdr11,
|
||
const uint8_t *pl, size_t n, float amp, int pause_us);
|
||
|
||
// Обратная операция к phy_tx_frame для кадра, собранного с enc: RS-декод всех
|
||
// блоков payload + проверка CRC32-поверх-RS (единственный надёжный критерий,
|
||
// техдолг #3). hdr — 12 Б заголовка (нужны байты 6-7 original_len и 10
|
||
// last_block_bytes); pay/pay_len — сырой RS-payload из ofdmflexframesync; dec —
|
||
// декодер RS(255,223); out (≥ out_cap) принимает декодированные данные, out_len
|
||
// — исходная длина. Возврат 1 при пройденном CRC, 0 иначе. Используется обратным
|
||
// каналом (fb_rx) на TX-стороне; RX-данные пока декодит свой инлайн в receiver.c.
|
||
int phy_rx_decode(const uint8_t *hdr, const uint8_t *pay, unsigned pay_len,
|
||
fec dec, uint8_t *out, size_t out_cap, size_t *out_len);
|
||
|
||
#endif
|