158 lines
4.3 KiB
C++
158 lines
4.3 KiB
C++
//logging\CDialogLoggingSelectComPortWnd.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "GeoMative.h"
|
|
#include "logging\CDialogLoggingSelectComPortWnd.h"
|
|
#include "afxdialogex.h"
|
|
|
|
extern int g_iUILanguage;
|
|
extern CDevLinkRecord* aDevLinkTable[256];
|
|
extern BOOL g_bScanFun;
|
|
extern CRITICAL_SECTION g_ScanTabSection;
|
|
extern BYTE BBCCalculate(const char *pData, int iSize, BYTE ucOrgRes);
|
|
// CDialogLoggingSelectComPortWnd 对话框
|
|
|
|
IMPLEMENT_DYNAMIC(CDialogLoggingSelectComPortWnd, CDialog)
|
|
|
|
CDialogLoggingSelectComPortWnd::CDialogLoggingSelectComPortWnd(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDialogLoggingSelectComPortWnd::IDD, pParent)
|
|
{
|
|
m_iSeriNo = 1;
|
|
}
|
|
|
|
CDialogLoggingSelectComPortWnd::~CDialogLoggingSelectComPortWnd()
|
|
{
|
|
}
|
|
|
|
void CDialogLoggingSelectComPortWnd::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_COMBO_AVAILABLE_SERIAL_PORT, m_comComNameList);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDialogLoggingSelectComPortWnd, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CDialogLoggingSelectComPortWnd::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDCANCEL, &CDialogLoggingSelectComPortWnd::OnBnClickedCancel)
|
|
END_MESSAGE_MAP()
|
|
|
|
// CDialogLoggingSelectComPortWnd 消息处理程序
|
|
BOOL CDialogLoggingSelectComPortWnd::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
if (LANG_ZHCN == g_iUILanguage)
|
|
{
|
|
SetWindowTextA(_T("选中通讯端口"));
|
|
GetDlgItem(IDC_STATIC_AVAILABLE_SERIAL_PORT)->SetWindowTextA(_T("可用串口"));
|
|
GetDlgItem(IDOK)->SetWindowTextA(_T("确定"));
|
|
GetDlgItem(IDCANCEL)->SetWindowTextA(_T("取消"));
|
|
}
|
|
|
|
CStringArray strComNameArray;
|
|
CSComPort::FindComName(&strComNameArray);
|
|
|
|
char szSend[2048] = { 0 };
|
|
char szRecv[2048] = { 0 };
|
|
BYTE ucBuf[4096] = { 0 };
|
|
STCtrlProtoHeader* pSend = NULL;
|
|
STCtrlProtoHeader* pRecv = NULL;
|
|
WORD wTotalLen = 0;
|
|
BOOL bRes = FALSE;
|
|
int iPollingTime = 0;
|
|
int iReceive = 0;
|
|
for (int i = 0; i < strComNameArray.GetSize(); i++)
|
|
{
|
|
//通过Login指令过滤掉,不可以的串口
|
|
EnterCriticalSection(&g_ScanTabSection);
|
|
m_SComPort.SetScanBreakSign(FALSE);
|
|
if (TRUE == m_SComPort.OpenComm(strComNameArray.GetAt(i)))
|
|
{
|
|
m_SComPort.ClearCommReceiveBuff();
|
|
m_SComPort.ClearCommSendBuff();
|
|
|
|
/*CString szOrder = _T("");
|
|
szOrder.Empty();
|
|
szOrder.Format(_T("\r\n"));
|
|
m_SComPort.SendDataDirectly(szOrder.GetBuffer(szOrder.GetLength()), szOrder.GetLength());
|
|
Sleep(500);
|
|
|
|
szOrder.ReleaseBuffer();
|
|
szOrder.Empty();*/
|
|
|
|
memset(szSend, 0, 2048);
|
|
memset(szRecv, 0, 2048);
|
|
memset(ucBuf, 0, 4096);
|
|
|
|
pSend = (STCtrlProtoHeader*)ucBuf;
|
|
pSend->wIDCode = htonl(CTRL_GD10_CODE);
|
|
pSend->ucSrcAddr = GEOMATIVE_ADDRESS;
|
|
pSend->ucSrcType = 2;
|
|
pSend->ucDstAddr = UNDER_MACHINE_ADDRESS;
|
|
pSend->ucDstType = 5;
|
|
pSend->ucCMD = EN_LOGGING_CHECK_PORT_LOGIN;
|
|
pSend->ucDataType = 1;
|
|
pSend->dwSeriNO = m_iSeriNo++;
|
|
pSend->Status_code = 0;
|
|
pSend->ucPacketNum = 1;
|
|
memset(pSend->ucReverse, 0, sizeof(pSend->ucReverse));
|
|
wTotalLen = sizeof(STCtrlProtoHeader) + 1;
|
|
pSend->wTotalLen = wTotalLen;
|
|
*((BYTE*)(ucBuf + wTotalLen - 1)) = BBCCalculate((const char*)(ucBuf), wTotalLen - 1, 0);
|
|
|
|
memcpy(szSend, ucBuf, wTotalLen);
|
|
|
|
bRes = m_SComPort.SendDataDirectly(szSend, wTotalLen);
|
|
iPollingTime = 0;
|
|
//发送数据后,接受数据
|
|
Sleep(200);
|
|
while (bRes && (iPollingTime < RECV_DATA_FAILED_ATTEMPTS_TIMES))
|
|
{
|
|
Sleep(3);
|
|
if (m_SComPort.ReceiveDataDirectly(szRecv, &iReceive) == TRUE)
|
|
{
|
|
pRecv = (STCtrlProtoHeader*)szRecv;
|
|
if (pRecv != NULL)
|
|
{
|
|
if (pRecv->ucCMD == EN_LOGGING_CHECK_PORT_LOGIN && pRecv->ucDataType == 2)
|
|
{
|
|
m_comComNameList.AddString(strComNameArray.GetAt(i));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
iPollingTime++;
|
|
}
|
|
|
|
m_SComPort.ClearCommSendBuff();
|
|
m_SComPort.ClearCommReceiveBuff();
|
|
}
|
|
m_SComPort.CloseComm();
|
|
|
|
LeaveCriticalSection(&g_ScanTabSection);
|
|
|
|
}
|
|
m_comComNameList.SetCurSel(0);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// 异常: OCX 属性页应返回 FALSE
|
|
}
|
|
|
|
void CDialogLoggingSelectComPortWnd::OnBnClickedOk()
|
|
{
|
|
int iIndex = m_comComNameList.GetCurSel();
|
|
m_comComNameList.GetLBText(iIndex, m_strComName);
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CDialogLoggingSelectComPortWnd::OnBnClickedCancel()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
CString CDialogLoggingSelectComPortWnd::GetSelectComm()
|
|
{
|
|
return m_strComName;
|
|
} |