
Eac           @   sJ   d  d l  j Z d  d l Z d  d l Z d  d l Z d d d     YZ d S(   iNt   MFRC522c           B   s  e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d	 Z d
 Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z  d Z! d Z" d Z# d Z$ d Z% d Z& d Z' d Z( d Z) d Z* d Z+ d Z, d Z- d  Z. d! Z/ d" Z0 d# Z1 d$ Z2 d% Z3 d  Z4 d& Z5 d' Z6 d( Z7 d) Z8 d* Z9 d+ Z: d, Z; d- Z< d. Z= d/ Z> d0 Z? d1 Z@ d	 ZA d2 ZB d3 ZC d4 ZD d5 ZE d6 ZF d7 ZG d8 ZH d9 ZI d: ZJ d ZK d; ZL d< ZM d= ZN d> ZO d? ZP d@ ZQ dA ZR dB ZS dC ZT dD ZU dE ZV dF ZW dG ZX dH ZY dI ZZ g  Z[ dJ dK dL  Z\ dM   Z] dN   Z^ dO   Z_ dP   Z` dQ   Za dR   Zb dS   Zc dT   Zd dU   Ze dV   Zf dW   Zg dX   Zh dY   Zi dZ   Zj d[   Zk d\   Zl d]   Zm d^   Zn RS(_   i   i   i    i   i   i   i   i   i   i&   iR   i   i`   ia   i0   i   i   i   i   i   iP   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i    i!   i"   i#   i$   i%   i'   i(   i)   i*   i+   i,   i-   i.   i/   i1   i2   i3   i4   i5   i6   i7   i8   i9   i:   i;   i<   i=   i>   i?   s   /dev/spidev0.0i@B c         C   s]   t  j d | d |  t j t j  t j |  j t j  t j |  j d  |  j	   d  S(   Nt   devicet   speedi   (
   t   spit   openSPIt   GPIOt   setmodet   BCMt   setupt   NRSTPDt   OUTt   outputt   MFRC522_Init(   t   selft   devt   spd(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   __init__   s
    c         C   s   |  j  |  j |  j  d  S(   N(   t   Write_MFRC522t
   CommandRegt   PCD_RESETPHASE(   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Reset   s    c         C   s   t  j | d >d @| f  d  S(   Ni   i~   (   R   t   transfer(   R   t   addrt   val(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyR      s    c         C   s)   t  j | d >d @d Bd f  } | d S(   Ni   i~   i   i    (   R   R   (   R   R   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   Read_MFRC522   s    !c         C   s'   |  j  |  } |  j | | | B d  S(   N(   R   R   (   R   t   regt   maskt   tmp(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt
   SetBitMask   s    c         C   s(   |  j  |  } |  j | | | @ d  S(   N(   R   R   (   R   R   R   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   ClearBitMask   s    c         C   s7   |  j  |  j  } | d @r3 |  j |  j d  n  d  S(   Ni   (   R   t   TxControlRegR   (   R   t   temp(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt	   AntennaOn   s    c         C   s   |  j  |  j d  d  S(   Ni   (   R   R   (   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt
   AntennaOff   s    c         C   s  g  } d } |  j  } d } d } d  } d }	 d }
 | |  j k rQ d } d } n  | |  j k ro d } d } n  |  j |  j | d B |  j |  j d  |  j |  j	 d  |  j |  j
 |  j  x7 |
 t |  k  r |  j |  j | |
  |
 d }
 q W|  j |  j
 |  | |  j k r4|  j |  j d  n  d }
 xM t r|  j |  j  }	 |
 d }
 |
 d k o~|	 d @o~|	 | @r=Pq=q=W|  j |  j d  |
 d k r|  j |  j  d	 @d k r|  j } |	 | @d @r|  j } n  | |  j k r|  j |  j	  }	 |  j |  j  d
 @} | d k r@|	 d d | } n
 |	 d } |	 d k r_d }	 n  |	 |  j k rz|  j }	 n  d }
 x6 |
 |	 k  r| j |  j |  j   |
 d }
 qWqq|  j  } n  | | | f S(   Ni    i   i   iw   i0   i   i   i  i   i   i   (   t   MI_ERRt   Nonet   PCD_AUTHENTt   PCD_TRANSCEIVER   t
   CommIEnRegR   t
   CommIrqRegR   t   FIFOLevelRegR   t   PCD_IDLEt   lent   FIFODataRegt   BitFramingRegt   TrueR   t   ErrorRegt   MI_OKt   MI_NOTAGERRt
   ControlRegt   MAX_LENt   append(   R   t   commandt   sendDatat   backDatat   backLent   statust   irqEnt   waitIRqt   lastBitst   nt   i(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_ToCard   sh    				
#	
	c         C   s   d  } d  } g  } |  j |  j d  | j |  |  j |  j |  \ } } } | |  j k | d k Bru |  j } n  | | f S(   Ni   i   (   R#   R   R,   R3   R>   R%   R/   R"   (   R   t   reqModeR8   t   backBitst   TagTypeR6   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Request   s    c         C   s   g  } d } g  } |  j  |  j d  | j |  j  | j d  |  j |  j |  \ } } } | |  j k r d } t |  d k r x( | d k  r | | | A} | d } q W| | | k r |  j } q q |  j } n  | | f S(   Ni    i    i   i   i   (	   R   R,   R3   t   PICC_ANTICOLLR>   R%   R/   R*   R"   (   R   R6   t   serNumCheckt   serNumR8   R@   R=   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Anticoll   s"    c         C   s  |  j  |  j d  |  j |  j d  d } x7 | t |  k  re |  j |  j | |  | d } q/ W|  j |  j |  j  d } xA t	 r |  j
 |  j  } | d } | d k o | d @s Pq q Wg  } | j |  j
 |  j   | j |  j
 |  j   | S(   Ni   i   i    i   i   (   R   t	   DivIrqRegR   R(   R*   R   R+   R   t   PCD_CALCCRCR-   R   R3   t   CRCResultRegLt   CRCResultRegM(   R   t   pIndataR=   R<   t   pOutData(    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   CalulateCRC  s"    	
c         C   s   g  } g  } | j  |  j  | j  d  d } x+ | d k  r\ | j  | |  | d } q2 W|  j |  } | j  | d  | j  | d  |  j |  j |  \ } } } | |  j k r | d k r d t | d  GH| d Sd Sd  S(   Nip   i    i   i   i   s   Size: (   R3   t   PICC_SElECTTAGRM   R>   R%   R/   t   str(   R   RE   R6   t   bufR=   t   pOutR8   R7   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_SelectTag'  s     c   
      C   s   g  } | j  |  | j  |  d } x1 | t |  k  rY | j  | |  | d } q) Wd } x+ | d k  r | j  | |  | d } qc W|  j |  j |  \ } } }	 | |  j k s d GHn  |  j |  j  d @d k s d GHn  | S(   Ni    i   i   s   AUTH ERROR!!i   s"   AUTH ERROR(status2reg & 0x08) != 0(   R3   R*   R>   R$   R/   R   t
   Status2Reg(
   R   t   authModet	   BlockAddrt	   SectorkeyRE   t   buffR=   R8   R6   R7   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Auth;  s"    c         C   s   |  j  |  j d  d  S(   Ni   (   R   RS   (   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_StopCrypto1\  s    c         C   s   g  } | j  |  j  | j  |  |  j |  } | j  | d  | j  | d  |  j |  j |  \ } } } | |  j k s d GHn  d } t |  d k r d t |  d t |  GHn  d  S(   Ni    i   s   Error while reading!i   s   Sector t    (   R3   t	   PICC_READRM   R>   R%   R/   R*   RO   (   R   t	   blockAddrt   recvDataRQ   R8   R6   R7   R=   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Read_  s    c   
      C   s  g  } | j  |  j  | j  |  |  j |  } | j  | d  | j  | d  |  j |  j |  \ } } } | |  j k s | d k s | d d @d k r |  j } n  d | | d d @f GH| |  j k rd } g  }	 x+ | d k  r|	 j  | |  | d } q W|  j |	  } |	 j  | d  |	 j  | d  |  j |  j |	  \ } } } | |  j k s| d k s| d d @d k rd GHn  | |  j k rd	 GHqn  d  S(
   Ni    i   i   i   i
   s   %s backdata &0x0F == 0x0A %si   s   Error while writings   Data written(   R3   t
   PICC_WRITERM   R>   R%   R/   R"   (
   R   R\   t	   writeDataRW   t   crcR8   R6   R7   R=   RP   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_Writem  s0    22c         C   sf   d } xY | d k  ra |  j  |  j | | |  } | |  j k rO |  j |  n d GH| d } q	 Wd  S(   Ni    i@   s   Authentication errori   (   RX   t   PICC_AUTHENT1AR/   R^   (   R   t   keyt   uidR=   R8   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   MFRC522_DumpClassic1K  s    c         C   s   t  j |  j d  |  j   |  j |  j d  |  j |  j d  |  j |  j d  |  j |  j d  |  j |  j	 d  |  j |  j
 d  |  j   d  S(   Ni   i   i>   i   i    i@   i=   (   R   R   R	   R   R   t   TModeRegt   TPrescalerRegt   TReloadRegLt   TReloadRegHt	   TxAutoRegt   ModeRegR    (   R   (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyR     s    
(o   t   __name__t
   __module__R	   R2   R)   R$   t   PCD_RECEIVEt   PCD_TRANSMITR%   R   RH   t   PICC_REQIDLt   PICC_REQALLRC   RN   Rc   t   PICC_AUTHENT1BR[   R_   t   PICC_DECREMENTt   PICC_INCREMENTt   PICC_RESTOREt   PICC_TRANSFERt	   PICC_HALTR/   R0   R"   t
   Reserved00R   R&   t	   DivlEnRegR'   RG   R.   t
   Status1RegRS   R+   R(   t   WaterLevelRegR1   R,   t   CollRegt
   Reserved01t
   Reserved10Rl   t	   TxModeRegt	   RxModeRegR   Rk   t   TxSelRegt   RxSelRegt   RxThresholdRegt   DemodRegt
   Reserved11t
   Reserved12t	   MifareRegt
   Reserved13t
   Reserved14t   SerialSpeedRegt
   Reserved20RJ   RI   t
   Reserved21t   ModWidthRegt
   Reserved22t   RFCfgRegt   GsNRegt   CWGsPRegt	   ModGsPRegRg   Rh   Rj   Ri   t   TCounterValueRegHt   TCounterValueRegLt
   Reserved30t   TestSel1Regt   TestSel2Regt   TestPinEnRegt   TestPinValueRegt
   TestBusRegt   AutoTestRegt
   VersionRegt   AnalogTestRegt   TestDAC1Regt   TestDAC2Regt
   TestADCRegt
   Reserved31t
   Reserved32t
   Reserved33t
   Reserved34RE   R   R   R   R   R   R   R    R!   R>   RB   RF   RM   RR   RX   RY   R^   Rb   Rf   R   (    (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyR       s   								G					!				(    (   t   RPi.GPIOR   R   t   signalt   timeR    (    (    (    s"   /home/pi/Desktop/CrowPi/MFRC522.pyt   <module>   s   