laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/33670 )
Change subject: GlobalPlatform ADF.SD: Add command line reference + error message ......................................................................
GlobalPlatform ADF.SD: Add command line reference + error message
The get_data shell command didn't have any interactive help / syntax, and no meaningful error message in case an unknown data object name was specified by the user. Let's fix that.
Change-Id: I09faaf5d45118635cf832c8c513033aede1427e5 --- M docs/shell.rst M pySim/global_platform.py 2 files changed, 30 insertions(+), 4 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/docs/shell.rst b/docs/shell.rst index ef08fcf..73b988a 100644 --- a/docs/shell.rst +++ b/docs/shell.rst @@ -795,8 +795,9 @@
get_data ~~~~~~~~ -Performs the GET DATA command as specified by GlobalPlatform. - +.. argparse:: + :module: pySim.global_platform + :func: ADF_SD.AddlShellCommands.get_data_parser
cmd2 settable parameters ------------------------ diff --git a/pySim/global_platform.py b/pySim/global_platform.py index baae234..ea8b70d 100644 --- a/pySim/global_platform.py +++ b/pySim/global_platform.py @@ -223,9 +223,21 @@ def __init__(self): super().__init__()
+ get_data_parser = argparse.ArgumentParser() + get_data_parser.add_argument('data_object_name', type=str, + help='Name of the data object to be retrieved from the card') + + @cmd2.with_argparser(get_data_parser) def do_get_data(self, opts): - tlv_cls_name = opts.arg_list[0] - tlv_cls = DataCollection().members_by_name[tlv_cls_name] + """Perform the GlobalPlatform GET DATA command in order to obtain some card-specific data.""" + tlv_cls_name = opts.data_object_name + try: + tlv_cls = DataCollection().members_by_name[tlv_cls_name] + except KeyError: + do_names = [camel_to_snake(str(x.__name__)) for x in DataCollection.possible_nested] + self._cmd.poutput('Unknown data object "%s", available options: %s' % (tlv_cls_name, + do_names)) + return (data, sw) = self._cmd.card._scc.get_data(cla=0x80, tag=tlv_cls.tag) ie = tlv_cls() ie.from_tlv(h2b(data))