📄 drmdriverpbapp.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 + -