laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/pysim/+/33698 )


Change subject: cards: card_detect for pure UICC/SIM differentiation
......................................................................

cards: card_detect for pure UICC/SIM differentiation

Change-Id: I01009955fe1bef811a30d21ef347fb1bbccc7619
---
M pySim-shell.py
M pySim/cards.py
2 files changed, 34 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/98/33698/1

diff --git a/pySim-shell.py b/pySim-shell.py
index 061ac36..4d4f2e2 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -95,7 +95,7 @@
         return None, None

     generic_card = False
-    card = card_detect("auto", scc)
+    card = card_detect(scc)
     if card is None:
         print("Warning: Could not detect card type - assuming a generic card 
type...")
         card = SimCardBase(scc)
diff --git a/pySim/cards.py b/pySim/cards.py
index 4598217..c6aee69 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -24,6 +24,7 @@

 from typing import Optional, Dict, Tuple
 from pySim.ts_102_221 import EF_DIR, EF_ICCID
+from pySim.ts_51_011 import DF_GSM
 from pySim.transport import LinkBase
 import abc

@@ -75,13 +76,17 @@
 class SimCardBase(CardBase):
     """Here we only add methods for commands specified in TS 51.011, without
     any higher-layer processing."""
+    name = 'SIM'

     def __init__(self, scc: LinkBase):
         super(SimCardBase, self).__init__(scc)
         self._scc.cla_byte = "A0"
         self._scc.sel_ctrl = "0000"

-    name = 'SIM'
+    def probe(self):
+        # EF.DIR is a mandatory EF on all ICCIDs; however it *may* also exist 
on a TS 51.011 SIM
+        df_gsm = DF_GSM()
+        return self.file_exists(df_gsm.fid)


 class UiccCardBase(SimCardBase):
@@ -94,6 +99,11 @@
            # See also: ETSI TS 102 221, Table 9.3
         self._adm_chv_num = 0xA0

+    def probe(self):
+        # EF.DIR is a mandatory EF on all ICCIDs; however it *may* also exist 
on a TS 51.011 SIM
+        ef_dir = EF_DIR()
+        return self.file_exists(ef_dir.fid)
+
     def read_aids(self) -> List[Hexstr]:
         """Fetch all the AIDs present on UICC"""
         self._aids = []
@@ -155,3 +165,16 @@
                 # If we cannot get the full AID, try with short AID
                 return self._scc.select_adf(aid)
         return (None, None)
+
+def card_detect(scc: LinkBase) -> Optional[CardBase]:
+    # UICC always has higher preference, as a UICC might also contain a SIM 
application
+    uicc = UiccCardBase(scc)
+    if uicc.probe():
+        return uicc
+
+    # this is for detecting a real, classic TS 11.11 SIM card without any UICC 
support
+    sim = SimCardBase(scc)
+    if sim.probe():
+        return sim
+
+    return None

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/33698
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I01009955fe1bef811a30d21ef347fb1bbccc7619
Gerrit-Change-Number: 33698
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to