aboutsummaryrefslogtreecommitdiff
path: root/src/freedv_api_internal.h
diff options
context:
space:
mode:
authordrowe67 <[email protected]>2023-07-20 08:59:48 +0930
committerGitHub <[email protected]>2023-07-20 08:59:48 +0930
commit06d4c11e699b0351765f10398abb4f663a984f36 (patch)
tree33e22af0814c5b6c3d676f096ae8c2ac8a3ed9f0 /src/freedv_api_internal.h
parent6588e77f38bdebd7adffe091b22e7760d95d0ccb (diff)
parent4d6c143c0abec15e1d6ed1fd95d36f80e6cb7df8 (diff)
Merge pull request #3 from drowe67/dr-cleanup21.2.0
Cleanup Part 2
Diffstat (limited to 'src/freedv_api_internal.h')
-rw-r--r--src/freedv_api_internal.h310
1 files changed, 169 insertions, 141 deletions
diff --git a/src/freedv_api_internal.h b/src/freedv_api_internal.h
index b45a880..ef6426f 100644
--- a/src/freedv_api_internal.h
+++ b/src/freedv_api_internal.h
@@ -34,160 +34,181 @@
#ifndef __FREEDV_API_INTERNAL__
#define __FREEDV_API_INTERNAL__
-#include "varicode.h"
-#include "fsk.h"
-#include "fmfsk.h"
-#include "codec2_fdmdv.h"
#include "codec2_cohpsk.h"
+#include "codec2_fdmdv.h"
+#include "fmfsk.h"
+#include "fsk.h"
+#include "varicode.h"
#ifdef __LPCNET__
#include "lpcnet_freedv.h"
#endif
#include "freedv_api.h"
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
// Fudge factors to normalise Tx power across modes
-#define NORM_PWR_FSK 0.5
+#define NORM_PWR_FSK 0.5
-// identifiers for non Codec 2 Speech codecs, make sure no overlap with CODEC2_XXX modes
+// identifiers for non Codec 2 Speech codecs, make sure no overlap with
+// CODEC2_XXX modes
#define CODEC_MODE_LPCNET_1733 100
-extern char *rx_sync_flags_to_text[]; // converts flags above to more meaningful text
+extern char
+ *rx_sync_flags_to_text[]; // converts flags above to more meaningful text
struct freedv {
- int mode;
-
- // states for various modules we support
- struct CODEC2 *codec2;
- struct FDMDV *fdmdv;
- struct COHPSK *cohpsk;
- struct FSK *fsk;
- struct FMFSK *fmfsk;
- struct OFDM *ofdm;
- struct LDPC *ldpc;
- struct MODEM_STATS stats; // working memory for when we call xxx_stats function for each demod
+ int mode;
+
+ // states for various modules we support
+ struct CODEC2 *codec2;
+ struct FDMDV *fdmdv;
+ struct COHPSK *cohpsk;
+ struct FSK *fsk;
+ struct FMFSK *fmfsk;
+ struct OFDM *ofdm;
+ struct LDPC *ldpc;
+ struct MODEM_STATS stats; // working memory for when we call xxx_stats
+ // function for each demod
#ifdef __LPCNET__
- struct LPCNetFreeDV *lpcnet;
+ struct LPCNetFreeDV *lpcnet;
#endif
- struct freedv_vhf_deframer * deframer; // Extracts frames from VHF stream
-
- struct quisk_cfFilter * ptFilter7500to8000; // Filters to change to/from 7500 and 8000 sps for 700 .... 700C
- struct quisk_cfFilter * ptFilter8000to7500;
-
- int n_speech_samples; // number of speech samples we need for each freedv_tx() call
- // num of speech samples output by freedv_rx() call
- int n_nom_modem_samples; // size of tx modem sample buffers
- int n_max_modem_samples; // make your rx modem sample buffers this big
- int n_nat_modem_samples; // tx modem sample block length as used by the modem before interpolation to output
- // usually the same as n_nom_modem_samples, except for 700C
- int modem_sample_rate; // Caller is responsible for meeting this
- int modem_symbol_rate; // Useful for ext_vco operation on 2400A and 800XA
- int speech_sample_rate; // 8 kHz or 16 kHz (high fidelity)
-
- int bits_per_codec_frame;
- int bits_per_modem_frame; // number of modem payload bits in each modem frame (usually compressed speech)
- int n_codec_frames; // number of codec frames in each modem frame
- uint8_t *tx_payload_bits; // payload bits (usually compressed speech) for a modem frame ...
- uint8_t *rx_payload_bits; // ... one bit per char for some modes, packed for others
-
- /* FDMDV buffers for FreeDV 1600 -------------------------------------------------------------*/
-
- int *fdmdv_bits;
- int *fdmdv_tx_bits;
- int *fdmdv_rx_bits;
-
- /* test frame states -------------------------------------------------------------------------*/
-
- int *ptest_bits_coh;
- int *ptest_bits_coh_end;
-
- int test_frames; // set this baby for 1 to tx/rx test frames to look at bit error stats
- int test_frames_diversity; // 1 -> used combined carriers for error counting on 700 waveforms
- int test_frame_sync_state;
- int test_frame_sync_state_upper; // when test_frames_diveristy==0 we need extra states for upper carriers
- int test_frame_count;
- int total_bits;
- int total_bit_errors;
- int total_bits_coded;
- int total_bit_errors_coded;
- int total_packets;
- int total_packet_errors;
- int sz_error_pattern;
-
- /* optional user defined function to pass error pattern when a test frame is received */
-
- void *error_pattern_callback_state;
- void (*freedv_put_error_pattern)(void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern);
-
- /* Misc ---------------------------------------------------------------------------------------------*/
-
- int *tx_bits; /* FSK modem frame under construction */
- int tx_sync_bit;
- int frames;
- bool clip_en; /* non-zero for modem Tx clipping to lower PAPR */
- int sync; /* we set this when a mode is in sync */
- int evenframe;
- float snr_est; /* we set this each time the modes's demod estimates SNR */
- float snr_squelch_thresh;
- bool squelch_en;
- int nin, nin_prev;
- int verbose;
- int ext_vco; /* 2400A/800XA use external VCO flag */
- float *passthrough_2020; /* 2020 interpolating filter */
- float tx_amp; /* amplitude of tx samples */
- float passthrough_gain;
-
- /* useful constants for OFDM modes ------------------------------------------------------------------*/
-
- int ofdm_bitsperpacket;
- int ofdm_bitsperframe;
- int ofdm_nuwbits;
- int ofdm_ntxtbits;
- int rx_status;
-
- /* Varicode txt channel states ----------------------------------------------------------------------*/
-
- struct VARICODE_DEC varicode_dec_states;
- short tx_varicode_bits[VARICODE_MAX_BITS];
- int nvaricode_bits;
- int varicode_bit_index;
-
- /* interleaved LDPC OFDM states ---------------------------------------------------------------------*/
-
- COMP *codeword_symbols;
- float *codeword_amps;
- COMP *rx_syms;
- float *rx_amps;
- COMP *mod_out; // output buffer of interleaved frames
-
- /* user defined function ptrs to produce and consume ASCII
- characters using aux txt channel */
-
- char (*freedv_get_next_tx_char)(void *callback_state);
- void (*freedv_put_next_rx_char)(void *callback_state, char c);
- void (*freedv_put_next_rx_symbol)(void *callback_state, _Complex float sym, float amp);
- void *callback_state;
- void *callback_state_sym;
-
- /* user defined functions to produce and consume protocol bits */
- /* Protocol bits are packed MSB-first */
- void (*freedv_put_next_proto)(void *callback_state, char *proto_bits_packed);
- void (*freedv_get_next_proto)(void *callback_state, char *proto_bits_packed);
- void *proto_callback_state;
- int n_protocol_bits;
-
- /* states needed for FSK LDPC */
- float *frame_llr;
- int frame_llr_size, frame_llr_nbits;
- float *twoframes_llr;
- uint8_t *twoframes_hard;
- int fsk_ldpc_thresh1, fsk_ldpc_thresh2, fsk_ldpc_baduw_thresh;
- int fsk_ldpc_state, fsk_ldpc_best_location, fsk_ldpc_baduw;
- float fsk_ldpc_snr;
- float fsk_S[2], fsk_N[2];
+ struct freedv_vhf_deframer *deframer; // Extracts frames from VHF stream
+
+ struct quisk_cfFilter *ptFilter7500to8000; // Filters to change to/from 7500
+ // and 8000 sps for 700 .... 700C
+ struct quisk_cfFilter *ptFilter8000to7500;
+
+ int n_speech_samples; // number of speech samples we need for each
+ // freedv_tx() call num of speech samples output by
+ // freedv_rx() call
+ int n_nom_modem_samples; // size of tx modem sample buffers
+ int n_max_modem_samples; // make your rx modem sample buffers this big
+ int n_nat_modem_samples; // tx modem sample block length as used by the modem
+ // before interpolation to output usually the same
+ // as n_nom_modem_samples, except for 700C
+ int modem_sample_rate; // Caller is responsible for meeting this
+ int modem_symbol_rate; // Useful for ext_vco operation on 2400A and 800XA
+ int speech_sample_rate; // 8 kHz or 16 kHz (high fidelity)
+
+ int bits_per_codec_frame;
+ int bits_per_modem_frame; // number of modem payload bits in each modem frame
+ // (usually compressed speech)
+ int n_codec_frames; // number of codec frames in each modem frame
+ uint8_t *tx_payload_bits; // payload bits (usually compressed speech) for a
+ // modem frame ...
+ uint8_t *rx_payload_bits; // ... one bit per char for some modes, packed for
+ // others
+
+ /* FDMDV buffers for FreeDV 1600
+ * -------------------------------------------------------------*/
+
+ int *fdmdv_bits;
+ int *fdmdv_tx_bits;
+ int *fdmdv_rx_bits;
+
+ /* test frame states
+ * -------------------------------------------------------------------------*/
+
+ int *ptest_bits_coh;
+ int *ptest_bits_coh_end;
+
+ int test_frames; // set this baby for 1 to tx/rx test frames to look at bit
+ // error stats
+ int test_frames_diversity; // 1 -> used combined carriers for error counting
+ // on 700 waveforms
+ int test_frame_sync_state;
+ int test_frame_sync_state_upper; // when test_frames_diveristy==0 we need
+ // extra states for upper carriers
+ int test_frame_count;
+ int total_bits;
+ int total_bit_errors;
+ int total_bits_coded;
+ int total_bit_errors_coded;
+ int total_packets;
+ int total_packet_errors;
+ int sz_error_pattern;
+
+ /* optional user defined function to pass error pattern when a test frame is
+ * received */
+
+ void *error_pattern_callback_state;
+ void (*freedv_put_error_pattern)(void *error_pattern_callback_state,
+ short error_pattern[], int sz_error_pattern);
+
+ /* Misc
+ * ---------------------------------------------------------------------------------------------*/
+
+ int *tx_bits; /* FSK modem frame under construction */
+ int tx_sync_bit;
+ int frames;
+ bool clip_en; /* non-zero for modem Tx clipping to lower PAPR */
+ int sync; /* we set this when a mode is in sync */
+ int evenframe;
+ float snr_est; /* we set this each time the modes's demod estimates SNR */
+ float snr_squelch_thresh;
+ bool squelch_en;
+ int nin, nin_prev;
+ int verbose;
+ int ext_vco; /* 2400A/800XA use external VCO flag */
+ float *passthrough_2020; /* 2020 interpolating filter */
+ float tx_amp; /* amplitude of tx samples */
+ float passthrough_gain;
+
+ /* useful constants for OFDM modes
+ * ------------------------------------------------------------------*/
+
+ int ofdm_bitsperpacket;
+ int ofdm_bitsperframe;
+ int ofdm_nuwbits;
+ int ofdm_ntxtbits;
+ int rx_status;
+
+ /* Varicode txt channel states
+ * ----------------------------------------------------------------------*/
+
+ struct VARICODE_DEC varicode_dec_states;
+ short tx_varicode_bits[VARICODE_MAX_BITS];
+ int nvaricode_bits;
+ int varicode_bit_index;
+
+ /* interleaved LDPC OFDM states
+ * ---------------------------------------------------------------------*/
+
+ COMP *codeword_symbols;
+ float *codeword_amps;
+ COMP *rx_syms;
+ float *rx_amps;
+ COMP *mod_out; // output buffer of interleaved frames
+
+ /* user defined function ptrs to produce and consume ASCII
+ characters using aux txt channel */
+
+ char (*freedv_get_next_tx_char)(void *callback_state);
+ void (*freedv_put_next_rx_char)(void *callback_state, char c);
+ void (*freedv_put_next_rx_symbol)(void *callback_state, _Complex float sym,
+ float amp);
+ void *callback_state;
+ void *callback_state_sym;
+
+ /* user defined functions to produce and consume protocol bits */
+ /* Protocol bits are packed MSB-first */
+ void (*freedv_put_next_proto)(void *callback_state, char *proto_bits_packed);
+ void (*freedv_get_next_proto)(void *callback_state, char *proto_bits_packed);
+ void *proto_callback_state;
+ int n_protocol_bits;
+
+ /* states needed for FSK LDPC */
+ float *frame_llr;
+ int frame_llr_size, frame_llr_nbits;
+ float *twoframes_llr;
+ uint8_t *twoframes_hard;
+ int fsk_ldpc_thresh1, fsk_ldpc_thresh2, fsk_ldpc_baduw_thresh;
+ int fsk_ldpc_state, fsk_ldpc_best_location, fsk_ldpc_baduw;
+ float fsk_ldpc_snr;
+ float fsk_S[2], fsk_N[2];
};
// open function for each mode
@@ -202,7 +223,8 @@ void freedv_800xa_open(struct freedv *f);
void freedv_fsk_ldpc_open(struct freedv *f, struct freedv_advanced *adv);
void freedv_ofdm_data_open(struct freedv *f);
-// each mode has tx and rx functions in various flavours for real and complex valued samples
+// each mode has tx and rx functions in various flavours for real and complex
+// valued samples
void freedv_comptx_fdmdv_1600(struct freedv *f, COMP mod_out[]);
int freedv_comprx_fdmdv_1600(struct freedv *f, COMP demod_in[]);
@@ -211,7 +233,8 @@ void freedv_comptx_700c(struct freedv *f, COMP mod_out[]);
int freedv_comprx_700c(struct freedv *f, COMP demod_in_8kHz[]);
void freedv_comptx_ofdm(struct freedv *f, COMP mod_out[]);
-int freedv_comp_short_rx_ofdm(struct freedv *f, void *demod_in_8kHz, int demod_in_is_short, float gain);
+int freedv_comp_short_rx_ofdm(struct freedv *f, void *demod_in_8kHz,
+ int demod_in_is_short, float gain);
void freedv_comptx_2020(struct freedv *f, COMP mod_out[]);
int freedv_comprx_2020(struct freedv *f, COMP demod_in[]);
@@ -223,14 +246,19 @@ int freedv_comprx_fsk(struct freedv *f, COMP demod_in[]);
int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]);
void freedv_tx_fsk_ldpc_data(struct freedv *f, COMP mod_out[]);
-void freedv_tx_fsk_ldpc_data_preamble(struct freedv *f, COMP mod_out[], int npreamble_bits, int npreamble_samples);
+void freedv_tx_fsk_ldpc_data_preamble(struct freedv *f, COMP mod_out[],
+ int npreamble_bits,
+ int npreamble_samples);
int freedv_rx_fsk_ldpc_data(struct freedv *f, COMP demod_in[]);
-int freedv_bits_to_speech(struct freedv *f, short speech_out[], short demod_in[], int rx_status);
+int freedv_bits_to_speech(struct freedv *f, short speech_out[],
+ short demod_in[], int rx_status);
// for the reliable text protocol we need to pass symbols back rather than text
typedef void (*freedv_callback_rx_sym)(void *, _Complex float, float);
-void freedv_set_callback_txt_sym (struct freedv *freedv, freedv_callback_rx_sym rx, void *callback_state);
+void freedv_set_callback_txt_sym(struct freedv *freedv,
+ freedv_callback_rx_sym rx,
+ void *callback_state);
#ifdef __cplusplus
}