<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/23663">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">shell: New 'read_records' and 'read_records_decoded' commands<br><br>Those commands can be used to read all the records available in the<br>selected file.<br><br>Change-Id: If457b4e02bde8aa6db8cc329411f94411c100bc9<br>---<br>M docs/shell.rst<br>M pySim/filesystem.py<br>2 files changed, 43 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/63/23663/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/docs/shell.rst b/docs/shell.rst</span><br><span>index 3cfc849..652e572 100644</span><br><span>--- a/docs/shell.rst</span><br><span>+++ b/docs/shell.rst</span><br><span>@@ -178,6 +178,20 @@</span><br><span>    :func: LinFixedEF.ShellCommands.read_rec_dec_parser</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+read_records</span><br><span style="color: hsl(120, 100%, 40%);">+~~~~~~~~~~~~</span><br><span style="color: hsl(120, 100%, 40%);">+.. argparse::</span><br><span style="color: hsl(120, 100%, 40%);">+   :module: pySim.filesystem</span><br><span style="color: hsl(120, 100%, 40%);">+   :func: LinFixedEF.ShellCommands.read_recs_parser</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%);">+read_records_decoded</span><br><span style="color: hsl(120, 100%, 40%);">+~~~~~~~~~~~~~~~~~~~~</span><br><span style="color: hsl(120, 100%, 40%);">+.. argparse::</span><br><span style="color: hsl(120, 100%, 40%);">+   :module: pySim.filesystem</span><br><span style="color: hsl(120, 100%, 40%);">+   :func: LinFixedEF.ShellCommands.read_recs_dec_parser</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> update_record</span><br><span> ~~~~~~~~~~~~~</span><br><span> .. argparse::</span><br><span>diff --git a/pySim/filesystem.py b/pySim/filesystem.py</span><br><span>index f8443f3..e97fbf6 100644</span><br><span>--- a/pySim/filesystem.py</span><br><span>+++ b/pySim/filesystem.py</span><br><span>@@ -568,6 +568,33 @@</span><br><span>             (data, sw) = self._cmd.rs.read_record_dec(opts.record_nr)</span><br><span>             self._cmd.poutput_json(data, opts.oneline)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        read_recs_parser = argparse.ArgumentParser()</span><br><span style="color: hsl(120, 100%, 40%);">+        @cmd2.with_argparser(read_recs_parser)</span><br><span style="color: hsl(120, 100%, 40%);">+        def do_read_records(self, opts):</span><br><span style="color: hsl(120, 100%, 40%);">+            """Read all records from a record-oriented EF"""</span><br><span style="color: hsl(120, 100%, 40%);">+            num_of_rec = self._cmd.rs.selected_file_fcp['file_descriptor']['num_of_rec']</span><br><span style="color: hsl(120, 100%, 40%);">+            for recnr in range(1, 1 + num_of_rec):</span><br><span style="color: hsl(120, 100%, 40%);">+                (data, sw) = self._cmd.rs.read_record(recnr)</span><br><span style="color: hsl(120, 100%, 40%);">+                if (len(data) > 0):</span><br><span style="color: hsl(120, 100%, 40%);">+                   recstr = str(data)</span><br><span style="color: hsl(120, 100%, 40%);">+                else:</span><br><span style="color: hsl(120, 100%, 40%);">+                   recstr = "(empty)"</span><br><span style="color: hsl(120, 100%, 40%);">+                self._cmd.poutput("%03d %s" % (recnr, recstr))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        read_recs_dec_parser = argparse.ArgumentParser()</span><br><span style="color: hsl(120, 100%, 40%);">+        read_recs_dec_parser.add_argument('--oneline', action='store_true',</span><br><span style="color: hsl(120, 100%, 40%);">+                                         help='No JSON pretty-printing, dump as a single line')</span><br><span style="color: hsl(120, 100%, 40%);">+        @cmd2.with_argparser(read_recs_dec_parser)</span><br><span style="color: hsl(120, 100%, 40%);">+        def do_read_records_decoded(self, opts):</span><br><span style="color: hsl(120, 100%, 40%);">+            """Read + decode all records from a record-oriented EF"""</span><br><span style="color: hsl(120, 100%, 40%);">+            num_of_rec = self._cmd.rs.selected_file_fcp['file_descriptor']['num_of_rec']</span><br><span style="color: hsl(120, 100%, 40%);">+            # collect all results in list so they are rendered as JSON list when printing</span><br><span style="color: hsl(120, 100%, 40%);">+            data_list = []</span><br><span style="color: hsl(120, 100%, 40%);">+            for recnr in range(1, 1 + num_of_rec):</span><br><span style="color: hsl(120, 100%, 40%);">+                (data, sw) = self._cmd.rs.read_record_dec(recnr)</span><br><span style="color: hsl(120, 100%, 40%);">+                data_list.append(data)</span><br><span style="color: hsl(120, 100%, 40%);">+            self._cmd.poutput_json(data_list, opts.oneline)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         upd_rec_parser = argparse.ArgumentParser()</span><br><span>         upd_rec_parser.add_argument('record_nr', type=int, help='Number of record to be read')</span><br><span>         upd_rec_parser.add_argument('data', help='Data bytes (hex format) to write')</span><br><span>@@ -965,6 +992,8 @@</span><br><span>             select_resp = f.decode_select_response(data)</span><br><span>         else:</span><br><span>             select_resp = self.probe_file(name, cmd_app)</span><br><span style="color: hsl(120, 100%, 40%);">+        # store the decoded FCP for later reference</span><br><span style="color: hsl(120, 100%, 40%);">+        self.selected_file_fcp = select_resp</span><br><span> </span><br><span>         # register commands of new file</span><br><span>         if cmd_app and self.selected_file.shell_commands:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/23663">change 23663</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/+/23663"/><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: If457b4e02bde8aa6db8cc329411f94411c100bc9 </div>
<div style="display:none"> Gerrit-Change-Number: 23663 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>