You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

686 lines
19 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// MulticastSocketReceiveDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "CH91PayloadSoftware.h"
#include "CH91PayloadSoftwareDlg.h"
#include "afxdialogex.h"
#include "Global.h"
#include "GlobalMessage.h"
#include "GlobalMember.h"
#include "GetElevation.h"
#include "MulticastSocketReceiveDlg.h"
#include <opencv2\opencv.hpp>
#include <WinSock2.h>
// CMulticastSocketReceiveDlg 对话框
//卫通UDP通信端口接收图像数据回调函数
void CALLBACK OnReadFromUDPSACKU( const void* rxdata, int lLen, LPVOID Param )
{
if ( lLen > 0)
{
// 处理数据
SocketReceiveFH96Data(rxdata, lLen);
CTime t = GetCurrentTime();
TRACE(_T("%d,%d,%d\n"), lLen,t.GetMinute(), t.GetSecond());
//SocketReceiveH264VideoData(rxdata, lLen);
}
}
IMPLEMENT_DYNAMIC(CMulticastSocketReceiveDlg, CDialogEx)
CMulticastSocketReceiveDlg::CMulticastSocketReceiveDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMulticastSocketReceiveDlg::IDD, pParent)
, m_iVideoSrc(0)
, mComPortIMP(_T(""))
, mComBaudIMP(_T(""))
{
//, mStrCDPayLoadIPAddr(_T("0.0.0.0"))
// WinSoc
m_hThread_GetFH96DataFromNet = NULL;
m_ThreadID_GetFH96DataFromNet = 0;
// 组播IP
str_LocalIP_ReceiveMUDP = _T("");
str_MulticastSocketIP = "233.0.0.1";
m_MulticastSocketPortFH96Data = 8080;
str_MulticastSocketInfoReceive = "等待通信连接……\r\n";
//FJ数据显示初始化
m_bFJDataShow = FALSE;
//L测控
m_strLLinkMultiCastIP = "";
m_nLLinkMulticastPort = 8000;
//卫通组播
m_strSACMulticastIPAddr = "";
m_nSACMulticastRemotePort = 8001;
//卫通UDP单播
m_strSACUDPIPAddr = "";
m_nSACUDPRemotePort = 2203;
m_nSACUDPLocalPort = 8009;
m_sysSetComNumber = 0;//窜口数
}
CMulticastSocketReceiveDlg::~CMulticastSocketReceiveDlg()
{
}
void CMulticastSocketReceiveDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IPADDRESS4,m_IPAddress_MultiCastIP);
DDX_Radio(pDX, IDC_RADIO_L, m_iVideoSrc);
DDX_CBString(pDX, IDC_COMBO_PORT_IMP, mComPortIMP);
DDX_CBString(pDX, IDC_COMBO_BAUD_IMP, mComBaudIMP);
}
BEGIN_MESSAGE_MAP(CMulticastSocketReceiveDlg, CDialogEx)
ON_BN_CLICKED(IDC_BTN_MULTISOCKET_CONNECT, &CMulticastSocketReceiveDlg::OnBnClickedBtnMultisocketConnect)
ON_BN_CLICKED(IDC_BTN_MULTISOCKET_DISCONNECT, &CMulticastSocketReceiveDlg::OnBnClickedBtnMultisocketDisconnect)
ON_MESSAGE(WN_SHOW_CH96_FJDATA, &CMulticastSocketReceiveDlg::ShowCH96FJData)
ON_BN_CLICKED(IDC_CHECK1, &CMulticastSocketReceiveDlg::OnBnClickedCheck1)
ON_BN_CLICKED(IDC_RADIO_L, &CMulticastSocketReceiveDlg::OnRadioBtnVideoSrcClicked)
ON_BN_CLICKED(IDC_RADIO_SAC1, &CMulticastSocketReceiveDlg::OnRadioBtnVideoSrcClicked)
ON_BN_CLICKED(IDC_RADIO_SAC2, &CMulticastSocketReceiveDlg::OnRadioBtnVideoSrcClicked)
ON_CBN_SELCHANGE(IDC_COMBO_PORT_IMP, &CMulticastSocketReceiveDlg::OnCbnSelchangePortIMP)//串口号
ON_CBN_SELCHANGE(IDC_COMBO_BAUD_IMP, &CMulticastSocketReceiveDlg::OnCbnSelchangePortIMP)//波特率
ON_BN_CLICKED(IDC_BTN_IMP_SERIAL_CONNECT, &CMulticastSocketReceiveDlg::OnBnClickedBtnImpSerialConnect)
ON_BN_CLICKED(IDC_BTN_IMP_SERIAL_DISCONNECT, &CMulticastSocketReceiveDlg::OnBnClickedBtnImpSerialDisconnect)
END_MESSAGE_MAP()
BOOL CMulticastSocketReceiveDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 获取窗口句柄
g_MulticastSocketReceiveDlgHwnd = GetSafeHwnd();
// 获取主机本地IP并显示
//CString str_LocalIP_Receive;
GetHostAddress(str_LocalIP_ReceiveMUDP);
GetDlgItem(IDC_EDIT_LOCALIP_RECEIVE)->SetWindowText(str_LocalIP_ReceiveMUDP);
// 设置界面初始显示内容
m_IPAddress_MultiCastIP.SetWindowText(str_MulticastSocketIP);
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->SetWindowText("8080");
GetDlgItem(IDC_EDIT_LOCALPORT_RECEIVE)->SetWindowTextA("8082");
GetDlgItem(IDC_EDIT_MULTICASTSOCKETINFORECEIVE)->SetWindowText(str_MulticastSocketInfoReceive);
// 设置按钮状态
GetDlgItem(IDC_BTN_MULTISOCKET_CONNECT)->EnableWindow(TRUE);
m_strServerPayLoadIPSend = _T("192.168.1.20"); // udp单播转发的服务器IP
m_nServerSendLocalPort = 60302;
m_nServerSendObjectPort = 13001; // 远端端口
//添加串口号到列表框
AddPortNumberToComboBox();
//添加波特率到列表框
AddBaudNumberToComboBox();
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
// 连接
void CMulticastSocketReceiveDlg::OnBnClickedBtnMultisocketConnect()
{
UpdateData(TRUE);
switch(m_iVideoSrc)
{
case 0: //L测控 任管数据
{
//更改IP地址和端口号
m_IPAddress_MultiCastIP.GetWindowText(m_strLLinkMultiCastIP); //L测控组播IP
str_MulticastSocketIP = m_strLLinkMultiCastIP;
CString _str;
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->GetWindowText(_str); //从文本框中读取远端端口
m_nLLinkMulticastPort = _ttoi(_str);
m_MulticastSocketPortFH96Data = m_nLLinkMulticastPort;
// 创建组播接收实例——图像和复接数据
CreateMulticastSocketFH96Data();
}
break;
case 1: //卫通UDP单播 任管数据
{
//更改IP地址和端口号
m_IPAddress_MultiCastIP.GetWindowTextA(m_strSACUDPIPAddr); //卫通UDP单播远端地址
CString _str;
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->GetWindowTextA(_str); //从文本框中读取远端端口
m_nSACUDPRemotePort = _ttoi(_str);
GetDlgItem(IDC_EDIT_LOCALPORT_RECEIVE)->GetWindowTextA(_str); //从文本框中读取本地端口
m_nSACUDPLocalPort = _ttoi(_str);
//创建UDP接收实例——图像和复接数据
CreateUDPSocketReceiveData();
}
break;
case 2: //卫通组播 光电吊舱裸流数据
{
//更改IP地址和端口号
m_IPAddress_MultiCastIP.GetWindowText(m_strSACMulticastIPAddr);
str_MulticastSocketIP = m_strSACMulticastIPAddr;
CString _str;
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->GetWindowText(_str); //从文本框中读取远端端口
m_nSACMulticastRemotePort = _ttoi(_str);
m_MulticastSocketPortFH96Data = m_nSACMulticastRemotePort;
// 创建组播接收实例——图像裸流H264
CreateMulticastSocketFH96Data();
}
break;
default:
break;
}
// 更改按钮状态
GetDlgItem(IDC_BTN_MULTISOCKET_CONNECT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_MULTISOCKET_DISCONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO_L)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_SAC1)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_SAC2)->EnableWindow(FALSE);
//UDP服务器传输
g_UDPTrans2Server.SetCallBack(NULL, this);
CString strLocalIPAddr = _T("0.0.0.0");
g_UDPTrans2Server.SetParams(strLocalIPAddr, m_nServerSendLocalPort, m_strServerPayLoadIPSend, m_nServerSendObjectPort);
if (g_UDPTrans2Server.StartListening())
{
g_udpStarted = true;
CString strPassword = _T("FP-WRJ-98");
g_UDPTrans2Server.WriteBuffer((BYTE*)strPassword.GetBuffer(), strPassword.GetLength());
}
else
{
g_udpStarted = false;
}
}
// 显示CH96FJ数据内容
LRESULT CMulticastSocketReceiveDlg::ShowCH96FJData(WPARAM wParam, LPARAM lParam)
{
if (m_bFJDataShow == TRUE)
{
// 显示FJ数据150字节内容
BYTE _FJData[150];
WaitForSingleObject(g_hMutex_SaveFJData, INFINITE);
memcpy(_FJData, &g_CH96FJData, 150);
ReleaseMutex(g_hMutex_SaveFJData);
CString _strByte;
_strByte = "";
CString _strFJDataShow;
_strFJDataShow = "";
for (int i = 0; i < 150; i++)
{
_strByte.Format("%02X",_FJData[i]);
_strFJDataShow = _strFJDataShow + _strByte + "\t";
if ( 0 == (i+1)%8 )
{
_strFJDataShow += "\r\n";
}
}
GetDlgItem(IDC_EDIT_FJDATASHOW)->SetWindowText(_strFJDataShow);
}
return 0;
}
// 创建组播连接
void CMulticastSocketReceiveDlg::CreateMulticastSocketFH96Data()
{
if (g_socketFH96Data != INVALID_SOCKET)
{
// 关闭套接字
closesocket(g_socketFH96Data);
g_socketFH96Data = -1;
}
// 创建套接字
SetUpWinSocketFH96Data();
}
// 创建WinSocket套接字
void CMulticastSocketReceiveDlg::SetUpWinSocketFH96Data()
{
// 加载套接字库
WSADATA WSAData;
WSAStartup(WINSOCK_VERSION, &WSAData);
// 创建套接字
g_socketFH96Data = socket(AF_INET, // 地址族
SOCK_DGRAM, // socket 类型
IPPROTO_UDP); // 协议
if (g_socketFH96Data == INVALID_SOCKET)
{
CString receiverData = "数据组播接收套接字创建失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
return;
}
int ret = 0;
// 绑定套接字
sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(m_MulticastSocketPortFH96Data);
local.sin_addr.s_addr = INADDR_ANY;
ret = ::bind(g_socketFH96Data, (struct sockaddr*)&local, sizeof(local));
if(ret == SOCKET_ERROR)
{
CString receiverData = "数据组播接收套接字绑定port失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
return;
}
// 设置接收缓冲区大小
int length = 512000 ;
ret = setsockopt(g_socketFH96Data,SOL_SOCKET,SO_RCVBUF,(const char*)&length, sizeof(int));
if (ret == SOCKET_ERROR)
{
CString receiverData = "数据组播接收套接字缓冲区设置失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
return;
}
int nNetTimeout = 1000; // 1S 设置接收时限
ret = setsockopt(g_socketFH96Data,SOL_SOCKET,SO_RCVTIMEO,(const char*)&nNetTimeout, sizeof(int));
if (ret == SOCKET_ERROR)
{
CString receiverData = "数据组播接收套接字时限设置失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
return;
}
struct ip_mreq mcast_addr;
mcast_addr.imr_multiaddr.s_addr = inet_addr(str_MulticastSocketIP);
mcast_addr.imr_interface.s_addr = INADDR_ANY;
ret = setsockopt(g_socketFH96Data, IPPROTO_IP,IP_ADD_MEMBERSHIP, (char*)&mcast_addr, sizeof(mcast_addr));
if (ret == SOCKET_ERROR)
{
CString receiverData = "数据组播接收套接字绑定IP失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
return;
}
else
{
CString receiverData = "数据组播接收创建成功!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
switch(m_iVideoSrc)
{
case 0: //L测控组播
// 创建一个线程并立即执行
m_hThread_GetFH96DataFromNet = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)GetFH96DataFromNet,
nullptr, // 传递参数
0, // 线程创建后会被马上调用
&m_ThreadID_GetFH96DataFromNet);
break;
case 1: //卫通UDP单播
break;
case 2: //卫通组播
// 创建一个线程并立即执行
m_hThread_GetFH96DataFromNet = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)GetH264VideoDataFromNet,
nullptr, // 传递参数
0, // 线程创建后会被马上调用
&m_ThreadID_GetFH96DataFromNet);
break;
default:
break;
}
}
}
void CMulticastSocketReceiveDlg::ShowMulticastSocketInfoReceive()
{
GetDlgItem(IDC_EDIT_MULTICASTSOCKETINFORECEIVE)->SetWindowText(str_MulticastSocketInfoReceive);
GetDlgItem(IDC_EDIT_MULTICASTSOCKETINFORECEIVE)->SendMessage(WM_VSCROLL,SB_BOTTOM,0);
}
// 获取主机IP
void CMulticastSocketReceiveDlg::GetHostAddress(CString &strIP)
{
char HostName[100];
gethostname(HostName, sizeof(HostName)); // 获取主机名称
hostent* hn;
hn = gethostbyname(HostName); // 根据主机名称得到本机IP
strIP = inet_ntoa(*(struct in_addr *)hn->h_addr_list[0]);
}
void CMulticastSocketReceiveDlg::OnBnClickedBtnMultisocketDisconnect()
{
// 关闭组播
// 关闭套接字
if (INVALID_SOCKET != g_socketFH96Data)
{
closesocket(g_socketFH96Data);
g_socketFH96Data = -1;
// 卸载socket库
WSACleanup();
}
//关闭卫通UDP单播
m_nSACUDPSocket.SetCallBack(NULL, nullptr);
m_nSACUDPSocket.StopListening();
g_udpStarted = false;
g_UDPTrans2Server.SetCallBack(NULL, nullptr);
g_UDPTrans2Server.StopListening();
if (NULL != m_hThread_GetFH96DataFromNet)
{
TerminateThread(m_hThread_GetFH96DataFromNet, 0);
m_hThread_GetFH96DataFromNet = NULL;
m_ThreadID_GetFH96DataFromNet = 0;
}
// 更新显示内容
str_MulticastSocketInfoReceive = str_MulticastSocketInfoReceive + "数据接收已断开!\r\n" + "等待通信连接……\r\n";
ShowMulticastSocketInfo();
// 更改按钮状态
// 设置按钮状态
GetDlgItem(IDC_BTN_MULTISOCKET_CONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_MULTISOCKET_DISCONNECT)->EnableWindow(FALSE);
GetDlgItem(IDC_RADIO_L)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO_SAC1)->EnableWindow(TRUE);
GetDlgItem(IDC_RADIO_SAC2)->EnableWindow(TRUE);
}
void CMulticastSocketReceiveDlg::ShowMulticastSocketInfo()
{
GetDlgItem(IDC_EDIT_MULTICASTSOCKETINFORECEIVE)->SetWindowText(str_MulticastSocketInfoReceive);
GetDlgItem(IDC_EDIT_MULTICASTSOCKETINFORECEIVE)->SendMessage(WM_VSCROLL,SB_BOTTOM,0);
}
void CMulticastSocketReceiveDlg::OnBnClickedCheck1()
{
m_bFJDataShow = !m_bFJDataShow;
}
// 键盘/鼠标消息响应函数
BOOL CMulticastSocketReceiveDlg::PreTranslateMessage(MSG* pMsg)
{
// 键盘消息
if (pMsg->message == WM_KEYDOWN)
{
// 忽略ESC和回车键
if (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)
{
return TRUE;
}
// F3键控制“组播收数”窗口的现实/隐藏
if (pMsg->wParam == VK_F3)
{
// 关闭窗口
OnOK();
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
void CMulticastSocketReceiveDlg::OnRadioBtnVideoSrcClicked()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (0 == m_iVideoSrc)//L链路SPI输出 UDP组播
{
// 显示主机本地IP
GetDlgItem(IDC_EDIT_LOCALIP_RECEIVE)->SetWindowText(str_LocalIP_ReceiveMUDP);
// 设置界面初始显示内容
m_IPAddress_MultiCastIP.SetWindowText(str_MulticastSocketIP);
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->SetWindowText("8080");
GetDlgItem(IDC_EDIT_LOCALPORT_RECEIVE)->SetWindowTextA("8082");
}else if (1 == m_iVideoSrc)//卫通视频管理计算机网口输出 UDP单播
{
// 获取主机本地IP并显示
CString str_LocalIP_Receive;
str_LocalIP_Receive = _T("192.168.0.4"); // 界面展示本机卫通IP
GetDlgItem(IDC_EDIT_LOCALIP_RECEIVE)->SetWindowText(str_LocalIP_Receive);
// 设置界面初始显示内容
CString str_RemoteIP_Connect;
str_RemoteIP_Connect = _T("192.168.0.180"); // 界面展示IP
m_IPAddress_MultiCastIP.SetWindowText(str_RemoteIP_Connect);
GetDlgItem(IDC_EDIT_MULTISOCKETPORT_RECEIVE)->SetWindowText("8080");
GetDlgItem(IDC_EDIT_LOCALPORT_RECEIVE)->SetWindowTextA("8080");
}
}
void CMulticastSocketReceiveDlg::CreateUDPSocketReceiveData()
{
//卫通UDP连接
m_nSACUDPSocket.SetCallBack(OnReadFromUDPSACKU, this);
CString strLocalIPAddr = _T("192.168.1.20"); // 卫通接受IP
m_nSACUDPSocket.SetParams(strLocalIPAddr, m_nSACUDPLocalPort, m_strSACUDPIPAddr, m_nSACUDPRemotePort);
if (m_nSACUDPSocket.StartListening())
{
CString receiverData = "任管数据接收设置成功!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
}
else
{
CString receiverData = "任管数据接收设置失败!";
receiverData += "\r\n";
str_MulticastSocketInfoReceive += receiverData;
// 显示信息
ShowMulticastSocketInfoReceive();
}
}
//添加系统串口到组合选择框
void CMulticastSocketReceiveDlg::AddPortNumberToComboBox()
{
int *comPortList = new int[MaxComPortNumber];
memset( comPortList, 0, MaxComPortNumber );
//系统设置的串口数目
int sysSetComNumber = 0;
//获得系统当前的串口数量存于数组comPortList中
BOOL bScanPort = ScanPCCom( comPortList, sysSetComNumber );
m_sysSetComNumber = sysSetComNumber;
if ( !bScanPort ) //读取失败
{
if ( comPortList != NULL )
{
delete[]comPortList;
comPortList = NULL;
}
return;
}
//对数组进行升序排列
OrderComPortList( comPortList, sysSetComNumber );
//写入对话框的CComboBox中
CString str;
for ( int i = 0; i < sysSetComNumber; ++i )
{
str.Format( "串口%d", comPortList[i] );
( ( CComboBox * ) GetDlgItem( IDC_COMBO_PORT_IMP ) )->InsertString( i, str ); //IMP串口号
}
int setComPos = 0;
//配置文件设置
SetComboBoxCurSel( IDC_COMBO_PORT_IMP, comPortList, sysSetComNumber, mComPortIMP );
if ( comPortList != NULL )
{
delete[]comPortList;
comPortList = NULL;
}
}
//添加串口波特率到组合选择框
void CMulticastSocketReceiveDlg::AddBaudNumberToComboBox()
{
int iCount0=( ( CComboBox * ) GetDlgItem( IDC_COMBO_BAUD_IMP ) )->GetCount(); //IMP串口波特率
if(iCount0 < 1)
{
for(int i = 0; i < BAUDITEMNUM; ++i ){
( ( CComboBox * ) GetDlgItem( IDC_COMBO_BAUD_IMP ) )->InsertString( i, gComBaudItems[i] );
}
}
//配置文件设置的SD2串口
SetComboBaudCurSel( IDC_COMBO_BAUD_IMP, gComBaudItems, BAUDITEMNUM, mComBaudIMP );
}
//从配置文件中读取指定串口号
void CMulticastSocketReceiveDlg::SetComboBoxCurSel( int comboBoxID, const int *portArray, const int& arrLength,CString& strPortNumber )
{
if ( strPortNumber.GetLength() <= 4 )
{
strPortNumber = _T( "" );
return;
}
CString initializeComPort = strPortNumber;
initializeComPort.Delete( 0, 4 );
int filePortValue = atoi( initializeComPort );
int setComPos = 0;
if ( FindItemFromComList( setComPos, portArray, arrLength, filePortValue ) )
{
( ( CComboBox * ) GetDlgItem( comboBoxID ) )->SetCurSel( setComPos );
}
else
{
strPortNumber = _T( "" );
}
}
//对串口数组进行升序排列
void CMulticastSocketReceiveDlg::OrderComPortList( int *portArray, const int& arrLength )
{
int portValue = 0;
for ( int i = 0; i < arrLength - 1; ++i )
{
for ( int j = i + 1; j < arrLength; ++j )
{
if ( portArray[i] > portArray[j] )
{
portValue = portArray[i];
portArray[i] = portArray[j];
portArray[j] = portValue;
}
}
}
}
//给指定的波特率组合框设定选择值
void CMulticastSocketReceiveDlg::SetComboBaudCurSel( int comboBoxID, const CString *baudArray, const int& arrLength,CString& strBaudNumber )
{
if ( strBaudNumber.GetLength() <= 0 )
{
strBaudNumber = _T( "" );
return;
}
CString initializeComBaud = strBaudNumber;
initializeComBaud.Trim();
int fileBaudValue = atoi( initializeComBaud );
int setBaudPos = -1;
if ( FindItemFromBaudList( setBaudPos, baudArray, arrLength, fileBaudValue ) )
{
( ( CComboBox * ) GetDlgItem( comboBoxID ) )->SetCurSel( setBaudPos );
}
else
{
strBaudNumber = _T( "" );
}
}
//从波特率列表中查找指定波特率
bool CMulticastSocketReceiveDlg::FindItemFromBaudList( int& pos, const CString *baudArray, const int& arrLength, const int& itemValue )
{
for ( int i = 0; i < arrLength; ++i )
{
if ( itemValue == atoi((baudArray[i])) )
{
pos = i;
return true;
}
}
return false;
}
//IMP通信串口选择后触发
void CMulticastSocketReceiveDlg::OnCbnSelchangePortIMP()
{
UpdateData( true );
//判断该串口是否已经被占用
if ( !CheckComPortCanWork( mComPortIMP ) )
{
( ( CComboBox * ) GetDlgItem( IDC_COMBO_PORT_IMP ) )->SetCurSel( -1 );
}
}
//IMP通信串口波特率选择后触发
void CMulticastSocketReceiveDlg::OnCbnSelchangeBaudIMP()
{
UpdateData( true );
//判断该串口是否已经被占用
if ( !CheckComPortCanWork( mComPortIMP ) )
{
( ( CComboBox * ) GetDlgItem( IDC_COMBO_BAUD_IMP ) )->SetCurSel( -1 );
}
}
void CMulticastSocketReceiveDlg::OnBnClickedBtnImpSerialConnect()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_BTN_IMP_SERIAL_CONNECT)->EnableWindow(FALSE);
GetDlgItem(IDC_BTN_IMP_SERIAL_DISCONNECT)->EnableWindow(TRUE);
::SendMessageA(g_IMPDLGhwnd,WM_UPDATE_IMP_SERIAL_CONNECT,(WPARAM)mComPortIMP.AllocSysString(), (LPARAM)mComBaudIMP.AllocSysString());
}
void CMulticastSocketReceiveDlg::OnBnClickedBtnImpSerialDisconnect()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItem(IDC_BTN_IMP_SERIAL_CONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_BTN_IMP_SERIAL_DISCONNECT)->EnableWindow(FALSE);
::SendMessageA(g_IMPDLGhwnd,WM_UPDATE_IMP_SERIAL_CONNECT,(WPARAM)mComPortIMP.AllocSysString(), (LPARAM)mComBaudIMP.AllocSysString());
}