summaryrefslogtreecommitdiffstats
path: root/src/target/firmware/layer1/l23_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/target/firmware/layer1/l23_api.c')
-rw-r--r--src/target/firmware/layer1/l23_api.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c
index 2f1108f6..95704922 100644
--- a/src/target/firmware/layer1/l23_api.c
+++ b/src/target/firmware/layer1/l23_api.c
@@ -30,6 +30,7 @@
#include <byteorder.h>
#include <osmocore/msgb.h>
+#include <osmocore/protocol/gsm_04_08.h>
#include <comm/sercomm.h>
#include <layer1/sync.h>
@@ -246,6 +247,7 @@ static void l1ctl_rx_dm_rel_req(struct msgb *msg)
l1s.dedicated.type = GSM_DCHAN_NONE;
l1a_txq_msgb_flush(&l1s.tx_queue[L1S_CHAN_MAIN]);
l1a_txq_msgb_flush(&l1s.tx_queue[L1S_CHAN_SACCH]);
+ l1a_meas_msgb_set(NULL);
dsp_load_ciph_param(0, NULL);
}
@@ -286,9 +288,17 @@ static void l1ctl_rx_data_req(struct msgb *msg)
printd("L1CTL_DATA_REQ (link_id=0x%02x)\n", ul->link_id);
msg->l3h = data_ind->data;
- tx_queue = (ul->link_id & 0x40) ?
- &l1s.tx_queue[L1S_CHAN_SACCH] :
- &l1s.tx_queue[L1S_CHAN_MAIN];
+ if (ul->link_id & 0x40) {
+ struct gsm48_hdr *gh = (struct gsm48_hdr *)(data_ind->data + 5);
+ if (gh->proto_discr == GSM48_PDISC_RR
+ && gh->msg_type == GSM48_MT_RR_MEAS_REP) {
+ printd("updating measurement report\n");
+ l1a_meas_msgb_set(msg);
+ return;
+ }
+ tx_queue = &l1s.tx_queue[L1S_CHAN_SACCH];
+ } else
+ tx_queue = &l1s.tx_queue[L1S_CHAN_MAIN];
printd("ul=%p, ul->payload=%p, data_ind=%p, data_ind->data=%p l3h=%p\n",
ul, ul->payload, data_ind, data_ind->data, msg->l3h);