aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/osmo-bts-trx/sched_lchan_tchf.c23
-rw-r--r--src/osmo-bts-trx/sched_lchan_tchh.c15
2 files changed, 36 insertions, 2 deletions
diff --git a/src/osmo-bts-trx/sched_lchan_tchf.c b/src/osmo-bts-trx/sched_lchan_tchf.c
index f0658038..0188d859 100644
--- a/src/osmo-bts-trx/sched_lchan_tchf.c
+++ b/src/osmo-bts-trx/sched_lchan_tchf.c
@@ -472,10 +472,29 @@ int tx_tchf_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br)
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
};
+ int rc;
LOGL1SB(DL1P, LOGL_DEBUG, l1ts, br, "No TCH or FACCH prim for transmit.\n");
- gsm0503_tch_fr_encode(bursts_p, dummy, sizeof(dummy), 1);
- chan_state->dl_facch_bursts = 8;
+ /* If the channel mode is TCH/FS or TCH/EFS, transmit a dummy
+ * speech block with inverted CRC3, designed to induce a BFI
+ * condition in the MS receiver. In all other channel modes,
+ * transmit dummy FACCH like we always did before.
+ *
+ * FIXME: someone who knows AMR needs to look at this problem
+ * and decide what is the correct BTS Tx behavior for frame
+ * gaps in TCH/AFS. See OS#6049.
+ */
+ switch (tch_mode) {
+ case GSM48_CMODE_SPEECH_V1:
+ case GSM48_CMODE_SPEECH_EFR:
+ rc = gsm0503_tch_fr_encode(bursts_p, NULL, 0, 1);
+ if (rc == 0)
+ break;
+ /* fall-through */
+ default:
+ gsm0503_tch_fr_encode(bursts_p, dummy, sizeof(dummy), 1);
+ chan_state->dl_facch_bursts = 8;
+ }
goto send_burst;
}
diff --git a/src/osmo-bts-trx/sched_lchan_tchh.c b/src/osmo-bts-trx/sched_lchan_tchh.c
index 5772e9f4..2f1194ae 100644
--- a/src/osmo-bts-trx/sched_lchan_tchh.c
+++ b/src/osmo-bts-trx/sched_lchan_tchh.c
@@ -385,8 +385,23 @@ int tx_tchh_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br)
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
};
+ int rc;
LOGL1SB(DL1P, LOGL_INFO, l1ts, br, "No TCH or FACCH prim for transmit.\n");
+ /* If the channel mode is TCH/HS, transmit a dummy speech block
+ * with inverted CRC3, designed to induce a BFI condition in
+ * the MS receiver. In all other channel modes, transmit
+ * dummy FACCH like we always did before.
+ *
+ * FIXME: someone who knows AMR needs to look at this problem
+ * and decide what is the correct BTS Tx behavior for frame
+ * gaps in TCH/AHS. See OS#6049.
+ */
+ if (tch_mode == GSM48_CMODE_SPEECH_V1) {
+ rc = gsm0503_tch_hr_encode(bursts_p, NULL, 0);
+ if (rc == 0)
+ goto send_burst;
+ }
/* FACCH/H can only be scheduled at specific TDMA offset */
if (!sched_tchh_dl_facch_map[br->fn % 26]) {