laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/pysim/+/32963 )


Change subject: ts_51_011: Add sst_service_[de]{activate,allocate} shell 
commands
......................................................................

ts_51_011: Add sst_service_[de]{activate,allocate} shell commands

Just like the existing commands for UST/IST: Allow the user to
activate/deactivate individual services.  As EF.SST also contains
information about "allocation" of a service, let's have commands for
allocation and activation.

Change-Id: If959d06248cb1a9d2c0a21cdd40d438726cbc5f0
---
M docs/shell.rst
M pySim/ts_51_011.py
2 files changed, 67 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/63/32963/1

diff --git a/docs/shell.rst b/docs/shell.rst
index 9ffbac3..8f440c2 100644
--- a/docs/shell.rst
+++ b/docs/shell.rst
@@ -555,6 +555,22 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~
 Read + decode all EF.ARR records in flattened, human-friendly form.

+DF.GSM/EF.SST: sst_service_allocate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Mark a given single service as allocated in EF.SST.  Requires service number 
as argument.
+
+DF.GSM/EF.SST: sst_service_activate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Mark a given single service as activated in EF.SST.  Requires service number 
as argument.
+
+DF.GSM/EF.SST: sst_service_deallocate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Mark a given single service as deallocated in EF.SST.  Requires service number 
as argument.
+
+DF.GSM/EF.SST: sst_service_deactivate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Mark a given single service as deactivated in EF.SST.  Requires service number 
as argument.
+
 ADF.USIM/EF.EST: est_service_enable
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Enables a single service in EF.EST.  Requires service number as argument.
diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py
index e9f0945..15ddc54 100644
--- a/pySim/ts_51_011.py
+++ b/pySim/ts_51_011.py
@@ -643,6 +643,7 @@
     def __init__(self, fid, sfid, name, desc, size, table):
         super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
         self.table = table
+        self.shell_commands += [self.AddlShellCommands()]

     @staticmethod
     def _bit_byte_offset_for_service(service: int) -> Tuple[int, int]:
@@ -686,6 +687,42 @@
             out[byte_offset] |= ((bits & 3) << bit_offset)
         return out

+    @with_default_category('File-Specific Commands')
+    class AddlShellCommands(CommandSet):
+        def _adjust_service(self, service_nr: int, allocate: Optional[bool] = 
None, activate : Optional[bool] = None):
+            (byte_offset, bit_offset) = 
EF_ServiceTable._bit_byte_offset_for_service(service_nr)
+            hex_data, sw = self._cmd.lchan.read_binary(length=1, 
offset=byte_offset)
+            data = h2b(hex_data)
+            if allocate != None:
+                if allocate:
+                    data[0] |= (1 << bit_offset)
+                else:
+                    data[0] &= ~(1 << bit_offset)
+            if activate != None:
+                if activate:
+                    data[0] |= (2 << bit_offset)
+                else:
+                    data[0] &= ~(2 << bit_offset)
+            total_data, sw = self._cmd.lchan.update_binary(b2h(data), 
offset=byte_offset)
+            return sw
+
+        def do_sst_service_allocate(self, arg):
+            """Allocate a service within EF.SST"""
+            self._adjust_service(int(arg), allocate = True)
+
+        def do_sst_service_deallocate(self, arg):
+            """Deallocate a service within EF.SST"""
+            self._adjust_service(int(arg), allocate = False)
+
+        def do_sst_service_activate(self, arg):
+            """Activate a service within EF.SST"""
+            self._adjust_service(int(arg), activate = True)
+
+        def do_sst_service_deactivate(self, arg):
+            """Deactivate a service within EF.SST"""
+            self._adjust_service(int(arg), activate = False)
+
+
 # TS 51.011 Section 10.3.11
 class EF_SPN(TransparentEF):
     _test_de_encode = [

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/32963
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: If959d06248cb1a9d2c0a21cdd40d438726cbc5f0
Gerrit-Change-Number: 32963
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to