📄 maic.cpp
字号:
#include"EICNT.h"
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd
)
{
OVER_SPEED over_speed;
BOOL overmark = 0;
unsigned char maxspeed=0;
DWORD status;
DWORD actlen;
LPSYSTEMTIME overspeedtime = new SYSTEMTIME();
HANDLE hMutex1;
char n;
HANDLE hFile=INVALID_HANDLE_VALUE;
DWORD a[5];
unsigned int printnum = 0;
volatile IOPreg* v_pIORegs;
CRecord* record = new CRecord();
v_pIORegs = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);
if (v_pIORegs == NULL)
{
//::MessageBox(NULL,_T("Map Failed"),TEXT("Map Failed!!"), MB_OK);
}
if (!VirtualCopy((PVOID)v_pIORegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE|PAGE_NOCACHE))
{
//::MessageBox(NULL,_T("Map Failed"),TEXT("Map Failed!!"), MB_OK);
}
v_pIORegs->rGPECON &= ~(0x3<<26);
v_pIORegs->rGPEUP|= (0x1<<13);
v_pIORegs->rGPFCON &= ~(0x3<<2);
v_pIORegs->rGPFUP|= (0x1<<1);
v_pIORegs->rGPFCON &= ~(0x3<<6);
v_pIORegs->rGPFUP|= (0x1<<3);
v_pIORegs->rGPFCON &= ~(0x3<<12);
v_pIORegs->rGPFUP|= (0x1<<6);
v_pIORegs->rGPGCON &= ~(0x3<<22);
v_pIORegs->rGPGUP|= (0x1<<11);
v_pIORegs->rGPGCON &= ~(0x3F<<26);
v_pIORegs->rGPGUP|= (0x7<<13);
int Edate,Fdate,Gdate;
Gdate = v_pIORegs->rGPGDAT;
Fdate = v_pIORegs->rGPFDAT;
Edate = v_pIORegs->rGPEDAT;
hFile=CreateFile(TEXT("CNT1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hFile==INVALID_HANDLE_VALUE)
{
RETAILMSG(1,(TEXT("open driver EICNT failed.\r\n")));
return 0;
}
RETAILMSG(1,(TEXT("open driver sucessfull.\r\n")));
while(TRUE)
{
if(hFile==INVALID_HANDLE_VALUE)
break;
for(n=0;n<5;n++)
{
if(ReadFile(hFile,&status,1,&actlen,NULL)==TRUE)
{
if(!(status==0xFF))
{
a[n]=status;
printnum=a[0]+a[1]+a[2]+a[3]+a[4];
record->AddMileage(printnum);
printnum=printnum*3600/SENSER_PAUSE*DEFAULT_K_MODULUS;
record->InsertVi(printnum);
carstatu=0;
Gdate = v_pIORegs->rGPGDAT;
Fdate = v_pIORegs->rGPFDAT;
Edate = v_pIORegs->rGPEDAT;
carstatu=readstatu(Edate,Fdate,Gdate);
record->InsertDoubt(printnum,carstatu,0xff);
if(printnum>60)
{
if(overmark==0)
{
overmark = 1;
::GetLocalTime(overspeedtime);
over_speed.byear=unsigned char (overspeedtime->wYear - 2000);
over_speed.bmonth=unsigned char (overspeedtime->wMonth);
over_speed.bday=unsigned char (overspeedtime->wDay);
over_speed.bhour=unsigned char (overspeedtime->wHour);
over_speed.bmin=unsigned char (overspeedtime->wMinute);
over_speed.bsecond=unsigned char (overspeedtime->wSecond);
}
if(maxspeed<printnum)
{
maxspeed = printnum;
}
}
else
{
if(overmark==1)
{
overmark = 0;
::GetLocalTime(overspeedtime);
over_speed.oyear=unsigned char (overspeedtime->wYear - 2000);
over_speed.omonth=unsigned char (overspeedtime->wMonth);
over_speed.oday=unsigned char (overspeedtime->wDay);
over_speed.ohour=unsigned char (overspeedtime->wHour);
over_speed.omin=unsigned char (overspeedtime->wMinute);
over_speed.osecond=unsigned char (overspeedtime->wSecond);
over_speed.limitspeed = 60;
record->Overspeed(over_speed);
}
}
hMutex1=CreateMutex(NULL,TRUE,_T("StoreMutex"));
BOOL ReleaseMutex(HANDLE hMutex1);
CloseHandle(hMutex1);
WriteFile(hFile,&status,1,&actlen,NULL);
}
else
{
break;
}
}
else
break;
}
}
return 0;
}
unsigned char readstatu (int Ecdate,int Fcdate,int Gcdate)
{
unsigned char ccarstatu = 0;
if(Ecdate&&0x2000)
{
ccarstatu=ccarstatu|0x1;
}
if(Fcdate&&0x2)
{
ccarstatu=ccarstatu|0x2;
}
if(Fcdate&&0x8)
{
ccarstatu=ccarstatu|0x4;
}
if(Fcdate&&0x40)
{
ccarstatu=ccarstatu|0x8;
}
if(Gcdate&&0x800)
{
ccarstatu=ccarstatu|0x10;
}
if(Gcdate&&0x2000)
{
ccarstatu=ccarstatu|0x20;
}
if(Gcdate&&0x4000)
{
ccarstatu=ccarstatu|0x40;
}
if(Gcdate&&0X8000)
{
ccarstatu=ccarstatu|0x80;
}
return ccarstatu;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -