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

📄 readermodule.c.bak

📁 Use this program to decode the Manchester Code of the RFID. Validate the accessibility of detected c
💻 BAK
📖 第 1 页 / 共 5 页
字号:
}
void stolong (char* ddata, unsigned long *tno)
{
    *tno = 0L;
	for (tempi=0;tempi<6;tempi++)
    	*tno = (*tno)*10L + ((unsigned long) ddata [tempi]);
}
void cardnotos (char *carddata, char len, long cardnum)
{
char idata i,j,t;
long idata mult;

	for (i=0; i<len; i++)	carddata[i]='0';
    	
    	carddata[i]=0;

    	mult=1;

    	for (i=len, j=1; i>0; i--, j++)
    	{
    		t=(cardnum %(mult*10L)) / mult;
        	mult *= 10L;
        	carddata[i-1] = t + '0';
	}
}

char InstallCard (void)
{
char idata ddata [11];
//char idata counter_low='0', counter_high='0';
idata unsigned char addressbyte;
unsigned long idata ccard,install_done=0;
unsigned int idata nocard;
unsigned char idata cardstring[6];
	
	Flags.EmptySign=0;	//12/19/2005 10:44PM
	//card proximity feature added 90406 KK
    	if(Process_Card())
    	{
    		if (!InstallThisCard ()) 	//Only database full return 0;
	        {
	         	ShowErrInMainEntered();
	               	return 0;		//Only jump out from menu if it was fulled.
	        } 
	        else
	        {	
	        	if(card_exist)
	        	{		
	        		card_exist=0;
	        		ShowErrInMainEntered();
	        		return 9;
	        	}
	        	install_done=1; 
		}
	        	    		    		
    	}
    	
	else if (GetCardNoDetails (ddata, 10))
    	{
    		for (nocard=0;nocard<10;nocard++)
            		ddata[nocard] -= 0x30;

    		nocard = ddata[6]*1000 + ddata[7]*100 + ddata[8]*10 + ddata[9];
        	if (!nocard || nocard >1000)
        	{
        		ShowErrInMainEntered ();
            		return 0;
        	}

        	stolong (ddata, &ccard);
		mess_lcd(0, "Installing Card ");       
		BUZZER=OFF; 	//12/14/2005 11:25PM- turn off the anoying sound
        	while(nocard)
        	{        		
            		if ((ccard > 999999L) || (ccard <= 0L))
            		{
	            		ShowErrInMainEntered();
	               		mess_lcd(1, "Card No. Error  ");
	                	return 9;
            		}

	        	longtos (gcrec.CardNo, &ccard);			
			put_c('V');
			CommPutStr(gcrec.CardNo);
	        	gcrec.Lockcount=0;	        	
	            	if (!InstallThisCard ())
	            	{
	               		ShowErrInMainEntered();
	               		return 9;
	            	}
	            	else
	            	{		
				cardnotos(cardstring, 6, ccard);
		                mess_lcd(1,cardstring);		
		                if(card_exist)
	        		{		
	        			card_exist=0;
	        			ShowErrInMainEntered();
	        			return 9;	        		
	        		}
		               
	            	}
			ccard++;
			nocard --;
        	}    
        	//12/18/2005 2:41PM
        	install_done=1;        	       	
		
    	}
    	if(install_done)
    	{
    		//cardpos_last=0x28;	//12/18/2005 2:43PM
		addressbyte=high_byte(cardpos_last);	//12/18/2005 2:45PM
		write_eeprom_bytes(8, addressbyte);//12/18/2005 2:45PM
		write_eeprom_bytes(9, (unsigned char)cardpos_last);//12/18/2005 2:45PM
        	    	         	
        	//12/18/2005 2:41PM   
        	ShowMainEntered();
        	beep(8);//longer beep sound upon request	//4-12/13/2005 9:56PM
        	Flags.EmptySign=0;	//12/19/2005 10:44PM
        	return 9;		//only '*' or wrong input can jump out from this submenu	    		
    	}    	
    	
    	Flags.EmptySign=0;	//12/19/2005 10:44PM
    	return 9;
}


char DeleteCard  (void)
{
char idata ddata [6];
unsigned long idata ccard;
	
	if(Process_Card())
    	{
    		if (!DeleteThisCard ())
   		{
   			ShowErrInMainEntered();   			   			
   			return 9;		//never out from delete card unless * key pressed 
   		}   		
	        
	        ShowMainEntered();
	        beep(8);
        	//return 1;	    		Once in the deleting mode only wrong input or * can jmp out    		
    	}
    	
	else if (GetCardNoDetails (ddata, 6))
    	{
    		for (tempi=0;tempi<6;tempi++)
            		ddata[tempi] -= 0x30;

        	stolong (ddata, &ccard);

        	longtos (gcrec.CardNo, &ccard);
        	
        	if ((ccard > 999999L) || (ccard <= 0L))
        	{
        		  ShowErrInMainEntered();        		  
        		  return 9;
        	}
        	else
        	{
           		if (!DeleteThisCard ())
           		{
           			ShowErrInMainEntered();
           			return 9;
           		}           		
        	}
        	ShowMainEntered();
        	beep(8);
        	//return 1;	//Once in this mode only * or wrong input can jump out
    	}
    	return 9;
}
/*****************************************************************
Clear all the database and store 0xFF to it
******************************************************************/
void ClearUserDB(void)
{
	idata unsigned int i;
	idata unsigned char dummy[33];	
	
	for(i=0;i<32;i++)
		dummy[i]=0xff;
	
	dummy[32]=0;
	
	for(i=START_CARD_ADD; i<=MAX_CARD_ADD; i+=32)
		write_block(i, &dummy[0], 32);
		
	RestoreCardPos();//12/18/2005 3:53PM
		
	/*
	for(i=0; i<255; i++)
		write_block(i, &dummy[0], 32);	
	*/

}

void ProcessUserEvent (void)
{
char wr=2;
idata unsigned char i;

	
    switch (MainMenuItem)			//Submenu pages after enter to master programming mode
    {
    	case 0   : CheckData ();	   	break;

        case 1   : wr = GetOperationModeOnOff(O_CARDnPIN);		        	  
        	   break;
	
	case 2   : wr = GetOperationModeOnOff(O_CARDorPIN);		        	   
        	   break;
        
        case 3   : wr = GetOperationModeOnOff(O_CARD);		        	   
        	   break;	   
        
        case 4   : wr = GetOperationModeOnOff(O_AUTOPIN);		        	  
        	   break;	   
        	   
        case 5   : wr = GetOperationModeOnOff(O_LOCKOUT);		        	   
        	   break;	 
        	     
        case 6	 : wr=InstallCard ();		break;
        
        case 7   : wr=DeleteCard  ();		break;
        
        case 8   : ClearUserDB ();
        	   wr=1;
    		   beep (4);    		   
		   break;
       
	case 9   : wr = Get2Digit (&SystemDatabase.LockReleaseTime, MAX_LOCK_RELEASE_TIME);		
		  break;
	
        case 0x10   : wr = Get2Digit (&SystemDatabase.DoorOpenTime, MAX_DOOR_OPEN_TIME);		
		 break;
	
        case 0x11: wr = GetOperationModeOnOff (O_SECURITYOFF);        	
		 break;
        
	case 0x12: wr = GetDigit (temp_masterpin1, 6);	
		if(!wr)
		{		
			ShowErrInMainEntered();
			masterpinCount=0;
		}
		else if(wr==1)	
		{				
			if(!masterpinCount)
			{					
				for(i=0;i<3;i++)
					temp_masterpin2[i]=temp_masterpin1[i];
					
				masterpinCount++;
				put_c('Q');				
				beep(3);
			}
			else if(masterpinCount==1)
			{							
				for(i=0;i<3;i++)
				{	
					if(temp_masterpin1[i]!=temp_masterpin2[i])
					{
						ShowErrInMainEntered();
						wr=0;						
						//put_c('K');						
						break;
					}																
				}
				if(wr==1)
				{
					for(i=0;i<3;i++)
						SystemDatabase.MasterPin[i]=temp_masterpin1[i];
					beep(3);
				}
				masterpinCount=0;			
			}
		}					
	         break;
        case 0x13:     
        case 0x14: //10 set of autopin
        case 0x15:
        case 0x16:
        case 0x17:
        case 0x18:
        case 0x19:
        case 0x20:
        case 0x21:
        case 0x22:
        		wr = GetDigit(SystemDatabase.AutoPin[(MainMenuItem & 0x0f)], 4);	//10 set of autopin                                                
                        if(!wr)		ShowErrInMainEntered();
                        break;

        
        default  : ShowErrInMainEntered();
        	   wr=0;
        	   break;
        
    }

    	if(wr==1)    	    WriteSysDB ();
    			    	
    	if(wr<2)
    	{
    		//ResetUserEvent ();
    		if(MainMenuItem!=0x30)
    		{    		
	    		if(Flags.WaitingKey)		//This will only eliminated by * key and timeout
	    		{
	    			if(masterpinCount!=1)
	    			{
	    				//ShowMainEntered();
	    				flush_keypad();	 	//KK reenable 0707
					ReloadKeyTimeOut();	//KK reenable 0707
					Flags.WaitingKey = 1;					
	    				SubMenuItem=1;
	    				MainMenuItem=0;
	    			}	
	    		}	
	    	}
    		
    	}    	
}

void Process_Delay (void)
{
	if ((SystemDatabase.OperationMode & O_SECURITYOFF) )
	{
		door_relay_on();
	    	door_relay_duration = 2;
	}
	
	if(secdly > 35)  ////almost 1 sec
	{
		secdly = 0;  // 1 sec
		if (door_relay_duration)
		{
	    		door_relay_duration --;
	    		if (!door_relay_duration && !Flags.doorwasopened)
	    		{      	
	    			dooropentime = 0;
	    			LED_GREEN=LED_OFF;
	    		}
		}
	
		if (dooropentime)
		{
	    		dooropentime--;
	    		if (!dooropentime)
				if (DOORSENSOR) // Door left Open
		        	{		        					
					CommPutStr("Door left open");					                    
		        	}
		}        
		      
	}

    	if (door_relay_duration)        door_relay_on();
    	
    	else			        door_relay_off();
    	
    	if(cardtime>=CARDTIMELIMIT)	
  	{
	  	bitcount  = 0;			//reset all parameter, search for the 
		nibin     = 0;			//correct start pattern
		cbitcount = 0;            		
		parity    = 0;
		startpattern=0;
		rdr=0;	
		anticollision=0;			
		cardtime=0;	//11/30/2005 8:27PM
		SHD=WAKEUP;	//12/13/2005 7:59PM
		//put_c('F');	//indicate its ok for next card			
  	}
  	//anticollision=0;	//testing-jah
  	//if(cardtime==CARDTIMELIMIT)
	
    	
}
void CheckColdStart(void)
{
	if(scankey())
	{	
		//ClearUserDB ();		//KK 0707 
		//InitDB();		//Check Coldstart
		//GetSysDB();		//jah-1/10/2006 4:17PM
		CommPutStr("Cold Start");
	}
	ColdStartCheck=0;		
}

void FlagInit(void)
{
	Flags.gnewcard		=0;	
	Flags.WaitingKey	=0;																							
	Flags.DoorOpen    	=0;												
	Flags.doorwasopened 	=0;	
	ALARMRELAY=RELAY_OFF;																
}

void main (void)
{
	idata unsigned char byte1;
	unsigned char buf[5];//12/18/2005 2:53PM
initmcu();
GetSysDB ();
SystemDatabase.OperationMode &= ~O_SECURITYOFF;	//security on
CheckColdStart();
FlagInit();
CommPutStr("Start");
SHD=WAKEUP;
LED_GREEN=LED_OFF;
//LED_RED=LED_OFF;
//12/18/2005 2:53PM
byte1=get_eeprom_bytes(8);//byte(low) to recall the last address store
cardpos_last=byte1<<8;
byte1=get_eeprom_bytes(9);//byte(high) to recall the last address store
cardpos_last+=byte1;

fillintbuffer(&buf[0], 4, cardpos_last);	//to display the last card address
buf[4]=0;
CommPutStr(buf);
//12/18/2005 2:53PM
/*-----------------------------------------------
Wait forever.
-----------------------------------------------*/
	while (1)
	{	  	
	  	Process_Input();
		process_led();
		process_buzzer();
		Process_Delay();				
		ProcessUserEvent ();
		Process_LocalKeypad();					
  	}
}

/*=============================================================================
=============================================================================*/



















⌨️ 快捷键说明

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