Skip to content

File despreader_core.h

File List > despreader > despreader_core.h

Go to the documentation of this file

#ifndef DP_DESPREADER_CORE_H
#define DP_DESPREADER_CORE_H

#include "doppler/clib_common.h"
#include "doppler/costas/costas_core.h"
#include "doppler/detection/detection_core.h"
#include "doppler/dll/dll_core.h"
#include "doppler/dp_state.h"
#include "doppler/jm_perf.h"
#include "doppler/lo/lo_core.h"
#include "doppler/lockdet/lockdet_core.h"
#include "doppler/loop_filter/loop_filter_core.h"
#include "doppler/dp_tlm/dp_tlm_core.h"
#include "doppler/dp_complex.h"
#include "doppler/telemetry/telemetry_core.h"
#ifdef __cplusplus
extern "C"
{
#endif

  typedef struct
  {
    dp_costas_state_t car;     
    dp_dll_state_t    code;    
    uint8_t *code_copy;     
    size_t periods_per_bit; 
    /* bit-sync (used only when periods_per_bit > 1) */
    size_t   *flip_hist;     
    size_t    epoch_count;   
    size_t    bit_phase;     
    size_t    epochs_in_bit; 
    double    bit_acc;       
    int       prev_sign;     
    int       have_prev;     
    dp_tlm_t *tlm_ctx;       
  } dp_despreader_state_t;

  void dp_despreader_init (dp_despreader_state_t *ch, const uint8_t *code,
                        size_t code_len, size_t sps, double init_norm_freq,
                        double init_chip, double bn_carrier, double bn_code,
                        double bn_fll, double zeta, double spacing,
                        size_t periods_per_bit);

  dp_despreader_state_t *dp_despreader_create (const uint8_t *code, size_t code_len,
                                         size_t sps, double init_norm_freq,
                                         double init_chip, double bn_carrier,
                                         double bn_code, double bn_fll,
                                         double zeta, double spacing,
                                         size_t periods_per_bit);

  void dp_despreader_destroy (dp_despreader_state_t *state);

  void dp_despreader_reset (dp_despreader_state_t *state);

  size_t dp_despreader_steps_max_out (dp_despreader_state_t *state);

  size_t dp_despreader_steps (dp_despreader_state_t *state, const float _Complex *x,
                           size_t x_len, float _Complex *out, size_t max_out);
  size_t dp_despreader_bits_max_out (dp_despreader_state_t *state);

  size_t dp_despreader_bits (dp_despreader_state_t *state, const float _Complex *x,
                          size_t x_len, uint8_t *out, size_t max_out);
  double dp_despreader_get_norm_freq (const dp_despreader_state_t *state);
  void   dp_despreader_set_norm_freq (dp_despreader_state_t *state, double val);
  double dp_despreader_get_code_phase (const dp_despreader_state_t *state);
  double dp_despreader_get_code_rate (const dp_despreader_state_t *state);
  double dp_despreader_get_lock_metric (const dp_despreader_state_t *state);

  int dp_despreader_get_carrier_locked (const dp_despreader_state_t *state);

  int dp_despreader_get_code_locked (const dp_despreader_state_t *state);

  void dp_despreader_configure_carrier_lock (dp_despreader_state_t *state,
                                          double up_thresh, double down_thresh,
                                          uint32_t n_up, uint32_t n_down);

  int dp_despreader_configure_code_lock (dp_despreader_state_t *state, double pfa,
                                      size_t n_looks, double ref_snr_db);

  size_t dp_despreader_get_bit_phase (const dp_despreader_state_t *state);
  double dp_despreader_get_bn_carrier (const dp_despreader_state_t *state);
  int    dp_despreader_set_bn_carrier (dp_despreader_state_t *state, double val);
  double dp_despreader_get_bn_code (const dp_despreader_state_t *state);
  int    dp_despreader_set_bn_code (dp_despreader_state_t *state, double val);

  int dp_despreader_set_telemetry (dp_despreader_state_t *state, dp_tlm_t *tlm,
                                const char *prefix, uint32_t decim);

/* ── Serializable state (standard bytes interface; see dp_state.h) ──────────
 * composition: costas + dll children + running bit-sync histogram/state;
 * the owned code copy is restored by create. */
#define DESPREADER_STATE_MAGIC DP_FOURCC ('D', 'S', 'P', 'R')
#define DESPREADER_STATE_VERSION 5u /* v5: dll child grew (output level,     \
                                        #2495); v4: costas child grew      \
                                        (lockdet rule) */
  size_t dp_despreader_state_bytes (const dp_despreader_state_t *state);
  void   dp_despreader_get_state (const dp_despreader_state_t *state, void *blob);
  int    dp_despreader_set_state (dp_despreader_state_t *state, const void *blob);

#ifdef __cplusplus
}
#endif

#endif /* DESPREADER_CORE_H */