<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>