📄 onboardsimuldlg.cpp
字号:
// OnBoardSimulDlg.cpp : implementation file
//
#include "stdafx.h"
#include "OnBoardSimul.h"
#include "OnBoardSimulDlg.h"
#include "OnBoardSimulSerial.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
extern COnBoardSimulSerial g_OnBoardSimul;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COnBoardSimulDlg dialog
COnBoardSimulDlg::COnBoardSimulDlg(CWnd* pParent /*=NULL*/)
: CDialog(COnBoardSimulDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COnBoardSimulDlg)
// 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);
nItem = 0;
}
void COnBoardSimulDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COnBoardSimulDlg)
DDX_Control(pDX, IDC_EDIT_CALLNUM, m_callnum);
DDX_Control(pDX, IDC_LIST1, m_list1);
DDX_Control(pDX, IDC_COMBO_SPEED, m_serialspeed);
DDX_Control(pDX, IDC_COMBO_PORT, m_serialport);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COnBoardSimulDlg, CDialog)
//{{AFX_MSG_MAP(COnBoardSimulDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_PORT_OPEN, OnPortOpen)
ON_BN_CLICKED(IDC_PORT_CLOSE, OnPortClose)
ON_BN_CLICKED(IDC_CONNECT_REQ, OnConnectReq)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_DISCONNECT_REQ, OnDisconnectReq)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COnBoardSimulDlg message handlers
BOOL COnBoardSimulDlg::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)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 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
// TODO: Add extra initialization here
m_serialport.InsertString(0, "COM1");
m_serialport.InsertString(1, "COM2");
m_serialport.InsertString(2, "COM3");
m_serialport.InsertString(3, "COM4");
m_serialport.SetCurSel(2);
m_serialspeed.InsertString(0, "4800");
m_serialspeed.InsertString(1, "9600");
m_serialspeed.InsertString(2, "19200");
m_serialspeed.SetCurSel(2);
GetDlgItem(IDC_PORT_OPEN)->EnableWindow(TRUE);
GetDlgItem(IDC_PORT_CLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_CONNECT_REQ)->EnableWindow(FALSE);
GetDlgItem(IDC_DISCONNECT_REQ)->EnableWindow(FALSE);
DWORD extStyle;
m_list1.ModifyStyle(0, LVS_REPORT);
extStyle = m_list1.GetExtendedStyle();
extStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
m_list1.SetExtendedStyle(extStyle);
m_list1.InsertColumn(0, "序号", LVCFMT_LEFT, 50);
m_list1.InsertColumn(1, "时间", LVCFMT_LEFT, 100);
m_list1.InsertColumn(2, "方向", LVCFMT_LEFT, 100);
m_list1.InsertColumn(3, "业务原语", LVCFMT_LEFT, 80);
m_list1.InsertColumn(4, "数据内容", LVCFMT_LEFT, 220);
m_callnum.SetWindowText("92900002");
return TRUE; // return TRUE unless you set the focus to a control
}
void COnBoardSimulDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void COnBoardSimulDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR COnBoardSimulDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void COnBoardSimulDlg::OnPortOpen()
{
// TODO: Add your control notification handler code here
CString SerialPort;
CString SerialSpeed;
SerialPort.Empty();
SerialSpeed.Empty();
m_serialport.GetWindowText(SerialPort);
m_serialspeed.GetWindowText(SerialSpeed);
int serialportnum=0;
if(SerialPort=="COM1")
{
serialportnum=1;
}
else if(SerialPort=="COM2")
{
serialportnum=2;
}
else if(SerialPort=="COM3")
{
serialportnum=3;
}
else if(SerialPort=="COM4")
{
serialportnum=4;
}
int nSerialSpeed = atoi(SerialSpeed);
if((g_OnBoardSimul.Start(serialportnum, nSerialSpeed)) != 1)
{
::AfxMessageBox("打开串口失败!");
g_OnBoardSimul.End();
}
else
{
GetDlgItem(IDC_PORT_OPEN)->EnableWindow(FALSE);
GetDlgItem(IDC_PORT_CLOSE)->EnableWindow(TRUE);
GetDlgItem(IDC_COMBO_PORT)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_SPEED)->EnableWindow(FALSE);
GetDlgItem(IDC_CONNECT_REQ)->EnableWindow(TRUE);
GetDlgItem(IDC_DISCONNECT_REQ)->EnableWindow(TRUE);
}
}
void COnBoardSimulDlg::OnPortClose()
{
// TODO: Add your control notification handler code here
g_OnBoardSimul.End();
GetDlgItem(IDC_PORT_CLOSE)->EnableWindow(false);
GetDlgItem(IDC_PORT_OPEN)->EnableWindow(true);
GetDlgItem(IDC_COMBO_PORT)->EnableWindow(true);
GetDlgItem(IDC_COMBO_SPEED)->EnableWindow(true);
GetDlgItem(IDC_CONNECT_REQ)->EnableWindow(false);
GetDlgItem(IDC_DISCONNECT_REQ)->EnableWindow(false);
}
void COnBoardSimulDlg::OnConnectReq()
{
// TODO: Add your control notification handler code here
unsigned char ConnectReqFrm[50];
memset(ConnectReqFrm, 0, 50);
int nConnectFrmLen = FormConnectFrm(ConnectReqFrm);
g_OnBoardSimul.SendData((char *)ConnectReqFrm, nConnectFrmLen);
Display(ConnectReqFrm, nConnectFrmLen, 0x11);
}
int COnBoardSimulDlg::FormConnectFrm(unsigned char *pTempFrm)
{
unsigned char *pMove;
pTempFrm[0] = FLAG1;
pTempFrm[1] = FLAG2;
pTempFrm[2] = FLAG3;
pMove = pTempFrm + 3;
*pMove = 0x1E;
pMove++;
*pMove = 0x11; //原语标识
pMove++;
// *pMove = 0x14;
// pMove++;
CString strTemp;
strTemp.Empty();
m_callnum.GetWindowText(strTemp);
int nTemplen = strTemp.GetLength();
memcpy(pMove, &nTemplen, 1);
pMove++;
char cTempNum[20];
memset(cTempNum,0,20);
strcpy(cTempNum, strTemp);
memcpy(pMove, cTempNum, 20);
pMove+=20;
//被叫方标识
*pMove = 0x04;
pMove++;
*pMove = 0x05;
pMove++;
*pMove = 0x06;
pMove++;
//主叫方标识
*pMove = 0x01;
pMove++;
*pMove = 0x02;
pMove++;
*pMove = 0x03;
pMove++;
//应用类型
*pMove = 0x01;
pMove++;
//服务等级
*pMove = 0x01;
pMove++;
//临时CRC
*pMove = 0;
pMove++;
*pMove = 0;
pMove++;
return( pMove- pTempFrm);
}
void COnBoardSimulDlg::OnDisconnectReq()
{
// TODO: Add your control notification handler code here
unsigned char DisconReqFrm[50];
memset(DisconReqFrm, 0, 50);
int nDisconReqLen = FormDisconnetFrm(DisconReqFrm);
g_OnBoardSimul.SendData((char *)DisconReqFrm, nDisconReqLen);
Display(DisconReqFrm, nDisconReqLen, 0x31);
}
int COnBoardSimulDlg::FormDisconnetFrm(unsigned char *pTempFrm)
{
unsigned char *pMove;
pTempFrm[0] = FLAG1;
pTempFrm[1] = FLAG2;
pTempFrm[2] = FLAG3;
pMove = pTempFrm + 3;
*pMove = 0x02;
pMove++;
*pMove = 0x31;
pMove++;
// *pMove = 0x01;//TCEPID??
// pMove++;
*pMove = 0x00; //正常拆连
pMove++;
//临时CRC
*pMove = 0;
pMove++;
*pMove = 0;
pMove++;
return (pMove - pTempFrm);
}
void COnBoardSimulDlg::Display(unsigned char *pCmdContent, int nLen, BYTE type)
{
CString strTemp;
CString strCmdName;
CString strDirec;
CString strContent; //数据内容
strTemp.Empty();
strCmdName.Empty();
strDirec.Empty();
strContent.Empty();
strTemp.Format("%d", nItem);
m_list1.InsertItem(nItem, strTemp, -1);
strTemp.Format("%d", nItem+1);
m_list1.SetItemText(nItem, 0, strTemp);
CTime t = CTime::GetCurrentTime();
strTemp.Format("%02d-%02d %02d:%02d:%02d", t.GetMonth(), t.GetDay(),
t.GetHour(), t.GetMinute(), t.GetSecond());
m_list1.SetItemText(nItem, 1, strTemp);
//到RTM仿真机:--->
//RTM仿真机到:<---
switch(type)
{
case 0x11:
strCmdName = "连接请求";
strDirec = "车载设备->RTM仿真机";
break;
case 0x12:
strCmdName = "连接证实";
strDirec = "RTM仿真机<-车载设备";
break;
case 0x13:
strCmdName = "连接指示"; //由RBC发起
strDirec = "接入服务器->车载设备";
OnAutoSendRespFrm();
break;
case 0x14:
strCmdName = "连接响应"; //给RBC发回
strDirec = "车载设备->接入服务器";
break;
case 0x31:
strCmdName = "正常拆连请求";
strDirec = "车载设备->RTM仿真机";
break;
case 0xaa:
strCmdName = "GSMR响应帧";
strDirec = "GSMR->车载设备";
break;
default:
break;
}
m_list1.SetItemText(nItem, 2, strDirec);
m_list1.SetItemText(nItem, 3, strCmdName);
char szTemp[2];
memset(szTemp, 0, 2);
for (int i=0; i<nLen; i++)
{
sprintf(szTemp, "%02X ", (BYTE)(*pCmdContent++));
strContent += szTemp;
}
m_list1.SetItemText(nItem, 4, strContent);
m_list1.EnsureVisible(nItem, TRUE);
if (nItem > 300)
{
m_list1.DeleteAllItems();
nItem = 0;
}
else
{
nItem++;
}
}
void COnBoardSimulDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
}
void COnBoardSimulDlg::OnAutoSendRespFrm()
{
unsigned char AutoSendRespFrm[50];
memset(AutoSendRespFrm, 0, 50);
int nRespFrmLen = FormRespFrm(AutoSendRespFrm);
g_OnBoardSimul.SendData((char *)AutoSendRespFrm, nRespFrmLen);
}
int COnBoardSimulDlg::FormRespFrm(unsigned char *pTempFrm)
{
unsigned char *pMove;
pTempFrm[0] = FLAG1;
pTempFrm[1] = FLAG2;
pTempFrm[2] = FLAG3;
pMove = pTempFrm + 3;
*pMove = 0x05;
pMove++;
*pMove = 0x14;
pMove++;
*pMove = 0x01; //TECPID ??
pMove++;
//相应方标识
*pMove = 0x01;
pMove++;
*pMove = 0x02;
pMove++;
*pMove = 0x03;
pMove++;
return (pMove - pTempFrm);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -