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

📄 drmdriverpbapp.cpp

📁 this a driver program with c# Language!It s a classic example
💻 CPP
字号:
// DRMDriverAPP.cpp : Defines the entry point for the application.
//
#include <windows.h>
#include "stdafx.h"
/*
typedef	struct ST_WRDATA{
	unsigned char uchChannel;
	unsigned char uchLightNum;
	unsigned char uchValueNum;
	unsigned char uchData;

}*PWRDATACONTEXT,WRDATACONTEXT;
*/
//所要发送的某个通道的灯具四个字节属性
//格式为{通道号,通道内灯具编号,属性字节号,属性值}
unsigned char WrValue1[4]={0,0,0,0x12};
unsigned char WrValue2[4]={0,0,1,0x34};
unsigned char WrValue3[4]={0,0,2,0x56};
unsigned char WrValue4[4]={0,0,3,0x78};



int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
 	// TODO: Place code here.
	DWORD	WrFileValue,RdFileValue;
	DWORD	dwWritten,dwRead;
	int	iRdCount=8,iWrCount=8;
	unsigned char *pRdValue;
	unsigned char *pWrValue;
	unsigned char RdValue,WrValue;

	pRdValue=&RdValue;
	pWrValue=&WrValue;

	unsigned char uchLoopValue=0;
	unsigned char uchExcuteTimes=8;
/*
	HANDLE hStr=RegisterDevice(TEXT("STR"),1,TEXT("StringDriver.dll"),0);

    if(hStr==0)
	{
		::MessageBox(NULL,_T("Failed to Create device"),_T("String Device Test Program"),MB_OK);
    }
*/

	//打开设备驱动文件,返回句柄
	HANDLE	hDrv=CreateFile(L"DRM1:",
							GENERIC_WRITE,
							0,
							NULL,
							OPEN_EXISTING,
							FILE_ATTRIBUTE_NORMAL,
							NULL);

	//如果句柄值无效,退出返回
	if(INVALID_HANDLE_VALUE==hDrv)
	{
		RETAILMSG(1,(TEXT("++++ PBAPP : Open Driver Failed!!!!\n")));
		CloseHandle(hDrv);
		return 0;
	}

	//读取AVR操作标识,如果无效,继续读取,直到超过8次,一旦有效则退出继续
	do
	{
		Sleep(1);
		RdFileValue=ReadFile(hDrv,(LPVOID)pRdValue,1,&dwRead,NULL);
		RETAILMSG(1,(TEXT("++++ PBAPP : ReadValue = 0x%x \n"),*(pRdValue)));

		iRdCount--;
	}while((0xaa!=*pRdValue) && iRdCount>0);	
	//连读8次标识错误,则退出
	if(iRdCount==0)
	{
		RETAILMSG(1,(TEXT("++++ PBAPP : ReadFlag Failed!!!!\n")));
		CloseHandle(hDrv);
		return 0;
	}


	
	RETAILMSG(1,(TEXT("++++ PBAPP : WrValue[0][0] = 0x%x \n"),&WrValue1));
	RETAILMSG(1,(TEXT("++++ PBAPP : WrValue[1][0] = 0x%x \n"),&WrValue2));
	RETAILMSG(1,(TEXT("++++ PBAPP : WrValue[2][0] = 0x%x \n"),&WrValue3));
	RETAILMSG(1,(TEXT("++++ PBAPP : WrValue[3][0] = 0x%x \n"),&WrValue4));

	
	//写入初始测试信息,调试使用
	WrFileValue=WriteFile(hDrv,(LPVOID)(WrValue1),4,&dwWritten,NULL);
	WrFileValue=WriteFile(hDrv,(LPVOID)(WrValue2),4,&dwWritten,NULL);
	WrFileValue=WriteFile(hDrv,(LPVOID)(WrValue3),4,&dwWritten,NULL);
	WrFileValue=WriteFile(hDrv,(LPVOID)(WrValue4),4,&dwWritten,NULL);

	//写入操作完成标识
	*(pWrValue)=0x55;
	WrFileValue=WriteFile(hDrv,(LPVOID)pWrValue,1,&dwWritten,NULL);
	//回读操作标识已验证写入正确,如果错误,则重新标识写入,如果超过8次则推出
	do
	{
		Sleep(1);
		RdFileValue=ReadFile(hDrv,(LPVOID)pRdValue,2,&dwRead,NULL);
		if(0x55==*((unsigned char *)pRdValue))
		{
			RETAILMSG(1,(TEXT("++++ PBAPP : RdValue = 0x%x \n"),*(pRdValue)));
			break;
		}
		else
			WrFileValue=WriteFile(hDrv,(LPVOID)pWrValue,1,&dwWritten,NULL);
		iWrCount--;
	}while(iWrCount>0);	

	if(iWrCount==0)
	{
		RETAILMSG(1,(TEXT("++++ PBAPP : WriteFlag Failed!!!!\n")));
		CloseHandle(hDrv);
		return 0;
	}

	iRdCount=8;
	iWrCount=8;
	//测试灯光亮度属性,发送亮度属性数据,从0递增至0xf0,步进值为0xf;
	//共循环8次
	for(uchExcuteTimes=8;uchExcuteTimes>0;uchExcuteTimes--)
	{
		for(uchLoopValue=0x00;uchLoopValue<0x0ff;uchLoopValue+=0xf)
		{

			iRdCount=8;
		//读标识	
			do
			{
				Sleep(1);
				RdFileValue=ReadFile(hDrv,(LPVOID)pRdValue,1,&dwRead,NULL);
				RETAILMSG(1,(TEXT("++++ PBAPP : ReadValue = 0x%x \n"),*(pRdValue)));

				iRdCount--;
			}while((0xaa!=*pRdValue) && iRdCount>0);	
			
			if(iRdCount==0)
			{
				RETAILMSG(1,(TEXT("++++ PBAPP : ReadFlag Failed!!!!\n")));
				CloseHandle(hDrv);
				return 0;
			}

			
			
		//写有效信息	
			WrValue1[3]=uchLoopValue;
			WrFileValue=WriteFile(hDrv,(LPVOID)(WrValue1),4,&dwWritten,NULL);
			RETAILMSG(1,(TEXT("++++ PBAPP : WrValue = 0x%x \n"),WrValue1[3]));
		//写完成标识
			*(pWrValue)=0x55;
			WrFileValue=WriteFile(hDrv,(LPVOID)pWrValue,1,&dwWritten,NULL);
			RETAILMSG(1,(TEXT("++++ PBAPP : Writing WrFLAG \n")));

			iWrCount=8;

		//反读完成标识
			do
			{
				Sleep(1);
				RdFileValue=ReadFile(hDrv,(LPVOID)pRdValue,2,&dwRead,NULL);
				RETAILMSG(1,(TEXT("++++ PBAPP : Reading WrFLAG \n")));

				if(0x55==*((unsigned char *)pRdValue))
				{
					RETAILMSG(1,(TEXT("++++ PBAPP : RdValue = 0x%x \n"),*(pRdValue)));
					break;
				}
				else
				{
					*(pWrValue)=0x55;
				
					WrFileValue=WriteFile(hDrv,(LPVOID)pWrValue,1,&dwWritten,NULL);

					RETAILMSG(1,(TEXT("++++ PBAPP : Writing WrFLAG again!\n")));

				}
				iWrCount--;
			}while(iWrCount>0);	

			if(iWrCount==0)
			{
				RETAILMSG(1,(TEXT("++++ PBAPP : WriteFlag Failed!!!!\n")));
				CloseHandle(hDrv);
				return 0;
			}

			Sleep(200);
		}
	}
	
	RETAILMSG(1,(TEXT("++++ PBAPP : PBAPP is well done!!!!\n")));



	CloseHandle(hDrv);
//	DeregisterDevice(hStr);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -