transport: move argument parser setup into concrete classes
The argument parser is set up globally for all LinkBase objects in
__init__.py. Since we tend to have only platform independed code in
__init__.py, we should move the argument parser setup into the
specific LinkBase classes.
Related: OS#6210
Change-Id: I22c32aa81ca0588e3314c3ff4546f6e5092c11df
diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py
index 5f48657..6cccf8c 100644
--- a/pySim/transport/__init__.py
+++ b/pySim/transport/__init__.py
@@ -267,27 +267,17 @@
return (rsp, sw)
-def argparse_add_reader_args(arg_parser):
+def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
"""Add all reader related arguments to the given argparse.Argumentparser instance."""
- serial_group = arg_parser.add_argument_group('Serial Reader')
- serial_group.add_argument('-d', '--device', metavar='DEV', default='/dev/ttyUSB0',
- help='Serial Device for SIM access')
- serial_group.add_argument('-b', '--baud', dest='baudrate', type=int, metavar='BAUD', default=9600,
- help='Baud rate used for SIM access')
+ from pySim.transport.serial import SerialSimLink
+ from pySim.transport.pcsc import PcscSimLink
+ from pySim.transport.modem_atcmd import ModemATCommandLink
+ from pySim.transport.calypso import CalypsoSimLink
- pcsc_group = arg_parser.add_argument_group('PC/SC Reader')
- pcsc_group.add_argument('-p', '--pcsc-device', type=int, dest='pcsc_dev', metavar='PCSC', default=None,
- help='PC/SC reader number to use for SIM access')
-
- modem_group = arg_parser.add_argument_group('AT Command Modem Reader')
- modem_group.add_argument('--modem-device', dest='modem_dev', metavar='DEV', default=None,
- help='Serial port of modem for Generic SIM Access (3GPP TS 27.007)')
- modem_group.add_argument('--modem-baud', type=int, metavar='BAUD', default=115200,
- help='Baud rate used for modem port')
-
- osmobb_group = arg_parser.add_argument_group('OsmocomBB Reader')
- osmobb_group.add_argument('--osmocon', dest='osmocon_sock', metavar='PATH', default=None,
- help='Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)')
+ SerialSimLink.argparse_add_reader_args(arg_parser)
+ PcscSimLink.argparse_add_reader_args(arg_parser)
+ ModemATCommandLink.argparse_add_reader_args(arg_parser)
+ CalypsoSimLink.argparse_add_reader_args(arg_parser)
return arg_parser
diff --git a/pySim/transport/calypso.py b/pySim/transport/calypso.py
index 3fd9992..ea97b69 100644
--- a/pySim/transport/calypso.py
+++ b/pySim/transport/calypso.py
@@ -20,7 +20,7 @@
import struct
import socket
import os
-
+import argparse
from typing import Optional
from pySim.transport import LinkBase
@@ -164,3 +164,9 @@
def __str__(self) -> str:
return "osmocon:%s" % (self._sock_path)
+
+ @staticmethod
+ def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+ osmobb_group = arg_parser.add_argument_group('OsmocomBB Reader')
+ osmobb_group.add_argument('--osmocon', dest='osmocon_sock', metavar='PATH', default=None,
+ help='Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)')
diff --git a/pySim/transport/modem_atcmd.py b/pySim/transport/modem_atcmd.py
index 1b741b0..fee09c8 100644
--- a/pySim/transport/modem_atcmd.py
+++ b/pySim/transport/modem_atcmd.py
@@ -20,6 +20,7 @@
import serial
import time
import re
+import argparse
from typing import Optional
from pySim.utils import Hexstr, ResTuple
@@ -173,3 +174,11 @@
def __str__(self) -> str:
return "modem:%s" % self._device
+
+ @staticmethod
+ def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+ modem_group = arg_parser.add_argument_group('AT Command Modem Reader')
+ modem_group.add_argument('--modem-device', dest='modem_dev', metavar='DEV', default=None,
+ help='Serial port of modem for Generic SIM Access (3GPP TS 27.007)')
+ modem_group.add_argument('--modem-baud', type=int, metavar='BAUD', default=115200,
+ help='Baud rate used for modem port')
diff --git a/pySim/transport/pcsc.py b/pySim/transport/pcsc.py
index 3f3d06c..fbe7c0f 100644
--- a/pySim/transport/pcsc.py
+++ b/pySim/transport/pcsc.py
@@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+import argparse
from typing import Optional
from smartcard.CardConnection import CardConnection
@@ -96,3 +97,9 @@
def __str__(self) -> str:
return "PCSC:%u[%s]" % (self._reader_number, self._reader)
+
+ @staticmethod
+ def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+ pcsc_group = arg_parser.add_argument_group('PC/SC Reader')
+ pcsc_group.add_argument('-p', '--pcsc-device', type=int, dest='pcsc_dev', metavar='PCSC', default=None,
+ help='PC/SC reader number to use for SIM access')
diff --git a/pySim/transport/serial.py b/pySim/transport/serial.py
index 269ec9c..867317c 100644
--- a/pySim/transport/serial.py
+++ b/pySim/transport/serial.py
@@ -19,6 +19,7 @@
import serial
import time
import os.path
+import argparse
from typing import Optional
from pySim.exceptions import NoCardError, ProtocolError
@@ -240,3 +241,11 @@
def __str__(self) -> str:
return "serial:%s" % (self._sl.name)
+
+ @staticmethod
+ def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+ serial_group = arg_parser.add_argument_group('Serial Reader')
+ serial_group.add_argument('-d', '--device', metavar='DEV', default='/dev/ttyUSB0',
+ help='Serial Device for SIM access')
+ serial_group.add_argument('-b', '--baud', dest='baudrate', type=int, metavar='BAUD', default=9600,
+ help='Baud rate used for SIM access')