This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Vadim Yanitskiy gerrit-no-reply at lists.osmocom.orgVadim Yanitskiy has uploaded this change for review. ( https://gerrit.osmocom.org/10942 Change subject: trxcon/scheduler: introduce TDMA frame math helpers ...................................................................... trxcon/scheduler: introduce TDMA frame math helpers The 'normal' math operations, such as addition and substraction, are not applicable for TDMA frame numbers because they may result in out-of-range values. Having TDMA frame math helpers in a single place would allow one to avoid possible out-of-range result mistakes. Change-Id: Ibb66ba846cc3d6c2eaa88414569e5f3751128047 --- M src/host/trxcon/sched_clck.c M src/host/trxcon/sched_trx.c M src/host/trxcon/scheduler.h 3 files changed, 16 insertions(+), 12 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/42/10942/1 diff --git a/src/host/trxcon/sched_clck.c b/src/host/trxcon/sched_clck.c index 56b89a2..8a9527c 100644 --- a/src/host/trxcon/sched_clck.c +++ b/src/host/trxcon/sched_clck.c @@ -84,8 +84,7 @@ timespecadd(tv_clock, &frame_duration, tv_clock); elapsed_us -= FRAME_DURATION_uS; - sched->fn_counter_proc = (sched->fn_counter_proc + 1) - % GSM_HYPERFRAME; + sched->fn_counter_proc = TDMA_FN_INC(sched->fn_counter_proc); /* Call frame callback */ if (sched->clock_cb) @@ -143,8 +142,7 @@ /* Calculate elapsed time / frames since last processed fn */ timespecsub(&tv_now, tv_clock, &elapsed); elapsed_us = (elapsed.tv_sec * 1000000) + (elapsed.tv_nsec / 1000); - elapsed_fn = (fn + GSM_HYPERFRAME - sched->fn_counter_proc) - % GSM_HYPERFRAME; + elapsed_fn = TDMA_FN_SUB(fn, sched->fn_counter_proc); if (elapsed_fn >= 135774) elapsed_fn -= GSM_HYPERFRAME; @@ -182,8 +180,7 @@ /* Transmit what we still need to transmit */ while (fn != sched->fn_counter_proc) { - sched->fn_counter_proc = (sched->fn_counter_proc + 1) - % GSM_HYPERFRAME; + sched->fn_counter_proc = TDMA_FN_INC(sched->fn_counter_proc); /* Call frame callback */ if (sched->clock_cb) diff --git a/src/host/trxcon/sched_trx.c b/src/host/trxcon/sched_trx.c index 8bd3c72..e20da39 100644 --- a/src/host/trxcon/sched_trx.c +++ b/src/host/trxcon/sched_trx.c @@ -65,8 +65,8 @@ * Advance frame number, giving the transceiver more * time until a burst must be transmitted... */ - fn = (sched->fn_counter_proc + sched->fn_counter_advance) - % GSM_HYPERFRAME; + fn = TDMA_FN_SUM(sched->fn_counter_proc, + sched->fn_counter_advance); /* Get frame from multiframe */ offset = fn % ts->mf_layout->period; @@ -608,15 +608,14 @@ } /* Calculate how many frames have been elapsed */ - elapsed = (burst_fn + GSM_HYPERFRAME - ts->mf_last_fn); - elapsed %= GSM_HYPERFRAME; + elapsed = TDMA_FN_SUB(burst_fn, ts->mf_last_fn); /** * If not too many frames have been elapsed, * start counting from last fn + 1 */ if (elapsed < 10) - fn = (ts->mf_last_fn + 1) % GSM_HYPERFRAME; + fn = TDMA_FN_INC(ts->mf_last_fn); else fn = burst_fn; @@ -658,7 +657,7 @@ if (fn == burst_fn) break; - fn = (fn + 1) % GSM_HYPERFRAME; + fn = TDMA_FN_INC(fn); } /* Set last processed frame number */ diff --git a/src/host/trxcon/scheduler.h b/src/host/trxcon/scheduler.h index 6c3a2f2..6b70b41 100644 --- a/src/host/trxcon/scheduler.h +++ b/src/host/trxcon/scheduler.h @@ -8,6 +8,14 @@ #define GSM_SUPERFRAME (26 * 51) #define GSM_HYPERFRAME (2048 * GSM_SUPERFRAME) +/* TDMA frame number arithmetics */ +#define TDMA_FN_INC(fn) \ + ((fn + 1) % GSM_HYPERFRAME) +#define TDMA_FN_SUM(a, b) \ + ((a + b) % GSM_HYPERFRAME) +#define TDMA_FN_SUB(a, b) \ + ((a + GSM_HYPERFRAME - b) % GSM_HYPERFRAME) + enum tdma_sched_clck_state { SCH_CLCK_STATE_WAIT, SCH_CLCK_STATE_OK, -- To view, visit https://gerrit.osmocom.org/10942 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmocom-bb Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: Ibb66ba846cc3d6c2eaa88414569e5f3751128047 Gerrit-Change-Number: 10942 Gerrit-PatchSet: 1 Gerrit-Owner: Vadim Yanitskiy <axilirator at gmail.com> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180913/f5e1b14f/attachment.htm>