📄 main.c
字号:
// 清DCBT表和DAT表
//ClearDCBT();
//ClearDAT();
SetStatus(S_WAIT);
gcClockFreshFlag = 1;
//gCurDriverCount= 0;
}
gcDispChanged = 1;
return;
case 0x03: // 学员卡
if (DriverLogined(&sBIEFBaseInfo)) { // 检查当前学员是否已经签到,若已经签到
cRetCode=DriverLogout(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo); // 学员签退
if (cRetCode==C_OK) {
DisplayMessage(M_LOGOUTOK,6,1,WAITDISP,RECOVERYDISP); // 显示签退成功
gCurDriverCount--;
}
gcDispChanged = 1;
return;
}
else {
cRetCode=DriverLogin(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo); // 学员签到
if (cRetCode==C_OK) { // 签到成功,进入训练状态
DisplayMessage(M_LOGINOK,6,1,WAITDISP,RECOVERYDISP);
InitValForTraining();
gCurDriverCount++;
}
gcDispChanged = 1;
return;
}
break;
case 0x04: // 考官卡??????
cRetCode=C_NOTCOACHIC;
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
case 0x05: // 维护卡
break;
default:
break;
} // end of switch gRecBuf
break;
case ENTER_MENU_KEY: // 选择/确认键
SystemMenuMain();
return;
case CANCEL_CHANGE_KEY: // 选择/确认键
if (gcKeyLongPress==1) PowerOff();
if (gCurDriverCount==0) {
DisplayMessage(M_INDEXEMPTY,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
}
cRetCode = ChangeDriver(&cDCBSeq); // 选择驾驶员
if (cRetCode!=C_OK)
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
else {
// 检查是否验证指纹
wTime = DCBT[cDCBSeq].wDayRoadCurTime;
wTime += DCBT[cDCBSeq].wNightRoadCurTime;
wTime += DCBT[cDCBSeq].wDayFieldCurTime;
wTime += DCBT[cDCBSeq].wNightFieldCurTime;
wTime += DCBT[cDCBSeq].cCycleSecond/60;
wTime += SPB.cVerifyCycle/4; // 随机验证
wRandom = Random(SPB.cVerifyCycle/2);
wTime = (wTime>=wRandom?wTime-wRandom:0);
if (wTime>=SPB.cVerifyCycle) {
cRetCode = VerifyDriverFinger(cDCBSeq);
if (cRetCode!=C_OK) {
gcDispChanged = 1;
return;
}
else {
MergeDCBTrainInfo(cDCBSeq);
cRetCode = FlashReadWriteDCB(cDCBSeq,(DCBT+cDCBSeq),ICWRITE);
if (cRetCode!=C_OK) {
DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
}
}
}
CSI.cCurDCB = cDCBSeq;
SetCDTI(CSI.cCurDCB);
InitValForTraining();
}
gcDispChanged = 1;
return;
default:
break;
} // end of switch gcKeyNum
} // end of gbkeyUp */
}
// 训练状态子程序
void TrainingStatusProcess()
{
_BYTE cRetCode,cDCBSeq;
_WORD wTime,wRandom;
SBIEF_1 sBIEFBaseInfo;
SBIEF_2 sBIEFTrainInfo;
SBIEF_3 sBIEFTimeInfo;
// 检查是否验证指纹
wTime = CDTI.wDayRoadCurTime;
wTime += CDTI.wNightRoadCurTime;
wTime += CDTI.wDayFieldCurTime;
wTime += CDTI.wNightFieldCurTime;
wTime += CDTI.cCycleSecond/60;
wTime += SPB.cVerifyCycle/4; // 随机验证
wRandom = Random(SPB.cVerifyCycle/2);
wTime = (wTime>=wRandom?wTime-wRandom:0);
if (wTime>=SPB.cVerifyCycle) {
DispBackLigth(ON,20);
if (gcVerifyCount<5) {
cRetCode = VerifyDriverFinger(CSI.cCurDCB);
if (cRetCode==C_OK) {
GetCDTI(CSI.cCurDCB); // 取当前DCBT
MergeDCBTrainInfo(CSI.cCurDCB); // 合并有效训练信息和当前训练信息
cRetCode = FlashReadWriteDCB(CSI.cCurDCB,(DCBT+CSI.cCurDCB),ICWRITE);
if (cRetCode!=C_OK) {
DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
}
SetCDTI(CSI.cCurDCB);
gcVerifyCount=0;
}
else
gcVerifyCount++;
}
else { // 强制签退
gcVerifyCount=0;
GetCDTI(CSI.cCurDCB);
cRetCode = FlashReadWriteDCB(CSI.cCurDCB,(DCBT+CSI.cCurDCB),ICWRITE);
CSI.cCurDCB = 0xff;
SetStatus(S_WAIT_TRAIN);
gcTrainFreshFlag = 0;
gcClockFreshFlag = 1;
gcDispChanged = 1;
}
}
if (gcKeyUp) {
gcKeyUp = FALSE;
switch(gdwKeyNum) {
case LOGIN_PGUP_KEY: // 签到/签退键
case LOGOUT_PGDN_KEY: // 签到/签退键
case MENU_QUERY_KEY:
case MENU_LOGIN_KEY:
cRetCode = ICReadBIEF(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo); // 读取IC卡中的BIEF文件
if (cRetCode!=C_OK) { //
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
}
//SaveICHistoryData();
DisplayCardInfo(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo,NOTWAITDISP,0);
if (gdwKeyNum==MENU_QUERY_KEY) { // 下翻/查询
QueryKeyProcess(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo);
gcDispChanged = 1;
return;
}
// 检查卡类型
switch(sBIEFBaseInfo.cCardType) {
case 0x01: // 管理卡
if (gdwKeyNum==MENU_QUERY_KEY)
Setup(ADMINCARD,QUERYMODE);
gcDispChanged = 1;
break;
case 0x02: // 教练卡,训练状态不允许教练签退
cRetCode=M_NOLOGOUT;
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
case 0x03: // 学员卡
if (DriverLogined(&sBIEFBaseInfo)) { // 检查当前卡对应学员是否已经签到,若已经签到
cRetCode=DriverLogout(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo); // 学员签退
if (cRetCode==C_OK){ // 显示签退成功
DisplayMessage(M_LOGOUTOK,6,1,WAITDISP,RECOVERYDISP);
if (CSI.cCurDCB==0xff) { // 如果签退的是当前学员
SetStatus(S_WAIT_TRAIN);
gcTrainFreshFlag = 0;
gcClockFreshFlag = 1;
}
gCurDriverCount--;
}
gcDispChanged = 1;
return;
}
else {
cRetCode=DriverLogin(&sBIEFBaseInfo,&sBIEFTrainInfo,&sBIEFTimeInfo); // 学员签到
if (cRetCode==C_OK) { // 签到成功,进入训练状态
InitValForTraining();
gCurDriverCount++;
}
gcDispChanged = 1;
return;
}
break;
case 0x04: // 考官卡??????
cRetCode=C_NOTCOACHIC;
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
case 0x05: // 维护卡
break;
default:
break;
} // end of switch gRecBuf
break;
case ENTER_MENU_KEY: // 选择/确认键
SystemMenuMain();
return;
case CANCEL_CHANGE_KEY: // 选择/确认键
if (gcKeyLongPress==1) PowerOff();
cRetCode = ChangeDriver(&cDCBSeq); // 选择驾驶员
if (cRetCode!=C_OK)
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
else {
// 检查是否验证指纹
if (cDCBSeq!=CSI.cCurDCB) {
wTime = DCBT[cDCBSeq].wDayRoadCurTime;
wTime +=DCBT[cDCBSeq].wNightRoadCurTime;
wTime += DCBT[cDCBSeq].wDayFieldCurTime;
wTime +=DCBT[cDCBSeq].wNightFieldCurTime;
wTime +=DCBT[cDCBSeq].cCycleSecond/60;
}
else {
wTime = CDTI.wDayRoadCurTime;
wTime += CDTI.wNightRoadCurTime;
wTime += CDTI.wDayFieldCurTime;
wTime += CDTI.wNightFieldCurTime;
wTime += CDTI.cCycleSecond/60;
}
if (wTime>=SPB.cVerifyCycle) {
cRetCode = VerifyDriverFinger(cDCBSeq);
if (cRetCode!=C_OK) {
gcDispChanged = 1;
return;
}
else {
if (cDCBSeq==CSI.cCurDCB) {
GetCDTI(CSI.cCurDCB);
MergeDCBTrainInfo(CSI.cCurDCB);
cRetCode = FlashReadWriteDCB(CSI.cCurDCB,(DCBT+CSI.cCurDCB),ICWRITE);
if (cRetCode!=C_OK) {
DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
gcDispChanged = 1;
return;
}
SetCDTI(CSI.cCurDCB);
}
else {
GetCDTI(CSI.cCurDCB);
FlashReadWriteDCB(CSI.cCurDCB,(DCBT+CSI.cCurDCB),ICWRITE);
MergeDCBTrainInfo(cDCBSeq);
FlashReadWriteDCB(cDCBSeq,(DCBT+cDCBSeq),ICWRITE);
SetCDTI(cDCBSeq);
CSI.cCurDCB = cDCBSeq;
}
}
}
else {
if (cDCBSeq!=CSI.cCurDCB) {
GetCDTI(CSI.cCurDCB); // 保存当前驾驶员的信息
FlashReadWriteDCB(CSI.cCurDCB,(DCBT+CSI.cCurDCB),ICWRITE);
CSI.cCurDCB = cDCBSeq;
SetCDTI(CSI.cCurDCB);
InitValForTraining();
}
}
}
gcDispChanged = 1;
return;
case MENU_TMPLOG_KEY: // 暂退
if (gcKeyLongPress==1) PowerOff();
cRetCode = AskForCoachLogout(TMPLOGOUT,CSI.cCurDCB);
if (cRetCode==C_OK) {
cRetCode = DriverTmpLogout(); // 学员临时签退
if (cRetCode!=C_OK) {
DisplayMessage(cRetCode,6,1,WAITDISP,RECOVERYDISP); // 根据错误码,显示错误信息
}
else {
SetStatus(S_WAIT_TRAIN);
gcTrainFreshFlag = 0;
gcClockFreshFlag = 1;
}
}
gcDispChanged = 1;
return;
default:
break;
} // end of switch gcKeyNum
} // end of gbkeyUp */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -