diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2020-12-20 19:21:52 +0100 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2020-12-21 08:38:44 +0100 |
commit | 118b0260bcac528cb99d1b88ce57da1dd752c71a (patch) | |
tree | ecd457556ad2f349c720205a72e7621a2003f7bb /src/cnetz/dsp.c | |
parent | 09f8473c3b04f08a9b433282402fea96ce5c1404 (diff) |
C-Netz: Fix scheduling of frames when there is nothing to send
Diffstat (limited to 'src/cnetz/dsp.c')
-rw-r--r-- | src/cnetz/dsp.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/cnetz/dsp.c b/src/cnetz/dsp.c index 1c03b6d..493c515 100644 --- a/src/cnetz/dsp.c +++ b/src/cnetz/dsp.c @@ -686,25 +686,38 @@ again: /* set last time slot, so we know to which time slot the message from mobile station belongs to */ cnetz->sched_last_ts = cnetz->sched_ts; bits = cnetz_encode_telegramm(cnetz); - PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Rufblock' at timeslot %d\n", cnetz->sched_ts); + if (bits) { + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Rufblock' at timeslot %d\n", cnetz->sched_ts); + fsk_block_encode(cnetz, bits, 1); + } else + fsk_nothing_encode(cnetz); } else { bits = cnetz_encode_telegramm(cnetz); - PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Meldeblock' at timeslot %d\n", cnetz->sched_ts); + if (bits) { + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Meldeblock' at timeslot %d\n", cnetz->sched_ts); + fsk_block_encode(cnetz, bits, 1); + } else + fsk_nothing_encode(cnetz); } - fsk_block_encode(cnetz, bits, 1); } else { fsk_nothing_encode(cnetz); } break; case DSP_MODE_SPK_K: bits = cnetz_encode_telegramm(cnetz); - fsk_block_encode(cnetz, bits, 0); - PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Konzentrierte Signalisierung' at timeslot %d.%d\n", cnetz->sched_ts, cnetz->sched_r_m * 5); + if (bits) { + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Konzentrierte Signalisierung' at timeslot %d.%d\n", cnetz->sched_ts, cnetz->sched_r_m * 5); + fsk_block_encode(cnetz, bits, 0); + } else + fsk_nothing_encode(cnetz); break; case DSP_MODE_SPK_V: bits = cnetz_encode_telegramm(cnetz); - fsk_distributed_encode(cnetz, bits); - PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Verteilte Signalisierung' starting at timeslot %d\n", cnetz->sched_ts); + if (bits) { + PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Transmitting 'Verteilte Signalisierung' starting at timeslot %d\n", cnetz->sched_ts); + fsk_distributed_encode(cnetz, bits); + } else + fsk_nothing_encode(cnetz); break; case DSP_MODE_OFF: default: @@ -879,10 +892,12 @@ void cnetz_set_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode) void cnetz_set_sched_dsp_mode(cnetz_t *cnetz, enum dsp_mode mode, int timeslot) { - if (mode != cnetz->dsp_mode) { - PDEBUG_CHAN(DDSP, DEBUG_INFO, "Schedule DSP mode %s -> %s at timeslot %d\n", cnetz_dsp_mode_name(cnetz->dsp_mode), cnetz_dsp_mode_name(mode), timeslot); - cnetz->sched_dsp_mode = mode; - cnetz->sched_dsp_mode_ts = timeslot; + if (cnetz->sched_dsp_mode_ts < 0 && mode == cnetz->dsp_mode) { + PDEBUG_CHAN(DDSP, DEBUG_INFO, "Schedule DSP mode %s not required, we are already in that mode\n", cnetz_dsp_mode_name(mode)); + return; } + PDEBUG_CHAN(DDSP, DEBUG_INFO, "Schedule DSP mode %s -> %s at timeslot %d\n", cnetz_dsp_mode_name(cnetz->dsp_mode), cnetz_dsp_mode_name(mode), timeslot); + cnetz->sched_dsp_mode = mode; + cnetz->sched_dsp_mode_ts = timeslot; } |