2016-04-09 15 views
2

私は、PythonでACR122Uをポーリングする方法があるのだろうか?以下のスクリプトはカードのUIDを取得しますが、継続的に実行されます。私はそれが理由のwhile1動作します知っているが、それは私がもう少し検索した後、それを見つけたPython ACR122U Poll

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

実際の問題は何ですか? –

+0

は今それだけで* pythonでACR122Uをポーリングする*方法」(見つかっ以上uidと – shaggs

+0

上ではい、それはあなたのコードが行うことになっている正確に何でない表示と、これはまた、ほとんどあなたが指定した要件と一致して実行します")。したがって、再び、あなたの実際の問題は何ですか? –

答えて

1

をachiveしたいのかを示しています。

オペコードはPC/SC cammandsを使用して、以下APUコマンドを使用します。

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

一緒blenedときだから、

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) 

そのない、それを行うためのきちんとした方法を得るが、それは動作します。

関連する問題