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

📄 pcoutdata.cpp

📁 有关树WDM 驱动的编程.里面包含了许多实例,学习硬件的可以参考哦
💻 CPP
字号:
// pcoutdata.cpp : implementation file
//

#include "stdafx.h"
#include "pctest.h"
#include "pcoutdata.h"
#include "adc.h"
#include "address.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern HANDLE	hDevice;
extern HANDLE	hDevice2;
extern  PCHAR mDynVxDName ;
/////////////////////////////////////////////////////////////////////////////
// Cpcoutdata dialog

Cpcoutdata::Cpcoutdata(CWnd* pParent /*=NULL*/)
	: CDialog(Cpcoutdata::IDD, pParent)
{
	//{{AFX_DATA_INIT(Cpcoutdata)
	m_d1 = 0;
	m_d2 = 0;
	m_num1=0;
	m_check=0;
	//}}AFX_DATA_INIT
     hDevice2=NULL;
     hDevice=NULL;
     m_hand=NULL;
	 
}


void Cpcoutdata::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Cpcoutdata)
	DDX_Control(pDX, IDC_COMBO2, m_bit1);
	DDX_Control(pDX, IDC_COMBO1, m_bit);
	DDX_CBIndex(pDX, IDC_COMBO1, m_num1);
	DDX_Radio(pDX, IDC_RADIO1, m_check);
	DDX_Text(pDX, IDC_EDIT1, m_d1);
	DDX_Text(pDX, IDC_EDIT2, m_d2);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Cpcoutdata, CDialog)
	//{{AFX_MSG_MAP(Cpcoutdata)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	//}}AFX_MSG_MAP
//	ON_MESSAGE(WM_USER+0x100,Handleint)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Cpcoutdata message handlers

BOOL Cpcoutdata::OnInitDialog() 
{
	CDialog::OnInitDialog();
    m_check=0;
	UpdateData(false);
	CString m_a[13]={"50","75","110","134.5","150",
		"300","600","1200","1800","2000",
		"2400","3600","4800"};
	for(int x=0;x<13;x++)
	{
		m_bit.InsertString (-1,m_a[x]);
	}
	m_bit.SetCurSel(7);
	m_num1=0;
	CString m_b[2]={"COM1","COM2"};
	for( x=0;x<2;x++)
	{
		m_bit1.InsertString (-1,m_b[x]);
	}
	m_bit1.SetCurSel(0);

	UpdateData(true);
	if(hDevice==NULL)
	{
	    hDevice = CreateFile(mDynVxDName, 
							GENERIC_READ,
							FILE_SHARE_READ,
							NULL,
							OPEN_EXISTING,
							0,
							NULL);
	if (hDevice == INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("请检查板卡和驱动程序");
		CDialog::OnCancel();
		return FALSE;
	}
    W_AD=(Write_AD*)malloc(sizeof(Write_AD));
			hEvent=CreateEvent(NULL, FALSE, FALSE, NULL);

    DeviceIoControl(
					hDevice, 
					IOCTL_TRS_EVENT,
					&hEvent, 
					sizeof(hEvent), 
					NULL, 
					0,
					&nRet, 
 					NULL);
	
	 }
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void Cpcoutdata::OnButton1() 
{
	// TODO: Add your control notification handler code here
 Handleintt();
 UpdateData(TRUE);
 handlePart();
}

void Cpcoutdata::Handleintt()
{
	BYTE chk=0x83;
	BYTE data;
	BYTE datah;
	switch(m_check)
	{
	case 0:
		chk=0x83;
		break;
	case 1:
		chk=0xbb;
		break;
	case 2:
		chk=0xab;
		break;
		default:
			AfxMessageBox("未选择校验格式,采用默认值");
	}              
	W_AD->Data=chk;
    W_AD->Address=IC_16550_3;      //LCR
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
        
	datah=0x09;						//50波特率
	data=0x00;
	UpdateData(TRUE);
    int m_a=m_bit.GetCurSel();
    switch(m_a)
	{
	case 0:
		datah=0x09;
	    data=0x00;
		break;
    case 1:
		datah=0x06;
	    data=0x00;
		break;
	case 2:
		datah=0x04;
	    data=0x17;
		break;
    case 3:
		datah=0x03;
	    data=0x59;
		break;
	case 4:
		datah=0x03;
	    data=0x00;
		break;
    case 5:
		datah=0x01;
	    data=0x80;
		break;
	case 6:
		datah=0x00;
	    data=0xc0;
		break;
    case 7:
		datah=0x00;
	    data=0x60;
		break;
	case 8:
		datah=0x0;
	    data=0x40;
		break;
    case 9:
		datah=0x0;
	    data=0x3a;
		break;
	case 10:
		datah=0x0;
	    data=0x30;
		break;
    case 11:
		datah=0x0;
	    data=0x20;
		break;
	case 12:
		datah=0x0;
	    data=0x18;
		break;
   	}
    W_AD->Data=data;
    W_AD->Address=IC_16550;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);
    W_AD->Data=datah;
    W_AD->Address=IC_16550_1;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);

	W_AD->Data=chk&0x7f;					//8比特,1停止,校验见前(chk的取值)
    W_AD->Address=IC_16550_3;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);


	W_AD->Data=0X00;
    W_AD->Address=IC_16550_1;
    DeviceIoControl(
					hDevice, 
					IOCTL_IOW,
					W_AD, 
					sizeof(W_AD)+1, 
					NULL, 
					0,
					&nRet, 
 					NULL);

	BYTE OffSet=IC_16550;
		BOOL status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
		 OffSet=IC_16550_1;
		status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
		 OffSet=IC_16550_2;
		status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
		 OffSet=IC_16550_3;
		 status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
		 OffSet=IC_16550_5;
		 status = DeviceIoControl(
									hDevice, 
									IOCTL_IOR,
									&OffSet, 
									sizeof(BYTE), 
									&data, 
									0, 
									&nRet, 
 									NULL);
	
}



void Cpcoutdata::HandleSetchip()
{

}

void Cpcoutdata::Handlebit()
{
	//CDialog::OnOK();
}

void Cpcoutdata::Openpoint()
{
   
	UpdateData(TRUE);
	int ma=m_bit1.GetCurSel();
	CString m1,m2,m3;
	m1=("COM1");
    m2=("COM2");
	if(ma==0)
	{
		m3=m1;
	}else{
		m3=m2;
	}
	if(m_hand!=NULL)
	{
       CloseHandle(m_hand);
	   m_hand=NULL;
	}
    m_hand=CreateFile(m3,
		              GENERIC_READ|GENERIC_WRITE,
					  0,
		              NULL,
					  OPEN_EXISTING,
					  NULL,
					  NULL);
	if(m_hand==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("port open error !\n");
		  
	}
}

void Cpcoutdata::handlePart()
{
  BYTE data;

    Openpoint();
	LPCOMMPROP    com=(LPCOMMPROP)malloc(sizeof(COMMPROP));
	com->wPacketLength=sizeof(COMMPROP);
	GetCommProperties(m_hand,com);
	WORD dwSize=com->wPacketLength;
	free(com);
	com=(LPCOMMPROP)malloc(dwSize);
	com->wPacketLength=dwSize;
	GetCommProperties(m_hand,com);
	DCB   bc;
	GetCommState(m_hand,&bc);
	switch(m_num1)
	{
	case 0:
		if(com->dwSettableBaud&BAUD_USER)
			bc.BaudRate=50;
		break;
    case 1:
		if(com->dwSettableBaud&BAUD_075)
			bc.BaudRate=75;
		break;
	case 2:
		if(com->dwSettableBaud&BAUD_110)
			bc.BaudRate=CBR_110;
		break;
	case 3:
		if(com->dwSettableBaud & BAUD_134_5)
			bc.BaudRate=134.5;
		break;
	case 4:
		if(com->dwSettableBaud & BAUD_150)
			bc.BaudRate=150;
		break;
	case 5:
		if(com->dwSettableBaud & BAUD_300)
			bc.BaudRate=CBR_300;
		break;
	case 6:
		if(com->dwSettableBaud & BAUD_600)
			bc.BaudRate=600;
		break;
	case 7:
		if(com->dwSettableBaud & BAUD_1200)
			bc.BaudRate=1200;
		break;
	case 8:
		if(com->dwSettableBaud & BAUD_1800)
			bc.BaudRate=1800;
		break;
	case 9:
		if(com->dwSettableBaud & BAUD_USER)
			bc.BaudRate=2000;
		break;
	case 10:
		if(com->dwSettableBaud & BAUD_2400)
			bc.BaudRate=CBR_2400;
		break;
	case 11:
		if(com->dwSettableBaud & BAUD_USER)
			bc.BaudRate=3600;
		break;
	case 12:
		if(com->dwSettableBaud & BAUD_4800)
			bc.BaudRate=4800;
		break;
	}
	switch(m_check)
	{
	case 0:
		bc.Parity =NOPARITY;
		break;
    case 2:
		bc.Parity =ODDPARITY;
		break;
	case 1:
		bc.Parity =EVENPARITY;
		break;
	}
	bc.fNull=TRUE;
	bc.ByteSize =8;
	bc.StopBits = ONESTOPBIT;
	bc.DCBlength=sizeof(DCB);
	BOOL fSuccess =SetCommState(m_hand,&bc);
	if(fSuccess==TRUE)
	{
		TRACE("34543");
	}	
	DWORD nBytesRead;
    //HANDLE   m_hand =0x10;
	BOOL m1=WriteFile(m_hand,&m_d1,1,&nBytesRead,NULL);
	if(m1==TRUE)
	{
		TRACE("WriteFile success!");
	}else{
		AfxMessageBox("WriteFile fail");
	}


	ULONG	OffSet=IC_16550; //地址
    int i;
	bool link=false;
	for (i=0;i<6000;i++)
    {
    
   	OffSet=IC_16550_5 ; //地址
	BOOL status =  DeviceIoControl(
					hDevice, 
					IOCTL_IOR,
					&OffSet, 
					sizeof(ULONG), 
					&data, 
					0, 
					&nRet, 
 					NULL);
	data=data&0x01;
	if (data==1)
		{  
	    OffSet=IC_16550;
        status =  DeviceIoControl(
					hDevice, 
					IOCTL_IOR,
					&OffSet, 
					sizeof(ULONG), 
					&data, 
					0, 
					&nRet, 
 					NULL);
	    m_d2=data;
	    UpdateData(false);
	    link=true;
		break;
		}
	}
	if (!link)
	{
		m_d2=0;
	    UpdateData(false);
	}
}



void Cpcoutdata::OnOK() 
{
	// TODO: Add extra validation here
	if(m_hand!=NULL)
	  {
		  CloseHandle(m_hand);
		  m_hand=NULL;
	  }
	CDialog::OnOK();
}

⌨️ 快捷键说明

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