Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions include/liquid.h
Original file line number Diff line number Diff line change
Expand Up @@ -5617,6 +5617,12 @@ typedef struct {

typedef struct dsssframegen_s * dsssframegen;

// create DSSS frame generator with specific parameter
// _n : spreading factor
// _props : frame properties (FEC, etc.)
dsssframegen dsssframegen_create_set(unsigned int _n,
dsssframegenprops_s * _props);
// create default DSSS frame generator (n = 64)
dsssframegen dsssframegen_create(dsssframegenprops_s * _props);
int dsssframegen_destroy(dsssframegen _q);
int dsssframegen_reset(dsssframegen _q);
Expand Down Expand Up @@ -5649,6 +5655,14 @@ int dsssframegen_write_samples(dsssframegen _q,

typedef struct dsssframesync_s * dsssframesync;

// create DSSS frame synchronizer
// _n : spreading factor
// _callback : callback function
// _userdata : user data pointer passed to callback function
dsssframesync dsssframesync_create_set(unsigned int _n,
framesync_callback _callback,
void * _userdata);
// create DSSS frame synchronizer with default parameter (n = 64)
dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdata);
int dsssframesync_destroy (dsssframesync _q);
int dsssframesync_print (dsssframesync _q);
Expand Down
19 changes: 14 additions & 5 deletions src/framing/src/dsssframegen.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,12 @@ struct dsssframegen_s {
enum state state; // write state
};

dsssframegen dsssframegen_create(dsssframegenprops_s * _fgprops)
dsssframegen dsssframegen_create_set(unsigned int _n,
dsssframegenprops_s * _fgprops)
{
if ((_n < 2) || (_n > 64))
return liquid_error_config("dsssframegen_create_set(), spreading factor must be between 2 and 64");

dsssframegen q = (dsssframegen)calloc(1, sizeof(struct dsssframegen_s));
unsigned int i;

Expand All @@ -125,14 +129,14 @@ dsssframegen dsssframegen_create(dsssframegenprops_s * _fgprops)
}
msequence_destroy(ms);

float complex * pn = (float complex *)malloc(64 * sizeof(float complex));
float complex * pn = (float complex *)malloc(_n * sizeof(float complex));
ms = msequence_create(7, 0x00cb, 0x53);
for (i = 0; i < 64; i++) {
for (i = 0; i < _n; i++) {
pn[i] = (msequence_advance(ms) ? M_SQRT1_2 : -M_SQRT1_2);
pn[i] += (msequence_advance(ms) ? M_SQRT1_2 : -M_SQRT1_2) * _Complex_I;
}
q->header_synth = synth_crcf_create(pn, 64);
q->payload_synth = synth_crcf_create(pn, 64);
q->header_synth = synth_crcf_create(pn, _n);
q->payload_synth = synth_crcf_create(pn, _n);
free(pn);
msequence_destroy(ms);

Expand All @@ -156,6 +160,11 @@ dsssframegen dsssframegen_create(dsssframegenprops_s * _fgprops)
return q;
}

dsssframegen dsssframegen_create(dsssframegenprops_s * _fgprops)
{
return dsssframegen_create_set(64, _fgprops);
}

int dsssframegen_destroy(dsssframegen _q)
{
if (_q == NULL)
Expand Down
22 changes: 16 additions & 6 deletions src/framing/src/dsssframesync.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,13 @@ struct dsssframesync_s {
enum state state;
};

dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdata)
dsssframesync dsssframesync_create_set(unsigned int _n,
framesync_callback _callback,
void * _userdata)
{
if ((_n < 2) || (_n > 64))
return liquid_error_config("dsssframesync_create_set(), spreading factor must be between 2 and 64");

dsssframesync q = (dsssframesync)calloc(1, sizeof(struct dsssframesync_s));
q->callback = _callback;
q->userdata = _userdata;
Expand All @@ -124,14 +129,14 @@ dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdat
}
msequence_destroy(ms);

float complex * pn = (float complex *)calloc(64, sizeof(float complex));
float complex * pn = (float complex *)calloc(_n, sizeof(float complex));
ms = msequence_create(7, 0x00cb, 0x53);
for (i = 0; i < 64; i++) {
for (i = 0; i < _n; i++) {
pn[i] = (msequence_advance(ms) ? M_SQRT1_2 : -M_SQRT1_2);
pn[i] += (msequence_advance(ms) ? M_SQRT1_2 : -M_SQRT1_2) * _Complex_I;
}
q->header_synth = synth_crcf_create(pn, 64);
q->payload_synth = synth_crcf_create(pn, 64);
q->header_synth = synth_crcf_create(pn, _n);
q->payload_synth = synth_crcf_create(pn, _n);
synth_crcf_pll_set_bandwidth(q->header_synth, 1e-4f);
synth_crcf_pll_set_bandwidth(q->payload_synth, 1e-4f);
free(pn);
Expand All @@ -153,7 +158,7 @@ dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdat
dsssframesync_set_header_props(q, NULL);

q->payload_decoder = qpacketmodem_create();
q->payload_spread_len = 64;
q->payload_spread_len = _n;
q->payload_spread
= (float complex *)malloc(q->payload_spread_len * sizeof(float complex));

Expand All @@ -163,6 +168,11 @@ dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdat
return q;
}

dsssframesync dsssframesync_create(framesync_callback _callback, void * _userdata)
{
return dsssframesync_create_set(64, _callback, _userdata);
}

int dsssframesync_destroy(dsssframesync _q)
{
if (_q == NULL)
Expand Down