2016-04-09 27 views
2

Ich frage mich, ob es eine Möglichkeit gibt, eine ACR122U in Python abzufragen und wenn ja wie? Mein Skript unten erhält die UID einer Karte, läuft aber kontinuierlich. Ich weiß, es läuft wegen while1 aber es zeigt, was ichPython ACR122U Umfrage

from smartcard.scard import * 
from smartcard.util import  toHexString 

def s(): 
while 1: 
    hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER) 
    assert hresult==SCARD_S_SUCCESS 
    hresult, readers = SCardListReaders(hcontext, []) 
    assert len(readers)>0 
    reader = readers[0] 
    hresult, hcard, dwActiveProtocol = SCardConnect(
    hcontext, 
    reader, 
    SCARD_SHARE_SHARED, 
    SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) 
    try: 
    hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04]) 
    uid = toHexString(response, format=0) 
    print uid 
    except SystemError: 
    print "no card found" 
s() 
+0

Also, was ist dein eigentliches Problem? –

+0

Im Moment läuft es nur Anzeige nicht gefunden oder die UID wieder und wieder – shaggs

+0

Ja, das ist genau das, was Ihr Code tun soll und dies entspricht auch ziemlich genau der Anforderung, die Sie angegeben haben ("* eine Möglichkeit, eine ACR122U in Python * abzufragen) "). Also, wieder, was ist dein eigentliches Problem? –

Antwort

1

es gefunden achive wollen, nachdem ein bisschen mehr Suche.

der OP-Code wird unter Verwendung von PC/SC cammands und unten verwendet APU Befehle. So

cardmonitor = CardMonitor() 
cardobserver = printout() 
cardmonitor.addObserver(cardobserver) 
#If no card in 20secs kill program (put in for testing) 
sleep(20) 
cardmonitor.deleteObserver(cardobserver) 

wenn blened zusammen bekommen Sie

class printobserver(CardObserver): 
    def update(self, observable, (addedcards, removedcards)): 
     for card in addedcards: 
     if addedcards: 
      hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER) 
      assert hresult==SCARD_S_SUCCESS 
      hresult, readers = SCardListReaders(hcontext, []) 
      assert len(readers)>0 
      reader = readers[0] 
      hresult, hcard, dwActiveProtocol = SCardConnect(
      hcontext, 
      reader, 
      SCARD_SHARE_SHARED, 
      SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1) 
      hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x04]) 
      uid = toHexString(response, format=0) 
      print response #cards ATR 
      print uid #Cards UID 

print "place card on reader" 
while 1: 
    cardmonitor = CardMonitor() 
    cardobserver = printobserver() 
    cardmonitor.addObserver(cardobserver) 
    cardmonitor.deleteObserver(cardobserver) 
    time.sleep(2) 

Es ist nicht eine saubere Art und Weise, es zu tun, aber es funktioniert.