<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmocom-bb/+/23137">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trx_toolkit: define TRXD PDUs using declarative codec<br><br>Change-Id: I739ae5da22c603fb2cf1e84d3a79fb1a6e7343b6<br>Related: OS#4006, SYS#4895<br>---<br>A src/target/trx_toolkit/trxd_proto.py<br>1 file changed, 101 insertions(+), 0 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/37/23137/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/target/trx_toolkit/trxd_proto.py b/src/target/trx_toolkit/trxd_proto.py</span><br><span>new file mode 100644</span><br><span>index 0000000..60b8d28</span><br><span>--- /dev/null</span><br><span>+++ b/src/target/trx_toolkit/trxd_proto.py</span><br><span>@@ -0,0 +1,101 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# -*- coding: utf-8 -*-</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+'''</span><br><span style="color: hsl(120, 100%, 40%);">+TRXD PDU definitions based on declarative codec.</span><br><span style="color: hsl(120, 100%, 40%);">+'''</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# TRX Toolkit</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+# Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+# the Free Software Foundation; either version 2 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+# (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# You should have received a copy of the GNU General Public License along</span><br><span style="color: hsl(120, 100%, 40%);">+# with this program; if not, write to the Free Software Foundation, Inc.,</span><br><span style="color: hsl(120, 100%, 40%);">+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import codec</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class Header(codec.BitFieldSet):</span><br><span style="color: hsl(120, 100%, 40%);">+      ''' Common header for all TRXD PDUs. '''</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    DEF_LEN = 1</span><br><span style="color: hsl(120, 100%, 40%);">+   STRUCT = (</span><br><span style="color: hsl(120, 100%, 40%);">+            codec.BitField('ver', bl=4),</span><br><span style="color: hsl(120, 100%, 40%);">+          codec.BitField('rfu', bl=1),</span><br><span style="color: hsl(120, 100%, 40%);">+          codec.BitField('tn', bl=3),</span><br><span style="color: hsl(120, 100%, 40%);">+   )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class PDUv0Rx(codec.Envelope):</span><br><span style="color: hsl(120, 100%, 40%);">+ STRUCT = (</span><br><span style="color: hsl(120, 100%, 40%);">+            Header(),</span><br><span style="color: hsl(120, 100%, 40%);">+             codec.Uint32BE('fn'),</span><br><span style="color: hsl(120, 100%, 40%);">+         codec.Uint('rssi', mult=-1),</span><br><span style="color: hsl(120, 100%, 40%);">+          codec.Int16BE('toa256'),</span><br><span style="color: hsl(120, 100%, 40%);">+              codec.Buf('soft-bits'),</span><br><span style="color: hsl(120, 100%, 40%);">+               codec.Buf('pad', len=2),</span><br><span style="color: hsl(120, 100%, 40%);">+      )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   def __init__(self, *args, **kw) -> None:</span><br><span style="color: hsl(120, 100%, 40%);">+           codec.Envelope.__init__(self, *args, **kw)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          # Field 'soft-bits' is either 148 (GMSK) or 444 (8-PSK) octets long</span><br><span style="color: hsl(120, 100%, 40%);">+           self.STRUCT[-2].get_len = lambda _, data: 444 if len(data) > 148 else 148</span><br><span style="color: hsl(120, 100%, 40%);">+          # Field 'pad' may optionally be present during decoding</span><br><span style="color: hsl(120, 100%, 40%);">+               self.STRUCT[-1].get_pres_dec = lambda _, data: len(data) > 0</span><br><span style="color: hsl(120, 100%, 40%);">+               # ... or may intentionally be appended during encoding</span><br><span style="color: hsl(120, 100%, 40%);">+                self.STRUCT[-1].get_pres_enc = lambda vals: 'pad' in vals</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class PDUv0Tx(codec.Envelope):</span><br><span style="color: hsl(120, 100%, 40%);">+   STRUCT = (</span><br><span style="color: hsl(120, 100%, 40%);">+            Header(),</span><br><span style="color: hsl(120, 100%, 40%);">+             codec.Uint32BE('fn'),</span><br><span style="color: hsl(120, 100%, 40%);">+         codec.Uint('red'),</span><br><span style="color: hsl(120, 100%, 40%);">+            codec.Buf('hard-bits'),</span><br><span style="color: hsl(120, 100%, 40%);">+       )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class MTS(codec.BitFieldSet):</span><br><span style="color: hsl(120, 100%, 40%);">+  ''' Modulation and Training Sequence. '''</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   DEF_LEN = 1</span><br><span style="color: hsl(120, 100%, 40%);">+   STRUCT = (</span><br><span style="color: hsl(120, 100%, 40%);">+            codec.BitField('nope', bl=1),</span><br><span style="color: hsl(120, 100%, 40%);">+         codec.BitField('mod', bl=4),</span><br><span style="color: hsl(120, 100%, 40%);">+          codec.BitField('tsc', bl=3),</span><br><span style="color: hsl(120, 100%, 40%);">+  )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class PDUv1Rx(codec.Envelope):</span><br><span style="color: hsl(120, 100%, 40%);">+   STRUCT = (</span><br><span style="color: hsl(120, 100%, 40%);">+            Header(),</span><br><span style="color: hsl(120, 100%, 40%);">+             codec.Uint32BE('fn'),</span><br><span style="color: hsl(120, 100%, 40%);">+         codec.Uint('rssi', mult=-1),</span><br><span style="color: hsl(120, 100%, 40%);">+          codec.Int16BE('toa256'),</span><br><span style="color: hsl(120, 100%, 40%);">+              MTS(),</span><br><span style="color: hsl(120, 100%, 40%);">+                codec.Int16BE('cir'),</span><br><span style="color: hsl(120, 100%, 40%);">+         codec.Buf('soft-bits'),</span><br><span style="color: hsl(120, 100%, 40%);">+       )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   def __init__(self, *args, **kw) -> None:</span><br><span style="color: hsl(120, 100%, 40%);">+           codec.Envelope.__init__(self, *args, **kw)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          # Field 'soft-bits' has a variable length that depends on moduletion type</span><br><span style="color: hsl(120, 100%, 40%);">+             self.STRUCT[-1].get_len = lambda _, data: 444 if len(data) > 148 else 148</span><br><span style="color: hsl(120, 100%, 40%);">+          # Field 'soft-bits' is not present in NOPE / IDLE indications</span><br><span style="color: hsl(120, 100%, 40%);">+         self.STRUCT[-1].get_pres = lambda v, _: not v['nope']</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class PDUv1Tx(PDUv0Tx):</span><br><span style="color: hsl(120, 100%, 40%);">+    pass</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmocom-bb/+/23137">change 23137</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/+/23137"/><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: I739ae5da22c603fb2cf1e84d3a79fb1a6e7343b6 </div>
<div style="display:none"> Gerrit-Change-Number: 23137 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>