<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmocom-bb/+/14585">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trx_toolkit/fake_trx.py: add basic TRXD version 0x01 support<br><br>Change-Id: I164f5ae4ce7694d6e324aab927a04e96d489ebd8<br>---<br>M src/target/trx_toolkit/ctrl_if_trx.py<br>M src/target/trx_toolkit/data_if.py<br>M src/target/trx_toolkit/fake_trx.py<br>3 files changed, 71 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/85/14585/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/target/trx_toolkit/ctrl_if_trx.py b/src/target/trx_toolkit/ctrl_if_trx.py</span><br><span>index 26a844f..f343215 100644</span><br><span>--- a/src/target/trx_toolkit/ctrl_if_trx.py</span><br><span>+++ b/src/target/trx_toolkit/ctrl_if_trx.py</span><br><span>@@ -4,7 +4,7 @@</span><br><span> # TRX Toolkit</span><br><span> # CTRL interface implementation (common commands)</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# (C) 2016-2018 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+# (C) 2016-2019 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span> #</span><br><span> # All Rights Reserved</span><br><span> #</span><br><span>@@ -147,6 +147,18 @@</span><br><span> </span><br><span> return (0, [str(meas_dbm)])</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ # Protocol version negotiation</span><br><span style="color: hsl(120, 100%, 40%);">+ if self.verify_cmd(request, "SETVER", 1):</span><br><span style="color: hsl(120, 100%, 40%);">+ log.debug("(%s) Recv SETVER cmd" % self.trx)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ver = int(request[1])</span><br><span style="color: hsl(120, 100%, 40%);">+ if not self.trx.data_if.set_hdr_ver(ver):</span><br><span style="color: hsl(120, 100%, 40%);">+ log.error("Protocol version 0x%02x is not supported" % ver)</span><br><span style="color: hsl(120, 100%, 40%);">+ return -1</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ log.info("Using protocol version 0x%02x on DATA interface" % ver)</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Wrong / unknown command</span><br><span> else:</span><br><span> # We don't care about other commands,</span><br><span>diff --git a/src/target/trx_toolkit/data_if.py b/src/target/trx_toolkit/data_if.py</span><br><span>index 027fd85..5dcb5d1 100644</span><br><span>--- a/src/target/trx_toolkit/data_if.py</span><br><span>+++ b/src/target/trx_toolkit/data_if.py</span><br><span>@@ -4,7 +4,7 @@</span><br><span> # TRX Toolkit</span><br><span> # DATA interface implementation</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# (C) 2017-2018 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span style="color: hsl(120, 100%, 40%);">+# (C) 2017-2019 by Vadim Yanitskiy <axilirator@gmail.com></span><br><span> #</span><br><span> # All Rights Reserved</span><br><span> #</span><br><span>@@ -29,9 +29,29 @@</span><br><span> </span><br><span> class DATAInterface(UDPLink):</span><br><span> def __init__(self, *udp_link_args):</span><br><span style="color: hsl(120, 100%, 40%);">+ # Default header version (legacy)</span><br><span style="color: hsl(120, 100%, 40%);">+ self._hdr_ver = 0x00</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> UDPLink.__init__(self, *udp_link_args)</span><br><span> log.debug("Init TRXD interface (%s)" % self.desc_link())</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ def set_hdr_ver(self, ver):</span><br><span style="color: hsl(120, 100%, 40%);">+ if not ver in DATAMSG.known_versions:</span><br><span style="color: hsl(120, 100%, 40%);">+ return False</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ self._hdr_ver = ver</span><br><span style="color: hsl(120, 100%, 40%);">+ return True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ def match_hdr_ver(self, msg):</span><br><span style="color: hsl(120, 100%, 40%);">+ if msg.ver == self._hdr_ver:</span><br><span style="color: hsl(120, 100%, 40%);">+ return True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ log.error("Rx unexpected version %u message "</span><br><span style="color: hsl(120, 100%, 40%);">+ "from R:%s:%u, we need version %u"</span><br><span style="color: hsl(120, 100%, 40%);">+ % (msg.ver, self.remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ self.remote_port, self._hdr_ver))</span><br><span style="color: hsl(120, 100%, 40%);">+ return None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def recv_raw_data(self):</span><br><span> data, _ = self.sock.recvfrom(512)</span><br><span> return data</span><br><span>@@ -64,6 +84,13 @@</span><br><span> "from R:%s:%u" % (self.remote_addr, self.remote_port))</span><br><span> return None</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if msg.ver != self._hdr_ver:</span><br><span style="color: hsl(120, 100%, 40%);">+ log.error("Rx unexpected version %u message "</span><br><span style="color: hsl(120, 100%, 40%);">+ "from R:%s:%u, we need version %u"</span><br><span style="color: hsl(120, 100%, 40%);">+ % (msg.ver, self.remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ self.remote_port, self._hdr_ver))</span><br><span style="color: hsl(120, 100%, 40%);">+ return None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> return msg</span><br><span> </span><br><span> def send_msg(self, msg, legacy = False):</span><br><span>diff --git a/src/target/trx_toolkit/fake_trx.py b/src/target/trx_toolkit/fake_trx.py</span><br><span>index 928333f..12bcb80 100755</span><br><span>--- a/src/target/trx_toolkit/fake_trx.py</span><br><span>+++ b/src/target/trx_toolkit/fake_trx.py</span><br><span>@@ -35,6 +35,7 @@</span><br><span> from app_common import ApplicationBase</span><br><span> from burst_fwd import BurstForwarder</span><br><span> from transceiver import Transceiver</span><br><span style="color: hsl(120, 100%, 40%);">+from data_msg import Modulation</span><br><span> from clck_gen import CLCKGen</span><br><span> from trx_list import TRXList</span><br><span> from fake_pm import FakePM</span><br><span>@@ -98,6 +99,7 @@</span><br><span> </span><br><span> TOA256_BASE_DEFAULT = 0</span><br><span> RSSI_BASE_DEFAULT = -60</span><br><span style="color: hsl(120, 100%, 40%);">+ CI_BASE_DEFAULT = 0 # FIXME!</span><br><span> </span><br><span> def __init__(self, *trx_args, **trx_kwargs):</span><br><span> Transceiver.__init__(self, *trx_args, **trx_kwargs)</span><br><span>@@ -105,11 +107,14 @@</span><br><span> # Actual ToA / RSSI / TA values</span><br><span> self.toa256_base = self.TOA256_BASE_DEFAULT</span><br><span> self.rssi_base = self.RSSI_BASE_DEFAULT</span><br><span style="color: hsl(120, 100%, 40%);">+ self.ci_base = self.CI_BASE_DEFAULT</span><br><span style="color: hsl(120, 100%, 40%);">+ self.tsc = 0 # FIXME!</span><br><span> self.ta = 0</span><br><span> </span><br><span> # ToA / RSSI randomization threshold</span><br><span> self.toa256_rand_threshold = 0</span><br><span> self.rssi_rand_threshold = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ self.ci_rand_threshold = 0</span><br><span> </span><br><span> # Path loss simulation (burst dropping)</span><br><span> self.burst_drop_amount = 0</span><br><span>@@ -137,6 +142,17 @@</span><br><span> rssi_max = self.rssi_base + self.rssi_rand_threshold</span><br><span> return random.randint(rssi_min, rssi_max)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ @property</span><br><span style="color: hsl(120, 100%, 40%);">+ def ci(self):</span><br><span style="color: hsl(120, 100%, 40%);">+ # Check if randomization is required</span><br><span style="color: hsl(120, 100%, 40%);">+ if self.ci_rand_threshold is 0:</span><br><span style="color: hsl(120, 100%, 40%);">+ return self.ci_base</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ # Generate a random RSSI value in required range</span><br><span style="color: hsl(120, 100%, 40%);">+ ci_min = self.ci_base - self.ci_rand_threshold</span><br><span style="color: hsl(120, 100%, 40%);">+ ci_max = self.ci_base + self.ci_rand_threshold</span><br><span style="color: hsl(120, 100%, 40%);">+ return random.randint(ci_min, ci_max)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Path loss simulation: burst dropping</span><br><span> # Returns: True - drop, False - keep</span><br><span> def sim_burst_drop(self, msg):</span><br><span>@@ -156,10 +172,24 @@</span><br><span> # simulates RF path parameters (such as RSSI),</span><br><span> # and sends towards the L1</span><br><span> def send_data_msg(self, src_trx, msg):</span><br><span style="color: hsl(120, 100%, 40%);">+ # Override header version</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.ver = self.data_if._hdr_ver</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Complete message header</span><br><span> msg.toa256 = self.toa256</span><br><span> msg.rssi = self.rssi</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ # Version specific fields</span><br><span style="color: hsl(120, 100%, 40%);">+ if msg.ver >= 0x01:</span><br><span style="color: hsl(120, 100%, 40%);">+ # Hard-coded values</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.mod_type = Modulation.ModGMSK</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.nope_ind = False</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.tsc_set = 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ # Configurable values</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.tsc = self.tsc</span><br><span style="color: hsl(120, 100%, 40%);">+ msg.ci = self.ci</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Apply optional Timing Advance</span><br><span> if src_trx.ta is not 0:</span><br><span> msg.toa256 -= src_trx.ta * 256</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmocom-bb/+/14585">change 14585</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmocom-bb/+/14585"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I164f5ae4ce7694d6e324aab927a04e96d489ebd8 </div>
<div style="display:none"> Gerrit-Change-Number: 14585 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>