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

📄 maic.cpp

📁 wince外部中断计数小驱动
💻 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 + -