Skip to content

File wfm_reader_core.h

File List > inc > wfm_reader > wfm_reader_core.h

Go to the documentation of this file

#ifndef DP_WFM_READER_H
#define DP_WFM_READER_H

#include <complex.h>
#include <stddef.h>

#include "wfm/wfm_keywords.h" /* wfm_keyword_t */
#include "wfm_writer/wfm_writer_core.h"   /* wfm_filetype_t */
#include "dp_interrupt_guard/dp_interrupt_guard_core.h"

#ifdef __cplusplus
extern "C"
{
#endif

  typedef struct wfm_reader_state wfm_reader_state_t;


  typedef enum
  {
    WFM_MODE_COMPLEX = 0, 
    WFM_MODE_SCALAR = 1   
  } wfm_mode_t;

  typedef enum
  {
    WFM_FC_NONE = 0,      
    WFM_FC_FREQ,          
    WFM_FC_RF_FREQ,       
    WFM_FC_CENTER_FREQ,   
    WFM_FC_F_C,           
    WFM_FC_SIGMF          
  } wfm_fc_source_t;

  typedef enum
  {
    WFM_FS_NONE = 0,    
    WFM_FS_BLUE_XDELTA, 
    WFM_FS_SIGMF        
  } wfm_fs_source_t;

  typedef enum
  {
    WFM_T0_NONE = 0,      
    WFM_T0_BLUE_TIMECODE, 
    WFM_T0_SIGMF          
    /* The SigMF spelling is an ISO 8601 string, parsed by
       dp_isotime_parse(). A stamp carrying no zone is REFUSED there rather
       than read as UTC, so such a capture still reports WFM_T0_NONE: being
       wrong by hours looks authoritative in a way that reporting nothing
       does not. */
  } wfm_t0_source_t;

  typedef enum
  {
    WFM_FOLLOW_NONE = 0,    
    WFM_FOLLOW_EOF,         
    WFM_FOLLOW_TIMEOUT,     
    WFM_FOLLOW_INTERRUPTED  
  } wfm_follow_end_t;

  typedef struct
  {
    int    file_type;   
    int    sample_type;
    int    mode;        
    int    endian;      
    double fs;          
    double fc;          
    size_t num_samples; 
    int    fc_source;   
    size_t trailing_bytes; 
    int    fs_source;   
    double t0_unix_sec; 
    int    t0_source;   
  } wfm_reader_info_t;

wfm_reader_state_t *wfm_reader_create(const char *path, int sample_type, int endian);

  void wfm_reader_info (const wfm_reader_state_t *r, wfm_reader_info_t *info);

size_t wfm_reader_read(wfm_reader_state_t *state, size_t n,
                       float _Complex *out, size_t max_out);

size_t wfm_reader_read_max_out(wfm_reader_state_t *state, size_t n);

size_t wfm_reader_num_keywords(const wfm_reader_state_t *state);

  const wfm_keyword_t *wfm_reader_keyword (const wfm_reader_state_t *r, size_t i);

const char *wfm_reader_keyword_tag(const wfm_reader_state_t *state, size_t i);

  size_t wfm_reader_num_header_fields(const wfm_reader_state_t *state);

  const wfm_keyword_t *wfm_reader_header_field(const wfm_reader_state_t *state,
                                               size_t i);

  const char *wfm_reader_header_tag(const wfm_reader_state_t *state, size_t i);

  const wfm_keyword_t *
  wfm_reader_find_header_field(const wfm_reader_state_t *state,
                               const char *name);

  const wfm_keyword_t *wfm_reader_find_keyword (const wfm_reader_state_t *r,
                                                const char        *tag);

void wfm_reader_reset(wfm_reader_state_t *state);

  void wfm_reader_set_stop_fn (wfm_reader_state_t *state, int (*fn) (void));


void wfm_reader_destroy(wfm_reader_state_t *state);

int wfm_reader_get_fc_source(const wfm_reader_state_t *state);

int wfm_reader_get_fs_source(const wfm_reader_state_t *state);

double wfm_reader_get_t0(const wfm_reader_state_t *state);

int wfm_reader_get_t0_source(const wfm_reader_state_t *state);

size_t wfm_reader_get_trailing_bytes(const wfm_reader_state_t *state);

int wfm_reader_get_file_type(const wfm_reader_state_t *state);
int wfm_reader_get_sample_type(const wfm_reader_state_t *state);
int wfm_reader_get_mode(const wfm_reader_state_t *state);
int wfm_reader_get_endian(const wfm_reader_state_t *state);
double wfm_reader_get_fs(const wfm_reader_state_t *state);
double wfm_reader_get_fc(const wfm_reader_state_t *state);
size_t wfm_reader_get_num_samples(const wfm_reader_state_t *state);
size_t wfm_reader_read_follow_max_out(wfm_reader_state_t *state, size_t n);
size_t wfm_reader_read_follow(wfm_reader_state_t *state, size_t n, float _Complex *out, size_t max_out);
uint32_t wfm_reader_get_follow_timeout_ms(const wfm_reader_state_t *state);
void wfm_reader_set_follow_timeout_ms(wfm_reader_state_t *state, uint32_t val);
uint32_t wfm_reader_get_follow_grace_ms(const wfm_reader_state_t *state);
void wfm_reader_set_follow_grace_ms(wfm_reader_state_t *state, uint32_t val);
int wfm_reader_get_ending(const wfm_reader_state_t *state);
#ifdef __cplusplus
}
#endif

#endif /* DP_WFM_READER_H */