Review at  https://gerrit.osmocom.org/6736

host/trxcon/scheduler: implement TSC selection

Change-Id: I004cc71aafe0a26e5141a4b2ffa90063e961be31
---
M src/host/trxcon/l1ctl.c
M src/host/trxcon/sched_lchan_handlers.c
M src/host/trxcon/trx_if.h
3 files changed, 44 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/36/6736/1

diff --git a/src/host/trxcon/l1ctl.c b/src/host/trxcon/l1ctl.c
index 64e9d65..12745e9 100644
--- a/src/host/trxcon/l1ctl.c
+++ b/src/host/trxcon/l1ctl.c
@@ -497,9 +497,8 @@
                goto exit;
        }
 
-       /* Update TSC (Training Sequence) */
-       /* FIXME: est_req->tsc is a number of TSC */
-       memset(l1l->trx->tsc, 0x00, 26);
+       /* Update TSC (Training Sequence Code) */
+       l1l->trx->tsc = est_req->tsc;
 
        /* Determine channel config */
        config = sched_trx_chan_nr2pchan_config(chan_nr);
diff --git a/src/host/trxcon/sched_lchan_handlers.c 
b/src/host/trxcon/sched_lchan_handlers.c
index 078c5fd..303ae81 100644
--- a/src/host/trxcon/sched_lchan_handlers.c
+++ b/src/host/trxcon/sched_lchan_handlers.c
@@ -48,6 +48,42 @@
 
 extern struct osmo_fsm_inst *trxcon_fsm;
 
+/* GSM 05.02 Chapter 5.2.3 Normal Burst (NB) */
+static const uint8_t nb_training_bits[8][26] = {
+       {
+               0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0,
+               0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1,
+       },
+       {
+               0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1,
+               1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1,
+       },
+       {
+               0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1,
+               0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0,
+       },
+       {
+               0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0,
+               1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0,
+       },
+       {
+               0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0,
+               1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1,
+       },
+       {
+               0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0,
+               0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0,
+       },
+       {
+               1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1,
+               0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1,
+       },
+       {
+               1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0,
+               0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
+       },
+};
+
 int rx_data_fn(struct trx_instance *trx, struct trx_ts *ts,
        uint32_t fn, enum trx_lchan_type chan, uint8_t bid,
        sbit_t *bits, uint16_t nbits, int8_t rssi, float toa)
@@ -174,6 +210,7 @@
        ubit_t burst[GSM_BURST_LEN];
        ubit_t *buffer, *offset;
        uint8_t *mask, *l2;
+       const uint8_t *tsc;
        int rc;
 
        /* Find required channel state */
@@ -219,6 +256,9 @@
        /* Update mask */
        *mask |= (1 << bid);
 
+       /* Choose proper TSC */
+       tsc = nb_training_bits[trx->tsc];
+
        /* If we are sending the last (4/4) burst */
        if ((*mask & 0x0f) == 0x0f) {
                /* Remove primitive from queue and free memory */
@@ -233,7 +273,7 @@
        /* Compose a new burst */
        memset(burst, 0, 3); /* TB */
        memcpy(burst + 3, offset, 58); /* Payload 1/2 */
-       memcpy(burst + 61, trx->tsc, 26); /* TSC */
+       memcpy(burst + 61, tsc, 26); /* TSC */
        memcpy(burst + 87, offset + 58, 58); /* Payload 2/2 */
        memset(burst + 145, 0, 3); /* TB */
 
diff --git a/src/host/trxcon/trx_if.h b/src/host/trxcon/trx_if.h
index 9e3a32a..6367f45 100644
--- a/src/host/trxcon/trx_if.h
+++ b/src/host/trxcon/trx_if.h
@@ -32,8 +32,8 @@
        uint16_t pm_arfcn_start;
        uint16_t pm_arfcn_stop;
        uint16_t band_arfcn;
-       uint8_t tsc[26];
        uint8_t bsic;
+       uint8_t tsc;
 
        /* Scheduler stuff */
        struct trx_sched sched;

-- 
To view, visit https://gerrit.osmocom.org/6736
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I004cc71aafe0a26e5141a4b2ffa90063e961be31
Gerrit-PatchSet: 1
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <lafo...@gnumonks.org>

Reply via email to