def check_magstripe (ser): ''' Prüft, welche Magnetspur Daten enthält. Return: 3-elementige Liste mit 0x30 = keine Daten, 0x31 = Daten für jede Spur ''' txdata = b"C67" if ict.sendICT(ser, txdata) == ict.ACK: rxdata = ict.recvICT(ser) if rxdata[0]==0x50: return rxdata[5:8] else: return -1
def check_status (ser): ''' Prüft Leserstatus Return: ST1, ST0 ''' cnt = ict.COMRETRIES while cnt: txdata = b"C10" # Reader Status? res = ict.sendICT (ser, txdata) if res == ict.ACK: rxdata = ict.recvICT(ser) return (rxdata[3] & 0x0F, rxdata[4] & 0x0F) else: cnt -= 1 sleep(ict.COMTIMEOUT) return -1
def reqcard (ser, modus, timeout=ict.CARDINTIMER): ''' Setzt ICT-Status ENABLED oder DISABLED Modus: 0 = Karte annehmen, auch wenn Magnetstreifen am Prehead ungültig 1 = Kartenannahme gesperrt 2 = Karte annehmen, wenn Magnetdaten am Prehead erkannt. Return: 0 = Karte erkannt und in Leseposition 1 = Fehler -1 = Timeout ''' if modus in [0, 1, 2]: txdata = b"C:" + bytes([modus + 0x30]) # Reader enabled else: print ("Fehler: Falscher ENABLE-Modus: {}".format (modus)) return 1 res = ict.sendICT (ser, txdata) if res == ict.ACK: print ("Warte auf Karte... ",end="") rxdata = ict.recvICT(ser) if rxdata[0]==b'P': print ("OK") else: print ("Fehler: ENABLE fehlgeschlagen.") return 1 cnt = int(timeout // ict.POLLWAIT) cardstatus = 1 # keine Karte while cardstatus and cnt: status = check_status(ser) if isinstance(status, tuple): if status[0] == 0 and status[1]==2: # Karte erkannt und in Position? cardstatus = 0 print ("OK.\n") else: cnt -= 1 sleep(ict.POLLWAIT) else: print ("\nFehler: Keine Antwort auf Statusabfrage!") if cnt: # noch Pollversuche übrig? if ict.DEBUG: print ("Karte in Position: {}".format (check_status(ser))) return cardstatus else: return -1 # Timeout
def read_magstripe (ser, track): ''' Liest angegebenen Magnetstreifen Return: Tuple mit Status und Spurdaten 1 : Fehler ''' if track in [1, 2, 3]: txdata = b"C6" + bytes([track+0x30]) # Lesekommando aufbauen if ict.DEBUG: print (txdata) res = ict.sendICT (ser, txdata) if res == ict.ACK: rxdata = ict.recvICT(ser) if rxdata[0]==0x50: # 'P' return (0, rxdata[4:]) else: print ("Fehler: {}\n".format(rxdata.decode())) return 1 else: return 1
def ejectcard (ser, modus=0): ''' Karte auswerfen. Modus = 0 : zur Kundenseite auswerfen 1 : nach hinten einziehen Return: 0 : Auswurf erfolgreich 1 : Fehler ''' if modus in [0, 1]: txdata = b"C3" + bytes([modus+0x30]) # Karte auswerfen else: print ("Fehler: Falscher EJECT-Modus: {}".format (modus)) return 1 res = ict.sendICT (ser, txdata) if res == ict.ACK: rxdata = ict.recvICT(ser) if rxdata[0] == b'P': return 0 return 1