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

📄 main.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
                     		// 清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 + -