aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric <ewild@sysmocom.de>2023-04-21 13:59:56 +0200
committerEric <ewild@sysmocom.de>2023-07-07 19:12:39 +0200
commit135d64b1a96438a13ca872f87cde8f15442455b2 (patch)
tree1db5570d988950aa2c864cf3f9e6608f710348b0
parente44cf44af4abe3ba2b43964d2a1243bbff9a1768 (diff)
ms: rearrange internal trxcon<->phy if
-rw-r--r--Transceiver52M/Makefile.am18
-rw-r--r--Transceiver52M/ms/l1ctl_server_cb.cpp20
-rw-r--r--Transceiver52M/ms/ms_rx_lower.cpp2
-rw-r--r--Transceiver52M/ms/ms_trxcon_if.cpp78
-rw-r--r--Transceiver52M/ms/ms_trxcon_if.h42
-rw-r--r--Transceiver52M/ms/ms_upper.cpp215
-rw-r--r--Transceiver52M/ms/ms_upper.h1
7 files changed, 204 insertions, 172 deletions
diff --git a/Transceiver52M/Makefile.am b/Transceiver52M/Makefile.am
index 296ff05..65c8ebe 100644
--- a/Transceiver52M/Makefile.am
+++ b/Transceiver52M/Makefile.am
@@ -82,19 +82,27 @@ TRXCON_LDADD = \
$(top_builddir)/osmocom-bb/src/host/trxcon/src/.libs/libl1sched.a \
$(LIBOSMOCODING_LIBS)
-MS_SOURCES = \
+MS_LOWER_SRC = \
ms/sch.c \
ms/ms.cpp \
ms/ms_rx_lower.cpp \
grgsm_vitac/grgsm_vitac.cpp \
grgsm_vitac/viterbi_detector.cc
+MS_UPPER_SRC = \
+ ms/ms_upper.cpp \
+ ms/l1ctl_server.c \
+ ms/logging.c \
+ ms/l1ctl_server_cb.cpp \
+ ms/ms_trxcon_if.cpp
+
noinst_HEADERS += \
ms/ms.h \
ms/bladerf_specific.h \
ms/uhd_specific.h \
ms/ms_rx_burst.h \
ms/ms_upper.h \
+ ms/ms_trxcon_if.h \
ms/itrq.h \
ms/sch.h \
ms/threadpool.h \
@@ -117,7 +125,7 @@ osmo_trx_uhd_CPPFLAGS = $(AM_CPPFLAGS) $(UHD_CFLAGS)
if ENABLE_MS_TRX
bin_PROGRAMS += osmo-trx-ms-uhd
-osmo_trx_ms_uhd_SOURCES = $(MS_SOURCES) ms/ms_upper.cpp ms/l1ctl_server.c ms/logging.c ms/l1ctl_server_cb.cpp
+osmo_trx_ms_uhd_SOURCES = $(MS_LOWER_SRC) $(MS_UPPER_SRC)
osmo_trx_ms_uhd_LDADD = \
$(builddir)/device/uhd/libdevice.la \
$(COMMON_LDADD) \
@@ -126,7 +134,7 @@ osmo_trx_ms_uhd_LDADD = \
osmo_trx_ms_uhd_CPPFLAGS = $(AM_CPPFLAGS) $(UHD_CFLAGS) -DBUILDUHD
bin_PROGRAMS += osmo-trx-syncthing-uhd
-osmo_trx_syncthing_uhd_SOURCES = $(MS_SOURCES) ms/ms_rx_burst_test.cpp
+osmo_trx_syncthing_uhd_SOURCES = $(MS_LOWER_SRC) ms/ms_rx_burst_test.cpp
osmo_trx_syncthing_uhd_LDADD = \
$(builddir)/device/uhd/libdevice.la \
$(COMMON_LDADD) \
@@ -167,7 +175,7 @@ osmo_trx_blade_CPPFLAGS = $(AM_CPPFLAGS) $(LMS_CFLAGS)
if ENABLE_MS_TRX
bin_PROGRAMS += osmo-trx-ms-blade
-osmo_trx_ms_blade_SOURCES = $(MS_SOURCES) ms/ms_upper.cpp ms/l1ctl_server.c ms/logging.c ms/l1ctl_server_cb.cpp
+osmo_trx_ms_blade_SOURCES = $(MS_LOWER_SRC) $(MS_UPPER_SRC)
osmo_trx_ms_blade_LDADD = \
$(builddir)/device/bladerf/libdevice.la \
$(COMMON_LDADD) \
@@ -176,7 +184,7 @@ osmo_trx_ms_blade_LDADD = \
osmo_trx_ms_blade_CPPFLAGS = $(AM_CPPFLAGS) $(BLADE_CFLAGS) -DBUILDBLADE
bin_PROGRAMS += osmo-trx-syncthing-blade
-osmo_trx_syncthing_blade_SOURCES = $(MS_SOURCES) ms/ms_rx_burst_test.cpp
+osmo_trx_syncthing_blade_SOURCES = $(MS_LOWER_SRC) ms/ms_rx_burst_test.cpp
osmo_trx_syncthing_blade_LDADD = \
$(builddir)/device/bladerf/libdevice.la \
$(COMMON_LDADD) \
diff --git a/Transceiver52M/ms/l1ctl_server_cb.cpp b/Transceiver52M/ms/l1ctl_server_cb.cpp
index 4121451..42f64ac 100644
--- a/Transceiver52M/ms/l1ctl_server_cb.cpp
+++ b/Transceiver52M/ms/l1ctl_server_cb.cpp
@@ -24,13 +24,10 @@ extern "C" {
#include <osmocom/bb/trxcon/trxcon_fsm.h>
#include <osmocom/bb/trxcon/l1ctl_server.h>
}
+#include "ms_trxcon_if.h"
static struct l1ctl_server_cfg server_cfg;
static struct l1ctl_server *server = NULL;
-namespace trxcon
-{
-extern struct trxcon_inst *g_trxcon;
-}
static int l1ctl_rx_cb(struct l1ctl_client *l1c, struct msgb *msg)
{
@@ -41,9 +38,9 @@ static int l1ctl_rx_cb(struct l1ctl_client *l1c, struct msgb *msg)
static void l1ctl_conn_accept_cb(struct l1ctl_client *l1c)
{
- l1c->log_prefix = talloc_strdup(l1c, trxcon::g_trxcon->log_prefix);
- l1c->priv = trxcon::g_trxcon;
- trxcon::g_trxcon->l2if = l1c;
+ l1c->log_prefix = talloc_strdup(l1c, g_trxcon->log_prefix);
+ l1c->priv = g_trxcon;
+ g_trxcon->l2if = l1c;
}
static void l1ctl_conn_close_cb(struct l1ctl_client *l1c)
@@ -56,17 +53,13 @@ static void l1ctl_conn_close_cb(struct l1ctl_client *l1c)
osmo_fsm_inst_dispatch(trxcon->fi, TRXCON_EV_L2IF_FAILURE, NULL);
}
-namespace trxcon
-{
bool trxc_l1ctl_init(void *tallctx)
{
/* Start the L1CTL server */
server_cfg = (struct l1ctl_server_cfg){
/* TODO: make path configurable */
- .sock_path = "/tmp/osmocom_l2",
- .num_clients_max = 1,
- .conn_read_cb = &l1ctl_rx_cb,
- .conn_accept_cb = &l1ctl_conn_accept_cb,
+ .sock_path = "/tmp/osmocom_l2", .num_clients_max = 1,
+ .conn_read_cb = &l1ctl_rx_cb, .conn_accept_cb = &l1ctl_conn_accept_cb,
.conn_close_cb = &l1ctl_conn_close_cb,
};
@@ -76,4 +69,3 @@ bool trxc_l1ctl_init(void *tallctx)
}
return true;
}
-} // namespace trxcon \ No newline at end of file
diff --git a/Transceiver52M/ms/ms_rx_lower.cpp b/Transceiver52M/ms/ms_rx_lower.cpp
index dc0d56d..3a7e6ec 100644
--- a/Transceiver52M/ms/ms_rx_lower.cpp
+++ b/Transceiver52M/ms/ms_rx_lower.cpp
@@ -19,8 +19,6 @@
*
*/
-#include "sigProcLib.h"
-#include "signalVector.h"
#include <atomic>
#include <cassert>
#include <complex>
diff --git a/Transceiver52M/ms/ms_trxcon_if.cpp b/Transceiver52M/ms/ms_trxcon_if.cpp
new file mode 100644
index 0000000..7de9710
--- /dev/null
+++ b/Transceiver52M/ms/ms_trxcon_if.cpp
@@ -0,0 +1,78 @@
+/*
+ * (C) 2023 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
+ * All Rights Reserved
+ *
+ * Author: Eric Wild <ewild@sysmocom.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <atomic>
+#include "ms_trxcon_if.h"
+extern "C" {
+#include <osmocom/bb/trxcon/trxcon.h>
+#include <osmocom/bb/trxcon/l1ctl_server.h>
+#include <osmocom/core/panic.h>
+}
+
+extern tx_queue_t txq;
+extern cmd_queue_t cmdq_to_phy;
+extern cmdr_queue_t cmdq_from_phy;
+extern std::atomic<bool> g_exit_flag;
+// trxcon C call(back) if
+extern "C" {
+int trxcon_phyif_handle_burst_req(void *phyif, const struct trxcon_phyif_burst_req *br)
+{
+ if (br->burst_len == 0) // dummy/nope
+ return 0;
+ OSMO_ASSERT(br->burst != 0);
+
+ internal_q_tx_buf b(br);
+ if (!g_exit_flag)
+ txq.spsc_push(&b);
+ return 0;
+}
+
+int trxcon_phyif_handle_cmd(void *phyif, const struct trxcon_phyif_cmd *cmd)
+{
+#ifdef TXDEBUG
+ DBGLG() << "TOP C: " << cmd2str(cmd->type) << std::endl;
+#endif
+ if (!g_exit_flag)
+ cmdq_to_phy.spsc_push(cmd);
+ // q for resp polling happens in main loop
+ return 0;
+}
+
+void trxcon_phyif_close(void *phyif)
+{
+}
+
+void trxcon_l1ctl_close(struct trxcon_inst *trxcon)
+{
+ /* Avoid use-after-free: both *fi and *trxcon are children of
+ * the L2IF (L1CTL connection), so we need to re-parent *fi
+ * to NULL before calling l1ctl_client_conn_close(). */
+ talloc_steal(NULL, trxcon->fi);
+ l1ctl_client_conn_close((struct l1ctl_client *)trxcon->l2if);
+}
+
+int trxcon_l1ctl_send(struct trxcon_inst *trxcon, struct msgb *msg)
+{
+ struct l1ctl_client *l1c = (struct l1ctl_client *)trxcon->l2if;
+
+ return l1ctl_client_send(l1c, msg);
+}
+}
diff --git a/Transceiver52M/ms/ms_trxcon_if.h b/Transceiver52M/ms/ms_trxcon_if.h
new file mode 100644
index 0000000..9879d1a
--- /dev/null
+++ b/Transceiver52M/ms/ms_trxcon_if.h
@@ -0,0 +1,42 @@
+#pragma once
+/*
+ * (C) 2023 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
+ * All Rights Reserved
+ *
+ * Author: Eric Wild <ewild@sysmocom.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "ms.h"
+extern "C" {
+#include <osmocom/bb/trxcon/phyif.h>
+}
+
+extern struct trxcon_inst *g_trxcon;
+struct internal_q_tx_buf {
+ trxcon_phyif_burst_req r;
+ uint8_t buf[148];
+ internal_q_tx_buf() = default;
+ internal_q_tx_buf(const internal_q_tx_buf &) = delete;
+ internal_q_tx_buf &operator=(const internal_q_tx_buf &) = default;
+ internal_q_tx_buf(const struct trxcon_phyif_burst_req *br) : r(*br)
+ {
+ memcpy(buf, (void *)br->burst, br->burst_len);
+ }
+};
+using tx_queue_t = spsc_cond<8 * 1, internal_q_tx_buf, true, false>;
+using cmd_queue_t = spsc_cond<8 * 1, trxcon_phyif_cmd, true, false>;
+using cmdr_queue_t = spsc_cond<8 * 1, trxcon_phyif_rsp, false, false>;
diff --git a/Transceiver52M/ms/ms_upper.cpp b/Transceiver52M/ms/ms_upper.cpp
index cae1893..a10d542 100644
--- a/Transceiver52M/ms/ms_upper.cpp
+++ b/Transceiver52M/ms/ms_upper.cpp
@@ -19,6 +19,7 @@
*
*/
+#include <csignal>
#include "sigProcLib.h"
#include "ms.h"
#include <signalVector.h>
@@ -27,70 +28,30 @@
#include <grgsm_vitac/grgsm_vitac.h>
extern "C" {
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <getopt.h>
-#include <unistd.h>
-#include <signal.h>
-#include <errno.h>
-#include <time.h>
-#include <fenv.h>
#include "sch.h"
#include "convolve.h"
#include "convert.h"
+#include <osmocom/gsm/gsm_utils.h>
+#include <osmocom/bb/trxcon/trxcon.h>
+#include <osmocom/bb/trxcon/trxcon_fsm.h>
+#include <osmocom/bb/trxcon/l1ctl_server.h>
+
+extern void trxc_log_init(void *tallctx);
#ifdef LSANDEBUG
void __lsan_do_recoverable_leak_check();
#endif
}
+#include "ms_trxcon_if.h"
#include "ms_upper.h"
-namespace trxcon
-{
-extern "C" {
-#include <osmocom/core/fsm.h>
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/talloc.h>
-#include <osmocom/core/signal.h>
-#include <osmocom/core/select.h>
-#include <osmocom/gsm/gsm_utils.h>
-
-#include <osmocom/core/logging.h>
-#include <osmocom/bb/trxcon/logging.h>
-
-#include <osmocom/bb/trxcon/trxcon.h>
-#include <osmocom/bb/trxcon/trxcon_fsm.h>
-#include <osmocom/bb/trxcon/phyif.h>
-#include <osmocom/bb/trxcon/l1ctl_server.h>
-}
-struct trxcon_inst *g_trxcon;
-// trx_instance *trxcon_instance; // local handle
-struct internal_q_tx_buf {
- trxcon_phyif_burst_req r;
- uint8_t buf[148];
- internal_q_tx_buf() = default;
- internal_q_tx_buf(const internal_q_tx_buf &) = delete;
- internal_q_tx_buf &operator=(const internal_q_tx_buf &) = default;
- internal_q_tx_buf(const struct trxcon::trxcon_phyif_burst_req *br) : r(*br)
- {
- memcpy(buf, (void *)br->burst, br->burst_len);
- }
-};
-using tx_queue_t = spsc_cond<8 * 1, internal_q_tx_buf, true, false>;
-using cmd_queue_t = spsc_cond<8 * 1, trxcon_phyif_cmd, true, false>;
-using cmdr_queue_t = spsc_cond<8 * 1, trxcon_phyif_rsp, false, false>;
-static tx_queue_t txq;
-static cmd_queue_t cmdq_to_phy;
-static cmdr_queue_t cmdq_from_phy;
-
extern bool trxc_l1ctl_init(void *tallctx);
-
-} // namespace trxcon
-extern "C" void trxc_log_init(void *tallctx);
+struct trxcon_inst *g_trxcon;
+tx_queue_t txq;
+cmd_queue_t cmdq_to_phy;
+cmdr_queue_t cmdq_from_phy;
#ifdef LOG
#undef LOG
@@ -138,12 +99,12 @@ void upper_trx::start_threads()
// set_upper_ready(true) needs to happen during cmd handling:
// the main loop is driven by rx, so unless rx is on AND transceiver is on we get stuck..
driveReceiveFIFO();
- trxcon::osmo_select_main(1);
+ osmo_select_main(1);
- trxcon::trxcon_phyif_rsp r;
- if (trxcon::cmdq_from_phy.spsc_pop(&r)) {
+ trxcon_phyif_rsp r;
+ if (cmdq_from_phy.spsc_pop(&r)) {
DBGLG() << "HAVE RESP:" << r.type << std::endl;
- trxcon_phyif_handle_rsp(trxcon::g_trxcon, &r);
+ trxcon_phyif_handle_rsp(g_trxcon, &r);
}
}
set_upper_ready(false);
@@ -196,9 +157,9 @@ bool upper_trx::pullRadioVector(GSM::Time &wTime, int &RSSI, int &timingOffset)
const auto is_sch = gsm_sch_check_ts(wTime.TN(), wTime.FN());
const auto is_fcch = gsm_fcch_check_ts(wTime.TN(), wTime.FN());
- trxcon::trxcon_phyif_rtr_ind i = { static_cast<uint32_t>(wTime.FN()), static_cast<uint8_t>(wTime.TN()) };
- trxcon::trxcon_phyif_rtr_rsp r = {};
- trxcon_phyif_handle_rtr_ind(trxcon::g_trxcon, &i, &r);
+ trxcon_phyif_rtr_ind i = { static_cast<uint32_t>(wTime.FN()), static_cast<uint8_t>(wTime.TN()) };
+ trxcon_phyif_rtr_rsp r = {};
+ trxcon_phyif_handle_rtr_ind(g_trxcon, &i, &r);
if (!(r.flags & TRXCON_PHYIF_RTR_F_ACTIVE))
return false;
@@ -265,28 +226,28 @@ void upper_trx::driveReceiveFIFO()
return;
if (pullRadioVector(burstTime, RSSI, TOA)) {
- trxcon::trxcon_phyif_burst_ind bi;
+ trxcon_phyif_burst_ind bi;
bi.fn = burstTime.FN();
bi.tn = burstTime.TN();
bi.rssi = RSSI;
bi.toa256 = TOA;
bi.burst = (sbit_t *)demodded_softbits;
bi.burst_len = sizeof(demodded_softbits);
- trxcon_phyif_handle_burst_ind(trxcon::g_trxcon, &bi);
+ trxcon_phyif_handle_burst_ind(g_trxcon, &bi);
}
- struct trxcon::trxcon_phyif_rts_ind rts {
+ struct trxcon_phyif_rts_ind rts {
static_cast<uint32_t>(burstTime.FN()), static_cast<uint8_t>(burstTime.TN())
};
- trxcon_phyif_handle_rts_ind(trxcon::g_trxcon, &rts);
+ trxcon_phyif_handle_rts_ind(g_trxcon, &rts);
}
void upper_trx::driveTx()
{
- trxcon::internal_q_tx_buf e;
+ internal_q_tx_buf e;
static BitVector newBurst(sizeof(e.buf));
- while (!trxcon::txq.spsc_pop(&e)) {
- trxcon::txq.spsc_prep_pop();
+ while (!txq.spsc_pop(&e)) {
+ txq.spsc_prep_pop();
}
// ensure our tx cb is tickled and can exit
@@ -295,7 +256,7 @@ void upper_trx::driveTx()
return;
}
- trxcon::internal_q_tx_buf *burst = &e;
+ internal_q_tx_buf *burst = &e;
#ifdef TXDEBUG
DBGLG() << "got burst!" << burst->r.fn << ":" << burst->ts << " current: " << timekeeper.gsmtime().FN()
@@ -333,31 +294,31 @@ void upper_trx::driveTx()
}
#ifdef TXDEBUG
-static const char *cmd2str(trxcon::trxcon_phyif_cmd_type c)
+static const char *cmd2str(trxcon_phyif_cmd_type c)
{
switch (c) {
- case trxcon::TRXCON_PHYIF_CMDT_RESET:
+ case TRXCON_PHYIF_CMDT_RESET:
return "TRXCON_PHYIF_CMDT_RESET";
- case trxcon::TRXCON_PHYIF_CMDT_POWERON:
+ case TRXCON_PHYIF_CMDT_POWERON:
return "TRXCON_PHYIF_CMDT_POWERON";
- case trxcon::TRXCON_PHYIF_CMDT_POWEROFF:
+ case TRXCON_PHYIF_CMDT_POWEROFF:
return "TRXCON_PHYIF_CMDT_POWEROFF";
- case trxcon::TRXCON_PHYIF_CMDT_MEASURE:
+ case TRXCON_PHYIF_CMDT_MEASURE:
return "TRXCON_PHYIF_CMDT_MEASURE";
- case trxcon::TRXCON_PHYIF_CMDT_SETFREQ_H0:
+ case TRXCON_PHYIF_CMDT_SETFREQ_H0:
return "TRXCON_PHYIF_CMDT_SETFREQ_H0";
- case trxcon::TRXCON_PHYIF_CMDT_SETFREQ_H1:
+ case TRXCON_PHYIF_CMDT_SETFREQ_H1:
return "TRXCON_PHYIF_CMDT_SETFREQ_H1";
- case trxcon::TRXCON_PHYIF_CMDT_SETSLOT:
+ case TRXCON_PHYIF_CMDT_SETSLOT:
return "TRXCON_PHYIF_CMDT_SETSLOT";
- case trxcon::TRXCON_PHYIF_CMDT_SETTA:
+ case TRXCON_PHYIF_CMDT_SETTA:
return "TRXCON_PHYIF_CMDT_SETTA";
default:
return "UNKNOWN COMMAND!";
}
}
-static void print_cmd(trxcon::trxcon_phyif_cmd_type c)
+static void print_cmd(trxcon_phyif_cmd_type c)
{
DBGLG() << cmd2str(c) << std::endl;
}
@@ -365,10 +326,10 @@ static void print_cmd(trxcon::trxcon_phyif_cmd_type c)
bool upper_trx::driveControl()
{
- trxcon::trxcon_phyif_rsp r;
- trxcon::trxcon_phyif_cmd cmd;
- while (!trxcon::cmdq_to_phy.spsc_pop(&cmd)) {
- trxcon::cmdq_to_phy.spsc_prep_pop();
+ trxcon_phyif_rsp r;
+ trxcon_phyif_cmd cmd;
+ while (!cmdq_to_phy.spsc_pop(&cmd)) {
+ cmdq_to_phy.spsc_prep_pop();
}
if (g_exit_flag)
@@ -379,87 +340,41 @@ bool upper_trx::driveControl()
#endif
switch (cmd.type) {
- case trxcon::TRXCON_PHYIF_CMDT_RESET:
+ case TRXCON_PHYIF_CMDT_RESET:
set_ta(0);
break;
- case trxcon::TRXCON_PHYIF_CMDT_POWERON:
+ case TRXCON_PHYIF_CMDT_POWERON:
if (!mOn) {
mOn = true;
set_upper_ready(true);
}
break;
- case trxcon::TRXCON_PHYIF_CMDT_POWEROFF:
+ case TRXCON_PHYIF_CMDT_POWEROFF:
break;
- case trxcon::TRXCON_PHYIF_CMDT_MEASURE:
- r.type = trxcon::trxcon_phyif_cmd_type::TRXCON_PHYIF_CMDT_MEASURE;
+ case TRXCON_PHYIF_CMDT_MEASURE:
+ r.type = trxcon_phyif_cmd_type::TRXCON_PHYIF_CMDT_MEASURE;
r.param.measure.band_arfcn = cmd.param.measure.band_arfcn;
// FIXME: do we want to measure anything, considering the transceiver just syncs by.. syncing?
r.param.measure.dbm = -80;
- tuneRx(trxcon::gsm_arfcn2freq10(cmd.param.measure.band_arfcn, 0) * 1000 * 100);
- tuneTx(trxcon::gsm_arfcn2freq10(cmd.param.measure.band_arfcn, 1) * 1000 * 100);
- trxcon::cmdq_from_phy.spsc_push(&r);
+ tuneRx(gsm_arfcn2freq10(cmd.param.measure.band_arfcn, 0) * 1000 * 100);
+ tuneTx(gsm_arfcn2freq10(cmd.param.measure.band_arfcn, 1) * 1000 * 100);
+ cmdq_from_phy.spsc_push(&r);
break;
- case trxcon::TRXCON_PHYIF_CMDT_SETFREQ_H0:
- tuneRx(trxcon::gsm_arfcn2freq10(cmd.param.setfreq_h0.band_arfcn, 0) * 1000 * 100);
- tuneTx(trxcon::gsm_arfcn2freq10(cmd.param.setfreq_h0.band_arfcn, 1) * 1000 * 100);
+ case TRXCON_PHYIF_CMDT_SETFREQ_H0:
+ tuneRx(gsm_arfcn2freq10(cmd.param.setfreq_h0.band_arfcn, 0) * 1000 * 100);
+ tuneTx(gsm_arfcn2freq10(cmd.param.setfreq_h0.band_arfcn, 1) * 1000 * 100);
break;
- case trxcon::TRXCON_PHYIF_CMDT_SETFREQ_H1:
+ case TRXCON_PHYIF_CMDT_SETFREQ_H1:
break;
- case trxcon::TRXCON_PHYIF_CMDT_SETSLOT:
+ case TRXCON_PHYIF_CMDT_SETSLOT:
break;
- case trxcon::TRXCON_PHYIF_CMDT_SETTA:
+ case TRXCON_PHYIF_CMDT_SETTA:
set_ta(cmd.param.setta.ta);
break;
}
return false;
}
-// trxcon C call(back) if
-extern "C" {
-int trxcon_phyif_handle_burst_req(void *phyif, const struct trxcon::trxcon_phyif_burst_req *br)
-{
- if (br->burst_len == 0) // dummy/nope
- return 0;
- OSMO_ASSERT(br->burst != 0);
-
- trxcon::internal_q_tx_buf b(br);
- if (!g_exit_flag)
- trxcon::txq.spsc_push(&b);
- return 0;
-}
-
-int trxcon_phyif_handle_cmd(void *phyif, const struct trxcon::trxcon_phyif_cmd *cmd)
-{
-#ifdef TXDEBUG
- DBGLG() << "TOP C: " << cmd2str(cmd->type) << std::endl;
-#endif
- if (!g_exit_flag)
- trxcon::cmdq_to_phy.spsc_push(cmd);
- // q for resp polling happens in main loop
- return 0;
-}
-
-void trxcon_phyif_close(void *phyif)
-{
-}
-
-void trxcon_l1ctl_close(struct trxcon::trxcon_inst *trxcon)
-{
- /* Avoid use-after-free: both *fi and *trxcon are children of
- * the L2IF (L1CTL connection), so we need to re-parent *fi
- * to NULL before calling l1ctl_client_conn_close(). */
- talloc_steal(NULL, trxcon->fi);
- trxcon::l1ctl_client_conn_close((struct trxcon::l1ctl_client *)trxcon->l2if);
-}
-
-int trxcon_l1ctl_send(struct trxcon::trxcon_inst *trxcon, struct trxcon::msgb *msg)
-{
- struct trxcon::l1ctl_client *l1c = (struct trxcon::l1ctl_client *)trxcon->l2if;
-
- return trxcon::l1ctl_client_send(l1c, msg);
-}
-}
-
void sighandler(int sigset)
{
// we might get a sigpipe in case the l1ctl ud socket disconnects because mobile quits
@@ -468,10 +383,10 @@ void sighandler(int sigset)
// we know the flag is atomic and it prevents the trxcon cb handlers from writing
// to the queues, so submit some trash to unblock the threads & exit
- trxcon::trxcon_phyif_cmd cmd = {};
- trxcon::internal_q_tx_buf b = {};
- trxcon::txq.spsc_push(&b);
- trxcon::cmdq_to_phy.spsc_push(&cmd);
+ trxcon_phyif_cmd cmd = {};
+ internal_q_tx_buf b = {};
+ txq.spsc_push(&b);
+ cmdq_to_phy.spsc_push(&cmd);
msleep(200);
return;
@@ -484,13 +399,13 @@ int main(int argc, char *argv[])
signal(SIGPIPE, sighandler);
signal(SIGINT, sighandler);
- trxcon::msgb_talloc_ctx_init(tall_trxcon_ctx, 0);
+ msgb_talloc_ctx_init(tall_trxcon_ctx, 0);
trxc_log_init(tall_trxcon_ctx);
- trxcon::g_trxcon = trxcon::trxcon_inst_alloc(tall_trxcon_ctx, 0, 0);
- trxcon::g_trxcon->gsmtap = nullptr;
- trxcon::g_trxcon->phyif = nullptr;
- trxcon::g_trxcon->phy_quirks.fbsb_extend_fns = 866; // 4 seconds, known to work.
+ g_trxcon = trxcon_inst_alloc(tall_trxcon_ctx, 0, 0);
+ g_trxcon->gsmtap = nullptr;
+ g_trxcon->phyif = nullptr;
+ g_trxcon->phy_quirks.fbsb_extend_fns = 866; // 4 seconds, known to work.
convolve_init();
convert_init();
@@ -508,7 +423,7 @@ int main(int argc, char *argv[])
}
trx->set_name_aff_sched(sched_params::thread_names::MAIN);
- if (!trxcon::trxc_l1ctl_init(tall_trxcon_ctx)) {
+ if (!trxc_l1ctl_init(tall_trxcon_ctx)) {
std::cerr << "Error initializing l1ctl, quitting.." << std::endl;
return -1;
}
diff --git a/Transceiver52M/ms/ms_upper.h b/Transceiver52M/ms/ms_upper.h
index fe20f6d..bc9bd14 100644
--- a/Transceiver52M/ms/ms_upper.h
+++ b/Transceiver52M/ms/ms_upper.h
@@ -24,7 +24,6 @@
#include <arpa/inet.h>
#include "GSMCommon.h"
-#include "radioClock.h"
#include "ms.h"
class upper_trx : public ms_trx {