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
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/40081?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: Iea31825f974734e727fe05da9e78ee67afb59d5b
Gerrit-Change-Number: 40081
Gerrit-PatchSet: 1
Gerrit-Owner: kirr <kirr(a)nexedi.com>
Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-CC: osmith <osmith(a)sysmocom.de>
Gerrit-CC: pespin <pespin(a)sysmocom.de>