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

📄 irdlg.cpp

📁 Evc 4.0写的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// IRDlg.cpp : implementation file
//

#include "stdafx.h"
#include "IR.h"
#include "IRDlg.h"

#include "afxmt.h"
#include "stdlib.h"
#include <stdio.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CEvent eventGetData;

/////////////////////////////////////////////////////////////////////////////
// CIRDlg dialog

CIRDlg::CIRDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CIRDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CIRDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    
	m_Bh = _T("");
	m_CbTime = _T("");
	m_Total = _T("");
	m_Rate1 = _T("");
	m_Rate2 = _T("");
	m_Rate3 = _T("");
	m_Rate4 = _T("");
    
	m_Bh1=_T("");
}

void CIRDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CIRDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here

	DDX_Text(pDX, IDC_edtTotal, m_Total);
	DDX_Text(pDX, IDC_edtRate1, m_Rate1);
	DDX_Text(pDX, IDC_edtRate2, m_Rate2);
	DDX_Text(pDX, IDC_edtRate3, m_Rate3);
    DDX_Text(pDX, IDC_edtRate4, m_Rate4);
	
	DDX_Text(pDX, IDC_EDIT1, m_Bh1);

	//DDX_CBString(pDX, IDC_CMBXSXB, m_xsxb);	

	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CIRDlg, CDialog)
	//{{AFX_MSG_MAP(CIRDlg)
	ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
	ON_BN_CLICKED(IDC_BUTTON_DISCONNECT, OnButtonDisconnect)
	ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CIRDlg message handlers

BOOL CIRDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	m_CSerial = new CSerial();
	Connected=FALSE;
	Flag=FALSE;

   // CButton *pButton;
   // pButton= (CButton*)GetDlgItem(IDC_RADIO1);
   // pButton->SetCheck(1);


	CEdit * pEdit;
	pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit->SetLimitText(12);
    
	CButton *pButton;
    pButton= (CButton*)GetDlgItem(IDC_RADIO1);
    pButton->SetCheck(1);


/*
	CFile stuFile;
	
	if (stuFile.Open(ENERGYFILEPATH,CFile::modeRead))
	{
		//关闭数据文件
		stuFile.Close();
	}
	else  //创建文件
	{
	//	AfxMessageBox(_T("Open file error"));

        if (!stuFile.Open(ENERGYFILEPATH,CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox(_T("Create file error"));
			return FALSE;
		}
		stuFile.Close();
	}

    if (stuFile.Open(EVENTKFILEPATH,CFile::modeRead))
	{
		//关闭数据文件
		stuFile.Close();
	}
	else  //创建文件
	{
	//	AfxMessageBox(_T("Open file error"));

        if (!stuFile.Open(EVENTKFILEPATH,CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox(_T("Create file error"));
			return FALSE;
		}
		stuFile.Close();
	}

	if (stuFile.Open(EVENTRFILEPATH,CFile::modeRead))
	{
		//关闭数据文件
		stuFile.Close();
	}
	else  //创建文件
	{
	//	AfxMessageBox(_T("Open file error"));
        if (!stuFile.Open(EVENTRFILEPATH,CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox(_T("Create file error"));
			return FALSE;
		}
		stuFile.Close();
	}

	if (stuFile.Open(EVENTQFILEPATH,CFile::modeRead))
	{
		//关闭数据文件
		stuFile.Close();
	}
	else  //创建文件
	{
	//	AfxMessageBox(_T("Open file error"));
        if (!stuFile.Open(EVENTQFILEPATH,CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox(_T("Create file error"));
			return FALSE;
		}
		stuFile.Close();
	}
*/
//	Sleep(10);
	
//    Sleep(10);
	return TRUE;  // return TRUE  unless you set the focus to a control
}


DWORD  WINAPI ThreadProc(PVOID pArg)
{
	//2007-07-04 18:00

	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	CIRDlg *cDlg =(CIRDlg*)pArg;
	BOOL Flag68=FALSE;
	int t=0;
	int subscript=0;

    //BYTE* SaveData=NULL;
	while(TRUE)
	{
		WaitForSingleObject(cDlg->m_CSerial->eventDATA.m_hObject,INFINITE);	
		
		if(cDlg->Flag)
		{
			cDlg->Flag=FALSE;
			subscript=0;
		}		
  /*
        if(cDlg->m_CSerial->length>150||cDlg->m_CSerial->length<=10)
		{
	       return 0;
		}
*/
		for(int i=0;i<(cDlg->m_CSerial->length);i++)
			cDlg->SaveData[subscript++]=*((cDlg->m_CSerial->pRecvData)+i);

		if(subscript>10)
		{
			if(!Flag68)
			{
				for(t=0;t<subscript;)
				{
					if(cDlg->SaveData[t++]==0x68)
					{						
						break;
					}
				}
				
				Flag68=TRUE;
				
			}

		   // cDlg->ACKFLAG=subscript;

			if(subscript>=(cDlg->SaveData[9+t-1]+12+t-1))
			{
	            //  AfxMessageBox(L"Reci!!!");

				if(cDlg->SaveData[7+t]>0x80)
                {
                 
				if((cDlg->SaveData[0+t-1]==0x68)&&(cDlg->SaveData[7+t-1]==0x68)&&(cDlg->SaveData[cDlg->SaveData[9+t-1]+11+t-1]==0x16))
				{	
					long Checksum = 0;
					for (i = t-1; i < cDlg->SaveData[ 9+t-1 ]+10+t-1; i++)
						Checksum += cDlg->SaveData[i];
                    
					cDlg->ACKFLAG=cDlg->SaveData[t+7];

					if(cDlg->SaveData[cDlg->SaveData[ 9+t-1 ]+10+t-1]==(Checksum&0x0FF))
					{
						for(i=10+t-1;i<cDlg->SaveData[ 9+t-1 ]+10+t-1;i++)
							*(cDlg->RtnData++)=cDlg->SaveData[i];
                        
						for(i=0;i<6;i++)
							*(cDlg->RtnBh++)=cDlg->SaveData[i+t];

					//	2007-07-04 18:00 ping
					//	*(cDlg->TEST)=SaveData[ 9+t-1 ];
                        

						cDlg->dataLength=cDlg->SaveData[ 9+t-1 ];
						cDlg->dataflag=TRUE;
						eventGetData.SetEvent();

                       

					}

					//for(i = 0;i < subscript; i++)
					//		SaveData[i]=0;
                  //  delete[] SaveData;

					subscript=0;
					Flag68=FALSE;
				}
			}

			}
		}
		//2007-07-04 18:00 
		//cDlg->m_CSerial->eventDATA.ResetEvent();
	}
	
//	SaveData=NULL;
	return 0;
}

BOOL CIRDlg::ExchangeBh(CString Bh,unsigned char *Bh1)
{
  CString temp;
  temp="000000000000";
  CString strSave;
  //BYTE recvbuf[20];

  if(lstrlen(Bh)<12)
  {
	  Bh=temp.Mid(1,12-lstrlen(Bh))+Bh;
  }
  //AfxMessageBox(Bh);

  for(int i=0;i<6;i++) 
  {
    Bh1[i]=((Bh[2*i])-0x30)*16+((Bh[2*i+1])-0x30);
  }
   /*  
   int k=0; 
   for(i=0;i<6;i++)
	{
		recvbuf[k++]=((Bh1[5-i])/16<0x0A)?((Bh1[5-i])/16+'0'):((Bh1[5-i])/16+'A'-0x0A);
		recvbuf[k++]=(((Bh1[5-i])&0x0F)<0x0A)?((Bh1[5-i])&0x0F)+'0':((Bh1[5-i])&0x0F)+'A'-0x0A;
   }
    recvbuf[k]='\0';
	strSave = (char*)recvbuf;
    AfxMessageBox(strSave);
*/
  return true;
}

BOOL CIRDlg::SendData(BYTE* Buffer)
{
    //DWORD TL;
	//TL=m_CSerial->WritePort(Buffer,Buffer[13]+16);

	for(int i=0;i<Buffer[13]+16;i++)
	{
		int temp=0;
        while(temp<100) temp++;

		if (!m_CSerial->WritePort(Buffer+i,1))
		{
			AfxMessageBox(L"WRITE WRONG!!!");
			//return FALSE;
			return false;
		}
		Sleep(10);
	}
    // AfxMessageBox(L"Send over");
	//return TRUE;
	return true;

}

void CIRDlg::Packet(unsigned char *Buf)
{
	int Checksum=0;
	for(int i=0;i<12;i++)
		Checksum+=Buf[i];
	Buf[12]=(unsigned char)((Checksum) & 0xFF);
}

unsigned char CIRDlg::PacketCS(unsigned char *Buf,unsigned char Len)
{
	int Checksum=0;
	for(int i=0;i<Len;i++)
		Checksum+=Buf[i+4];

	return  (unsigned char)((Checksum) & 0xFF);
}

BOOL CIRDlg::FirstStep(void)
{
	BYTE* Cmd=new BYTE[18];
    Flag=FALSE;

	Cmd[0]=0xfe;
	Cmd[1]=0xfe;
	Cmd[2]=0xfe;
	Cmd[3]=0xfe;

	Cmd[4]=0x68;
	Cmd[5]=0x99;
	Cmd[6]=0x99;
	Cmd[7]=0x99;
	Cmd[8]=0x99;
	Cmd[9]=0x99;
	Cmd[10]=0x99;
	Cmd[11]=0x68;
	Cmd[12]=0x01;
	Cmd[13]=0x02;
	Cmd[14]=0x43;
	Cmd[15]=0xc3;
	Cmd[16]=0x6f;
	Cmd[17]=0x16;

	Flag=SendData(Cmd);	
	delete [] Cmd;
    Cmd=NULL;

	return Flag;
}

BOOL CIRDlg::SecondStep(unsigned char *Buf)
{
	BYTE* Cmd=new BYTE[14];
	Flag=FALSE;

	Cmd[0]=0x68;
	for(int i=1;i<7;i++)
		Cmd[i]=Buf[i-1];
	Cmd[7]=0x68;
	Cmd[8]=0x01;
	Cmd[9]=0x02;
	Cmd[10]=0x52;
	Cmd[11]=0xC3;
	Cmd[13]=0x16;
	Packet(Cmd);

	Flag=SendData(Cmd);
	delete [] Cmd;
    Cmd=NULL;

	return Flag;
}

BOOL CIRDlg::ReadCommand(unsigned char *Bh,unsigned char *Bs)
{
	BYTE Cmd[18];
	BOOL sendFlag=FALSE;

  //  Flag=FALSE;

	Cmd[0]=0xfe;
	Cmd[1]=0xfe;
	Cmd[2]=0xfe;
	Cmd[3]=0xfe;

	Cmd[4]=0x68;	
	Cmd[11]=0x68;
    
	for(int i=0;i<6;i++) Cmd[i+5]=Bh[5-i];
    
	Cmd[12]=0x01;
	Cmd[13]=0x02;

	Cmd[14]=0x33+Bs[1];
	Cmd[15]=0x33+Bs[0];

	Cmd[16]=PacketCS(Cmd,12);

	Cmd[17]=0x16;

	sendFlag=SendData(Cmd);	

	return sendFlag;
}

BOOL CIRDlg::WriteCommand(unsigned char *Bh,unsigned char *Bs,unsigned char *Data,unsigned char Len,unsigned char nLen)
{
	BYTE Cmd[50];
    BOOL wFlag=FALSE;

	Cmd[0]=0xfe;
	Cmd[1]=0xfe;
	Cmd[2]=0xfe;
	Cmd[3]=0xfe;

	Cmd[4]=0x68;	
	Cmd[11]=0x68;
    
	for(int i=0;i<6;i++) Cmd[i+5]=Bh[5-i];
    
	Cmd[12]=0x04;
	Cmd[13]=0x02+Len;

	Cmd[14]=0x33+Bs[1];
	Cmd[15]=0x33+Bs[0];
    
	i=0;
    for(int j=1;j<=Len/nLen;j++) 
		for(int k=0;k<nLen;k++)
		{
		 Cmd[16+i]=Data[nLen*j-k-1]+0x33;
		 i++;
        }

	Cmd[16+Len]=PacketCS(Cmd,12+Len);
	Cmd[17+Len]=0x16;
  

BYTE recvbuf[50];
CString strSave;

   int k=0; 

⌨️ 快捷键说明

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