// DlgIMP.cpp : 实现文件 // #include "stdafx.h" #include "CH91PayloadSoftware.h" #include "DlgIMP.h" #include "afxdialogex.h" // CDlgIMP 对话框 IMPLEMENT_DYNAMIC(CDlgIMP, CDialogEx) CDlgIMP::CDlgIMP() : CDialogEx(CDlgIMP::IDD) { } CDlgIMP::~CDlgIMP() { } void CDlgIMP::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDlgIMP, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CDlgIMP::OnBnClickedButton1) ON_MESSAGE(WM_UPDATE_IMP_SERIAL_CONNECT, ImpSerialConnectMessage) //IMP通信开始消息 ON_MESSAGE(WM_UPDATE_IMPDOWN_CHECKED, OnUpdateIMPDownDataChecked) //更新IMP下行遥测数据 END_MESSAGE_MAP() BOOL CDlgIMP::OnInitDialog() { CDialogEx::OnInitDialog(); g_IMPDLGhwnd = GetSafeHwnd(); return TRUE; } // DlgIMP 消息处理程序 void CDlgIMP::SetIMPData(CFrameIMPDown_ data) { CString tstr; tstr.Format(_T("%d"),data.Data.Bytes); GetDlgItem(IDC_EDIT2)->SetWindowTextA(tstr); } void CDlgIMP::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 } //IMP串口有数据后,进行校验 void OnReadFromCommIMP( char *buffer,const DWORD size) { //buffer = (unsigned char*)buffer; const BYTE* buffer2 = (BYTE*)buffer; if(size>0) { BYTE DCBufferCmd[6]; memset(DCBufferCmd,0,sizeof(DCBufferCmd)); DCBufferCmd[0] = buffer2[0] ; DCBufferCmd[1] = buffer2[1] ; DCBufferCmd[2] = buffer2[2] ; int a = sizeof(buffer2); /********进入校验,校验通过就给g_FrameIMPDown赋值********/ g_FrameIMPDown.Phrase(buffer2, size); ::SendMessageA(g_IMPDLGhwnd,WM_UPDATE_IMPDOWN_CHECKED,0,0); } } LRESULT CDlgIMP::ImpSerialConnectMessage(WPARAM param, LPARAM lparam) { // 卸载串口 if (TRUE == m_SerialIMP.IsInitialized()) { m_SerialIMP.DeInit(); } else { //串口通信设置 char pSerialPort[20];//串口号 DWORD pSerialPortBaud;//端口号 memset(pSerialPort, 0, 20); /*自定义消息发送CString类型数据时,消息发送时采用如下方式: //::SendMessageA(g_IMPDLGhwnd,WM_UPDATE_IMP_SERIAL_CONNECT,(WPARAM)mComPortIMP.AllocSysString(), (LPARAM)mComBaudIMP.AllocSysString()); //解析时采用如下方式,即:WPARAM转CSTring */ CString sPort = (CString)((BSTR)param); CString sBaud = (CString)((BSTR)lparam); SysFreeString((BSTR)param); SysFreeString((BSTR)lparam); GetSerialPortNumber(pSerialPort,sPort); pSerialPortBaud = atoi(sBaud);//波特率 if (!OnCheckComPort(pSerialPort)) //串口被占用,返回false { return 0; } if(m_SerialIMP.Initialize(pSerialPort, pSerialPortBaud, 8, 0, 0)) //开启串口通信 { m_SerialIMP.SetComReadCallback( OnReadFromCommIMP ); //m_SerialIMP.SetNotCheckCallback(nullptr,NULL); BYTE buffersend[10]; memset(buffersend,1,10); m_SerialIMP.WriteABuffer(buffersend,sizeof(buffersend)); } return 0; } } //处理通过校验的IMP下行数据 LRESULT CDlgIMP::OnUpdateIMPDownDataChecked(WPARAM param, LPARAM lparam) { //数据解析与显示 //if(p_DlgIMP->IsWindowVisible()) //{ // p_DlgIMP->SetIMPData(g_FrameIMPDown); //} if(IMPDlgWindowVisible) { SetIMPData(g_FrameIMPDown); } return 0; }