kirr has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/40081?usp=email )
Change subject: trx_toolkit/data_msg: Switch Msg .fn/.tn from object to int64_t ......................................................................
trx_toolkit/data_msg: Switch Msg .fn/.tn from object to int64_t
This are integer fields, assigning them C-level type avoid py-level overhead when accessing and doing arithmetics with them.
Change-Id: Iea31825f974734e727fe05da9e78ee67afb59d5b --- M src/target/trx_toolkit/_fake_trx.pyx M src/target/trx_toolkit/data_msg.pxd M src/target/trx_toolkit/data_msg.pyx M src/target/trx_toolkit/fake_pm.py M src/target/trx_toolkit/test_data_msg.py M src/target/trx_toolkit/transceiver.pxd M src/target/trx_toolkit/transceiver.pyx 7 files changed, 20 insertions(+), 18 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/81/40081/1
diff --git a/src/target/trx_toolkit/_fake_trx.pyx b/src/target/trx_toolkit/_fake_trx.pyx index aa56afa..bf24cda 100644 --- a/src/target/trx_toolkit/_fake_trx.pyx +++ b/src/target/trx_toolkit/_fake_trx.pyx @@ -432,7 +432,7 @@ self.burst_fwd = BurstForwarder(trx_list.trx_list)
# This method will be called by the clock generator - def clck_handler(self, fn): + def clck_handler(self, int64_t fn): cdef Transceiver trx # We assume that this list is immutable at run-time for trx in self.trx_list: diff --git a/src/target/trx_toolkit/data_msg.pxd b/src/target/trx_toolkit/data_msg.pxd index 29d1702..823ec8d 100644 --- a/src/target/trx_toolkit/data_msg.pxd +++ b/src/target/trx_toolkit/data_msg.pxd @@ -3,7 +3,7 @@
from cython cimport final from cpython cimport array -from libc.stdint cimport int8_t, uint8_t +from libc.stdint cimport int8_t, int64_t, uint8_t
cdef class Modulation: cdef int coding # Coding in TRXD header @@ -21,8 +21,8 @@
cdef class Msg: cdef readonly int ver - cdef readonly object fn # int | None - cdef readonly object tn # int | None + cdef readonly int64_t fn # -1 if not valid + cdef readonly int8_t tn # -1 if not valid cdef public bint nope_ind
diff --git a/src/target/trx_toolkit/data_msg.pyx b/src/target/trx_toolkit/data_msg.pyx index 98dbece..64139a4 100644 --- a/src/target/trx_toolkit/data_msg.pyx +++ b/src/target/trx_toolkit/data_msg.pyx @@ -20,7 +20,7 @@ # GNU General Public License for more details.
from cython cimport final -from libc.stdint cimport int16_t, uint16_t, uint32_t +from libc.stdint cimport int16_t, int64_t, uint16_t, uint32_t
from cpython cimport array cdef array.array _Bempty = array.array('B', []) @@ -86,7 +86,7 @@ CHDR_VERSION_MAX = 0b1111 KNOWN_VERSIONS = tuple(range(KNOWN_VERSION_MAX+1))
- def __cinit__(self, fn = -1, tn = -1, int ver = 0): + def __cinit__(self, int64_t fn = -1, int64_t tn = -1, int ver = 0): self.ver = ver self.fn = fn self.tn = tn @@ -231,13 +231,13 @@ if not (0 <= self.ver <= KNOWN_VERSION_MAX): raise ValueError("Unknown TRXD header version %d" % self.ver)
- if self.fn is None: + if self.fn == -1: raise ValueError("TDMA frame-number is not set")
if self.fn < 0 or self.fn > GSM_HYPERFRAME: raise ValueError("TDMA frame-number %d is out of range" % self.fn)
- if self.tn is None: + if self.tn == -1: raise ValueError("TDMA time-slot is not set")
if self.tn < 0 or self.tn > 7: diff --git a/src/target/trx_toolkit/fake_pm.py b/src/target/trx_toolkit/fake_pm.py index 205596a..191b203 100644 --- a/src/target/trx_toolkit/fake_pm.py +++ b/src/target/trx_toolkit/fake_pm.py @@ -59,7 +59,7 @@ def rssi_trx(self): return randint(self.trx_min, self.trx_max)
- def measure(self, freq, fn = None): + def measure(self, freq, fn = -1): # Iterate over all known transceivers for trx in self.trx_list: if not trx.running: @@ -67,7 +67,7 @@
# FIXME: we need to know current TDMA frame number here, # because some transceivers may use frequency hopping - if trx.fh is not None and fn is None: + if trx.fh is not None and fn == -1: continue
# Match by given frequency diff --git a/src/target/trx_toolkit/test_data_msg.py b/src/target/trx_toolkit/test_data_msg.py index e6cb906..db9a998 100644 --- a/src/target/trx_toolkit/test_data_msg.py +++ b/src/target/trx_toolkit/test_data_msg.py @@ -67,12 +67,12 @@ msg = RxMsg() msg.validate() with self.assertRaises(ValueError): - msg = RxMsg(fn = None, tn = 0) + msg = RxMsg(fn = -1, tn = 0) msg.validate()
# Out-of-range value(s) with self.assertRaises(ValueError): - msg = RxMsg(fn = -1, tn = 0) + msg = RxMsg(fn = -2, tn = 0) msg.validate() with self.assertRaises(ValueError): msg = RxMsg(fn = 0, tn = 10) diff --git a/src/target/trx_toolkit/transceiver.pxd b/src/target/trx_toolkit/transceiver.pxd index 2fb2fb7..562cb34 100644 --- a/src/target/trx_toolkit/transceiver.pxd +++ b/src/target/trx_toolkit/transceiver.pxd @@ -5,6 +5,8 @@ from burst_fwd cimport BurstForwarder from _clck_gen cimport CLCKGen
+from libc.stdint cimport int64_t +
cdef class Transceiver: cdef public: @@ -45,10 +47,10 @@ list[TxMsg] _tx_queue
- cdef get_rx_freq(self, fn) - cpdef get_tx_freq(self, fn) + cdef get_rx_freq(self, int64_t fn) + cpdef get_tx_freq(self, int64_t fn)
cdef TxMsg recv_data_msg(self) cdef send_data_msg(self, RxMsg msg) cdef handle_data_msg(self, Transceiver src_trx, TxMsg src_msg, RxMsg msg) - cdef clck_tick(self, BurstForwarder fwd, fn) + cdef clck_tick(self, BurstForwarder fwd, int64_t fn) diff --git a/src/target/trx_toolkit/transceiver.pyx b/src/target/trx_toolkit/transceiver.pyx index 2e8a064..b28dee8 100644 --- a/src/target/trx_toolkit/transceiver.pyx +++ b/src/target/trx_toolkit/transceiver.pyx @@ -213,7 +213,7 @@
return True
- cdef get_rx_freq(self, fn): + cdef get_rx_freq(self, int64_t fn): if self.fh is None: return self._rx_freq
@@ -221,7 +221,7 @@ (rx_freq, _) = self.fh.resolve(fn) return rx_freq
- cpdef get_tx_freq(self, fn): + cpdef get_tx_freq(self, int64_t fn): if self.fh is None: return self._tx_freq
@@ -297,7 +297,7 @@ cdef handle_data_msg(self, Transceiver src_trx, TxMsg src_msg, RxMsg msg): self.send_data_msg(msg)
- cdef clck_tick(self, BurstForwarder fwd, fn): + cdef clck_tick(self, BurstForwarder fwd, int64_t fn): if not self.running: return