mirror of
https://gitea.osmocom.org/sim-card/pysim.git
synced 2026-03-31 20:30:24 +03:00
pySim-shell: Add open_channel + close_channel commands
Change-Id: I53d9d7f7720eb5f10956bff74ea7ba9fd3b3bd19
This commit is contained in:
@@ -129,6 +129,18 @@ activate_file
|
|||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
Activate the currently selected file. This used to be called REHABILITATE in TS 11.11.
|
Activate the currently selected file. This used to be called REHABILITATE in TS 11.11.
|
||||||
|
|
||||||
|
open_channel
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
.. argparse::
|
||||||
|
:module: pySim-shell
|
||||||
|
:func: Iso7816Commands.open_chan_parser
|
||||||
|
|
||||||
|
close_channel
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
.. argparse::
|
||||||
|
:module: pySim-shell
|
||||||
|
:func: Iso7816Commands.close_chan_parser
|
||||||
|
|
||||||
|
|
||||||
pySim commands
|
pySim commands
|
||||||
--------------
|
--------------
|
||||||
|
|||||||
@@ -413,6 +413,23 @@ class Iso7816Commands(CommandSet):
|
|||||||
fid = self._cmd.rs.selected_file.fid
|
fid = self._cmd.rs.selected_file.fid
|
||||||
(data, sw) = self._cmd.card._scc.activate_file(fid)
|
(data, sw) = self._cmd.card._scc.activate_file(fid)
|
||||||
|
|
||||||
|
open_chan_parser = argparse.ArgumentParser()
|
||||||
|
open_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
|
||||||
|
|
||||||
|
@cmd2.with_argparser(open_chan_parser)
|
||||||
|
def do_open_channel(self, opts):
|
||||||
|
"""Open a logical channel."""
|
||||||
|
(data, sw) = self._cmd.card._scc.manage_channel(mode='open', lchan_nr=opts.chan_nr)
|
||||||
|
|
||||||
|
close_chan_parser = argparse.ArgumentParser()
|
||||||
|
close_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
|
||||||
|
|
||||||
|
@cmd2.with_argparser(close_chan_parser)
|
||||||
|
def do_close_channel(self, opts):
|
||||||
|
"""Close a logical channel."""
|
||||||
|
(data, sw) = self._cmd.card._scc.manage_channel(mode='close', lchan_nr=opts.chan_nr)
|
||||||
|
|
||||||
|
|
||||||
def parse_options():
|
def parse_options():
|
||||||
|
|
||||||
parser = OptionParser(usage="usage: %prog [options]")
|
parser = OptionParser(usage="usage: %prog [options]")
|
||||||
|
|||||||
@@ -304,6 +304,15 @@ class SimCardCommands(object):
|
|||||||
"""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_constr_checksw(self.cla_byte, '44', '00', '00', None, None, None)
|
||||||
|
|
||||||
|
def manage_channel(self, mode='open', lchan_nr=0):
|
||||||
|
"""Execute MANAGE CHANNEL command as per TS 102 221 Section 11.1.17."""
|
||||||
|
if mode == 'close':
|
||||||
|
p1 = 0x80
|
||||||
|
else:
|
||||||
|
p1 = 0x00
|
||||||
|
pdu = self.cla_byte + '70%02x%02x00' % (p1, lchan_nr)
|
||||||
|
return self._tp.send_apdu_checksw(pdu)
|
||||||
|
|
||||||
def reset_card(self):
|
def reset_card(self):
|
||||||
"""Physically reset the card"""
|
"""Physically reset the card"""
|
||||||
return self._tp.reset_card()
|
return self._tp.reset_card()
|
||||||
|
|||||||
Reference in New Issue
Block a user