Fixed indentation

This commit is contained in:
Mario Gomez 2013-11-10 23:11:20 -06:00
parent d3bd6fef99
commit 42d9277062

View file

@ -1,395 +1,393 @@
import RPi.GPIO as GPIO
import spi
import RPi.GPIO as GPIO import signal
import spi
import signal class MFRC522:
NRSTPD = 22
class MFRC522:
NRSTPD = 22 MAX_LEN = 16
MAX_LEN = 16 PCD_IDLE = 0x00
PCD_AUTHENT = 0x0E
PCD_IDLE = 0x00 PCD_RECEIVE = 0x08
PCD_AUTHENT = 0x0E PCD_TRANSMIT = 0x04
PCD_RECEIVE = 0x08 PCD_TRANSCEIVE = 0x0C
PCD_TRANSMIT = 0x04 PCD_RESETPHASE = 0x0F
PCD_TRANSCEIVE = 0x0C PCD_CALCCRC = 0x03
PCD_RESETPHASE = 0x0F
PCD_CALCCRC = 0x03 PICC_REQIDL = 0x26
PICC_REQALL = 0x52
PICC_REQIDL = 0x26 PICC_ANTICOLL = 0x93
PICC_REQALL = 0x52 PICC_SElECTTAG = 0x93
PICC_ANTICOLL = 0x93 PICC_AUTHENT1A = 0x60
PICC_SElECTTAG = 0x93 PICC_AUTHENT1B = 0x61
PICC_AUTHENT1A = 0x60 PICC_READ = 0x30
PICC_AUTHENT1B = 0x61 PICC_WRITE = 0xA0
PICC_READ = 0x30 PICC_DECREMENT = 0xC0
PICC_WRITE = 0xA0 PICC_INCREMENT = 0xC1
PICC_DECREMENT = 0xC0 PICC_RESTORE = 0xC2
PICC_INCREMENT = 0xC1 PICC_TRANSFER = 0xB0
PICC_RESTORE = 0xC2 PICC_HALT = 0x50
PICC_TRANSFER = 0xB0
PICC_HALT = 0x50 MI_OK = 0
MI_NOTAGERR = 1
MI_OK = 0 MI_ERR = 2
MI_NOTAGERR = 1
MI_ERR = 2 Reserved00 = 0x00
CommandReg = 0x01
Reserved00 = 0x00 CommIEnReg = 0x02
CommandReg = 0x01 DivlEnReg = 0x03
CommIEnReg = 0x02 CommIrqReg = 0x04
DivlEnReg = 0x03 DivIrqReg = 0x05
CommIrqReg = 0x04 ErrorReg = 0x06
DivIrqReg = 0x05 Status1Reg = 0x07
ErrorReg = 0x06 Status2Reg = 0x08
Status1Reg = 0x07 FIFODataReg = 0x09
Status2Reg = 0x08 FIFOLevelReg = 0x0A
FIFODataReg = 0x09 WaterLevelReg = 0x0B
FIFOLevelReg = 0x0A ControlReg = 0x0C
WaterLevelReg = 0x0B BitFramingReg = 0x0D
ControlReg = 0x0C CollReg = 0x0E
BitFramingReg = 0x0D Reserved01 = 0x0F
CollReg = 0x0E
Reserved01 = 0x0F Reserved10 = 0x10
ModeReg = 0x11
Reserved10 = 0x10 TxModeReg = 0x12
ModeReg = 0x11 RxModeReg = 0x13
TxModeReg = 0x12 TxControlReg = 0x14
RxModeReg = 0x13 TxAutoReg = 0x15
TxControlReg = 0x14 TxSelReg = 0x16
TxAutoReg = 0x15 RxSelReg = 0x17
TxSelReg = 0x16 RxThresholdReg = 0x18
RxSelReg = 0x17 DemodReg = 0x19
RxThresholdReg = 0x18 Reserved11 = 0x1A
DemodReg = 0x19 Reserved12 = 0x1B
Reserved11 = 0x1A MifareReg = 0x1C
Reserved12 = 0x1B Reserved13 = 0x1D
MifareReg = 0x1C Reserved14 = 0x1E
Reserved13 = 0x1D SerialSpeedReg = 0x1F
Reserved14 = 0x1E
SerialSpeedReg = 0x1F Reserved20 = 0x20
CRCResultRegM = 0x21
Reserved20 = 0x20 CRCResultRegL = 0x22
CRCResultRegM = 0x21 Reserved21 = 0x23
CRCResultRegL = 0x22 ModWidthReg = 0x24
Reserved21 = 0x23 Reserved22 = 0x25
ModWidthReg = 0x24 RFCfgReg = 0x26
Reserved22 = 0x25 GsNReg = 0x27
RFCfgReg = 0x26 CWGsPReg = 0x28
GsNReg = 0x27 ModGsPReg = 0x29
CWGsPReg = 0x28 TModeReg = 0x2A
ModGsPReg = 0x29 TPrescalerReg = 0x2B
TModeReg = 0x2A TReloadRegH = 0x2C
TPrescalerReg = 0x2B TReloadRegL = 0x2D
TReloadRegH = 0x2C TCounterValueRegH = 0x2E
TReloadRegL = 0x2D TCounterValueRegL = 0x2F
TCounterValueRegH = 0x2E
TCounterValueRegL = 0x2F Reserved30 = 0x30
TestSel1Reg = 0x31
Reserved30 = 0x30 TestSel2Reg = 0x32
TestSel1Reg = 0x31 TestPinEnReg = 0x33
TestSel2Reg = 0x32 TestPinValueReg = 0x34
TestPinEnReg = 0x33 TestBusReg = 0x35
TestPinValueReg = 0x34 AutoTestReg = 0x36
TestBusReg = 0x35 VersionReg = 0x37
AutoTestReg = 0x36 AnalogTestReg = 0x38
VersionReg = 0x37 TestDAC1Reg = 0x39
AnalogTestReg = 0x38 TestDAC2Reg = 0x3A
TestDAC1Reg = 0x39 TestADCReg = 0x3B
TestDAC2Reg = 0x3A Reserved31 = 0x3C
TestADCReg = 0x3B Reserved32 = 0x3D
Reserved31 = 0x3C Reserved33 = 0x3E
Reserved32 = 0x3D Reserved34 = 0x3F
Reserved33 = 0x3E
Reserved34 = 0x3F serNum = []
serNum = []
def __init__(self,spd=1000000):
spi.openSPI(speed=spd)
def __init__(self,spd=1000000): GPIO.setmode(GPIO.BOARD)
spi.openSPI(speed=spd) GPIO.setup(22, GPIO.OUT)
GPIO.setmode(GPIO.BOARD) GPIO.output(self.NRSTPD, 1)
GPIO.setup(22, GPIO.OUT) self.MFRC522_Init()
GPIO.output(self.NRSTPD, 1)
self.MFRC522_Init() def MFRC522_Reset(self):
self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE)
def MFRC522_Reset(self):
self.Write_MFRC522(self.CommandReg, self.PCD_RESETPHASE) def Write_MFRC522(self,addr,val):
spi.transfer(((addr<<1)&0x7E,val))
def Write_MFRC522(self,addr,val):
spi.transfer(((addr<<1)&0x7E,val)) def Read_MFRC522(self,addr):
val = spi.transfer((((addr<<1)&0x7E) | 0x80,0))
def Read_MFRC522(self,addr): return val[1]
val = spi.transfer((((addr<<1)&0x7E) | 0x80,0))
return val[1] def SetBitMask(self, reg, mask):
tmp = self.Read_MFRC522(reg)
def SetBitMask(self, reg, mask): self.Write_MFRC522(reg, tmp | mask)
tmp = self.Read_MFRC522(reg)
self.Write_MFRC522(reg, tmp | mask) def ClearBitMask(self, reg, mask):
tmp = self.Read_MFRC522(reg);
def ClearBitMask(self, reg, mask): self.Write_MFRC522(reg, tmp & (~mask))
tmp = self.Read_MFRC522(reg);
self.Write_MFRC522(reg, tmp & (~mask)) def AntennaOn(self):
temp = self.Read_MFRC522(self.TxControlReg)
def AntennaOn(self): if(~(temp & 0x03)):
temp = self.Read_MFRC522(self.TxControlReg) self.SetBitMask(self.TxControlReg, 0x03)
if(~(temp & 0x03)):
self.SetBitMask(self.TxControlReg, 0x03) def AntennaOff(self):
self.ClearBitMask(self.TxControlReg, 0x03)
def AntennaOff(self):
self.ClearBitMask(self.TxControlReg, 0x03) def MFRC522_ToCard(self,command,sendData):
backData = []
def MFRC522_ToCard(self,command,sendData): backLen = 0
backData = [] status = self.MI_ERR
backLen = 0 irqEn = 0x00
status = self.MI_ERR waitIRq = 0x00
irqEn = 0x00 lastBits = None
waitIRq = 0x00 n = 0
lastBits = None i = 0
n = 0
i = 0 if command == self.PCD_AUTHENT:
irqEn = 0x12
if command == self.PCD_AUTHENT: waitIRq = 0x10
irqEn = 0x12 if command == self.PCD_TRANSCEIVE:
waitIRq = 0x10 irqEn = 0x77
if command == self.PCD_TRANSCEIVE: waitIRq = 0x30
irqEn = 0x77
waitIRq = 0x30 self.Write_MFRC522(self.CommIEnReg, irqEn|0x80)
self.ClearBitMask(self.CommIrqReg, 0x80)
self.Write_MFRC522(self.CommIEnReg, irqEn|0x80) self.SetBitMask(self.FIFOLevelReg, 0x80)
self.ClearBitMask(self.CommIrqReg, 0x80) self.Write_MFRC522(self.CommandReg, self.PCD_IDLE);
self.SetBitMask(self.FIFOLevelReg, 0x80) while(i<len(sendData)):
self.Write_MFRC522(self.CommandReg, self.PCD_IDLE); self.Write_MFRC522(self.FIFODataReg, sendData[i])
while(i<len(sendData)): i = i+1
self.Write_MFRC522(self.FIFODataReg, sendData[i]) self.Write_MFRC522(self.CommandReg, command)
i = i+1
self.Write_MFRC522(self.CommandReg, command)
if command == self.PCD_TRANSCEIVE:
self.SetBitMask(self.BitFramingReg, 0x80)
if command == self.PCD_TRANSCEIVE: i = 2000
self.SetBitMask(self.BitFramingReg, 0x80) while True:
i = 2000 n = self.Read_MFRC522(self.CommIrqReg)
while True: i = i - 1
n = self.Read_MFRC522(self.CommIrqReg) if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)):
i = i - 1 break
if ~((i!=0) and ~(n&0x01) and ~(n&waitIRq)): self.ClearBitMask(self.BitFramingReg, 0x80)
break
self.ClearBitMask(self.BitFramingReg, 0x80) if i != 0:
if (self.Read_MFRC522(self.ErrorReg) & 0x1B)==0x00:
if i != 0: status = self.MI_OK
if (self.Read_MFRC522(self.ErrorReg) & 0x1B)==0x00: if n & irqEn & 0x01:
status = self.MI_OK status = self.MI_NOTAGERR
if n & irqEn & 0x01:
status = self.MI_NOTAGERR if command == self.PCD_TRANSCEIVE:
n = self.Read_MFRC522(self.FIFOLevelReg)
if command == self.PCD_TRANSCEIVE: lastBits = self.Read_MFRC522(self.ControlReg) & 0x07
n = self.Read_MFRC522(self.FIFOLevelReg) if lastBits != 0:
lastBits = self.Read_MFRC522(self.ControlReg) & 0x07 backLen = (n-1)*8 + lastBits
if lastBits != 0: else:
backLen = (n-1)*8 + lastBits backLen = n*8
else: if n == 0:
backLen = n*8 n = 1
if n == 0: if n > self.MAX_LEN:
n = 1 n = self.MAX_LEN
if n > self.MAX_LEN:
n = self.MAX_LEN i = 0
while i<n:
i = 0 backData.append(self.Read_MFRC522(self.FIFODataReg))
while i<n: i = i + 1;
backData.append(self.Read_MFRC522(self.FIFODataReg)) else:
i = i + 1; status = self.MI_ERR
else:
status = self.MI_ERR return (status,backData,backLen)
return (status,backData,backLen)
def MFRC522_Request(self, reqMode):
status = None
def MFRC522_Request(self, reqMode): backBits = None
status = None TagType = []
backBits = None
TagType = [] self.Write_MFRC522(self.BitFramingReg, 0x07)
self.Write_MFRC522(self.BitFramingReg, 0x07) TagType.append(reqMode);
(status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, TagType)
TagType.append(reqMode);
(status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, TagType) if ((status != self.MI_OK) | (backBits != 0x10)):
status = self.MI_ERR
if ((status != self.MI_OK) | (backBits != 0x10)):
status = self.MI_ERR return (status,backBits)
return (status,backBits)
def MFRC522_Anticoll(self):
backData = []
def MFRC522_Anticoll(self): serNumCheck = 0
backData = []
serNumCheck = 0 serNum = []
serNum = [] self.Write_MFRC522(self.BitFramingReg, 0x00)
self.Write_MFRC522(self.BitFramingReg, 0x00) serNum.append(self.PICC_ANTICOLL)
serNum.append(0x20)
serNum.append(self.PICC_ANTICOLL)
serNum.append(0x20) (status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,serNum)
(status,backData,backBits) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,serNum) if(status == self.MI_OK):
i = 0
if(status == self.MI_OK): if len(backData)==5:
i = 0 while i<4:
if len(backData)==5: serNumCheck = serNumCheck ^ backData[i]
while i<4: i = i + 1
serNumCheck = serNumCheck ^ backData[i] if serNumCheck != backData[i]:
i = i + 1 status = self.MI_ERR
if serNumCheck != backData[i]: else:
status = self.MI_ERR status = self.MI_ERR
else:
status = self.MI_ERR return (status,backData)
return (status,backData) def CalulateCRC(self, pIndata):
self.ClearBitMask(self.DivIrqReg, 0x04)
def CalulateCRC(self, pIndata): self.SetBitMask(self.FIFOLevelReg, 0x80);
self.ClearBitMask(self.DivIrqReg, 0x04) i = 0
self.SetBitMask(self.FIFOLevelReg, 0x80); while i<len(pIndata):
i = 0 self.Write_MFRC522(self.FIFODataReg, pIndata[i])
while i<len(pIndata): i = i + 1
self.Write_MFRC522(self.FIFODataReg, pIndata[i]) self.Write_MFRC522(self.CommandReg, self.PCD_CALCCRC)
i = i + 1 i = 0xFF
self.Write_MFRC522(self.CommandReg, self.PCD_CALCCRC) while True:
i = 0xFF n = self.Read_MFRC522(self.DivIrqReg)
while True: i = i - 1
n = self.Read_MFRC522(self.DivIrqReg) if not ((i != 0) and not (n&0x04)):
i = i - 1 break
if not ((i != 0) and not (n&0x04)): pOutData = []
break pOutData.append(self.Read_MFRC522(self.CRCResultRegL))
pOutData = [] pOutData.append(self.Read_MFRC522(self.CRCResultRegM))
pOutData.append(self.Read_MFRC522(self.CRCResultRegL)) return pOutData
pOutData.append(self.Read_MFRC522(self.CRCResultRegM))
return pOutData def MFRC522_SelectTag(self, serNum):
backData = []
def MFRC522_SelectTag(self, serNum): buf = []
backData = [] buf.append(self.PICC_SElECTTAG)
buf = [] buf.append(0x70)
buf.append(self.PICC_SElECTTAG) i = 0
buf.append(0x70) while i<5:
i = 0 buf.append(serNum[i])
while i<5: i = i + 1
buf.append(serNum[i]) pOut = self.CalulateCRC(buf)
i = i + 1 buf.append(pOut[0])
pOut = self.CalulateCRC(buf) buf.append(pOut[1])
buf.append(pOut[0]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf)
buf.append(pOut[1]) if (status == self.MI_OK) and (backLen == 0x18):
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buf) size = backData[0]
if (status == self.MI_OK) and (backLen == 0x18): else:
size = backData[0] size = 0
else: return size
size = 0
return size def MFRC522_Auth(self, authMode, BlockAddr, Sectorkey, serNum):
buff = []
def MFRC522_Auth(self, authMode, BlockAddr, Sectorkey, serNum): buff.append(authMode)
buff = [] buff.append(BlockAddr)
buff.append(authMode) i = 0
buff.append(BlockAddr) while(i < 6):
i = 0 buff.append(Sectorkey[i])
while(i < 6): i = i + 1
buff.append(Sectorkey[i]) i = 0
i = i + 1 while(i < 4):
i = 0 buff.append(serNum[i])
while(i < 4): i = i +1
buff.append(serNum[i]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_AUTHENT,buff)
i = i +1 if not(status == self.MI_OK):
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_AUTHENT,buff) print "AUTH ERROR!!"
if not(status == self.MI_OK): if not(self.Read_MFRC522(self.Status2Reg) & 0x08):
print "AUTH ERROR!!" print "AUTH ERROR(status2reg & 0x08 != 0"
if not(self.Read_MFRC522(self.Status2Reg) & 0x08):
print "AUTH ERROR(status2reg & 0x08 != 0" def MFRC522_Read(self, blockAddr):
recvData = []
def MFRC522_Read(self, blockAddr): recvData.append(self.PICC_READ)
recvData = [] recvData.append(blockAddr)
recvData.append(self.PICC_READ) pOut = self.CalulateCRC(recvData)
recvData.append(blockAddr) recvData.append(pOut[0])
pOut = self.CalulateCRC(recvData) recvData.append(pOut[1])
recvData.append(pOut[0]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, recvData)
recvData.append(pOut[1]) if not(status == self.MI_OK):
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, recvData) print "Error while reading!"
if not(status == self.MI_OK):
print "Error while reading!" print "Got data size: "+str(backLen)
i = 0
print "Got data size: "+str(backLen) if len(backData) == 16:
i = 0 print "Sector "+str(blockAddr)+" "+str(backData)
if len(backData) == 16:
print "Sector "+str(blockAddr)+" "+str(backData) def MFRC522_Write(self, blockAddr, writeData):
buff = []
def MFRC522_Write(self, blockAddr, writeData): buff.append(self.PICC_WRITE)
buff = [] buff.append(blockAddr)
buff.append(self.PICC_WRITE) crc = self.CalulateCRC(buff)
buff.append(blockAddr) buff.append(crc[0])
crc = self.CalulateCRC(buff) buff.append(crc[1])
buff.append(crc[0]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buff)
buff.append(crc[1]) if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE, buff) status = self.MI_ERR
if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A): print str(backLen)+" backdata &0x0F == 0x0A "+str(backData[0]&0x0F)
status = self.MI_ERR if status == self.MI_OK:
print str(backLen)+" backdata &0x0F == 0x0A "+str(backData[0]&0x0F) i = 0
if status == self.MI_OK: buf = []
i = 0 while i < 16:
buf = [] buf.append(writeData[i])
while i < 16: i = i + 1
buf.append(writeData[i]) crc = self.CalulateCRC(buf)
i = i + 1 buf.append(crc[0])
crc = self.CalulateCRC(buf) buf.append(crc[1])
buf.append(crc[0]) (status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,buf)
buf.append(crc[1]) if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A):
(status, backData, backLen) = self.MFRC522_ToCard(self.PCD_TRANSCEIVE,buf) print "Error while writing"
if not(status == self.MI_OK) or not(backLen == 4) or not((backData[0] & 0x0F) == 0x0A): if status == self.MI_OK:
print "Error while writing" print "Data writen"
if status == self.MI_OK:
print "Data writen"
def MFRC522_Init(self):
GPIO.output(self.NRSTPD, 1)
def MFRC522_Init(self):
GPIO.output(self.NRSTPD, 1) self.MFRC522_Reset();
self.MFRC522_Reset();
self.Write_MFRC522(self.TModeReg, 0x8D)
self.Write_MFRC522(self.TPrescalerReg, 0x3E)
self.Write_MFRC522(self.TModeReg, 0x8D) self.Write_MFRC522(self.TReloadRegL, 30)
self.Write_MFRC522(self.TPrescalerReg, 0x3E) self.Write_MFRC522(self.TReloadRegH, 0)
self.Write_MFRC522(self.TReloadRegL, 30)
self.Write_MFRC522(self.TReloadRegH, 0) self.Write_MFRC522(self.TxAutoReg, 0x40)
self.Write_MFRC522(self.ModeReg, 0x3D)
self.Write_MFRC522(self.TxAutoReg, 0x40) self.AntennaOn()
self.Write_MFRC522(self.ModeReg, 0x3D)
self.AntennaOn() continue_reading = True
# Capture SIGINT
continue_reading = True def end_read(signal,frame):
# Capture SIGINT global continue_reading
def end_read(signal,frame): print "Ctrl+C captured, ending read."
global continue_reading continue_reading = False
print "Ctrl+C captured, ending read."
continue_reading = False signal.signal(signal.SIGINT, end_read)
signal.signal(signal.SIGINT, end_read) MIFAREReader = MFRC522()
MIFAREReader = MFRC522() while continue_reading:
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
while continue_reading:
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) if status == MIFAREReader.MI_OK:
print "Card detected"
if status == MIFAREReader.MI_OK:
print "Card detected" (status,backData) = MIFAREReader.MFRC522_Anticoll()
if status == MIFAREReader.MI_OK:
(status,backData) = MIFAREReader.MFRC522_Anticoll() print "Card read UID: "+str(backData[0])+","+str(backData[1])+","+str(backData[2])+","+str(backData[3])+","+str(backData[4])
if status == MIFAREReader.MI_OK: MIFAREReader.MFRC522_SelectTag(backData)
print "Card read UID: "+str(backData[0])+","+str(backData[1])+","+str(backData[2])+","+str(backData[3])+","+str(backData[4]) key = [0xFF,0xFF,0xFF,0xFF,0xFF]
MIFAREReader.MFRC522_SelectTag(backData)
key = [0xFF,0xFF,0xFF,0xFF,0xFF]
MIFAREReader.MFRC522_Auth(0x60,0,keyA,backData)
MIFAREReader.MFRC522_Read(0)
MIFAREReader.MFRC522_Auth(0x60,0,keyA,backData) i = 1
MIFAREReader.MFRC522_Read(0) while i < 64:
i = 1 MIFAREReader.MFRC522_Auth(0x60,i,keyA,backData)
while i < 64: MIFAREReader.MFRC522_Read(i)
MIFAREReader.MFRC522_Auth(0x60,i,keyA,backData) i = i + 1
MIFAREReader.MFRC522_Read(i)
i = i + 1