📄 readermodule.c.bak
字号:
}
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 + -