📄 demodlg.cpp
字号:
// demoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "demo.h"
#include "demoDlg.h"
#include "Ip.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*typedef struct t_TREADDATA
{
HWND hWnd;
HANDLE CommDev;
}THREADDATA;
UINT MyThreadProc(LPVOID pParam);
int NEAR ReadCommBlock(HANDLE,LPSTR,int);*/
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
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)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BYTE tempdata[32]=
{
0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x61,
0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69
};
//IP_HEADER IP_header;
/////////////////////////////////////////////////////////////////////////////
// CDemoDlg dialog
CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDemoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDemoDlg)
m_baud = _T("19200");
m_called = _T("9163");
m_com = _T("COM1");
m_password = _T("163");
m_userid = _T("163");
// m_ipad[0] = _T("211");
// m_ipad[1] = _T("100");
// m_ipad[2] = _T("31");
// m_ipad[3] = _T("131");
//m_ipOut[0] = _T("211"); //www.263.net
//m_ipOut[1] = _T("100");
//m_ipOut[2] = _T("31");
//m_ipOut[3] = _T("131");
m_ipOut0 = _T("216"); //www.google.com
m_ipOut1 = _T("239");
m_ipOut2 = _T("33");
m_ipOut3 = _T("100");
m_senddata = _T("AT");
m_srcport = _T("0");
m_desport = _T("0");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDemoDlg)
DDX_Control(pDX, IDC_EVENT, m_event);
DDX_CBString(pDX, IDC_BAUD, m_baud);
DDX_Text(pDX, IDC_CALLED, m_called);
DDX_CBString(pDX, IDC_COM, m_com);
DDX_Text(pDX, IDC_PASSWORD, m_password);
DDX_Text(pDX, IDC_USERID, m_userid);
DDX_Text(pDX, IDC_IPAD0, m_ipad0);
DDX_Text(pDX, IDC_IPAD1, m_ipad1);
DDX_Text(pDX, IDC_IPAD2, m_ipad2);
DDX_Text(pDX, IDC_IPAD3, m_ipad3);
DDX_Text(pDX, IDC_IPAD4, m_ipOut0);
DDX_Text(pDX, IDC_IPAD5, m_ipOut1);
DDX_Text(pDX, IDC_IPAD6, m_ipOut2);
DDX_Text(pDX, IDC_IPAD7, m_ipOut3);
DDX_Text(pDX, IDC_RICHTEXTCTRL1, m_senddata);
DDX_Text(pDX, IDC_SRCPORT, m_srcport);
DDX_Text(pDX, IDC_DESPORT, m_desport);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
//{{AFX_MSG_MAP(CDemoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_INICOM, OnInicom)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_DIAL, OnDial)
ON_MESSAGE(CN_SEND, OnSend)
ON_BN_CLICKED(IDC_PING, OnPing)
ON_BN_CLICKED(IDC_SendA, OnSendA)
ON_BN_CLICKED(IDC_CloseA, OnCloseA)
ON_BN_CLICKED(IDC_UDP, OnUdp)
ON_BN_CLICKED(IDC_TCP, OnTcp)
ON_BN_CLICKED(IDC_STATE, OnState)
ON_LBN_SELCHANGE(IDC_EVENT, OnSelchangeEvent)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CDemoDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CDemoDlg)
ON_EVENT(CDemoDlg, IDC_SendBox, -603 /* KeyPress */, OnKeyPressSendBox, VTS_PI2)
ON_EVENT(CDemoDlg, IDC_SendBox, 1 /* Change */, OnChangeSendBox, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoDlg message handlers
BOOL CDemoDlg::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
m_ipOut=&m_ipOut0;
m_ipad=&m_ipad0;
framehead=FALSE;
frameend=FALSE;
memset(szPacketTx,0x00,256);
memset(szPacketRx,0x00,256);
// SetTimer(ID_CLOCK3,50,NULL);
//OnInicom();
GetDlgItem(IDC_DIAL)->SetFocus();
/* BYTE teststr[256]={0x7E,0x80,0x21,0x01,0x06,0x00,0x10,0x02,0x06,0x00,0x2d,0x0f,0x00,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
BYTE teststring1[256]={0x7E,0x80,0x21,0x01,0x07,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
BYTE teststring2[256]={0x7E,0x80,0x21,0x02,0x07,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
BYTE teststring3[256]={0x7E,0x80,0x21,0x01,0x08,0x00,0x0a,0x03,0x06,0x3d,0x8b,0x06,0x08,0xdd,0x58,0x7e};
recv=TRUE;
Display(recv,teststr);
// BYTE teststr[256]={0x7E,0xFF,0x03,0xc0,0x21,0x01,0x02,0x00,0x1f,0x01,0x04,0x05,0xea,0x02,0x06,0xff,0xff,0xff,0xff,0x05,0x06,0x74,0x8d,0xd1,0x3b,0x07,0x02,0x08,0x02,0x11,0x04,0x05,0xea,0x13,0x03,0x00,0x9f,0x3e,0x7e};//
// Display(recv,teststr);
m_packet.compress=2;
m_packet.checkpacket(teststr);
recv=FALSE;
Display(recv,m_packet.bPacketTx);
recv=TRUE;
Display(recv,teststring1);
m_packet.checkpacket(teststring1);
recv=FALSE;
Display(recv,m_packet.bPacketTx);
recv=TRUE;
Display(recv,teststring2);
m_packet.checkpacket(teststring2);
recv=FALSE;
Display(recv,m_packet.bPacketTx);
recv=TRUE;
Display(recv,teststring3);
m_packet.checkpacket(teststring3);
recv=FALSE;
Display(recv,m_packet.bPacketTx);
/* BYTE teststr1[64]={0x0a,0x11,0x7E,0xFF,0x7d,0x23,0xc0,0x21};
BYTE teststr2[64]={0x7d,0x22,0x7d,0x21,0x7d,0x20,0x7d,0x3f,0x7d,0x21,0x7d,0x24,0x7d,0x25,0x7d,0x5e,0x7d,0x22,0x7d,0x26,0xff,0xff,0xff,0xff,0x7e,0x22,0xff};
BYTE teststr3[64]={0x20,0x7E,0xFF,0x7d,0x23,0xc0,0x21,0x00,0xff};
BYTE teststr4[64]={0x97,0x23,0x7E,0x00,0xff};
testcat(teststr1);
testcat(teststr2);
testcat(teststr3);
testcat(teststr4);
// sprintf(teststr,"\x7E\xFF\x03\xC0\x21\x01\x01\x00\x0c\x02\x06\x00\x0a\x00\x00\x03\x04\xc0\x23");
/* THREADDATA m_threaddata;
m_threaddata.CommDev=hCommDev;
m_threaddata.CommDev=GetSafeHwnd();
AfxBeginThread(MyThreadProc,&m_threaddata,THREAD_PRIORITY_NORMAL);
*/
return TRUE; // return TRUE unless you set the focus to a control
}
/*UINT MyThreadProc(LPVOID param)
{
DWORD dwEvtMask;
int nLength;
BYTE abIn[1024];
THREADDATA *pData=(THREADDATA*)param;
while (1)
{ dwEvtMask=0 ;
WaitCommEvent(pData->CommDev,&dwEvtMask,NULL);
if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR)
{
do
{
if(nLength=ReadCommBlock(pData->CommDev,(LPSTR)abIn,1024))
{
//WriteCommBlock((LPSTR)abIn,nLength );
*(abIn+nLength)=0;
::SendMessage(pData->hWnd,CN_SEND,nLength,(LONG)(LPSTR)abIn);
} //end if
} while (nLength>0); //end do
} //end if
} //end while
}
*/
void CDemoDlg::OnSend(LPARAM lParam)
{
int len;
// BYTE InBuf[1024];
len=(int)lParam;
//InBuf=(BYTE)wParam;
// tempstr.Format("receiced %d",len);
// m_event.AddString(tempstr);
}
void CDemoDlg::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 CDemoDlg::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 CDemoDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/*typedef struct _DCB {
DWORD DCBlength; /* sizeof(DCB)
DWORD BaudRate; /* Baudrate at which running
DWORD fBinary: 1; /* Binary Mode (skip EOF check)
DWORD fParity: 1; /* Enable parity checking
DWORD fOutxCtsFlow:1; /* CTS handshaking on output
DWORD fOutxDsrFlow:1; /* DSR handshaking on output
DWORD fDtrControl:2; /* DTR Flow control
DWORD fDsrSensitivity:1; /* DSR Sensitivity /
DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent
DWORD fOutX: 1; /* Enable output X-ON/X-OFF /
DWORD fInX: 1; /* Enable input X-ON/X-OFF /
DWORD fErrorChar: 1; /* Enable Err Replacement /
DWORD fNull: 1; /* Enable Null stripping /
DWORD fRtsControl:2; /* Rts Flow control /
DWORD fAbortOnError:1; /* Abort all reads and writes on Error /
DWORD fDummy2:17; /* Reserved /
WORD wReserved; /* Not currently used /
WORD XonLim; /* Transmit X-ON threshold /
WORD XoffLim; /* Transmit X-OFF threshold /
BYTE ByteSize; /* Number of bits/byte, 4-8 /
BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space /
BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 /
char XonChar; /* Tx and Rx X-ON character /
char XoffChar; /* Tx and Rx X-OFF character /
char ErrorChar; /* Error replacement char /
char EofChar; /* End of Input character /
char EvtChar; /* Received Event character /
WORD wReserved1; /* Fill for now. /
} DCB, *LPDCB;
*/
void CDemoDlg::OnInicom()
{
// TODO: Add your control notification handler code here
memset(szPacketRx,0x0,256);
memset(szPacketTx,0x0,256);
ATState=0;
MyReadFile_Flag=false;
MyReadFile_Flag1=false;
m_event.ResetContent();
UpdateData(TRUE);
DCB dcb;
hCommDev=CreateFile(m_com,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//打开串口
// hCommDev=CreateFile(m_com,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);//打开串口
if (hCommDev==(HANDLE)-1)
{
tempstr.Format(":initiate modem error");
m_event.AddString(m_com+tempstr);
writelog(m_com+tempstr);
}
else
{
tempstr.Format(":initiate modem successfully");
m_event.AddString(m_com+tempstr);
writelog(m_com+tempstr);
}
/*
//<wcy
oCommDev.hEvent = CreateEvent(
NULL, // no security attributes
FALSE, // auto reset event
FALSE, // not signaled
NULL // no name
);
if (SetCommMask(hCom, EV_RXFLAG))
{
tempstr.Format(":Set Mask successfully!");
m_event.AddString(m_com+tempstr);
m_event.AddString(m_com+tempstr);
}
else
{
tempstr.Format(":Set Mask Error!");
m_event.AddString(m_com+tempstr);
m_event.AddString(m_com+tempstr);
}
//wcy>
*/
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=0;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=0;
BuildCommDCB(m_com+":"+m_baud+",n,8,1",&dcb);//配置串口 8位数据位,1位停止位,物理层
dcb.fRtsControl=RTS_CONTROL_DISABLE;
dcb.fDtrControl=DTR_CONTROL_ENABLE; // DTR flow control type 2
//*
//dcb.fDsrSensitivity=1; // DSR sensitivity
//dcb.fTXContinueOnXoff=0; // XOFF continues Tx
//dcb.fOutX=0; // XON/XOFF out flow control
//dcb.fInX=0; // XON/XOFF in flow control
//dcb.fNull=0; // enable null stripping
//dcb.ErrorChar=ErrorChar;
// */
SetCommState(hCommDev,&dcb);
SetCommTimeouts(hCommDev,&CommTimeOuts);
PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
PurgeComm(hCommDev,PURGE_RXCLEAR);//清接收缓冲区
char strOutMsg[20];
DWORD dwBytesWritten;
sprintf(strOutMsg,"AT\r");
WriteFile(hCommDev,strOutMsg,strlen(strOutMsg),&dwBytesWritten,NULL);//初始化MODEM
tempstr.Format("发:%s",strOutMsg);
m_event.AddString(tempstr);
writelog(m_com+tempstr);
ini=TRUE;
PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
PurgeComm(hCommDev,PURGE_RXCLEAR);//清接收缓冲区
/*if (!SetCommMask(hCommDev,EV_RXCHAR))
{
tempstr.Format(":SetCommMask error!");
m_event.AddString(m_com+tempstr);
writelog(m_com+tempstr);
}*/
memset(temp,0x00,256);
SetTimer(ID_CLOCK1,50,NULL);
GetDlgItem(IDC_INICOM)->EnableWindow(false);
GetDlgItem(IDC_SendA)->EnableWindow(false);
GetDlgItem(IDC_CloseA)->EnableWindow(true);
}
bool CDemoDlg::OnTimer(UINT nIDEvent)
{
BYTE* strCommRecvMsg=new BYTE[256];
DWORD dwBytesWritten;
memset(strCommRecvMsg,0x00,256);
bool bReturn;
DWORD dwBytesRead;
int k,l,start=0;
int mm;
if(nIDEvent==5)//send icmp ping packet
{
KillTimer(ID_CLOCK5);
PurgeComm(hCommDev,PURGE_TXCLEAR);//清发送缓冲区
m_packet.makepacket(IPCP,REQ,temp);
DWORD dwBytesWritten;
m_packet.IPCP_s=0;
if (WriteFile(hCommDev,m_packet.bPacketTx,m_packet.TxLen,&dwBytesWritten,NULL)<1)
{
m_event.AddString("send error.");
writelog("send error");
return false;
}
recv=FALSE;
Display(recv,m_packet.bPacketTx1);
memset(szPacketRx,0x00,256);
SetTimer(ID_CLOCK1,50,NULL);
return true;
}
else if(nIDEvent==4)
{
KillTimer(ID_CLOCK4);
SetDlgItemText(IDC_RICHTEXTCTRL1,"");
GetDlgItem(IDC_RICHTEXTCTRL1)->EnableWindow(true);
GetDlgItem(IDC_RICHTEXTCTRL1)->SetFocus();
return true;
}
else if(nIDEvent==3)//send icmp ping packet
{
KillTimer(ID_CLOCK3);
return true;
memset(temp,0x00,256);
PurgeComm(hCommDev,PURGE_TXCLEAR);
temp[0]=atoi(m_ipOut[0]);//destination address
temp[1]=atoi(m_ipOut[1]);
temp[2]=atoi(m_ipOut[2]);
temp[3]=atoi(m_ipOut[3]);
temp[4]=strlen(m_senddata)>>8;
//temp[4]=32;
temp[5]=strlen(m_senddata)&0x00ff;
mm=strlen(m_senddata)+6;
l=0;
for (k=6;k<mm;k++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -