kopia lustrzana https://github.com/f4exb/sdrangel
				
				
				
			
		
			
				
	
	
		
			155 wiersze
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			155 wiersze
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
/*---------------------------------------------------------------------------*\
 | 
						|
 | 
						|
  FILE........: freedv_api_internal.h
 | 
						|
  AUTHOR......: David Rowe
 | 
						|
  DATE CREATED: August 2014
 | 
						|
 | 
						|
  This declares the structure freedv.  A pointer to this structure is
 | 
						|
  returned by the FreeDV API freedv_open() function.  The pointer is used
 | 
						|
  by the other FreeDV API functions declared in freedv_api.h.  This
 | 
						|
  structure is intended to be internal to the FreeDV API.  The public
 | 
						|
  functions are declared in freedv_api.h.  Changes to this structure
 | 
						|
  are expected.  Changes (except additions) to freedv_api.h are
 | 
						|
  discouraged.
 | 
						|
 | 
						|
\*---------------------------------------------------------------------------*/
 | 
						|
 | 
						|
/*
 | 
						|
  Copyright (C) 2014 David Rowe
 | 
						|
 | 
						|
  All rights reserved.
 | 
						|
 | 
						|
  This program is free software; you can redistribute it and/or modify
 | 
						|
  it under the terms of the GNU Lesser General Public License version 2.1, as
 | 
						|
  published by the Free Software Foundation.  This program is
 | 
						|
  distributed in the hope that it will be useful, but WITHOUT ANY
 | 
						|
  WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
						|
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
 | 
						|
  License for more details.
 | 
						|
 | 
						|
  You should have received a copy of the GNU Lesser General Public License
 | 
						|
  along with this program; if not, see <http://www.gnu.org/licenses/>.
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef __FREEDV_API_INTERNAL__
 | 
						|
#define __FREEDV_API_INTERNAL__
 | 
						|
 | 
						|
#include "codec2/varicode.h"
 | 
						|
#include "fsk.h"
 | 
						|
#include "fmfsk.h"
 | 
						|
#include "codec2_cohpsk.h"
 | 
						|
#include "codec2_fdmdv.h"
 | 
						|
 | 
						|
namespace FreeDV
 | 
						|
{
 | 
						|
 | 
						|
struct freedv {
 | 
						|
    int                  mode;
 | 
						|
 | 
						|
    /* states for various modems 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;
 | 
						|
 | 
						|
    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 and most rx 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 700..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                  clip;                   // non-zero for cohpsk modem output clipping for low PAPR
 | 
						|
 | 
						|
    unsigned char       *packed_codec_bits;
 | 
						|
    unsigned char       *packed_codec_bits_tx;    // for 700D we separate packed bits to maintain state due to interleaving
 | 
						|
    int                  nbyte_packed_codec_bits; // keep track of size of above arrays in 700D
 | 
						|
    int                 *codec_bits;
 | 
						|
    int                 *tx_bits;
 | 
						|
    int                 *fdmdv_bits;
 | 
						|
    int                 *rx_bits;
 | 
						|
    int                  n_codec_bits;           // number of codec bits in a frame
 | 
						|
 | 
						|
    int                  tx_sync_bit;
 | 
						|
    int                  smooth_symbols;
 | 
						|
    int                  frames;
 | 
						|
 | 
						|
    /* 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                  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                  sync;
 | 
						|
    int                  evenframe;
 | 
						|
    float                snr_est;
 | 
						|
    float                snr_squelch_thresh;
 | 
						|
    int                  squelch_en;
 | 
						|
    int                  nin;
 | 
						|
    int                  verbose;
 | 
						|
    int                  ext_vco;                            /* 2400A/800XA use external VCO flag */
 | 
						|
 | 
						|
    /* 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 ---------------------------------------------------------------------*/
 | 
						|
 | 
						|
    int                  interleave_frames;          // number of OFDM modem frames in interleaver, e.g. 1,2,4,8,16
 | 
						|
    COMP                *codeword_symbols;
 | 
						|
    float               *codeword_amps;
 | 
						|
    int                  modem_frame_count_tx;       // modem frame counter for tx side
 | 
						|
    int                  modem_frame_count_rx;       // modem frame counter for rx side
 | 
						|
    COMP                *mod_out;                    // output buffer of intereaved 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                *callback_state;
 | 
						|
 | 
						|
    /* 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;
 | 
						|
};
 | 
						|
 | 
						|
} // FreeDV
 | 
						|
 | 
						|
#endif
 | 
						|
 |