diff options
Diffstat (limited to 'python/trx/ctrl_if_bb.py')
-rw-r--r-- | python/trx/ctrl_if_bb.py | 68 |
1 files changed, 23 insertions, 45 deletions
diff --git a/python/trx/ctrl_if_bb.py b/python/trx/ctrl_if_bb.py index 0e194d0..4814263 100644 --- a/python/trx/ctrl_if_bb.py +++ b/python/trx/ctrl_if_bb.py @@ -4,7 +4,7 @@ # GR-GSM based transceiver # CTRL interface for OsmocomBB # -# (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com> +# (C) 2016-2019 by Vadim Yanitskiy <axilirator@gmail.com> # # All Rights Reserved # @@ -22,49 +22,32 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import grgsm - from ctrl_if import CTRLInterface class CTRLInterfaceBB(CTRLInterface): - def __init__(self, remote_addr, remote_port, bind_addr, bind_port, tb): - CTRLInterface.__init__(self, remote_addr, remote_port, - bind_addr, bind_port) - + def __init__(self, trx, *ctrl_if_args): + CTRLInterface.__init__(self, *ctrl_if_args) print("[i] Init CTRL interface (%s)" % self.desc_link()) - # Set link to the follow graph (top block) - self.tb = tb + # Transceiver instance we belong to + self.trx = trx def parse_cmd(self, request): # Power control if self.verify_cmd(request, "POWERON", 0): print("[i] Recv POWERON CMD") - # Ensure transceiver isn't working - if self.tb.trx_started: - print("[!] Transceiver already started") + # Start transceiver + if not self.trx.start(): return -1 - print("[i] Starting transceiver...") - self.tb.trx_started = True - self.tb.start() - return 0 elif self.verify_cmd(request, "POWEROFF", 0): print("[i] Recv POWEROFF cmd") - # TODO: flush all buffers between blocks - if self.tb.trx_started: - print("[i] Stopping transceiver...") - self.tb.trx_started = False - self.tb.set_ta(0) - self.tb.stop() - self.tb.wait() - - # POWEROFF is also used to reset transceiver - self.tb.reset() + # Stop transceiver + self.trx.stop() return 0 @@ -74,7 +57,7 @@ class CTRLInterfaceBB(CTRLInterface): # TODO: check gain value gain = int(request[1]) - self.tb.set_rx_gain(gain) + self.trx.radio_if.set_rx_gain(gain) return 0 @@ -83,7 +66,7 @@ class CTRLInterfaceBB(CTRLInterface): # TODO: check gain value gain = int(request[1]) - self.tb.set_tx_gain(gain) + self.trx.radio_if.set_tx_gain(gain) return 0 @@ -93,7 +76,7 @@ class CTRLInterfaceBB(CTRLInterface): # TODO: check freq range freq = int(request[1]) * 1000 - self.tb.set_rx_freq(freq) + self.trx.radio_if.set_rx_freq(freq) return 0 @@ -102,7 +85,7 @@ class CTRLInterfaceBB(CTRLInterface): # TODO: check freq range freq = int(request[1]) * 1000 - self.tb.set_tx_freq(freq) + self.trx.radio_if.set_tx_freq(freq) return 0 @@ -116,19 +99,12 @@ class CTRLInterfaceBB(CTRLInterface): print("[!] TS index should be in range: 0..7") return -1 - # Ignore timeslot type for now + # Channel combination number (see GSM TS 05.02) + # TODO: check this value config = int(request[2]) - print("[i] Configure timeslot filter to: %s" - % ("drop all" if config == 0 else "TS %d" % tn)) - - if config == 0: - # Value 0 means 'drop all' - self.tb.ts_filter.set_policy( - grgsm.FILTER_POLICY_DROP_ALL) - else: - self.tb.ts_filter.set_policy( - grgsm.FILTER_POLICY_DEFAULT) - self.tb.ts_filter.set_tn(tn) + + # TODO: check return value + self.trx.radio_if.set_slot(tn, config) return 0 @@ -138,9 +114,11 @@ class CTRLInterfaceBB(CTRLInterface): # TODO: check freq range meas_freq = int(request[1]) * 1000 - meas_dbm = str(self.tb.measure(meas_freq)) + meas_dbm = self.trx.measure(meas_freq) + if meas_dbm is None: + return -1 - return (0, [meas_dbm]) + return (0, [str(meas_dbm)]) # Timing Advance control elif self.verify_cmd(request, "SETTA", 1): @@ -152,7 +130,7 @@ class CTRLInterfaceBB(CTRLInterface): print("[!] TA value must be in range: 0..63") return -1 - self.tb.set_ta(ta) + self.trx.radio_if.set_ta(ta) return 0 # Misc |