diff --git a/src/cnetz/dsp.c b/src/cnetz/dsp.c index d9c92ca..5cea636 100644 --- a/src/cnetz/dsp.c +++ b/src/cnetz/dsp.c @@ -855,6 +855,8 @@ void cnetz_set_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode) { PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "DSP mode %d -> %d\n", cnetz->dsp_mode, mode); cnetz->dsp_mode = mode; + /* we must get rid of partly received frame */ + fsk_demod_reset(&cnetz->fsk_demod); } void cnetz_set_sched_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode, int frames_ahead) diff --git a/src/cnetz/fsk_fm_demod.c b/src/cnetz/fsk_fm_demod.c index 50d5fcd..92896e3 100644 --- a/src/cnetz/fsk_fm_demod.c +++ b/src/cnetz/fsk_fm_demod.c @@ -501,3 +501,8 @@ void fsk_correct_sync(cnetz_t *cnetz, double offset) bit_time = fmod(bit_time - offset + BITS_PER_SUPERFRAME, BITS_PER_SUPERFRAME); } +void fsk_demod_reset(fsk_fm_demod_t *fsk) +{ + fsk->sync = FSK_SYNC_NONE; +} + diff --git a/src/cnetz/fsk_fm_demod.h b/src/cnetz/fsk_fm_demod.h index abc8663..50d5579 100644 --- a/src/cnetz/fsk_fm_demod.h +++ b/src/cnetz/fsk_fm_demod.h @@ -53,4 +53,5 @@ typedef struct fsk_fm_demod { int fsk_fm_init(fsk_fm_demod_t *fsk, cnetz_t *cnetz, int samplerate, double bitrate); void fsk_fm_demod(fsk_fm_demod_t *fsk, int16_t *samples, int length); void fsk_correct_sync(cnetz_t *cnetz, double offset); +void fsk_demod_reset(fsk_fm_demod_t *fsk);