summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-12-11 11:20:50 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2015-12-25 09:33:07 +0100
commit2ec90e982259346eb06ff85794cc640f53df5f0b (patch)
tree5d2e27c4a6dc82003c093893dd81c969c8605337
parent45aa2cc3a22a23741290720d924efc951fb00205 (diff)
[WIP] HO: Add RX only mode for handover
When establishing dedicate mode, a flag is used to disable transitter. When transmitter is disabled, access bursts are allowed. After sending a L1CTL_PARAM_REQ, the transmitter is enabled with given parameters.
-rw-r--r--src/target/firmware/include/layer1/sync.h2
-rw-r--r--src/target/firmware/layer1/l23_api.c7
-rw-r--r--src/target/firmware/layer1/prim_tch.c8
3 files changed, 17 insertions, 0 deletions
diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h
index 40cc3aaa..18e6b84b 100644
--- a/src/target/firmware/include/layer1/sync.h
+++ b/src/target/firmware/include/layer1/sync.h
@@ -144,6 +144,8 @@ struct l1s_state {
struct l1s_h0 st_h0;
struct l1s_h1 st_h1;
};
+
+ uint8_t rx_only;
} dedicated;
/* neighbor cell power measurement process */
diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c
index f46e63a9..0e18ec4d 100644
--- a/src/target/firmware/layer1/l23_api.c
+++ b/src/target/firmware/layer1/l23_api.c
@@ -266,6 +266,12 @@ static void l1ctl_rx_dm_est_req(struct msgb *msg)
audio_set_enabled(est_req->tch_mode, est_req->audio_mode);
}
+ /* Handover config */
+ if ((est_req->flags & L1CTL_EST_F_RXONLY))
+ l1s.dedicated.rx_only = 1;
+ else
+ l1s.dedicated.rx_only = 0;
+
/* figure out which MF tasks to enable */
l1s.neigh_pm.n = 0;
l1a_mftask_set(chan_nr2mf_task_mask(ul->chan_nr, NEIGH_MODE_PM));
@@ -356,6 +362,7 @@ static void l1ctl_rx_param_req(struct msgb *msg)
l1s.ta = par_req->ta;
l1s.tx_power = par_req->tx_power;
+ l1s.dedicated.rx_only = 0;
}
/* receive a L1CTL_RACH_REQ from L23 */
diff --git a/src/target/firmware/layer1/prim_tch.c b/src/target/firmware/layer1/prim_tch.c
index a0a03b81..c09c2069 100644
--- a/src/target/firmware/layer1/prim_tch.c
+++ b/src/target/firmware/layer1/prim_tch.c
@@ -481,6 +481,10 @@ skip_tx_traffic:
);
l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0);
+ /* stop here, if TX is disabled */
+ if (l1s.dedicated.rx_only)
+ return 0;
+
dsp_load_tx_task(
dsp_task_iq_swap(TCHT_DSP_TASK, arfcn, 1),
0, tsc /* burst_id unused for TCH */
@@ -746,6 +750,10 @@ static int l1s_tch_a_cmd(__unused uint8_t p1, __unused uint8_t p2, uint16_t p3)
);
l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0);
+ /* stop here, if TX is disabled */
+ if (l1s.dedicated.rx_only)
+ return 0;
+
dsp_load_tx_task(
dsp_task_iq_swap(TCHA_DSP_TASK, arfcn, 1),
0, tsc /* burst_id unused for TCHA */