📄 modemstatusdlg.cpp
字号:
// ModemStatusDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TestSerialPort2.h"
#include "ModemStatusDlg.h"
#include "ATCommands.h"
#include "superSP.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CModemStatusDlg dialog
CModemStatusDlg::CModemStatusDlg(CWnd* pParent /*=NULL*/)
: CDialog(CModemStatusDlg::IDD, pParent),
pSSP(NULL)
{
//{{AFX_DATA_INIT(CModemStatusDlg)
m_stcCmdInfo = _T("");
m_edtPhoneNum = _T("");
m_edtMinRate = 0;
m_edtMaxRate = 0;
m_strCmd = _T("");
m_autoMode = FALSE;
//}}AFX_DATA_INIT
}
void CModemStatusDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CModemStatusDlg)
DDX_Control(pDX, IDC_COMBO_PROTOCOL, m_protocols);
DDX_Control(pDX, IDC_LIST_ATCMD, m_lstAtCmd);
DDX_Text(pDX, IDC_STATIC_CMD_INFO, m_stcCmdInfo);
DDX_Text(pDX, IDC_EDIT_PHONE_NUMBER, m_edtPhoneNum);
DDX_Text(pDX, IDC_EDIT_MODE_MINRATE, m_edtMinRate);
DDX_Text(pDX, IDC_EDIT_MODE_MAXRATE, m_edtMaxRate);
DDX_Text(pDX, IDC_EDIT_MEMO, m_strCmd);
DDX_Check(pDX, IDC_CHECK_AUTO, m_autoMode);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CModemStatusDlg, CDialog)
//{{AFX_MSG_MAP(CModemStatusDlg)
ON_NOTIFY(NM_CLICK, IDC_LIST_ATCMD, OnClickListAtcmd)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_SENDCMD, OnButtonSendcmd)
ON_BN_CLICKED(IDC_BUTTON_SET_SENDRATE, OnButtonSetSendrate)
ON_BN_CLICKED(IDC_BUTTON_CHECK_STATUS, OnButtonCheckStatus)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_UM_RECEIVE_MODEM_RETURN, OnReceiveModemReturn)
//ON_NOTIFY(NM_RETURN, IDC_EDIT_MEMO, OnSendATCmd)
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////
// USER MESSAGE
void CModemStatusDlg::OnReceiveModemReturn(WPARAM wParam, LPARAM lParam)
{
}
//void CModemStatusDlg::OnSendATCmd(WPARAM wParam, LPARAM lParam)
//{
// AfxMessageBox(_T("Catch the return"));
//}
/////////////////////////////////////////////////////////////////////////////
// CModemStatusDlg message handlers
//
void CModemStatusDlg::InitCommandList()
{
int nItem;
m_lstAtCmd.DeleteAllItems();
for (int i=0; i<pAtCmdObj->Vcommands.size(); i++)
{
nItem = m_lstAtCmd.InsertItem(i,
_T(pAtCmdObj->Vcommands[i]->strCommandName.c_str()));
m_lstAtCmd.SetItemData(nItem, pAtCmdObj->Vcommands[i]->iCommandCode);
}
}
//
void CModemStatusDlg::LocateCommand(UINT nItem)
{
if (LB_ERR != nItem)
{
DWORD dwCmdCode = m_lstAtCmd.GetItemData(nItem);
for (int i=0; i<pAtCmdObj->Vcommands.size(); i++)
{
if (pAtCmdObj->Vcommands[i]->iCommandCode == dwCmdCode)
{
m_stcCmdInfo = pAtCmdObj->Vcommands[i]->strExplain.c_str();
UpdateData(FALSE);
break;
}
}
}
else
{
m_stcCmdInfo = _T("没有命令被选中!");
UpdateData(FALSE);
}
}
//
void CModemStatusDlg::SendCommand(CString atCmd)
{
atCmd.Insert(atCmd.GetLength(), 0x0d);
PACKAGE pack;
pack.iLen = atCmd.GetLength();
strcpy((char *)pack.pData,
atCmd.GetBuffer(atCmd.GetLength()));
// 发送包
if (pSSP->SendData(&pack))
{
pack.Clear();
atCmd.Empty();
}
}
BOOL CModemStatusDlg::OnInitDialog()
{
CDialog::OnInitDialog();
pAtCmdObj = new CATCommand();
// 没有为串口指针赋值
if (pSSP == NULL)
{
AfxMessageBox(_T("串口对象没赋值"));
return FALSE;
}
if (m_atCmdFile.IsEmpty() ||
!pAtCmdObj->LoadFile(m_atCmdFile.GetBuffer(m_atCmdFile.GetLength())))
{
AfxMessageBox(_T("装载AT命令文件失败,需要一个\\AT\\ATCommands.txt文件"));
delete pAtCmdObj;
}
else
{
InitCommandList();
}
// 附加到串口输出窗口列表
m_attachId = pSSP->Attach(this, WM_UM_RECEIVE_MODEM_RETURN);
// 初始化协议集合
int index;
index = m_protocols.InsertString(0, "V.21模式");
m_protocols.SetItemData(index, 0);
index = m_protocols.InsertString(1, "V.22模式");
m_protocols.SetItemData(index, 1);
index = m_protocols.InsertString(2, "V.22bis模式");
m_protocols.SetItemData(index, 2);
index = m_protocols.InsertString(3, "V.23模式");
m_protocols.SetItemData(index, 3);
index = m_protocols.InsertString(3, "V.32模式");
m_protocols.SetItemData(index, 9);
index = m_protocols.InsertString(4, "V.2bis模式");
m_protocols.SetItemData(index, 10);
index = m_protocols.InsertString(5, "V.34模式");
m_protocols.SetItemData(index, 11);
index = m_protocols.InsertString(6, "V.90模式");
m_protocols.SetItemData(index, 12);
index = m_protocols.InsertString(7, "Bell 103模式");
m_protocols.SetItemData(index, 64);
index = m_protocols.InsertString(8, "Bell 212模式");
m_protocols.SetItemData(index, 68);
m_protocols.SetCurSel(5);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CModemStatusDlg::OnClose()
{
if (0 == m_attachId)
{
pSSP->Detach(m_attachId);
}
CDialog::OnClose();
}
void CModemStatusDlg::OnOK()
{
}
void CModemStatusDlg::OnClickListAtcmd(NMHDR* pNMHDR, LRESULT* pResult)
{
// 选择改变时,命令信息也同时改变
int nItem;
POSITION pos;
pos = m_lstAtCmd.GetFirstSelectedItemPosition();
nItem = m_lstAtCmd.GetNextSelectedItem(pos);
LocateCommand(nItem);
*pResult = 0;
}
void CModemStatusDlg::OnButtonSendcmd()
{
UpdateData();
SendCommand(m_strCmd);
UpdateData(FALSE);
}
void CModemStatusDlg::OnButtonSetSendrate()
{
UpdateData();
CString atCmd;
atCmd.Format(_T("AT+MS=%d,%d,%d,%d"),
m_protocols.GetItemData(m_protocols.GetCurSel()),
m_autoMode,
m_edtMinRate,
m_edtMaxRate);
SendCommand(atCmd);
}
void CModemStatusDlg::OnButtonCheckStatus()
{
CString atCmd = _T("AT&V1");
SendCommand(atCmd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -