<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/25802">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  dexter: Looks good to me, approved; Verified
  osmith: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ts_51_011: Add encoder for EF.SST<br><br>We already have those for EF.UST, let's add them for EF.SST, too<br><br>Change-Id: Ib51bfffaf8444ec30415aad42e3a0f4f3f7598cb<br>---<br>M pySim/ts_51_011.py<br>1 file changed, 26 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py</span><br><span>index 5d1197c..3492a8d 100644</span><br><span>--- a/pySim/ts_51_011.py</span><br><span>+++ b/pySim/ts_51_011.py</span><br><span>@@ -505,6 +505,12 @@</span><br><span>     def __init__(self, fid, sfid, name, desc, size, table):</span><br><span>         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)</span><br><span>         self.table = table</span><br><span style="color: hsl(120, 100%, 40%);">+    @staticmethod</span><br><span style="color: hsl(120, 100%, 40%);">+    def _bit_byte_offset_for_service(service:int) -> (int, int):</span><br><span style="color: hsl(120, 100%, 40%);">+        i = service - 1</span><br><span style="color: hsl(120, 100%, 40%);">+        byte_offset = i//4</span><br><span style="color: hsl(120, 100%, 40%);">+        bit_offset = (i % 4) * 2</span><br><span style="color: hsl(120, 100%, 40%);">+        return (byte_offset, bit_offset)</span><br><span>     def _decode_bin(self, raw_bin):</span><br><span>         ret = {}</span><br><span>         for i in range(0, len(raw_bin)*4):</span><br><span>@@ -518,7 +524,26 @@</span><br><span>                      'activated': True if bits & 2 else False,</span><br><span>                      }</span><br><span>         return ret</span><br><span style="color: hsl(0, 100%, 40%);">-    # TODO: encoder</span><br><span style="color: hsl(120, 100%, 40%);">+    def _encode_bin(self, in_json):</span><br><span style="color: hsl(120, 100%, 40%);">+        # compute the required binary size</span><br><span style="color: hsl(120, 100%, 40%);">+        bin_len = 0</span><br><span style="color: hsl(120, 100%, 40%);">+        for srv in in_json.keys():</span><br><span style="color: hsl(120, 100%, 40%);">+            service_nr = int(srv)</span><br><span style="color: hsl(120, 100%, 40%);">+            (byte_offset, bit_offset) = EF_ServiceTable._bit_byte_offset_for_service(service_nr)</span><br><span style="color: hsl(120, 100%, 40%);">+            if byte_offset >= bin_len:</span><br><span style="color: hsl(120, 100%, 40%);">+                bin_len = byte_offset+1</span><br><span style="color: hsl(120, 100%, 40%);">+        # encode the actual data</span><br><span style="color: hsl(120, 100%, 40%);">+        out = bytearray(b'\x00' * bin_len)</span><br><span style="color: hsl(120, 100%, 40%);">+        for srv in in_json.keys():</span><br><span style="color: hsl(120, 100%, 40%);">+            service_nr = int(srv)</span><br><span style="color: hsl(120, 100%, 40%);">+            (byte_offset, bit_offset) = EF_ServiceTable._bit_byte_offset_for_service(service_nr)</span><br><span style="color: hsl(120, 100%, 40%);">+            bits = 0</span><br><span style="color: hsl(120, 100%, 40%);">+            if in_json[srv]['allocated'] == True:</span><br><span style="color: hsl(120, 100%, 40%);">+                bits |= 1</span><br><span style="color: hsl(120, 100%, 40%);">+            if in_json[srv]['activated'] == True:</span><br><span style="color: hsl(120, 100%, 40%);">+                bits |= 2</span><br><span style="color: hsl(120, 100%, 40%);">+            out[byte_offset] |= ((bits & 3) << bit_offset)</span><br><span style="color: hsl(120, 100%, 40%);">+        return out</span><br><span> </span><br><span> # TS 51.011 Section 10.3.11</span><br><span> class EF_SPN(TransparentEF):</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/25802">change 25802</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/pysim/+/25802"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib51bfffaf8444ec30415aad42e3a0f4f3f7598cb </div>
<div style="display:none"> Gerrit-Change-Number: 25802 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>