⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 finger_test.c

📁 基于s3c2410的linux下面指纹识别程序
💻 C
📖 第 1 页 / 共 2 页
字号:
		}		is_ok = ACK_FAIL;	
	// 第二次录入指纹	is_ok = ACK_FAIL;
	}	if(FailNumber == ACK_COUNT) return 0;

	printf(" Add second...\n");
	time_number = 0x02;				// 第二次添加
	is_ok = ACK_FAIL;
	FailNumber = 0;
	while ((is_ok == ACK_FAIL) & (FailNumber < ACK_COUNT))
	{		
		is_ok = add_Fingerprint(time_number, USER_NUMBER_H, USER_NUMBER_L, USER_RIGHT);

		if (is_ok == ACK_SUCCESS)
		{
			printf(" Second OK!\n");			break;
		}
		else if (is_ok == ACK_FULL)
		{
			printf(" Full\n");
			FailNumber++;
		}
		else if (is_ok == ACK_NOUSER)
		{
			printf(" ID exist!\n");
			FailNumber++;
		}
		else
		{			FailNumber++;
			printf(" Error %dth!\n",FailNumber);
			
		}		is_ok = ACK_FAIL;
	}
	if(FailNumber == ACK_COUNT) return 0;
	// 第三次录入指纹
	printf(" Add third...\n");
	time_number = 0x03;				// 第三次添加
	is_ok = ACK_FAIL;
	FailNumber = 0;
	while ((is_ok == ACK_FAIL) & (FailNumber < ACK_COUNT))
	{				is_ok = ACK_FAIL;
		is_ok = add_Fingerprint(time_number, USER_NUMBER_H, USER_NUMBER_L, USER_RIGHT);

		if (is_ok == ACK_SUCCESS)
		{
			printf(" Third OK!\n");			break;
		}
		else if (is_ok == ACK_FULL)
		{
			printf(" Full\n");
			FailNumber++;
		}
		else if (is_ok == ACK_NOUSER)
		{
			printf(" ID exist!\n");
			FailNumber++;
		}
		else
		{			FailNumber++;
			printf(" Error %dth!\n",FailNumber);
			
		}		is_ok = ACK_FAIL;
	}
	if(FailNumber == ACK_COUNT) return 0;		//is_ok = select_one_onecontrast();	return 1;
//	printf("\n指纹添加成功\n");
//	show_output();	
}/*********************************************************************************************
* name:		select_one_onecontrast
* func:		录入指纹与指定的用户指纹进行1:1的对比
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
unsigned char select_one_onecontrast()
{
	unsigned char is_ok;

	//printf("\n Input the contrast user ID!\n");
	InputUsernumber();				// 获取用户号
	//is_ok = one_morecontrast();
	is_ok = one_onecontrast(USER_NUMBER_H, USER_NUMBER_L);
	if (is_ok == ACK_SUCCESS)
	{
		printf("\n Constrast OK!\n");
	}
	else
	{
		printf("\n Constrast Error!\n");
	}

	return is_ok;
}
/*********************************************************************************************
* name:		select_Get_Usernumber_right
* func:		获取已登录所有用户用户号及权限
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void select_Get_Usernumber_right(void)
{
	unsigned char is_ok;
	unsigned char user_number;
	unsigned char n;
	
	is_ok = Get_UserNumber_Right();//因为在串口接收联系4个0时,丢失了一个0,所以在帧解析的时候进行还原处理
	if (is_ok == ACK_SUCCESS)
	{
		//printf("\n Get user information:\n");
		user_number = RXBUF[9]*16 + RXBUF[10];
		printf(" The total number is: %x\n", user_number);
		for (n = 0; n < user_number; n++)
		{
			printf(" ID: %x%x,  Right: %x\n", RXBUF[n*3+11], RXBUF[n*3+12], RXBUF[n*3+13]);
		}
	}
	else
	{
		printf("\n Get user information failed!\n");
	}
}/*********************************************************************************************
* name:		select_read_userright
* func:		读取指定用户的权限
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void select_read_userright()
{
	 unsigned char is_ok;
	 unsigned char user_number;				// 用户总数
	 unsigned char user_right;
	 unsigned int  n;

	//printf("\n Input the user ID:\n");
	InputUsernumber();				// 获取用户号

	Get_UserNumber_Right();			// 获取全部的用户号和用户权限
	is_ok = 0;
	user_number = RXBUF[9]*16 + RXBUF[10];	// 用户总数
	for (n = 0; n < user_number; n++)
	{
		if ((USER_NUMBER_H == RXBUF[n*3+11]) & (USER_NUMBER_L == RXBUF[n*3+12]))
		{
			user_right = RXBUF[n*3+13];
			is_ok = 1;
			break;
		}
	}

	if (is_ok == 1)
	{
		printf("\n The right of this ID is: %x\n", user_right);
	}
	else
	{
		printf("\n The ID doesn't exist!\n");
	}
}/*********************************************************************************************
* name:		select_del_alluser
* func:		删除所有用户
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void select_del_alluser()
{
	unsigned char is_ok;
	
	printf("\n Delete all user!\n");

	is_ok = del_alluser();
	if (is_ok == ACK_SUCCESS)
	{
		printf(" Delete all user success!\n");
	}
	else
	{
		printf(" Delete all user failed!\n");
	}
}int user_manage(){	char mode;	while(1)	{		printf("\n");		printf(" -----------------------------------\n");		printf("          User Manage!\n");		printf(" 1: Delete a user.\n");		printf(" 2: Delete all users.\n");		printf(" 3: Get a user's right.\n");		printf(" 4: Get all users' ID and right.\n");		printf(" -----------------------------------\n");		printf(" Please select operation:(9---exit)\n");		scanf("%c",&mode);//mode = uart_getch();		scanf("%c",&mode);		switch (mode)		{			case '1':			{								select_del_oneuser();				break;									} 			case '2':			{				select_del_alluser();				break;			}				case '3':			{				select_read_userright(); 				break;			}			case '4':			{				select_Get_Usernumber_right();							break;			}			case '9':			{				return 0;			}			default:					;//printf(" Wrong Operation!\n");									}	}	}int main(int argc, char ** argv){	int t,ret;	char mode;//	fd_set uart_w,uart_r;//	struct timeval tv ;	char *device = "/dev/tts/0";				// 设备路径,初始使用UART0				//printf("\n RFID Test! \n\n");		// 从UART1打印信息给终端		for(t=1;t<argc;t++)					// 获取程序入口时输入的参数	{		if(!strcmp(argv[t],"-d") && (argc > (t+1)))		{			device = argv[t+1];		}	}	if(!strcmp(device,"/dev/tts/1"))			// 不允许使用UART1,因为它已和PC相连。	{		printf("can not use /dev/tts/1\n");		return -1;		}	fd = open(device, O_RDWR); 				// 打开设备		if (fd < 0)						// 设备打开失败	{		printf("open device error\n");		return -1;	}      	//FD_ZERO(&uart_r);						//FD_SET(fd,&uart_r);					// 设置串口接收端口集		init_ttyS(fd);  					// 初始化设备	while(1)	{	#if 0		while(FD_ISSET(fd,&uart_r)||FD_ISSET(fd,&uart_w))	// 检测串口是否有读写动作		{				if(select(fd+1,&uart_r,&uart_w,NULL,&tv)<0)				perror("select");                              			else			{   				sleep(1);    				// 延时,以让串口发送完成				ret = read(fd, rcv_buf, 256);		// 试图从串口接收数 据									if(ret>0)				// 确实接收到了数据,并打印出来				{					*(rcv_buf+ret)='\0';					printf(" The card ID : %s\n",rcv_buf);					ret = 0;				} 			}									} #endif				set_addmode(1);								// 设置指纹添加模式,禁止重复				show_menu();				printf(" Please select operation:\n");				//scanf("%c",&mode);				scanf("%c",&mode);//mode = uart_getch();				switch (mode)				{					case '1':						{											ret =select_add_Fingerprint();							if(ret)							{								printf(" Add user fingerprint success!\n");							}							else							{								printf(" Add user fingerprint failed!\n");							}							break;												} 					case '2':						{							select_one_onecontrast();							break;						}						case '3':						{							user_manage();														//select_Get_Usernumber_right(); 							break;						}					case '4':						{							//select_del_alluser();							break;						}					default:							;//printf(" Wrong Operation!\n");											}				scanf("%c",&mode);	}		close(fd);							// 关闭打开的设备	return 0;							// 正常返回}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -