📄 irdlg.cpp
字号:
// 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 + -