mirror of https://gerrit.osmocom.org/pysim
shell: Fix activate_file + deactivate_file commands
We cannot re-activate a deactivated file after we have selected somethng else, as SELECT will fail on the deactivated file. Hence, the deactivate_file command needs to be used with a file name as argument. Change-Id: Ief4d2bf8ea90497a8f25d1986aeea935c615f9bb
This commit is contained in:
parent
34b05d3707
commit
485692bc77
|
@ -419,13 +419,17 @@ class Iso7816Commands(CommandSet):
|
||||||
|
|
||||||
def do_deactivate_file(self, opts):
|
def do_deactivate_file(self, opts):
|
||||||
"""Deactivate the current EF"""
|
"""Deactivate the current EF"""
|
||||||
fid = self._cmd.rs.selected_file.fid
|
(data, sw) = self._cmd.card._scc.deactivate_file()
|
||||||
(data, sw) = self._cmd.card._scc.deactivate_file(fid)
|
|
||||||
|
|
||||||
def do_activate_file(self, opts):
|
def do_activate_file(self, opts):
|
||||||
"""Activate the current EF"""
|
"""Activate the specified EF"""
|
||||||
fid = self._cmd.rs.selected_file.fid
|
path = opts.arg_list[0]
|
||||||
(data, sw) = self._cmd.card._scc.activate_file(fid)
|
(data, sw) = self._cmd.rs.activate_file(path)
|
||||||
|
|
||||||
|
def complete_activate_file(self, text, line, begidx, endidx) -> List[str]:
|
||||||
|
"""Command Line tab completion for ACTIVATE FILE"""
|
||||||
|
index_dict = { 1: self._cmd.rs.selected_file.get_selectable_names() }
|
||||||
|
return self._cmd.index_based_complete(text, line, begidx, endidx, index_dict=index_dict)
|
||||||
|
|
||||||
open_chan_parser = argparse.ArgumentParser()
|
open_chan_parser = argparse.ArgumentParser()
|
||||||
open_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
|
open_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
|
||||||
|
|
|
@ -367,9 +367,9 @@ class SimCardCommands(object):
|
||||||
"""Execute DECATIVATE FILE command as per TS 102 221 Section 11.1.14."""
|
"""Execute DECATIVATE FILE command as per TS 102 221 Section 11.1.14."""
|
||||||
return self._tp.send_apdu_constr_checksw(self.cla_byte, '04', '00', '00', None, None, None)
|
return self._tp.send_apdu_constr_checksw(self.cla_byte, '04', '00', '00', None, None, None)
|
||||||
|
|
||||||
def activate_file(self):
|
def activate_file(self, fid):
|
||||||
"""Execute ACTIVATE FILE command as per TS 102 221 Section 11.1.15."""
|
"""Execute ACTIVATE FILE command as per TS 102 221 Section 11.1.15."""
|
||||||
return self._tp.send_apdu_constr_checksw(self.cla_byte, '44', '00', '00', None, None, None)
|
return self._tp.send_apdu_checksw(self.cla_byte + '44000002' + fid)
|
||||||
|
|
||||||
def manage_channel(self, mode='open', lchan_nr=0):
|
def manage_channel(self, mode='open', lchan_nr=0):
|
||||||
"""Execute MANAGE CHANNEL command as per TS 102 221 Section 11.1.17."""
|
"""Execute MANAGE CHANNEL command as per TS 102 221 Section 11.1.17."""
|
||||||
|
|
|
@ -1150,6 +1150,13 @@ class RuntimeState(object):
|
||||||
(data, sw) = self.card._scc.status()
|
(data, sw) = self.card._scc.status()
|
||||||
return self.selected_file.decode_select_response(data)
|
return self.selected_file.decode_select_response(data)
|
||||||
|
|
||||||
|
def activate_file(self, name:str):
|
||||||
|
"""Request ACTIVATE FILE of specified file."""
|
||||||
|
sels = self.selected_file.get_selectables()
|
||||||
|
f = sels[name]
|
||||||
|
data, sw = self.card._scc.activate_file(f.fid)
|
||||||
|
return data, sw
|
||||||
|
|
||||||
def read_binary(self, length:int=None, offset:int=0):
|
def read_binary(self, length:int=None, offset:int=0):
|
||||||
"""Read [part of] a transparent EF binary data.
|
"""Read [part of] a transparent EF binary data.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue