summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-05-10 02:43:59 +0700
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-05-10 02:44:02 +0700
commit80de799514f20dd9d3759932d7c839902c7b7692 (patch)
tree198918e62d2f1b82bf47cb185aba18f50b74a67f
parent8e78ff491babe84416dbb5744b3aa3842b3dd68b (diff)
virt_phy: fix TDMA Fn math in l1ctl_rx_rach_req()
-rw-r--r--src/host/virt_phy/src/virt_prim_rach.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/host/virt_phy/src/virt_prim_rach.c b/src/host/virt_phy/src/virt_prim_rach.c
index 547e8f1f..d12e63c6 100644
--- a/src/host/virt_phy/src/virt_prim_rach.c
+++ b/src/host/virt_phy/src/virt_prim_rach.c
@@ -26,6 +26,7 @@
#include <osmocom/core/msgb.h>
#include <osmocom/gsm/rsl.h>
#include <osmocom/gsm/gsm_utils.h>
+#include <osmocom/gsm/gsm0502.h>
#include <osmocom/gsm/protocol/gsm_08_58.h>
#include <osmocom/bb/virtphy/l1ctl_sap.h>
@@ -97,11 +98,12 @@ void l1ctl_rx_rach_req(struct l1_model_ms *ms, struct msgb *msg)
/* add elapsed RACH slots to offset */
offset += t3_to_rach_comb[l1s->current_time.t3];
/* offset is the number of RACH slots in the future */
- fn_sched = l1s->current_time.fn - l1s->current_time.t3;
+ fn_sched = GSM_TDMA_FN_SUB(l1s->current_time.fn, l1s->current_time.t3);
fn_sched += offset / 27 * 51;
fn_sched += rach_to_t3_comb[offset % 27];
+ fn_sched %= GSM_TDMA_HYPERFRAME;
} else
- fn_sched = l1s->current_time.fn + offset;
+ fn_sched = GSM_TDMA_FN_SUM(l1s->current_time.fn, offset);
virt_l1_sched_schedule(ms, msg, fn_sched, ul->chan_nr & 0x07,
&virt_l1_sched_handler_cb);