Example #1
0
int main(int argc, char **argv) {
	MFRC522_Status_t ret;
	//Recognized card ID
	uint8_t CardID[5] = { 0x00, };
	static char command_buffer[1024];

	ret = MFRC522_Init('A');
	if (ret < 0) {
		perror("Failed to initialize");
		exit(-1);
	}

	printf("User Space RC522 Application\r\n");

	while (1) {
		/*Main Loop Start*/
		DISP_COMMANDLINE();

		scanf("%s", command_buffer);
		if (strcmp(command_buffer, "scan") == 0) {
			puts("Scanning");
			while (1) {
				ret = MFRC522_Check(CardID);
				if (ret != MI_OK) {
					printf(".");
					fflush(stdout);
					continue;
				}
				ret |= tag_select(CardID);
				if (ret == MI_OK) {
					ret = scan_loop(CardID);
					if (ret < 0) {
						goto END_SCAN;
					} else if (ret == 1) {
						goto HALT;
					}
				}
			}
			END_SCAN: printf("Card error...");
			HALT: puts("Halt");
		} else if (strcmp(command_buffer, "quit") == 0
				|| strcmp(command_buffer, "exit") == 0) {
			return 0;
		} else {
			puts("Unknown command");
			puts("scan:scan card and dump");
			puts("quit:exit program");
		}
		/*Main Loop End*/
	}
}
void main()
{
  char UID[6];
  unsigned char TagType;
  char size;
//  char i;
  UART_init();
  //Inicializa Soft SPI
   SPI_init(0);

  //inicializa o modulo RFID
  MFRC522_Init();
  
  TRIS_LED1 = 0;
  TRIS_BUTTON = 1;
  TRIS_OUTPUT1 = 0;
  for(int i=0;i<10;i++)
  {
      LED1 = 1;
      __delay_ms(250);
      LED1 = 0;
      __delay_ms(250);
  }
  while(1)
  {
      if(BUTTON == 0)
      {
          num++;
      }
      if(num==8)
      {
          clear_list_cards();
          printf("Lista apagada\n\r");
          num=0;
          LED1 = 1;
          for(char i=0;i<10;i++)__delay_ms(100);
          LED1 = 0;
      }
      //Letura
    if( MFRC522_isCard( &TagType ) )
    {
      //Exibe o tipo do cartão na serial
      printf("Tipo de Tag: %u\n\r",TagType);
      //Faz a leitura do numero de serie
      if( MFRC522_ReadCardSerial( UID ) )
      {
        //Só mostra que um cartão foi lido
        LED1 = 1;
        printf("Codigo: ");
        for(int i=0; i < 5; i++)
        {
            printf("%X ",UID[i]);
        }
        printf("\n\r");

        //Gravação
        if(BUTTON == 0)
        {
            record_card(UID);
            num = 0;
            printf("Cartão cadastrado\n\r");
            LED1=1;
            __delay_ms(250);
            LED1=0;
        }
        //Comparação
        if(compare_card(UID))
        {
            OUTPUT1=1;
            printf("Cartão reconhecido!\n\r");
            for(char i=0;i<8;i++)__delay_ms(250);//2 segundos
            OUTPUT1=0;
        }
        else
        {
            printf("Cadastre o cartão\n\r");
        }
//        size = MFRC522_SelectTag( UID );
      }
      //Estado de hibernação
      //MFRC522_Halt();
    }
    LED1 = 0;
    __delay_ms(250);
  }
}
Example #3
0
void main(void)
{
	unsigned char i=0;
	unsigned char status;
	unsigned char str[MAX_LEN];
	unsigned char RC_size;
	unsigned char blockAddr;
	unsigned char mynum[20];
	unsigned char serNum[7];

	uint8_t RCV;
	int resulta=0;
	int fd;
	int a=0;



	fd=Init_SPI("/dev/spidev0.0");
	setup_io();

	SET_INPUT(25);
	SET_OUTPUT(25);

	ApiInit(fd);
	MFRC522_Init();

	a=Read_MFRC522(VersionReg);
	printf("MFRC Version Read %02X \r\n",a);


	//	for(a=0;a<10;a++)
	//	{
	//		RCV=Read_MFRC522(VersionReg);
	//		//RCV=SPI_transfer(fd,a);
	//		printf("RCV %02X \r\n",RCV);
	//		SET_BIT(25);
	//        sleep(1);
	//        CLR_BIT(25);
	//        sleep(1);
	//	}
	while(1)
	{
		status = MFRC522_Request(PICC_REQIDL, str);
		if(resulta==status){

		}else{
			resulta=status;
		}


		if (status == MI_OK)
		{
			mifare_tag_type(str);
			//usleep(1000);
		}

		status = MFRC522_Anticoll(str);
		memcpy(serNum, str,5);
		if (status == MI_OK)
		{
			printf("UID :");
			for(i=0;i<5;i++)
			{
				printf("[");
				printf("%02X",serNum[i]);
				printf("]");
			}
			printf("\n");
			//usleep(1000);
		}

		RC_size=MFRC522_SelectTag(serNum);
		if(RC_size !=0)
		{

			printf("Select_OK Size %02d \n",RC_size);
			puts("");
			puts("");

		}

	}

	close(fd);

}
static int rc522_open(struct inode *inode, struct file *file)
{
	uint8_t str[MAX_LEN];
	uint8_t writeData[16]={1, 2, 3, 4, 0};
	uint8_t i;
	uint8_t status;
	uint8_t size;
	uint8_t blockAddr;	//选择操作的块地址0~63
	//扇区A密码,16个扇区,每个扇区密码6Byte
	uint8_t sectorKeyA[16][16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};	

	printk("rc522_open\r\n");
	
	SPI_Init();
	MFRC522_Init();

	while (1)
	{
		//寻卡,返回卡类型	
		status = MFRC522_Request(PICC_REQIDL, str);	
		if (status == MI_OK)
		{
			printk("%d \r\n", str[0]);
			printk("%d \r\n", str[1]);
		}

		//防冲撞,返回卡的序列号 4字节
		status = MFRC522_Anticoll(str);
		memcpy(serNum, str, 5);
		if (status == MI_OK)
		{
			printk("%d \r\n", serNum[0]);
			printk("%d \r\n", serNum[1]);
			printk("%d \r\n", serNum[2]);
			printk("%d \r\n", serNum[3]);
			printk("%d \r\n", serNum[4]);
		}

		//选卡,返回卡容量
		size = MFRC522_SelectTag(serNum);
		if (size != 0)
		{
			printk("size is %d", size);
		}

		//写
		blockAddr = 1;		//数据块		
		status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum);	//认证
		if (status == MI_OK)
		{
			//写数据
			status = MFRC522_Write(blockAddr, writeData);
		}

		//读
		blockAddr = 1;		//数据块		
		status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum);	//认证
		if (status == MI_OK)
		{
			//读数据
			status = MFRC522_Read(blockAddr, str);
			if (status == MI_OK)
			{
				for (i=0; i<16; i++)
				{
					printk("%d ", str[i]);
				}
			}
		}

		MFRC522_Halt();			//命令卡片进入休眠状态*/
	}	
}