2016-04-09 13 views
2

Python'da bir ACR122U'yu sorgulamanın bir yolu olup olmadığını merak ettim ve eğer öyleyse nasıl? Aşağıdaki kodum bir kartın UID'sini alıyor ancak sürekli çalışıyor. Bunun nedeni while1 olarak çalışan biliyorum ama benPython ACR122U Anket

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

Asıl sorunun nedir? –

+0

Şu anda sadece görünmüyor ya da – shaggs

+0

üzerinden biten görüntüyü gösteriyor Evet, kodunuzun yapması gereken tam olarak budur ve bu da belirttiğiniz gereksinim ile çok fazla aynıdır ("* python'da bir ACR122U'yu yoklamak için bir yol * "). Böylece, yine, asıl sorunun nedir? –

cevap

1

biraz daha arama sonra öğrendim başarmak istediğinizi gösterir.

op kodu PC/SC cammands ve aşağıdaki APU komutları kullanan kullanıyor. Birlikte blened zaman

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

Yani bunu yapmanın düzgün bir şekilde

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) 

Onun değil almak ama işe yarıyor.