📄 common.c
字号:
// Include Standard LIB files
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
#include <stdio.h>
void Power(int iOnOff);
void Initialize(void);
void InitCPLD(void);
_BYTE InitGlobalVar(void);
_BYTE SelfCheckExtRAM(void);
_BYTE SelfCheck(void);
void Beep(_BYTE cCount);
void Sound(_BYTE cSoundID);
void LEDGreen(_BYTE cStatus,_BYTE cTime);
void LEDRed(_BYTE cStatus,_BYTE cTime);
void SoundOnOff(_BYTE cStatus);
void Delayms(_DWORD dwTime);
void Delays(_DWORD dwTime);
void DelayMCK4(_DWORD dwTime);
void Delay10us(_DWORD dwTime);
void PowerOnRecovery(void);
void DisplayCardInfo(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,_BYTE cWait,_BYTE cDetail);
void BIEFToDCB(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,struct StruDCB *spDCB);
_BYTE CheckUsableDBC(_BYTE *cDCBItem);
_BYTE AllocateOrFreeDCB(_BYTE cDCBSeq,_BYTE cTag);
_BYTE CoachLogin(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE CoachLogout(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverLogin(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverLogout(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE DriverTmpLogout(void);
_BYTE BuildOneLogFormOneDCB(_BYTE cDCBSeq,_BYTE cEst,struct StruLOGPOOL cpLogBuf[]);
_BYTE BuildOneLog(_BYTE cDCBSeq,_DWORD dwMile,_WORD wTime,_BYTE cEst,_BYTE cTag,struct StruLOGPOOL *cpLogBuf);
void LogCompress(_BYTE * cpBuf,_BYTE cDCBSeq,_BYTE cTag,_BYTE cEst);
void MergeDCBCDTISmallInfo(_BYTE cDCBSeq,_BYTE cMergeType);
void MergeDCBTrainInfo(_BYTE cDCBSeq);
_BYTE WriteLogToCoachIC(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE WriteLogToDriverIC(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo,_BYTE cDCBSeq,struct StruLOGPOOL cpLogBuf[]);
_BYTE AskForCoachLogout(_BYTE cType,_BYTE cDCBSeq);
_BYTE DriverLogined(SBIEF_1 *sBIEFBaseInfo);
void GetCDTI(_BYTE cDCBSeq);
_BYTE SetCDTI(_BYTE cDCBSeq);
void ClearDCBT(void);
_BYTE ClearDAT(void);
_WORD GetHZOffset(_WORD wHZCode);
_BYTE RebuildDCBT(void);
void GetCurTimeTxt(_BYTE * cpBuf);
void RefreshClock(void);
void DispTrainingInfo(void);
void RefreshTrainingInfo(void);
_DWORD ByteToLong(_BYTE *cpBuf,_BYTE cLen,_BYTE bASCII);
void TimeMileToString(_DWORD dwTimeOrMile,_BYTE cSecond,_BYTE *cpBuf,_BYTE cMode);
void LongToString(_DWORD dwLong,_BYTE *cpBuf,_BYTE cLen);
void LongToHEX(_DWORD dwLong,_BYTE *cpBuf,_BYTE cLen);
_BYTE VerifyDriverFinger(_BYTE cDCBSeq);
_BYTE CheckDCB(_BYTE cDCBSeq);
_BYTE SetStatus(_BYTE cStatus);
void Setup(_BYTE cCardFlag,_BYTE cQuery);
_BYTE CheckDateTime(struct StruCLOCK sClock);
void Query(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfof);
void QueryKeyProcess(SBIEF_1 *sBIEFBaseInfo,SBIEF_2 *sBIEFTrainInfo,SBIEF_3 *sBIEFTimeInfo);
_BYTE Crc8(_WORD wLength,_BYTE *cpCrcBuf);
void InitValForTraining(void);
_BYTE DecideTrainType(_WORD wCyclePluse,_BYTE cCycleSecond,_WORD wCycleMaxRunPluse,_BYTE cCycleMaxRunTime);
_DWORD Random(_DWORD dwRange);
void Trim(_BYTE * cpBuf,_DWORD dwLen);
_BYTE CheckAdmin(_BYTE *cCardType);
_BYTE SelfCheckRAM(_BYTE cStatus);
//**********************************************
//打开或关闭电源
//**********************************************
void Power(int iOnOff)
{
if (iOnOff ==ON) {
MY_PIO_PER = EXTPWD;
MY_PIO_OER = EXTPWD;
MY_PIO_SODR = EXTPWD;
// gcpCPLDReg[3] |= CPLD_IC_PWREN;
// pCPLD[6] = gcpCPLDReg[3]; //IC_POWER=1
}
else {
MY_PIO_PER = EXTPWD;
MY_PIO_OER = EXTPWD;
MY_PIO_CODR = EXTPWD;
// gcpCPLDReg[3] &= ~CPLD_IC_PWREN;
// pCPLD[6] = gcpCPLDReg[3]; //IC_POWER=0
}
}
//=================================================================
// 系统初始化程序
// 初始化定时器、计数器、DLS外部中断、里程传感器中断
//=================================================================
void Initialize(void)
{
_WORD i;
for (i=0;i<LENOFHZLIB;i++) {
gHZOffsetTable[i]=(i<=22?i*16:368+(i-23)*32); //gCodeHZOffsetTable[i];
}
gFontBuf = (_BYTE*)(FLASH_BASE+0x48000+0x7c);
gCodeHZCodeTable = (_WORD*)(FLASH_BASE+0x48000+0xeec);
gcpWellcomIcon = (_BYTE*)(FLASH_BASE+0x48000+0xfea);
cpHelp = (_BYTE*)(FLASH_BASE+0x48000+0x13ea);
SmallIcons = (_BYTE*)(FLASH_BASE+0x48000+0x4fea);
LargeIcons = (_BYTE*)(FLASH_BASE+0x48000+0x534a);
// 初始化PIO口
MY_PS_PCER = PS_PIO_MASK;
InitCPLD();
Usart_init(); // 串口初始化
timer_init();
DispLCDInit(); // 初始化液晶
ICPower(ON);
BCTSetIO(); // 初始化BCT
EXIRQ_open (AT91C_BASE_AIC); //打开外部中断
I2CInitVariable(SDA,SCL);
}
void InitCPLD(void)
{
gcpCPLDReg[0] = 0x00; // LCD_D[3..0] = 0
gcpCPLDReg[1] = 0x00; // LCD_D[7..4] = 2
gcpCPLDReg[2] = 0x03; // LED_R(4.0) = 0
// LED_G(4.1) = 0
// LCD_RS(4.2)= 0
// LCD_E(4.3) = 0
gcpCPLDReg[3] = 0x00; // LCD_BL(6.0)= 0
// IC_PWREN(6.1)=0 Power Off
// NOP(6.2) =0
// BEEP(6.3) =0 Beep Off
gcpCPLDReg[4] = 0x00; // IC_DATA(8.0) =0
// IC_CLK(8.1) =0
// IC_RST(8.2) =0
gcpCPLDReg[5] = 0x01; // A.0 = 0(CLK3579) 1(CPU) to IC_CLK
// A.1 = 1(Write to IC_DATA) 0(三态)
pCPLD[0] = gcpCPLDReg[0];
pCPLD[2] = gcpCPLDReg[1];
pCPLD[4] = gcpCPLDReg[2];
pCPLD[6] = gcpCPLDReg[3];
pCPLD[8] = gcpCPLDReg[4];
pCPLD[0xA] = gcpCPLDReg[5];
}
//=================================================================
// 变量初始化,初始化全局变量
//=================================================================
_BYTE InitGlobalVar(void)
{
_WORD i;
_BYTE cRetCode;
cRetCode = FlashReadWriteSPB(&SPB,ICREAD);
CSI.cCurDCB = 0xff;
for (i=0;i<LENOFDCBT;i++) DCBT[i].cFlag=0x00;
CSI.cCurDCB=0xff;
gcBackLightTime=0; // LCD背光持续的时间(S),在每次点亮背光时设置
gcBeepCount= 0;
gcClockFreshFlag=0; // 刷新时钟的标记
gcDecimal = 0xff; //
gcDispChanged=0; // 指示显示是否变化的全局变量
gcKeyUp = 0; // 按键是否按下的标记
gcKeyDown = 0;
gcKeyLongPress=0; // 是否为长按键
gcKeyPressA=3; // 键按下时间的阀值
gcLEDRedLightTime = 0;
gcLEDGreenLightTime = 0;
gcMinterFresh = 0; // 刷新时钟的分钟时使用
gcOpenBeep = 0;
gcOpenLEDGreen = OFF;
gcOpenLEDRed = OFF;
gcpMBBuf[0] = 0x00; // 最后一次采集的指纹模板
gcpFlashBuf = (_BYTE *)0; // 写FLASH时指向暂存FLASH数据的缓冲区指针
gcSeconds=0;
gcSecondFresh = 0; // 刷新时钟的秒时使用
gcTrainFreshFlag=0; // 刷新训练信息的标记
gcTrainFreshMile=0; // 刷新训练里程信息的标记
gcTrainFreshTime=0; // 刷新训练时间信息的标记
gcTrainFreshSecond=0; // 刷新训练时间(秒)信息的标记
gcTimeOfKeyPress=0; // 长按键的时间
gcLastKey1=0; // 前一按键
gcLastKey2=0;
gcLastKey3=0;
gcVerifyCount=0;
gcValidSeconds=0;
gcUpdateCDTI = 0; // 更新CDTI到FLASH中的标记
gCurDriverCount=0;
gwPluseMile=0;
gwRemainedPluse=0;
gwPluseAllow=0;
gdwFlashLen = 0;
gdwKeyNum=0x00; // 当前按下按键的键值
return(C_OK);
}
//=================================================================
// 检查RAM
//=================================================================
_BYTE SelfCheckExtRAM(void)
{
_BYTE cRetCode;
// 检查RAM
cRetCode = TestRAM();
return(cRetCode);
}
//=================================================================
// 系统自检,检查RAM、指纹模块
// 自检成功返回C_OK
// 自检失败返回C_NOTOK
//=================================================================
_BYTE SelfCheckRAM(_BYTE cStatus)
{
_BYTE cRetCode;
// 清显示内容
DispLCDClearScreen();
DispOutText(0,0,12,(_BYTE *)" *系统自检* ");
DispRefresh(0,0,2,VIDEOCOL,1);
if (cStatus==C_OK)
DispOutText(2,0,12,(_BYTE *)" 存储器1 正常 ");
else
DispOutText(2,0,12,(_BYTE *)" 存储器1 出错 ");
DispRefresh(2,0,2,VIDEOCOL,1);
cRetCode = TestEEPROM1();
if (cRetCode==C_OK)
DispOutText(4,0,12,(_BYTE *)" 存储器2 正常 ");
else
DispOutText(4,0,12,(_BYTE *)" 存储器2 出错 ");
DispRefresh(4,0,2,VIDEOCOL,1);
cRetCode = TestEEPROM2();
if (cRetCode==C_OK)
DispOutText(6,0,12,(_BYTE *)" 存储器3 正常 ");
else
DispOutText(6,0,12,(_BYTE *)" 存储器3 出错 ");
DispRefresh(6,0,2,VIDEOCOL,1);
return(cRetCode);
}
//=================================================================
// 系统自检,检查RAM、指纹模块
// 自检成功返回C_OK
// 自检失败返回C_NOTOK
//=================================================================
_BYTE SelfCheck(void)
{
_BYTE cRetCode;
// 清显示内容
DispLCDClearScreen();
DispOutText(0,0,12,(_BYTE *)" *系统自检* ");
DispRefresh(0,0,2,VIDEOCOL,1);
cRetCode = TestICcard();
if (cRetCode==C_OK)
DispOutText(2,0,9,(_BYTE *)" 卡 正常 ");
else
DispOutText(2,0,9,(_BYTE *)" 卡 出错 ");
DispRefresh(2,0,2,VIDEOCOL,1);
cRetCode = C_OK;
// 检查BCT指纹模块
cRetCode = BCTOpen();
if (cRetCode!=C_OK) {
DispOutText(4,0,19,(_BYTE *)" 指纹模块 出错 ");
cRetCode=C_NOTOK;
}
else
DispOutText(4,0,10,(_BYTE *)" 指纹模块 正常 ");
DispRefresh(4,0,2,VIDEOCOL,1);
// 显示自检结果
if (cRetCode==C_OK)
DispOutText(6,0,12,(_BYTE *)" 系统正常 ");
else
DispOutText(6,0,12,(_BYTE *)" 系统出错 ");
DispRefresh(6,0,2,VIDEOCOL,1);
return(cRetCode);
}
//=================================================================
// 使蜂鸣器发声-1声
//=================================================================
void Beep(_BYTE cCount)
{
gcOpenBeep =ON;
gcBeepCount =cCount;
}
void Sound(_BYTE cSoundID)
{
int i;
switch(cSoundID) {
case S_FingerDown:
for (i=0;i<4;i++) {
SoundOnOff(ON);
Delayms(20);
SoundOnOff(OFF);
Delayms(20);
}
break;
case S_OperateFail:
Beep(6);
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -