trx_toolkit/burst_fwd.py: properly pass-filter multiple time-slots

Previously it was only possible to configure a single time-slot
that would be pass-filtered by a BurstForwarder instance. In some
applications it would be useful to configure multiple time-slots,
so let's refactor the time-slot pass-filtering algorithm.

Change-Id: Ie1490adaf7a7c62c966aeb60c1898eaf3b5a1e84
This commit is contained in:
Vadim Yanitskiy 2018-12-06 05:07:29 +07:00
parent 8d70f9d9fe
commit cadbce066b
2 changed files with 19 additions and 8 deletions

View File

@ -43,11 +43,10 @@ class BurstForwarder:
and transmit frequencies. It would be great to distinguish and transmit frequencies. It would be great to distinguish
between RX and TX frequencies for both BTS and MS. between RX and TX frequencies for both BTS and MS.
- ts_pass - currently active timeslot, configured by the MS. - ts_pass_list - the list of active (i.e. configured)
It can be activated or deactivated using SETSLOT control timeslot numbers for the MS. A timeslot can be activated
command from the MS. or deactivated using SETSLOT control command from the MS.
FIXME: only a single timeslot can be activated!
FIXME: there is no such list for the BTS side. FIXME: there is no such list for the BTS side.
== Preprocessing and measurement simulation == Preprocessing and measurement simulation
@ -152,7 +151,7 @@ class BurstForwarder:
self.burst_ul_drop_period = 1 self.burst_ul_drop_period = 1
# Init timeslot filter (drop everything by default) # Init timeslot filter (drop everything by default)
self.ts_pass = None self.ts_pass_list = []
# Reset Timing Advance value # Reset Timing Advance value
self.ta = 0 self.ta = 0
@ -288,7 +287,7 @@ class BurstForwarder:
return None return None
# Timeslot filter # Timeslot filter
if msg.tn != self.ts_pass: if msg.tn not in self.ts_pass_list:
return None return None
# Path loss simulation # Path loss simulation

View File

@ -109,9 +109,21 @@ class CTRLInterfaceBB(CTRLInterface):
# TS activation / deactivation # TS activation / deactivation
# We don't care about ts_type # We don't care about ts_type
if ts_type == 0: if ts_type == 0:
self.burst_fwd.ts_pass = None # Deactivate TS (remove from TS pass-filter list)
if ts in self.burst_fwd.ts_pass_list:
self.burst_fwd.ts_pass_list.remove(ts)
else:
print("[!] TS %u was not activated before" % ts)
# TODO: uncomment as soon as RESET is introduced
# return -1
else: else:
self.burst_fwd.ts_pass = ts # Activate TS (add to TS pass-filter list)
if ts not in self.burst_fwd.ts_pass_list:
self.burst_fwd.ts_pass_list.append(ts)
else:
print("[!] TS %u was already activated before" % ts)
# TODO: uncomment as soon as RESET is introduced
# return -1
return 0 return 0