Skip to content

File frame_meter_core.h

File List > doppler > frame_meter > frame_meter_core.h

Go to the documentation of this file

#ifndef DP_FRAME_METER_CORE_H
#define DP_FRAME_METER_CORE_H

#include "doppler/ber/ber_core.h"
#include "doppler/dp_state.h"

#include <stddef.h>
#include <stdint.h>
#include "doppler/detection/detection_core.h"
#include "doppler/ber_meter/ber_meter_core.h"

#ifdef __cplusplus
extern "C"
{
#endif

#define FRAME_METER_STATE_MAGIC   DP_FOURCC ('F', 'R', 'M', 'M')
#define FRAME_METER_STATE_VERSION 1u

  typedef struct
  {
    size_t target_errors; 
    double conf;          
    size_t frames;        
    size_t sync_detected; 
    size_t crc_passed;    
    size_t errors;        
  } dp_frame_meter_state_t;

  dp_frame_meter_state_t *dp_frame_meter_create (size_t target_errors, double conf);

  void dp_frame_meter_destroy (dp_frame_meter_state_t *state);

  void dp_frame_meter_reset (dp_frame_meter_state_t *state);

  void dp_frame_meter_add (dp_frame_meter_state_t *state, int sync_ok, int crc);

  size_t dp_frame_meter_get_frames (const dp_frame_meter_state_t *state);
  size_t dp_frame_meter_get_sync_detected (const dp_frame_meter_state_t *state);
  size_t dp_frame_meter_get_crc_passed (const dp_frame_meter_state_t *state);
  size_t dp_frame_meter_get_errors (const dp_frame_meter_state_t *state);

  int dp_frame_meter_get_enough (const dp_frame_meter_state_t *state);

  ber_interval_t dp_frame_meter_fer (const dp_frame_meter_state_t *state);

  ber_interval_t dp_frame_meter_sync_miss (const dp_frame_meter_state_t *state);

  size_t dp_frame_meter_state_bytes (const dp_frame_meter_state_t *state);
  void dp_frame_meter_get_state (const dp_frame_meter_state_t *state, void *blob);
  int dp_frame_meter_set_state (dp_frame_meter_state_t *state, const void *blob);

#ifdef __cplusplus
}
#endif

#endif /* FRAME_METER_CORE_H */