Reimplement ust_service_activate and ust_service_deactivate for USIM/EF.UST

Fixes: f8d2e2ba08 ("split pySim/legacy/{cards,utils} from pySim/{cards,utils}")
Change-Id: I7a6a77b872a6f5d8c478ca75dcff8ea067b8203e
This commit is contained in:
Alexander Couzens 2023-07-28 05:13:06 +02:00 committed by laforge
parent 8dc2ca2d37
commit 6c5c3f8b2b
2 changed files with 23 additions and 2 deletions

View File

@ -466,11 +466,13 @@ class EF_UST(EF_UServiceTable):
def do_ust_service_activate(self, arg):
"""Activate a service within EF.UST"""
self._cmd.card.update_ust(int(arg), 1)
selected_file = self._cmd.lchan.selected_file
selected_file.ust_update(self._cmd, [int(arg)], [])
def do_ust_service_deactivate(self, arg):
"""Deactivate a service within EF.UST"""
self._cmd.card.update_ust(int(arg), 0)
selected_file = self._cmd.lchan.selected_file
selected_file.ust_update(self._cmd, [], [int(arg)])
def do_ust_service_check(self, arg):
"""Check consistency between services of this file and files present/activated.

View File

@ -120,7 +120,26 @@ class EF_UServiceTable(TransparentEF):
cmd.lchan.select_file(self)
return num_problems
def ust_update(self, cmd, activate=[], deactivate=[]):
service_data, sw = cmd.lchan.read_binary()
service_data = h2b(service_data)
for service in activate:
nbyte, nbit = EF_UServiceTable._bit_byte_offset_for_service(service)
if nbyte > len(service_data):
missing = nbyte - service_data
service_data.extend(missing * "00")
service_data[nbyte] |= (1 << nbit)
for service in deactivate:
nbyte, nbit = EF_UServiceTable._bit_byte_offset_for_service(service)
if nbyte > len(service_data):
missing = nbyte - service_data
service_data.extend(missing * "00")
service_data[nbyte] &= ~(1 << nbit)
service_data = b2h(service_data)
cmd.lchan.update_binary(service_data)
# TS 31.102 Section 4.4.2.1
class EF_PBR(LinFixedEF):