74 lines
2.6 KiB
C
74 lines
2.6 KiB
C
|
|
/*
|
||
|
|
* File: modem_types.h
|
||
|
|
*/
|
||
|
|
|
||
|
|
/** @file */
|
||
|
|
|
||
|
|
#ifndef MODEM_TYPES_H
|
||
|
|
#define MODEM_TYPES_H
|
||
|
|
|
||
|
|
// Sampling Control
|
||
|
|
// il buffer rate deve essere > fmod_min/2
|
||
|
|
// il buffer rate deve > symbol rate
|
||
|
|
|
||
|
|
#define SAMPLING_RATE 16000UL ///< frequenza di campionamento
|
||
|
|
#define SAMPLES_PER_BUFFER 32U ///< dimensione del buffer dei campioni
|
||
|
|
#define BUFFER_RATE (SAMPLING_RATE / SAMPLES_PER_BUFFER) ///< frequenza di buffer: deve essere > di MAX_SYMBOL_RATE * 3
|
||
|
|
|
||
|
|
#define MAX_SYMBOL_RATE 500U
|
||
|
|
#define MIN_SYMBOL_RATE 20U //umm, se troppo piccolo da problemi nelle dimensioni dei buffer
|
||
|
|
|
||
|
|
#define MIN_BUFFERS_PER_SYMBOL (BUFFER_RATE / MAX_SYMBOL_RATE)
|
||
|
|
#define MAX_BUFFERS_PER_SYMBOL (BUFFER_RATE / MIN_SYMBOL_RATE)
|
||
|
|
|
||
|
|
#define MAX_MODULATION_ALPHABET_SIZE 16U ///< massimo numero di simboli nella costellazione
|
||
|
|
|
||
|
|
#define MAX_SYMBOL_BUFFER_SIZE 512U ///< MAX_FEC_OUTPUT_SIZE * MAX_FEC_PER_BLOCK
|
||
|
|
|
||
|
|
#define MODEM_STATE_PREDELAY_WAIT 0
|
||
|
|
#define MODEM_STATE_PREDELAY_PROCESS 1
|
||
|
|
#define MODEM_STATE_PREDELAY_DONE 2
|
||
|
|
#define MODEM_STATE_PREAMBLE_WAIT 3
|
||
|
|
#define MODEM_STATE_PREAMBLE_PROCESS 4
|
||
|
|
#define MODEM_STATE_PREAMBLE_DONE 5
|
||
|
|
#define MODEM_STATE_POST_PREAMBLE_WAIT 6
|
||
|
|
#define MODEM_STATE_POST_PREAMBLE_PROCESS 7
|
||
|
|
#define MODEM_STATE_POST_PREAMBLE_DONE 8
|
||
|
|
#define MODEM_STATE_PAYLOAD_WAIT 9
|
||
|
|
#define MODEM_STATE_PAYLOAD_PROCESS 10
|
||
|
|
#define MODEM_STATE_PAYLOAD_DONE 11
|
||
|
|
#define MODEM_STATE_IDLE 12
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
uint16_t frequency; ///< frequenza del simbolo
|
||
|
|
uint16_t phase; ///< fase del simbolo
|
||
|
|
uint16_t amplitude; ///< ampiezza del simbolo
|
||
|
|
} symbol;
|
||
|
|
|
||
|
|
// parametri della modulazione
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
uint16_t symbol_rate; ///< numero di simboli per secondo
|
||
|
|
uint8_t buffers_per_symbol; ///< numero di buffer di campioni in un simbolo
|
||
|
|
uint8_t bits_per_symbol; ///< bit di informazione espressi da un simbolo
|
||
|
|
uint8_t alphabet_size; ///< numero di possibili simboli che compongono la modulazione
|
||
|
|
uint8_t amplitude_keying; ///< manipolazione di ampiezza
|
||
|
|
uint8_t frequency_keying; ///< manipolazione di frequenza
|
||
|
|
uint8_t phase_keying; ///< manipolazione di fase
|
||
|
|
symbol constellation[MAX_MODULATION_ALPHABET_SIZE]; ///< descrizione della costellazione
|
||
|
|
} modulation;
|
||
|
|
|
||
|
|
extern modulation mod;
|
||
|
|
|
||
|
|
extern uint8_t modem_tx_state, modem_rx_state;
|
||
|
|
|
||
|
|
extern uint16_t modem_predelay_mstime, modem_predelay_buffer_size, modem_predelay_buffer_index;
|
||
|
|
|
||
|
|
extern uint8_t modem_avoid_overlap;
|
||
|
|
|
||
|
|
// payload
|
||
|
|
extern uint16_t modem_payload_max_symbols, modem_payload_symbols_index;
|
||
|
|
|
||
|
|
#endif /* MODEM_TYPES_H */
|
||
|
|
|