transport: Change transport api to allow for wait_for_card/connect/disconnect
This way, we can re-use the same transport parameters for several
cards for a future batch mode
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
diff --git a/pySim/transport/pcsc.py b/pySim/transport/pcsc.py
index 5d92009..dc040c5 100644
--- a/pySim/transport/pcsc.py
+++ b/pySim/transport/pcsc.py
@@ -22,7 +22,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
-from smartcard.Exceptions import NoCardException
+from smartcard.CardRequest import CardRequest
+from smartcard.Exceptions import NoCardException, CardRequestTimeoutException
from smartcard.System import readers
from pySim.exceptions import NoCardError
@@ -34,16 +35,30 @@
def __init__(self, reader_number=0):
r = readers();
- try:
- self._con = r[reader_number].createConnection()
- self._con.connect()
- except NoCardException:
- raise NoCardError()
+ self._reader = r[reader_number]
+ self._con = self._reader.createConnection()
def __del__(self):
self._con.disconnect()
return
+ def wait_for_card(self, timeout=None, newcardonly=False):
+ cr = CardRequest(readers=[self._reader], timeout=timeout, newcardonly=newcardonly)
+ try:
+ cr.waitforcard()
+ except CardRequestTimeoutException:
+ raise NoCardError()
+ self.connect()
+
+ def connect(self):
+ try:
+ self._con.connect()
+ except NoCardException:
+ raise NoCardError()
+
+ def disconnect(self):
+ self._con.disconnect()
+
def reset_card(self):
self._con.disconnect()
try: