github
diff --git a/pysim_otaman_server/__main__.py b/pysim_otaman_server/__main__.py
index 3b74068..31f6e44 100644
--- a/pysim_otaman_server/__main__.py
+++ b/pysim_otaman_server/__main__.py
@@ -56,6 +56,23 @@ def main():
rs = None
sim_menu = None
event_list = None
+ # Auto-detect PC/SC reader if none was explicitly specified.
+ # Handles late pcscd startup and USB enumeration delays.
+ if opts.pcsc_dev is None and opts.pcsc_regex is None:
+ try:
+ from smartcard.System import readers
+ for attempt in range(3):
+ r = readers()
+ if r:
+ sys.stderr.write('INIT: PC/SC reader detected: %s\n' % r[0])
+ opts.pcsc_dev = 0
+ break
+ if attempt < 2:
+ sys.stderr.write('INIT: no PC/SC readers found, retrying in 2s...\n')
+ time.sleep(2)
+ except Exception:
+ pass # smartcard module not available or pcscd unreachable
+
try:
kwargs = {}
if opts.apdu_trace:
diff --git a/pysim_otaman_server/server.py b/pysim_otaman_server/server.py
index e86f545..67d5271 100644
--- a/pysim_otaman_server/server.py
+++ b/pysim_otaman_server/server.py
@@ -18,7 +18,7 @@ from osmocom.construct import GsmOrUcs2Adapter
from osmocom.tlv import BER_TLV_IE
-VERSION = '1.9.22'
+VERSION = '1.9.23'
MAX_ENVELOPE_SEGMENTS = 5 # max SMS segments for outgoing C-APDU in ENVELOPE
diff --git a/start.sh b/start.sh
index cf49306..74f7212 100755
--- a/start.sh
+++ b/start.sh
@@ -10,10 +10,14 @@ VENV_DIR="$SCRIPT_DIR/.venv"
# Auto-detect reader
READER_ARGS=""
-if command -v pcscd > /dev/null 2>&1 && pgrep -x pcscd > /dev/null 2>&1; then
- READER_ARGS="-p 0"
-elif [ -e /dev/ttyUSB0 ]; then
- READER_ARGS="-d /dev/ttyUSB0"
+if command -v pcscd > /dev/null 2>&1; then
+ # Give pcscd a moment if it's not running yet (USB enumeration delay)
+ if ! pgrep -x pcscd > /dev/null 2>&1 && ! pgrep -x pcscd.bin > /dev/null 2>&1; then
+ sleep 1
+ fi
+ if pgrep -x pcscd > /dev/null 2>&1 || pgrep -x pcscd.bin > /dev/null 2>&1; then
+ READER_ARGS="-p 0"
+ fi
fi
SERVER=""