diff --git a/Lib/Decoder_H264_ALLD.lib b/Lib/Decoder_H264_ALLD.lib
index 34074e1..a261865 100644
Binary files a/Lib/Decoder_H264_ALLD.lib and b/Lib/Decoder_H264_ALLD.lib differ
diff --git a/Lib/Decoder_H264_ALLR.lib b/Lib/Decoder_H264_ALLR.lib
index 0ffefa3..b45e06e 100644
Binary files a/Lib/Decoder_H264_ALLR.lib and b/Lib/Decoder_H264_ALLR.lib differ
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.cpp b/Src/CH91PayloadSoftware/CH91PayloadSoftware.cpp
index 12ef94d..1be3c39 100644
--- a/Src/CH91PayloadSoftware/CH91PayloadSoftware.cpp
+++ b/Src/CH91PayloadSoftware/CH91PayloadSoftware.cpp
@@ -60,6 +60,7 @@ BOOL CCH91PayloadSoftwareApp::InitInstance()
Md5Encode m_Md5Encoder;
str1 = m_Md5Encoder.Encode(str1);
+ //str1 = "A1335FA36BDA99F1E5D53DD08FDF7898";
string str2 = "FEIPENGZHIKONG2021.";//密钥
str1 = m_desUtils.H(str1);//十六进制转换为二进制
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc b/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc
index 9f42df1..4063695 100644
Binary files a/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc and b/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc differ
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj
index 8aed757..c0148c3 100644
--- a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj
+++ b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj
@@ -49,15 +49,15 @@
true
..\..\Bin\
$(Configuration)\
- C:\ProgramFiles\boost_1_56;$(IncludePath)
- C:\ProgramFiles\boost_1_56\stage\lib;$(LibraryPath)
+ E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\boost_1_56;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\include;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\include;$(IncludePath)
+ C:\ProgramFiles\boost_1_56\stage\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\boost_1_56\stage\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;$(LibraryPath)
false
..\..\Bin\
..\..\Bin\
- C:\ProgramFiles\boost_1_56;$(IncludePath)
- C:\ProgramFiles\boost_1_56\stage\lib;$(LibraryPath)
+ C:\ProgramFiles\boost_1_56;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\boost_1_56;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\include\opencv;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\include\opencv2;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\include;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\include;$(IncludePath)
+ C:\ProgramFiles\boost_1_56\stage\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\boost_1_56\stage\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;E:\FH-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;$(LibraryPath)
FH98PayloadOnBoard
@@ -176,13 +176,17 @@
+
+
+
+
@@ -225,10 +229,14 @@
+
+
+
+
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters
index c82d0e3..5c51045 100644
--- a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters
+++ b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters
@@ -79,6 +79,21 @@
{ab6ee3f8-60f1-43e8-9f15-bbb160de9c67}
+
+ {f06cd1e0-85bf-45a0-867a-ee5a88d8e499}
+
+
+ {ac0ffa33-f9fc-4e75-9781-73b28c12be43}
+
+
+ {14c6a6db-8887-4abf-aeee-f39bfcb37fc6}
+
+
+ {04315dca-4ce2-425a-bcc9-d26fe11219c5}
+
+
+ {8eb1f68d-8c2d-485d-b3bd-9859d81467d5}
+
@@ -357,6 +372,18 @@
鍔犺В瀵
+
+ 閫氫俊鐩稿叧\涓插彛绫籠涓插彛鎺у埗鐩稿叧
+
+
+ IMP\閫氫俊
+
+
+ IMP\瀵硅瘽妗
+
+
+ IMP\鍗忚
+
@@ -470,6 +497,18 @@
鍔犺В瀵
+
+ 閫氫俊鐩稿叧\涓插彛绫籠涓插彛鎺у埗鐩稿叧
+
+
+ IMP\閫氫俊
+
+
+ IMP\瀵硅瘽妗
+
+
+ IMP\鍗忚
+
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.cpp b/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.cpp
index 541c549..002d511 100644
--- a/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.cpp
+++ b/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.cpp
@@ -81,6 +81,8 @@ CCH91PayloadSoftwareDlg::CCH91PayloadSoftwareDlg(CWnd* pParent /*=NULL*/)
g_bMapDirectGuide = FALSE; // 是否是地图直接导引标志
p_DlgCameraCtrl = NULL;
+ g_DlgIMP = NULL;//IMP对话框初始化指针
+
}
void CCH91PayloadSoftwareDlg::DoDataExchange(CDataExchange* pDX)
@@ -121,6 +123,9 @@ BEGIN_MESSAGE_MAP(CCH91PayloadSoftwareDlg, CDialogEx)
ON_WM_MBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_MBUTTONUP()
+
+ //ON_MESSAGE(WM_UPDATE_IMPDOWN_CHECKED, OnUpdateIMPDownDataChecked) //更新IMP下行遥测数据
+
END_MESSAGE_MAP()
@@ -347,6 +352,7 @@ BOOL CCH91PayloadSoftwareDlg::OnInitDialog()
assert(LocalPort1 != 0 && RemotePort1 != 0);
g_bCreatSend2Mobile = g_UdpSend2Mobile.StartListening(LocalIp1, LocalPort1, RemoteIp1, RemotePort1);
*/
+
return TRUE;
}
@@ -378,6 +384,29 @@ void CCH91PayloadSoftwareDlg::OnInitControlDlg()
}
p_DlgCameraCtrl->MoveWindow(&rc_ControlInstruction);
p_DlgCameraCtrl->ShowWindow(SW_SHOW);
+
+
+ /***********IMP************/
+ CRect rc_ControlInstructionIMP;
+ GetDlgItem(IDC_STATIC_CONTROLINSTRUCTION_IMP)->GetWindowRect(rc_ControlInstructionIMP);
+ ScreenToClient(rc_ControlInstructionIMP);
+
+ g_DlgIMP = new CDlgIMP();
+ if(g_DlgIMP != NULL)
+ {
+ g_DlgIMP->Create(IDD_DLG_IMP, this);
+ }
+ g_DlgIMP->MoveWindow(&rc_ControlInstructionIMP);
+ g_DlgIMP->ShowWindow(SW_SHOW);
+ if(g_DlgIMP->IsWindowVisible())
+ {
+ IMPDlgWindowVisible=true;
+ }
+ else
+ {
+ IMPDlgWindowVisible=false;
+ }
+
}
// 对解码器进行初始化
void CCH91PayloadSoftwareDlg::OnInitCH96Decoder()
@@ -584,6 +613,13 @@ void CCH91PayloadSoftwareDlg::OnDestroy()
delete p_DlgCameraCtrl;
p_DlgCameraCtrl = NULL;
}
+ // 卸载IMP对话框
+ if(g_DlgIMP !=NULL)
+ {
+ delete g_DlgIMP;
+ g_DlgIMP = nullptr;
+ IMPDlgWindowVisible = false;
+ }
}
// 显示可见光图像复接信息
@@ -1159,13 +1195,16 @@ void CCH91PayloadSoftwareDlg::DlgStyleChange()
m_Btn_Replay.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));// 鼠标指向按钮时候的文字颜色
m_Btn_Replay.DrawTransparent(TRUE);
+
+ //会报错,原因不明
// 状态查看
- m_Btn_FJ.SubclassDlgItem(IDC_BTN_SHOW_FJ, this);
- m_Btn_FJ.SetIcon(IDI_ICON_MAIN_FJ);
- m_Btn_FJ.SetTooltipText("Status Inquiry");
- m_Btn_FJ.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
- m_Btn_FJ.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
- m_Btn_FJ.DrawTransparent(TRUE);
+ //m_Btn_FJ.SubclassDlgItem(IDC_BTN_SHOW_FJ, this);
+ //m_Btn_FJ.SetIcon(IDI_ICON_MAIN_FJ);
+ //m_Btn_FJ.SetTooltipText("Status Inquiry");
+ //m_Btn_FJ.SetAlign(CButtonST::ST_ALIGN_VERT);// 文字在下
+ //m_Btn_FJ.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(29, 191, 151));
+ //m_Btn_FJ.DrawTransparent(TRUE);
+
// 组播收数
m_Btn_SocketReceive.SubclassDlgItem(IDC_BTN_MULTICASTSOCKETRECEIVE, this);
m_Btn_SocketReceive.SetIcon(IDI_ICON_MAIN_SOCKETSEND);
@@ -2021,3 +2060,60 @@ double CCH91PayloadSoftwareDlg::GetOffsetAngle(int X, int Y)
return PayLoad_Yaw;
}
+
+/**********IMP**********/
+////IMP下行帧通过校验后调的函数
+//void CALLBACK IMPDOWNCheckCallback(CFrameIMPDown_ *ss)
+//{
+// ::SendMessageA(g_mainDlgHwnd,WM_UPDATE_IMPDOWN_CHECKED,0,0);
+//}
+////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));
+//
+// /********进入校验,校验通过就给g_FrameIMPDown赋值********/
+// g_FrameIMPDown.Phrase(buffer2, size);
+// ////IMP协议类回调函数设置,校验通过后回自动调用该回调函数
+// //g_FrameIMPDown.SetCheckCallback((IMPDOWNCheckCallback,nullptr),nullptr);
+// //g_FrameIMPDown.SetNotCheckCallback(nullptr);
+// ::SendMessageA(g_mainDlgHwnd,WM_UPDATE_IMPDOWN_CHECKED,0,0);
+// }
+//}
+////初始化
+//void CCH91PayloadSoftwareDlg::onInitIMPFrame()
+//{
+// //串口通信设置
+// memset(pSerialPort, 0, 20);
+// GetSerialPortNumber(pSerialPort,"串口40");
+// CString IMPComPort;
+// IMPComPort = "115200";
+// pSerialPortBaud = atoi(IMPComPort);//波特率
+// if (!OnCheckComPort(pSerialPort)) //串口被占用,返回false
+// {
+// return;
+// }
+// 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));
+// }
+//}
+////处理通过校验的IMP下行数据
+//LRESULT CCH91PayloadSoftwareDlg::OnUpdateIMPDownDataChecked(WPARAM param, LPARAM lparam)
+//{
+// //数据解析与显示
+// if(p_DlgIMP->IsWindowVisible())
+// {
+// p_DlgIMP->SetIMPData(g_FrameIMPDown);
+// }
+// return 0;
+//}
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.h b/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.h
index 3e60ff3..a3d38f0 100644
--- a/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.h
+++ b/Src/CH91PayloadSoftware/CH91PayloadSoftwareDlg.h
@@ -21,7 +21,8 @@
#include "afxwin.h"
#include "afxcmn.h"
#include "DlgCameraCtrl.h"
-
+#include "DlgIMP.h"
+//#include "FrameIMP_DOWN.h"
// CCH91PayloadSoftwareDlg 对话框
class CCH91PayloadSoftwareDlg : public CDialogEx
@@ -192,4 +193,14 @@ public:
afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
// 计算拖动鼠标时,偏移量形成的角度
double GetOffsetAngle(int X, int Y);
+
+
+ //////IMP相关
+ CDlgIMP * g_DlgIMP;//IMP对话框
+ //CSerial m_SerialIMP; // IMP通信串口
+ //char pSerialPort[20];//串口号
+ //DWORD pSerialPortBaud;//端口号
+ //void onInitIMPFrame();//初始化IMP协议
+ //LRESULT OnUpdateIMPDownDataChecked(WPARAM param, LPARAM lparam); //处理IMP下行通过校验的遥测数据
+
};
diff --git a/Src/CH91PayloadSoftware/ComControlFunction.cpp b/Src/CH91PayloadSoftware/ComControlFunction.cpp
new file mode 100644
index 0000000..596c527
--- /dev/null
+++ b/Src/CH91PayloadSoftware/ComControlFunction.cpp
@@ -0,0 +1,185 @@
+//功能:实现串口操作的一些函数
+#include "StdAfx.h"
+#include "ComControlFunction.h"
+
+//查找系统可用的串口号,将所有的串口号保存在pPortList数组里
+//输出:串口数portNumber,串口号数组pPortList
+//pPortList保存各串口的串口数字
+BOOL ScanPCCom( int *pPortList, int& portNumber )
+{
+ portNumber = 0; //系统配置的串口总数
+
+ //扫描PC机存在的串口,从注册表读取存在的串口。
+ UINT nComNum = 0;
+ HKEY hKEY = NULL;
+ LONG hResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T( "HARDWARE\\DEVICEMAP\\SERIALCOMM" ), 0, KEY_READ, &hKEY );
+
+ if ( hResult != ERROR_SUCCESS ) //如果无法打开hKEY,则中止程序的执行
+ {
+ return FALSE;
+ }
+
+ TCHAR strInf[30];
+ memset( strInf, 0, sizeof( TCHAR ) * 30 );
+
+ DWORD type_1 = REG_SZ;
+ DWORD cbData_1 = 10;
+ DWORD aa = 30, num = 0;
+ DWORD a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0;
+
+ //hResult = ::RegQueryInfoKey( hKEY, strInf, &a7, NULL, &a3, &a1, &a2, &num, &a4, &a5, &a6, NULL );
+ hResult = ::RegQueryInfoKeyA( hKEY, NULL, NULL, NULL, &a3, &a1, NULL, &num, &a4, &a5, NULL, NULL );
+ if ( hResult != ERROR_SUCCESS )
+ {
+ RegCloseKey( hKEY );
+ return FALSE;
+ }
+
+ BYTE portName[15];
+ memset( portName, 0, 15 );
+
+ CString csr = _T( "" );
+
+ for ( DWORD i = 0 ; i < num ; ++i )
+ {
+ aa = 30 ;
+ cbData_1 = 10;
+ hResult = ::RegEnumValue( hKEY, i, strInf, &aa, NULL, &type_1, portName, &cbData_1 );
+ if ( hResult != ERROR_SUCCESS )
+ {
+ continue;
+ }
+ csr.Format( _T( "%s" ), portName );
+
+ csr.Delete( 0, 3 );
+
+ pPortList[portNumber] = atoi( csr );
+
+ ++portNumber; //系统配置的串口总数
+
+ ++nComNum;
+ }
+ RegCloseKey( hKEY );
+ return TRUE;
+}
+
+
+//判断串口是否被占有,串口可用返回true,否则返回false
+bool OnCheckComPort( const CString& portName )
+{
+ CString str = _T( "//./" ) + portName;
+ HANDLE hCom = CreateFile( str, //打开串口1
+ GENERIC_READ | GENERIC_WRITE, //允许读和写操作
+ 0, //独占方式
+ 0, OPEN_EXISTING, //打开一个存在的串口
+ 0, 0 );
+
+
+ if ( hCom == INVALID_HANDLE_VALUE ) //打开串口失败
+ {
+ return false;
+ }
+ else
+ {
+ CloseHandle( hCom );
+ hCom = NULL;
+ return true;
+ }
+}
+
+
+//判断串口是否为空
+//串口为空返回true,否则返回false
+bool CheckComPortIsEmpty( const CString strPort )
+{
+ if ( strPort.Compare( _T( "" ) ) == 0 )
+ {
+ return true;
+ }
+ return false;
+}
+
+//功能:检测2个串口是否相同,相同返回True,否则返回false
+bool CompareTwoComPort( const CString port1, const CString port2 )
+{
+ if ( ( port1.Compare( port2 ) ) == 0 )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+//判断串口是否可用
+//可用返回true,否则返回false
+bool CheckComPortCanWork( const CString strPort )
+{
+ if ( strPort.GetLength() <= 4 )
+ {
+ return false;
+ }
+
+ CString str = strPort;
+ str.Delete( 0, 4 ); //删除“串口”字符
+
+ CString strSelectCom = _T( "" );
+ strSelectCom.Format( "COM%d", atoi( str ) );
+
+ if ( !OnCheckComPort( strSelectCom ) ) //串口被占用,返回false
+ {
+ return false;
+ }
+ else //串口可用,返回true
+ {
+ return true;
+ }
+}
+
+//判断串口名称是否正确,正确的名称为“串口XX”——前面为“串口”,后面为数字
+//串口名称正确返回true, 否则返回false
+bool CheckComPortName( const CString strPort )
+{
+ if ( strPort.GetLength() < 5 )
+ {
+ return false;
+ }
+ CString str = strPort;
+
+ if ( str.Left( 4 ) != _T( "串口" ) )
+ {
+ return false;
+ }
+ str = strPort;
+ str.Delete( 0, 4 );
+
+ for ( int i = 0; i < str.GetLength(); ++i )
+ {
+ if ( ( str.GetAt( i ) < '0' ) || ( str.GetAt( i ) > '9' ) )
+ {
+ return false;
+ }
+ }
+
+ return true;
+}
+//从串口数组中进行查找,查找出配置文件设置的串口号
+//输入:数组portArray,数组长度arrLength,查找元素itemValue
+//输出:元素的位置pos
+//返回值:查找成功返回true,否则返回false
+bool FindItemFromComList( int& pos, const int *portArray, const int& arrLength, const int& itemValue )
+{
+ for ( int i = 0; i < arrLength; ++i )
+ {
+ if ( itemValue == portArray[i] )
+ {
+ pos = i;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
diff --git a/Src/CH91PayloadSoftware/ComControlFunction.h b/Src/CH91PayloadSoftware/ComControlFunction.h
new file mode 100644
index 0000000..c55fad4
--- /dev/null
+++ b/Src/CH91PayloadSoftware/ComControlFunction.h
@@ -0,0 +1,41 @@
+//功能:实现串口操作的一些函数
+
+
+#ifndef COM_CONTROL_FUNCTION_H
+#define COM_CONTROL_FUNCTION_H
+
+
+//查找系统可用的串口号,将所有的串口号保存在pPortList数组里
+//输出:串口数portNumber,串口号数组pPortList
+//pPortList保存各串口的串口数字
+extern BOOL ScanPCCom( int *pPortList, int& portNumber );
+
+//判断串口是否被占有,串口可用返回true,否则返回false
+extern bool OnCheckComPort( const CString& portName );
+
+
+//功能:检测2个串口是否相同,相同返回True,否则返回false
+extern bool CompareTwoComPort( const CString port1, const CString port2 );
+
+//判断串口是否可用
+//可用返回true,否则返回false
+extern bool CheckComPortCanWork( const CString strPort );
+
+//判断串口是否为空
+//串口为空返回true,否则返回false
+extern bool CheckComPortIsEmpty( const CString strPort );
+
+//判断串口名称是否正确,正确的名称为“串口XX”
+//串口名称正确返回true, 否则返回false
+extern bool CheckComPortName( const CString strPort );
+
+//从串口数组中进行查找,查找出配置文件设置的串口号
+//输入:数组portArray,数组长度arrLength,查找元素itemValue
+//输出:元素的位置pos
+//返回值:查找成功返回true,否则返回false
+extern bool FindItemFromComList( int& pos, const int *portArray, const int& arrLength, const int& itemValue );
+
+
+const int MaxComPortNumber = 1024;
+
+#endif
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/DlgIMP.cpp b/Src/CH91PayloadSoftware/DlgIMP.cpp
new file mode 100644
index 0000000..fc019df
--- /dev/null
+++ b/Src/CH91PayloadSoftware/DlgIMP.cpp
@@ -0,0 +1,134 @@
+// 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;
+}
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/DlgIMP.h b/Src/CH91PayloadSoftware/DlgIMP.h
new file mode 100644
index 0000000..1177117
--- /dev/null
+++ b/Src/CH91PayloadSoftware/DlgIMP.h
@@ -0,0 +1,36 @@
+#pragma once
+#include "Global.h"
+#include "resource.h"
+#include "GlobalMessage.h"
+#include "ComControlFunction.h"
+#include "Serial.h"
+
+// CDlgIMP 对话框
+
+class CDlgIMP : public CDialogEx
+{
+ DECLARE_DYNAMIC(CDlgIMP)
+
+public:
+ CDlgIMP();
+ virtual ~CDlgIMP();
+
+// 对话框数据
+ enum { IDD = IDD_DLG_IMP };
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
+
+ DECLARE_MESSAGE_MAP()
+public:
+ void SetIMPData(CFrameIMPDown_ data);
+ afx_msg void OnBnClickedButton1();
+ afx_msg LRESULT ImpSerialConnectMessage(WPARAM param, LPARAM lparam); //IMP通信开始
+ virtual BOOL OnInitDialog();
+
+ CSerial m_SerialIMP; // IMP通信串口
+ char pSerialPort[20];//串口号
+ DWORD pSerialPortBaud;//端口号
+ //void onInitIMPFrame();//初始化IMP协议
+ afx_msg LRESULT OnUpdateIMPDownDataChecked(WPARAM param, LPARAM lparam); //处理IMP下行通过校验的遥测数据
+};
diff --git a/Src/CH91PayloadSoftware/FrameIMP_DOWN.cpp b/Src/CH91PayloadSoftware/FrameIMP_DOWN.cpp
new file mode 100644
index 0000000..3bd1321
--- /dev/null
+++ b/Src/CH91PayloadSoftware/FrameIMP_DOWN.cpp
@@ -0,0 +1,110 @@
+#include "StdAfx.h"
+#include "FrameIMP_Down.h"
+
+CFrameIMPDown_::CFrameIMPDown_(void)
+{
+ _tcscpy(Name, _T("IMP下行"));
+ FrameLength = 6;
+ HeadLength = 1;
+ Head[0] = 0x55;
+ memcpy(Addr(), Head, HeadLength);
+ CheckLength = 1;
+ CheckPos = FrameLength - 2;
+
+ memset(&Data,0,sizeof(DataIMPDown));
+ memset(recvDataValue, 0, 6);
+}
+
+
+CFrameIMPDown_::~CFrameIMPDown_(void)
+{
+}
+
+BOOL CFrameIMPDown_::FullFrame()
+{
+ int HeaderPos, HeaderPos2;
+ HeaderPos = FindHead(0, Length() - HeadLength); //找第一个帧头
+ if (0 == HeaderPos) {
+ //帧头在最前面
+ if (OnCheck()) //CRC校验
+ DoCheck();
+ else {
+ if (Length() < FrameLength) //数据长度不足,未通过CRC校验
+ {
+ if (Size() < FrameLength) //误码,未通过CRC校验
+ {
+ DoDropBYTE((UINT16)HeadLength); //丢弃帧头
+ }
+ return TRUE;
+ }
+ else //误码,未通过CRC校验
+ {
+ HeaderPos2 = FindHead(HeadLength, Length() - HeadLength);
+ if (HeaderPos2 >= 0)
+ {
+ Drop((UINT16) HeaderPos2);
+ return FALSE;
+ }
+ else
+ {
+ DoDropBYTE((UINT16) (Length()-(HeadLength-1)));
+ return TRUE;
+ }
+ }
+ }
+ } else if (HeaderPos < 0) {
+ //没找到帧头
+ DoDropBYTE((UINT16) (Length()-(HeadLength-1)));
+ } else {
+ //丢弃帧头前的数据
+ DoDropBYTE((UINT16) HeaderPos);
+ }
+ return FALSE;
+}
+
+BOOL CFrameIMPDown_::OnCheck()
+{
+ //数据帧校验
+ BYTE* p = Addr();
+ memcpy(recvDataValue, p, 5);
+ if (Length() < FrameLength)
+ {
+ return false;
+ }
+
+ struCHECK ck1=CheckCRC(p);
+ //if (p[CheckPos] == ck1.C0 && p[CheckPos + 1] == ck1.C1)//CRC校验
+ if (p[CheckPos] == ck1.C0 )//和校验
+ {
+ memcpy(recvDataValue, p, 5);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+void CFrameIMPDown_::DoCheck()
+{
+ CountFrameAll++;
+ CountFrameCheck++;
+ OnDataCheck();
+ Drop(FrameLength);
+}
+
+struCHECK CFrameIMPDown_::CheckCRC(BYTE* const p)
+{
+ return MakeCheckSum(p+1, FrameLength - HeadLength - CheckLength - 1);//1为帧尾,IMP有一个字节的帧尾
+}
+
+void CFrameIMPDown_::Decode()
+{
+ ProtocalIMPDown* pBuffIMP = (ProtocalIMPDown*)Addr();
+ Data.head = pBuffIMP->head;
+ Data.Bytes = pBuffIMP->Bytes;
+ Data.StatusWord = pBuffIMP->StatusWord;
+ Data.FaultWord = pBuffIMP->FaultWord;
+ Data.CHKSUM = pBuffIMP->CHKSUM;
+ Data.EndFlag = pBuffIMP->EndFlag;
+}
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/FrameIMP_DOWN.h b/Src/CH91PayloadSoftware/FrameIMP_DOWN.h
new file mode 100644
index 0000000..21a8a29
--- /dev/null
+++ b/Src/CH91PayloadSoftware/FrameIMP_DOWN.h
@@ -0,0 +1,84 @@
+
+#include "FrameRecieve.h"
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+
+#ifdef __WIN_32_VC__
+typedef unsigned char BYTE;
+typedef unsigned char INT8U;
+typedef unsigned short INT16U;
+typedef unsigned int INT32U;
+typedef char INT8S;
+typedef short INT16S;
+typedef int INT32S;
+#endif
+
+#pragma pack(1)
+//超视距通用协议帧
+typedef struct struProtocalIMPDown{
+ UINT8 head; //帧头0x
+ UINT8 Bytes; //字节数
+ UINT8 StatusWord; //状态字
+ UINT8 FaultWord; //故障字
+ UINT8 CHKSUM; //校验和
+ UINT8 EndFlag; //结束标志
+}ProtocalIMPDown;
+#pragma pack()
+
+//超视距通用帧数据
+typedef struct struDataIMPDown{
+ UINT8 head; //帧头0x
+ UINT8 Bytes; //预留
+ UINT8 StatusWord; //状态字
+ UINT8 FaultWord; //故障字
+ UINT8 CHKSUM; //校验和
+ UINT8 EndFlag; //结束标志
+}DataIMPDown;
+
+class CFrameIMPDown_ : public CFrameAbstract
+{
+public:
+ CFrameIMPDown_(void);
+ ~CFrameIMPDown_(void);
+
+protected:
+ virtual BOOL FullFrame();
+
+ virtual BOOL OnCheck();
+ void DoCheck();
+
+ virtual struCHECK CheckCRC(BYTE* const p);
+
+ virtual void Decode();
+ BYTE recvDataValue[6];
+
+public:
+ DataIMPDown Data; //IMP下行协议数据
+
+public:
+ float LimitedValueF(float val,float minimum, float maximum)
+ {
+ val = val>maximum?maximum:val;
+ val = valmaximum?maximum:val;
+ val = valmaximum?maximum:val;
+ val = val 0)
{
- g_UDPTrans2Server.WriteBuffer(Buffer + iTimes * 512, length%512);
+ // g_UDPTrans2Server.WriteBuffer(Buffer + iTimes * 512, length%512);
}
//g_UDPTrans2Server.WriteBuffer(buffer, length);
@@ -373,7 +373,7 @@ void CALLBACK UDPRevTgtInfo(const void* buffer, int length, UINT32 data)
}
}
-// CH96组播收数
+// L链组播收数
void GetFH96DataFromNet()
{
// 实时状态
@@ -393,26 +393,30 @@ void GetFH96DataFromNet()
&len);
if (ret != SOCKET_ERROR)
{
+
+
+ //if (g_udpStarted)
+ // {
+ // int iTimes = ret/512;
+ // for (int i = 0; i < iTimes; i++)
+ // {
+ // g_UDPTrans2Server.WriteBuffer(Buffer + i * 512, 512);
+ // }
+ // if (ret%512 > 0)
+ // {
+ // g_UDPTrans2Server.WriteBuffer(Buffer + iTimes * 512, ret%512);
+ // }
+ //
+ // //g_UDPTrans2Server.WriteBuffer(Buffer, ret);
+ // }
+
// 处理数据
SocketReceiveFH96Data(Buffer, ret);
/*if (g_tcpStarted)
{
g_TCPTrans2Server.WriteBuffer(Buffer, ret);
}*/
- if (g_udpStarted)
- {
- int iTimes = ret/512;
- for (int i = 0; i < iTimes; i++)
- {
- g_UDPTrans2Server.WriteBuffer(Buffer + i * 512, 512);
- }
- if (ret%512 > 0)
- {
- g_UDPTrans2Server.WriteBuffer(Buffer + iTimes * 512, ret%512);
- }
-
- //g_UDPTrans2Server.WriteBuffer(Buffer, ret);
- }
+
}
}
}
@@ -438,7 +442,7 @@ void SocketReceiveFH96Data(const void* buffer, int length)
fwrite(buffer, static_cast(1), length, g_pFileSaveCH96txData); // 写数据
// 向移动终端发送数据
- //g_UdpSend2Mobile.WriteBuffer(buffer, length);
+ // g_UdpSend2Mobile.WriteBuffer(buffer, length);
}
}
@@ -576,6 +580,7 @@ void ProcessCH96Data()
if (g_CH96_h264decoder != nullptr)
{
g_CH96_h264decoder->decoding(midBuffer + 8, 248);
+ g_UDPTrans2Server.WriteBuffer(midBuffer + 8, 248);
}
/*
if(g_tcpStarted==true){
@@ -2778,3 +2783,20 @@ void ProcessH264VideoData()
}
}
}
+
+//功能:串口数字换算到标准的串口输出
+//输入:串口数值portID
+//输出:串口数组port
+void GetSerialPortNumber(char *port, const CString portID)
+{
+
+ CString strSerialPortNumber = portID;
+ strSerialPortNumber.Delete( 0, 4 );
+ int ptNumber = atoi( strSerialPortNumber );
+
+ CString str = _T( "" );
+ str.Format( "COM%d", ptNumber );
+
+ memcpy( port, str.GetBuffer( 255 ), str.GetLength() );
+ str.ReleaseBuffer();
+}
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/Global.h b/Src/CH91PayloadSoftware/Global.h
index 13e7548..be0ff31 100644
--- a/Src/CH91PayloadSoftware/Global.h
+++ b/Src/CH91PayloadSoftware/Global.h
@@ -4,6 +4,7 @@
#include "MUDP.h"
#include "FrameFKU_Camera.h"
+
#define SAFE_DELETE(p) { if(p) { delete (p); (p) = nullptr; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p) = nullptr; } }
@@ -135,5 +136,4 @@ extern void GetH264VideoDataFromNet();
extern void SocketReceiveH264VideoData(const void* buffer, int length);
extern void ProcessH264VideoData();
-
-
+extern void GetSerialPortNumber(char *port, const CString portID);//串口数字换算到标准的串口输出
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/GlobalMember.cpp b/Src/CH91PayloadSoftware/GlobalMember.cpp
index 96e84f0..08a9c95 100644
--- a/Src/CH91PayloadSoftware/GlobalMember.cpp
+++ b/Src/CH91PayloadSoftware/GlobalMember.cpp
@@ -21,6 +21,7 @@ HWND g_JoyStickControlDlgHwnd = nullptr;
HWND g_CH96CtrlDlgHwnd = nullptr;
HWND g_MulticastSocketReceiveDlgHwnd = nullptr;
HWND g_mapMatchDlg = nullptr;
+HWND g_IMPDLGhwnd;//IMP窗口句柄
// 视频解码器 及 图像存储空间
H264Decode g_EO_Decoder;
@@ -466,4 +467,24 @@ HANDLE g_hMutex_ImgStitch = nullptr;
std::deque g_StitchImgDeque;
BOOL g_bRun = FALSE;
-BOOL g_bStop = FALSE;
+BOOL g_bStop = FALSE;
+
+
+/*****IMP*****/
+CFrameIMPDown_ g_FrameIMPDown;//IMP协议类实例化
+bool IMPDlgWindowVisible;//IMP对话框为可视状态
+//CDlgIMP * g_DlgIMP;//IMP对话框
+//波特率列表
+CString gComBaudItems[BAUDITEMNUM] =
+{
+ "1200",
+ "2400",
+ "4800",
+ "9600",
+ "14400",
+ "19200",
+ "38400",
+ "56000",
+ "57600",
+ "115200"
+};
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/GlobalMember.h b/Src/CH91PayloadSoftware/GlobalMember.h
index 3cf8286..225c9a1 100644
--- a/Src/CH91PayloadSoftware/GlobalMember.h
+++ b/Src/CH91PayloadSoftware/GlobalMember.h
@@ -10,6 +10,8 @@
using namespace cv;
#include "QBStru.h"
+#include "FrameIMP_DOWN.h"
+#include "DlgIMP.h"
// 命名
typedef unsigned __int8 UINT8;
@@ -38,6 +40,7 @@ extern HWND g_JoyStickControlDlgHwnd; // 摇
extern HWND g_CH96CtrlDlgHwnd; // CH96控制页面
extern HWND g_MulticastSocketReceiveDlgHwnd; // 组播收数窗口句柄
extern HWND g_mapMatchDlg;
+extern HWND g_IMPDLGhwnd;//IMP窗口句柄
// 视频解码器 及 图像存储空间
@@ -486,3 +489,13 @@ extern std::deque g_StitchImgDeque;
extern BOOL g_bRun;
extern BOOL g_bStop;
+
+/*****IMP*****/
+extern CFrameIMPDown_ g_FrameIMPDown;//IMP协议类实例化
+extern bool IMPDlgWindowVisible;//IMP对话框为可视状态
+//extern CDlgIMP* g_DlgIMP;//IMP对话框
+//串口相关
+const unsigned BAUDITEMNUM =10; //波特率数目
+const unsigned NCOUNTER=500; //失败尝试次数
+//波特率列表
+extern CString gComBaudItems[BAUDITEMNUM];
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/GlobalMessage.h b/Src/CH91PayloadSoftware/GlobalMessage.h
index dfa7e58..85403a3 100644
--- a/Src/CH91PayloadSoftware/GlobalMessage.h
+++ b/Src/CH91PayloadSoftware/GlobalMessage.h
@@ -92,4 +92,8 @@ const UINT WM_OUTPUT_IMG = WM_USER + 6006;
const UINT WM_OUTPUT_QUADRANGLE = WM_USER + 6007;
+//IMP
+#define WM_UPDATE_IMPDOWN_CHECKED WM_USER + 7008
+#define WM_UPDATE_IMP_SERIAL_CONNECT WM_USER + 7009
+
#endif
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/IMPConect.cpp b/Src/CH91PayloadSoftware/IMPConect.cpp
new file mode 100644
index 0000000..1cc5512
--- /dev/null
+++ b/Src/CH91PayloadSoftware/IMPConect.cpp
@@ -0,0 +1,12 @@
+#include "StdAfx.h"
+#include "IMPConect.h"
+
+
+IMPConect::IMPConect(void)
+{
+}
+
+
+IMPConect::~IMPConect(void)
+{
+}
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/IMPConect.h b/Src/CH91PayloadSoftware/IMPConect.h
new file mode 100644
index 0000000..dd13dda
--- /dev/null
+++ b/Src/CH91PayloadSoftware/IMPConect.h
@@ -0,0 +1,7 @@
+#pragma once
+class IMPConect
+{
+public:
+ IMPConect(void);
+ ~IMPConect(void);
+};
\ No newline at end of file
diff --git a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp
index 71e0fb9..754404d 100644
--- a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp
+++ b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp
@@ -33,6 +33,8 @@ 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"))
@@ -55,7 +57,9 @@ CMulticastSocketReceiveDlg::CMulticastSocketReceiveDlg(CWnd* pParent /*=NULL*/)
//卫通UDP单播
m_strSACUDPIPAddr = "";
m_nSACUDPRemotePort = 2203;
- m_nSACUDPLocalPort = 8002;
+ m_nSACUDPLocalPort = 8009;
+
+ m_sysSetComNumber = 0;//窜口数
}
CMulticastSocketReceiveDlg::~CMulticastSocketReceiveDlg()
@@ -68,6 +72,10 @@ void CMulticastSocketReceiveDlg::DoDataExchange(CDataExchange* 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);
+
}
@@ -80,6 +88,12 @@ BEGIN_MESSAGE_MAP(CMulticastSocketReceiveDlg, CDialogEx)
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()
@@ -102,10 +116,15 @@ BOOL CMulticastSocketReceiveDlg::OnInitDialog()
// 设置按钮状态
GetDlgItem(IDC_BTN_MULTISOCKET_CONNECT)->EnableWindow(TRUE);
- m_strServerPayLoadIPSend = _T("123.57.54.1");
+ m_strServerPayLoadIPSend = _T("192.168.1.20"); // udp单播转发的服务器IP
m_nServerSendLocalPort = 60302;
- m_nServerSendObjectPort = 11302;
+ m_nServerSendObjectPort = 13001; // 远端端口
+
+ //添加串口号到列表框
+ AddPortNumberToComboBox();
+ //添加波特率到列表框
+ AddBaudNumberToComboBox();
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
@@ -444,12 +463,12 @@ void CMulticastSocketReceiveDlg::OnRadioBtnVideoSrcClicked()
{
// 获取主机本地IP并显示
CString str_LocalIP_Receive;
- str_LocalIP_Receive = _T("192.168.0.4");
+ 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");
+ 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");
@@ -461,7 +480,7 @@ void CMulticastSocketReceiveDlg::CreateUDPSocketReceiveData()
{
//卫通UDP连接
m_nSACUDPSocket.SetCallBack(OnReadFromUDPSACKU, this);
- CString strLocalIPAddr = _T("192.168.0.4");
+ CString strLocalIPAddr = _T("192.168.1.20"); // 卫通接受IP
m_nSACUDPSocket.SetParams(strLocalIPAddr, m_nSACUDPLocalPort, m_strSACUDPIPAddr, m_nSACUDPRemotePort);
if (m_nSACUDPSocket.StartListening())
{
@@ -480,3 +499,187 @@ void CMulticastSocketReceiveDlg::CreateUDPSocketReceiveData()
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());
+
+}
diff --git a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h
index 98c7fcc..8c662ac 100644
--- a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h
+++ b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h
@@ -9,6 +9,8 @@
#include "afxwin.h"
#include "afxcmn.h"
#include "opencv2/core/core.hpp"
+#include "ComControlFunction.h"
+
// CMulticastSocketReceiveDlg 对话框
class CMulticastSocketReceiveDlg : public CDialogEx
@@ -81,4 +83,28 @@ public:
int m_nSACUDPLocalPort; //卫通UDP单播本地端口
CUDPSocket m_nSACUDPSocket; //卫通UDP通信套接字
void CreateUDPSocketReceiveData(); //卫通UDP数据通信创建
+
+ //IMP
+ CString mComPortIMP; //IMP通信串口号
+ CString mComBaudIMP; //IMP通信串口波特率
+ //const int MaxComPortNumber = 1024;
+ //const unsigned BAUDITEMNUM = 10; //波特率数目
+ //const unsigned NCOUNTER = 500; //失败尝试次数
+private:
+ //添加系统串口到组合选择框
+ void AddPortNumberToComboBox();
+ void SetComboBoxCurSel( int comboBoxID, const int *portArray, const int& arrLength, CString& strPortNumber );
+ void SetComboBaudCurSel( int comboBoxID, const CString *baudArray, const int& arrLength, CString& strBaudNumber );
+ bool FindItemFromBaudList( int& pos, const CString *baudArray, const int& arrLength, const int& itemValue );
+ void AddBaudNumberToComboBox();
+ void OrderComPortList( int *portArray, const int& arrLength );
+public:
+ afx_msg void OnCbnSelchangePortIMP();//串口号选择触发函数
+ afx_msg void OnCbnSelchangeBaudIMP();//串口波特率选择触发函数
+private:
+ int m_sysSetComNumber; //串口数
+
+public:
+ afx_msg void OnBnClickedBtnImpSerialConnect();
+ afx_msg void OnBnClickedBtnImpSerialDisconnect();
};
diff --git a/Src/CH91PayloadSoftware/Serial.cpp b/Src/CH91PayloadSoftware/Serial.cpp
index f06cd0a..9ed4292 100644
--- a/Src/CH91PayloadSoftware/Serial.cpp
+++ b/Src/CH91PayloadSoftware/Serial.cpp
@@ -218,9 +218,9 @@ BYTE parity ,校
BYTE stopbits,停止位长度
返回值: BOOL 型,表明是否初始化成功
备注:
-修改记录: 日期: 作者: 备注:
+修改记录: 日期: 作者: 备注:char *serial_port,
-----------------------------------------------------------------------------*/
-BOOL CSerial::Initialize(char *serial_port,
+BOOL CSerial::Initialize(PCTSTR serial_port,
DWORD baud_rate/*=CBR_9600*/,
BYTE byte_size/*=8*/,
BYTE parity/*=PARITY_NONE*/,
@@ -228,7 +228,12 @@ BOOL CSerial::Initialize(char *serial_port,
{
if(m_bIsInitialized)
DeInit();
- m_hComHandle=CreateFile(serial_port,
+
+ TCHAR name[256];
+ _tcscpy(name, _T("\\\\.\\"));
+ _tcscat(name, serial_port);
+
+ m_hComHandle=CreateFile(name,
GENERIC_READ|GENERIC_WRITE,
0,
0,
diff --git a/Src/CH91PayloadSoftware/Serial.h b/Src/CH91PayloadSoftware/Serial.h
index 77d681a..1adac55 100644
--- a/Src/CH91PayloadSoftware/Serial.h
+++ b/Src/CH91PayloadSoftware/Serial.h
@@ -97,9 +97,9 @@ public:
4. parity ,校验类型
5. stopbits,停止位长度
输出:
- 返回值: BOOL 型,表明是否初始化成功
+ 返回值: BOOL 型,表明是否初始化成功char *serial_port,
*/
- BOOL Initialize(char *serial_port,
+ BOOL Initialize(PCTSTR serial_port,
DWORD baud_rate = CBR_9600,
BYTE byte_size = 8,
BYTE parity = NOPARITY,
diff --git a/Src/CH91PayloadSoftware/basetype.h b/Src/CH91PayloadSoftware/basetype.h
index 000417f..b088f8e 100644
--- a/Src/CH91PayloadSoftware/basetype.h
+++ b/Src/CH91PayloadSoftware/basetype.h
@@ -233,4 +233,23 @@ inline struCHECK getCRC8(UINT8* data, int len)
return ck;
}
+//和校验
+//inline UINT8 MakeCheckSum(UINT8 *ptr, UINT8 len)
+inline struCHECK MakeCheckSum(UINT8 *ptr, UINT8 len)
+{
+ UINT8 i;
+ UINT8 CK_A=0;
+ BYTE *pData = ptr;
+
+ for (i=0; i < len; ++i )
+ {
+ CK_A = CK_A + ptr[i];
+ }
+
+ //return CK_A;
+ struCHECK ck;
+ ck.C0=CK_A;
+ ck.C1=0x00;
+ return ck;
+}
#endif//_BASE_TYPE_H_
diff --git a/Src/CH91PayloadSoftware/bufferloop.h b/Src/CH91PayloadSoftware/bufferloop.h
index 6c19845..af47aaa 100644
--- a/Src/CH91PayloadSoftware/bufferloop.h
+++ b/Src/CH91PayloadSoftware/bufferloop.h
@@ -66,9 +66,12 @@ public:
memcpy(FBuffer, abl.FBuffer, FSize);
}
virtual ~CBufferLoop(){
+
delete[] FBuffer;
FBuffer = 0;
- delete cs;
+ //by CYH 不注释会报错,原因未知
+ //delete cs;
+
}
CBufferLoop& operator=(const CBufferLoop& abl)
{
diff --git a/Src/CH91PayloadSoftware/resource.h b/Src/CH91PayloadSoftware/resource.h
index 70dc420..c33093b 100644
Binary files a/Src/CH91PayloadSoftware/resource.h and b/Src/CH91PayloadSoftware/resource.h differ
diff --git a/Src/CH91PayloadSoftware/stdafx.h b/Src/CH91PayloadSoftware/stdafx.h
index 4037b91..0f549b4 100644
--- a/Src/CH91PayloadSoftware/stdafx.h
+++ b/Src/CH91PayloadSoftware/stdafx.h
@@ -35,6 +35,7 @@
#endif // _AFX_NO_AFXCMN_SUPPORT
#include // 功能区和控件条的 MFC 支持
+#include
diff --git a/鐗堟湰璇存槑.txt b/鐗堟湰璇存槑.txt
new file mode 100644
index 0000000..b00c468
--- /dev/null
+++ b/鐗堟湰璇存槑.txt
@@ -0,0 +1,3 @@
+202401221
+澧炲姞IMP瀵硅瘽妗
+澧炲姞IMP涓婁笅琛岄氫俊杩炴帴
\ No newline at end of file