Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/TestTesaStarEDialog.cpp
T
2013-12-13 08:53:55 +08:00

307 lines
9.1 KiB
C++

// TestTesaStarEDialog.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "..\..\..\Tesa\TesaStarE.h"
#include "TestTesaStarEDialog.h"
#include "afxdialogex.h"
extern CTesaStarE* g_pTesaStarE;
char m_RecvData[MAX_RECIEVE_BUFFER_SIZE]={0};
double m_MoveToPos[2]={0.0};
int m_SendType=1;
// TestTesaStarEDialog dialog
IMPLEMENT_DYNAMIC(TestTesaStarEDialog, CDialog)
TestTesaStarEDialog::TestTesaStarEDialog(CWnd* pParent /*=NULL*/)
: CDialog(TestTesaStarEDialog::IDD, pParent)
{
m_OutMessage=L"";
}
TestTesaStarEDialog::~TestTesaStarEDialog()
{
}
void TestTesaStarEDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_TESA_STAR_E_LOG, m_edMSG);
}
BEGIN_MESSAGE_MAP(TestTesaStarEDialog, CDialog)
ON_BN_CLICKED(IDCANCEL, &TestTesaStarEDialog::OnBnClickedCancel)
ON_EN_KILLFOCUS(IDC_EDIT_MOVETO_DEG, &TestTesaStarEDialog::OnEnKillfocusEditMoveT_Deg)
ON_BN_CLICKED(IDC_BUTTONIDC_BUTTON_TESA_STAR_MOVETO, &TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarMoveto)
ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_START_MACHINE, &TestTesaStarEDialog::OnBnClickedButtonTesaStarStartMachine)
ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_STOP_MACHINE, &TestTesaStarEDialog::OnBnClickedButtonTesaStarStopMachine)
ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_SENDMSG, &TestTesaStarEDialog::OnBnClickedButtonTesaStarSendmsg)
ON_BN_CLICKED(IDC_BUTTON_TESA_STAR_CLEAR_LOG, &TestTesaStarEDialog::OnBnClickedButtonTesaStarClearLog)
ON_BN_CLICKED(IDC_BUTTONIDC_BUTTON_TESA_STAR_READ_POS, &TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarReadPos)
ON_EN_KILLFOCUS(IDC_EDIT_MOVETO_DEGA, &TestTesaStarEDialog::OnEnKillfocusEditMovetoDega)
END_MESSAGE_MAP()
// TestTesaStarEDialog message handlers
//===================================================
BOOL TestTesaStarEDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
//===============================================================================
// 创建状态栏
m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, CRect(0, 0, 0, 0), this, 101);
m_StatusBar.SetBkColor(RGB(0xff, 0xff, 0x00));
int arWidth[] = {330,450, -1 };
m_StatusBar.SetParts(3, arWidth);
m_StatusBar.SetText(_T("System ready."), 0, 0);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}
void TestTesaStarEDialog::OnBnClickedCancel()
{
g_pTesaStarE->Unload();
CDialog::OnCancel();
}
void TestTesaStarEDialog::OnBnClickedButtonTesaStarStartMachine()
{
g_pTesaStarE->Initialization();
}
void TestTesaStarEDialog::OnBnClickedButtonTesaStarStopMachine()
{
g_pTesaStarE->Unload();
}
void TestTesaStarEDialog::OnBnClickedButtonTesaStarSendmsg()
{
UpdateData(TRUE);
USES_CONVERSION;
CString csSendData(L"");
GetDlgItem(IDC_EDIT_TESA_STAR_MESSAGE)->GetWindowText(csSendData);
const char* cSendData=T2A(csSendData);
DWORD iSendDataLength(0);
DWORD iWriteByte(0);
CPSerial *pSerial = &(g_pTesaStarE->m_pSerial);
if (m_SendType==0)
{
char* stop;
BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0};
iSendDataLength=(csSendData.GetLength()+1)/3;
for(DWORD i=0;i<iSendDataLength;i++)
{
bSendData[i]=(BYTE)strtol(cSendData+i*3,&stop,16);
}
iWriteByte=pSerial->Send((const char*)bSendData,iSendDataLength);
}
else
{
//加上回车换行符
csSendData+=_T("\r");
cSendData=T2A(csSendData);
iSendDataLength=csSendData.GetLength();
iWriteByte=pSerial->Send(cSendData,iSendDataLength);
}
m_OutMessage=_T("[Send] ")+csSendData;
OutputWithScroll(m_OutMessage,m_edMSG);
m_OutMessage.Format(_T("Send(%dByte)"),iWriteByte);
m_StatusBar.SetText(m_OutMessage, 1, 0);
//接受数据
INT iRetrys(0);
INT iRecvBytes(0);
CString csTemp;
bool IsTheEnd(false);
do
{
iRetrys=0;
while(!pSerial->m_iRecvState && iRetrys<20)
{
iRetrys++;
Sleep(100);
}
if (pSerial->m_iRecvState)
{
if(pSerial->m_RecvData[0]==0)
{
pSerial->m_iRecvState=FALSE;
INT iRetrys2(0);
while(!pSerial->m_iRecvState && iRetrys2<60)
{
iRetrys2++;
Sleep(100);
}
m_OutMessage=_T("[Recv]");
memcpy(m_RecvData,pSerial->m_RecvData, pSerial->m_iRecvBytes);
iRecvBytes=pSerial->m_iRecvBytes;
TRACE1("====RECV%d====\r\n",pSerial->m_iRecvBytes);
TRACE3("%02X %02X %02X ",pSerial->m_RecvData[0],pSerial->m_RecvData[1],pSerial->m_RecvData[2]);
TRACE3("%02X %02X %02X ",pSerial->m_RecvData[3],pSerial->m_RecvData[4],pSerial->m_RecvData[5]);
TRACE3("%02X %02X %02X\r\n",pSerial->m_RecvData[6],pSerial->m_RecvData[7],pSerial->m_RecvData[8]);
for (INT i=0;i<iRecvBytes;i++)
{
if((BYTE)m_RecvData[i]>32)
csTemp.Format(_T("%c "),(BYTE)m_RecvData[i]);
else
csTemp=_T("|");
m_OutMessage+=csTemp;
}
OutputWithScroll(m_OutMessage,m_edMSG);
m_OutMessage.Format(_T("Recv(%dByte)"),iRecvBytes);
m_StatusBar.SetText(m_OutMessage, 2, 0);
}
else
{
m_OutMessage=_T("[Recv]");
memcpy(m_RecvData,pSerial->m_RecvData, pSerial->m_iRecvBytes);
iRecvBytes=pSerial->m_iRecvBytes;
TRACE1("====RECV%d====\r\n",pSerial->m_iRecvBytes);
TRACE3("%02X %02X %02X ",pSerial->m_RecvData[0],pSerial->m_RecvData[1],pSerial->m_RecvData[2]);
TRACE3("%02X %02X %02X ",pSerial->m_RecvData[3],pSerial->m_RecvData[4],pSerial->m_RecvData[5]);
TRACE3("%02X %02X %02X\r\n",pSerial->m_RecvData[6],pSerial->m_RecvData[7],pSerial->m_RecvData[8]);
for (INT i=0;i<iRecvBytes;i++)
{
if((BYTE)m_RecvData[i]>32)
csTemp.Format(_T("%c "),(BYTE)m_RecvData[i]);
else
csTemp=_T("|");
m_OutMessage+=csTemp;
}
OutputWithScroll(m_OutMessage,m_edMSG);
m_OutMessage.Format(_T("Recv(%dByte)"),iRecvBytes);
m_StatusBar.SetText(m_OutMessage, 2, 0);
}
pSerial->m_iRecvState=FALSE;
}
else
{
m_StatusBar.SetText(_T("Time Out!"), 2, 0);
BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0x0d};
iWriteByte=pSerial->Send((const char*)bSendData,1);
}
iRecvBytes=pSerial->m_iRecvBytes;
if(iRecvBytes<3)
{
iRecvBytes=3;
}
if ((m_RecvData[iRecvBytes-1]==0X0D)&&
(m_RecvData[iRecvBytes-2]==0X0A)&&
(m_RecvData[iRecvBytes-3]==0X0D))
{
IsTheEnd=true;
}
} while (!IsTheEnd);
}
void TestTesaStarEDialog::OnBnClickedButtonTesaStarClearLog()
{
GetDlgItem(IDC_EDIT_TESA_STAR_E_LOG)->SetWindowTextW(_T(""));
}
void TestTesaStarEDialog::OnEnKillfocusEditMoveT_Deg()
{
UpdateData(TRUE);
USES_CONVERSION;
CString csMoveToPos(L"");
GetDlgItem(IDC_EDIT_MOVETO_DEG)->GetWindowText(csMoveToPos);
const char* cMove_to_Pos=T2A(csMoveToPos);
m_MoveToPos[1]=atof(cMove_to_Pos);
}
void TestTesaStarEDialog::OnEnKillfocusEditMovetoDega()
{
UpdateData(TRUE);
USES_CONVERSION;
CString csMoveToPos(L"");
GetDlgItem(IDC_EDIT_MOVETO_DEGA)->GetWindowText(csMoveToPos);
const char* cMove_to_Pos=T2A(csMoveToPos);
m_MoveToPos[0]=atof(cMove_to_Pos);
}
void TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarMoveto()
{
double dMovetoPos[2]={0.0};
dMovetoPos[0]=m_MoveToPos[0];
dMovetoPos[1]=m_MoveToPos[1];
g_pTesaStarE->SetTesaStarEAngle(2,dMovetoPos,true);
m_OutMessage.Format(_T("[Move Finished]A:%.4f;B:%.4f"),dMovetoPos[0],dMovetoPos[1]);
OutputWithScroll(m_OutMessage,m_edMSG);
}
void TestTesaStarEDialog::OnBnClickedButtonidcButtonTesaStarReadPos()
{
int iDataSize(0);
double dData[2]={0.0};
g_pTesaStarE->GetTesaStarEAngle(iDataSize,dData);
m_OutMessage.Format(_T("A:%.4f;B:%.4f"),dData[0],dData[1]);
OutputWithScroll(m_OutMessage,m_edMSG);
}
//=====================================================================================
//Print message on edit control
void TestTesaStarEDialog::OutputWithScroll(const CString &strNewText,CEdit &edtOutput)
{
CString strOutput;
edtOutput.GetWindowText(strOutput);
strOutput += strNewText;
if ("\r\n" != strOutput.Right(2))
{
strOutput += "\r\n";
}
int iCount = strOutput.GetLength();
edtOutput.SetRedraw(FALSE);
edtOutput.SetWindowText(strOutput);
int iLine = edtOutput.GetLineCount();
edtOutput.LineScroll(iLine, 0);
edtOutput.SetSel(iCount, iCount);
edtOutput.SetRedraw(TRUE);
}