diff --git a/impl/src/layer1/rx.c b/impl/src/layer1/rx.c index 9118987..4415813 100644 --- a/impl/src/layer1/rx.c +++ b/impl/src/layer1/rx.c @@ -36,6 +36,8 @@ #define AGC_BW_ACQUISITION 5e-2f #define AGC_BW_TRACKING 1e-4f +#define SQUELCH_TIMEOUT_MS 2 + #define MAX_COARSE_FREQ_OFFSET 0.20f #define PLL_BW_HEADER 0.03f @@ -216,15 +218,15 @@ static enum squelch_state_t update_and_check_squelch(layer1_rx_t *rx, unsigned i break; case LIQUID_AGC_SQUELCH_SIGNALHI: + case LIQUID_AGC_SQUELCH_FALL: + case LIQUID_AGC_SQUELCH_SIGNALLO: result = SQUELCH_OPEN; break; - case LIQUID_AGC_SQUELCH_FALL: + case LIQUID_AGC_SQUELCH_TIMEOUT: LOG(LVL_DEBUG, "Squelch enabled at #%zu RSSI = %.3f dB [thr: %.3f dB]", rx->sample_index, level, agc_crcf_squelch_get_threshold(rx->agc)); // fall through - case LIQUID_AGC_SQUELCH_SIGNALLO: case LIQUID_AGC_SQUELCH_ENABLED: - case LIQUID_AGC_SQUELCH_TIMEOUT: result = SQUELCH_CLOSED; break; } @@ -239,13 +241,13 @@ static bool is_squelch_open(const layer1_rx_t *rx) switch(agc_crcf_squelch_get_status(rx->agc)) { case LIQUID_AGC_SQUELCH_RISE: case LIQUID_AGC_SQUELCH_SIGNALHI: + case LIQUID_AGC_SQUELCH_FALL: + case LIQUID_AGC_SQUELCH_SIGNALLO: result = true; break; - case LIQUID_AGC_SQUELCH_FALL: - case LIQUID_AGC_SQUELCH_SIGNALLO: - case LIQUID_AGC_SQUELCH_ENABLED: case LIQUID_AGC_SQUELCH_TIMEOUT: + case LIQUID_AGC_SQUELCH_ENABLED: result = false; break; } @@ -560,6 +562,7 @@ result_t layer1_rx_init(layer1_rx_t *rx, rx_callback_t callback) rx->noise_floor_level = 0.0f; agc_crcf_squelch_set_threshold(rx->agc, rx->noise_floor_level + 3.0f); // in dB agc_crcf_squelch_enable(rx->agc); + agc_crcf_squelch_set_timeout(rx->agc, SQUELCH_TIMEOUT_MS * SYMBOL_RATE * RRC_SPS / 1000); // create NCOs for carrier frequency compensation rx->carrier_coarse_nco = nco_crcf_create(LIQUID_NCO);