Skip to content

File frame_core.h

File List > frame > frame_core.h

Go to the documentation of this file

#ifndef FRAME_CORE_H
#define FRAME_CORE_H

#include "clib_common.h"
#include "jm_perf.h"
#include "pn/pn_core.h"
#include "gold/gold_core.h"
#include "wfm/wfm_frame.h" /* the descriptor and its layout — the one SSOT */
#include "conv/conv_core.h"
#include "rs/rs_core.h"
#include "cvt/cvt_core.h"
#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    wfm_frame_desc_t d;
    wfm_frame_desc_layout_t dl;
    int rx_checked;
    int rx_units;
    int rx_ok;
    int rx_symbols;
    wfm_frame_t f;
    wfm_frame_layout_t l;
    int named;
    uint8_t *own[WFM_FRAME_MAX_FIELDS];
    uint8_t *one;
/*<<property_struct_fields>>*/
  size_t nbits;
} frame_state_t;

frame_state_t *frame_create(int preamble_kind, const uint8_t *preamble, size_t preamble_len, size_t preamble_nbits, size_t preamble_reps, uint64_t preamble_poly, uint64_t preamble_seed, uint32_t preamble_reg_bits, int preamble_lfsr, uint64_t preamble_taps_a, uint64_t preamble_seed_a, uint64_t preamble_taps_b, uint64_t preamble_seed_b, int sync_kind, const uint8_t *sync, size_t sync_len, size_t sync_nbits, uint64_t sync_poly, uint64_t sync_seed, uint32_t sync_reg_bits, int sync_lfsr, uint64_t sync_taps_a, uint64_t sync_seed_a, uint64_t sync_taps_b, uint64_t sync_seed_b, int payload_kind, const uint8_t *payload, size_t payload_len, size_t payload_nbits, uint64_t payload_poly, uint64_t payload_seed, uint32_t payload_reg_bits, int payload_lfsr, uint64_t payload_taps_a, uint64_t payload_seed_a, uint64_t payload_taps_b, uint64_t payload_seed_b, int crc);

void frame_destroy(frame_state_t *state);

size_t frame_bits_max_out(frame_state_t *state, size_t n);

size_t frame_bits(frame_state_t *state, size_t n, uint8_t *out, size_t max_out);

wfm_frame_layout_t frame_layout(frame_state_t *state);

int frame_crc_ok(frame_state_t *state, const uint8_t *rx_bits, size_t rx_bits_len);

frame_state_t *frame_create_desc(int preamble_kind, const uint8_t *preamble, size_t preamble_len, size_t preamble_nbits, size_t preamble_reps, uint64_t preamble_poly, uint64_t preamble_seed, uint32_t preamble_reg_bits, int preamble_lfsr, uint64_t preamble_taps_a, uint64_t preamble_seed_a, uint64_t preamble_taps_b, uint64_t preamble_seed_b, int sync_kind, const uint8_t *sync, size_t sync_len, size_t sync_nbits, uint64_t sync_poly, uint64_t sync_seed, uint32_t sync_reg_bits, int sync_lfsr, uint64_t sync_taps_a, uint64_t sync_seed_a, uint64_t sync_taps_b, uint64_t sync_seed_b, int payload_kind, const uint8_t *payload, size_t payload_len, size_t payload_nbits, uint64_t payload_poly, uint64_t payload_seed, uint32_t payload_reg_bits, int payload_lfsr, uint64_t payload_taps_a, uint64_t payload_seed_a, uint64_t payload_taps_b, uint64_t payload_seed_b, int crc);

int frame_add_field(frame_state_t *state, const uint8_t *lit, size_t lit_len,
                    int kind, size_t gen_len, size_t reps, uint64_t poly,
                    uint64_t seed, uint32_t reg_bits, int lfsr,
                    uint64_t taps_a, uint64_t seed_a, uint64_t taps_b,
                    uint64_t seed_b, uint32_t derived_by,
                    size_t derived_bits);

int frame_add_stage(frame_state_t *state, int kind, uint32_t first_field,
                    uint32_t n_fields, uint32_t depth, uint32_t emit_num,
                    uint32_t emit_den, uint32_t unit_bits);

int frame_build(frame_state_t *state);

int frame_field_index(frame_state_t *state, const char *name);

int frame_name_field(frame_state_t *state, uint32_t index, const char *name);

int frame_add_derived(frame_state_t *state, const char *name, size_t bits);

int frame_add_hex(frame_state_t *state, const char *name, const char *hex,
                  size_t reps);

int frame_add_value(frame_state_t *state, const char *name, uint64_t value,
                    uint32_t bits, size_t reps);

int frame_add_stage_over(frame_state_t *state, int kind, const char *first,
                         const char *last, uint32_t depth,
                         uint32_t unit_bits);


typedef struct {
    int      passed;    
    uint32_t stages;    
    uint32_t checked;   
    uint32_t units;     
    uint32_t ok;        
    uint32_t corrected; 
    uint32_t symbols;   
} frame_check_t;

frame_check_t frame_check(frame_state_t *state, const uint8_t *rx_bits, size_t rx_bits_len);

size_t frame_deframe(frame_state_t *state, const uint8_t *rx_bits, size_t rx_bits_len, uint8_t *out, size_t max_out);

size_t frame_deframe_max_out(frame_state_t *state, size_t rx_bits_len);


size_t frame_n_fields(frame_state_t *state);

size_t frame_n_stages(frame_state_t *state);

size_t frame_field_off(frame_state_t *state, size_t i);

size_t frame_field_bits(frame_state_t *state, size_t i);

size_t frame_stage_first(frame_state_t *state, size_t i);

size_t frame_stage_bits(frame_state_t *state, size_t i);

#ifdef __cplusplus
}
#endif

#endif /* FRAME_CORE_H */