Stop polling for ATR, when pace-tool is running

git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@150 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
oepen
2010-06-14 07:47:43 +00:00
parent 4c937a3d75
commit 82ddad7214

View File

@@ -120,6 +120,7 @@ class PinpadGTK:
param = "--pin" param = "--pin"
try: try:
self.cardChecker.pause() #Stop polling the card while PACE is running
p = subprocess.Popen(["pace-tool", param, "-v"], p = subprocess.Popen(["pace-tool", param, "-v"],
stdout=subprocess.PIPE, env=env_arg, close_fds=True) stdout=subprocess.PIPE, env=env_arg, close_fds=True)
except OSError, e: except OSError, e:
@@ -128,6 +129,7 @@ class PinpadGTK:
gtk.BUTTONS_OK, "pace-tool wurde nicht gefunden.") gtk.BUTTONS_OK, "pace-tool wurde nicht gefunden.")
popup.run() popup.run()
popup.destroy() popup.destroy()
self.cardChecker.resume() #Restart cardChecker
return return
line = p.stdout.readline() line = p.stdout.readline()
@@ -142,6 +144,7 @@ class PinpadGTK:
ret = p.poll() ret = p.poll()
self.progressWindow.hide() self.progressWindow.hide()
self.cardChecker.resume() #Restart cardChecker
if (ret == 0): if (ret == 0):
popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL | popup = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL |
@@ -196,6 +199,7 @@ class cardChecker(Thread):
def __init__(self, widget, atr, intervall=1): def __init__(self, widget, atr, intervall=1):
Thread.__init__(self) Thread.__init__(self)
self._finished = Event() self._finished = Event()
self._paused = Event()
self.widget = widget self.widget = widget
self.targetATR = atr self.targetATR = atr
self.intervall = intervall self.intervall = intervall
@@ -222,12 +226,19 @@ class cardChecker(Thread):
def run(self): def run(self):
while (True): while (True):
if self._finished.isSet(): return if self._finished.isSet(): return
if self._paused.isSet(): continue
self.__cardCheck() self.__cardCheck()
self._finished.wait(self.intervall) self._finished.wait(self.intervall)
def stop(self): def stop(self):
self._finished.set() self._finished.set()
def pause(self):
self._paused.set()
def resume(self):
self._paused.clear()
if __name__ == "__main__": if __name__ == "__main__":
gobject.threads_init() gobject.threads_init()
pinpad = PinpadGTK() pinpad = PinpadGTK()