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.

490 lines
16 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.

#include "stdafx.h"
#include "GlobalMember.h"
// 工作模式
bool g_bWorkMode = false; // true回放 false实时
BOOL g_bMulticastSocketConnect = FALSE;
BOOL g_bReplayPlay = FALSE; // true: 回放中处于播放态, false: 回放中处于暂停态
int g_ChartTabNum = 1; // 图表分析窗口中tab页的编号1为第一页以此类推
BOOL g_bShowEvaluation = FALSE; // 载荷评价对话框是否展开
BOOL g_bVideoCapture = FALSE; //视频录制
HWND g_mainDlgHwnd = nullptr;
HWND g_ReplayDlgHwnd = nullptr;
HWND g_MapGuideHwnd = nullptr;
HWND g_QBTargetHwnd = nullptr;
HWND g_PhotoCtrlDlgHwnd = nullptr;
HWND g_QBFunctionsHwnd = nullptr;
HWND g_QBTargetTrackFunctionsHwnd = nullptr;
HWND g_SendControlCommandDlgHwnd = nullptr;
HWND g_JoyStickControlDlgHwnd = nullptr;
HWND g_CH96CtrlDlgHwnd = nullptr;
HWND g_MulticastSocketReceiveDlgHwnd = nullptr;
HWND g_mapMatchDlg = nullptr;
HWND g_IMPDLGhwnd;//IMP窗口句柄
// 视频解码器 及 图像存储空间
H264Decode g_EO_Decoder;
H264Decode g_IR_Decoder;
unsigned char g_CH96_ImgBuffer[1920 * 1088 * 3];
unsigned char g_IR_ImgBuffer[720 * 576 * 3];
BOOL g_bEOImgUpdate = FALSE; // 界面EO图像是否更新TRUE更新 FALSE未更新
BOOL g_bIRImgUpdate = FALSE; // 界面IR图像是否更新TRUE更新 FALSE未更新
// 解码器对象
DecoderInterface *g_CH96_h264decoder = nullptr;
//数据转发
CTCPSocket g_TCPTrans2Server;
BYTE g_tcpData[276];
bool g_tcpStarted=false;
CUDPSocket g_UDPTrans2Server;
bool g_udpStarted = false;
unsigned int g_frameCountTX=0;
// 当计算机性能较差时,采用硬解码,同时不使用图像库
cv::Mat g_ImgforLowComputer = cv::Mat(1080, 1920, CV_8UC3, cv::Scalar(0, 0, 0));
// 表征计算机性能的BOOL变量
BOOL g_bGoodComputer = FALSE;
// 复接数据
struProtocal_FJ g_ImgFJData;
struProtocal_FJ g_SocketFJData; // 组播复接数据
struProtocal_FJ g_PhotoFJData;
struTranslateProtocal_FJ g_ImgTransFJData; // 转换后
struTranslateProtocal_FJ g_PhotoTransFJData; // 转换后
struSocketProtocal g_LocationSocketData; // 位置信息组播数据
Protocal96TXD g_CH96FJData; // CH96原始复接数据
Data96TXD g_CH96TransFJData; // CH96显示用复接数据
struQB_FJ g_CH96QBData; // CH96目标定位用情报数据
struQB_FJ g_IRFJData;
QBStru g_QB;
// 跟踪偏移量
CPoint g_TrackOffset(0, 0);
BOOL g_bTracking = FALSE;
// 摇杆控制量——伺服移动速度
extern int g_ServoSpeedUpDown = 0; // [-512, 512]
extern int g_ServoSpeedLeftRight = 0; // [-512, 512]
//主界面指令盘点击偏移量
CPoint g_CtrlAzimuth(0, 0); //方位角
CPoint g_CtrlPitch(0, 0); //俯仰角
//主窗口控制指令实时显示变量
CString g_sCtrlInstruction;
// 存储全部UDP接收数据文件
FILE* g_pFileSaveCH96txData = nullptr; // 全部UDP接收数据
FILE* g_pFileSaveVideoDataCH96 = nullptr; // 可见光 264编码部分
FILE* g_pFileSaveVideoForKCF = nullptr; // KCF视频264部分
FILE* g_pFileSaveVideoH264Data = nullptr; // 光电吊舱 264编码部分
// 数据处理互斥句柄
HANDLE g_hMutex_ProcessData = NULL;
HANDLE g_hMutex_ProcessDataSocket = NULL;
HANDLE g_hMutex_SaveFJData = NULL;
HANDLE g_hMutex_ShowFJData = NULL;
HANDLE g_hMutex_ProcessDataCH96 = NULL;
HANDLE g_hMutex_ProcessDataH264 = NULL;
// 图像显示处理互斥句柄
HANDLE g_hMutex_DisplayVideoCH96 = NULL;
HANDLE g_hMutex_DisplayIRVideo = NULL;
HANDLE g_hMutex_DisplayDCPhoto = NULL;
// 组播组包/发送互斥句柄
HANDLE g_hMutex_SocketSendLocation = NULL;
HANDLE g_hMutex_SocketSendIR = NULL;
HANDLE g_hMutex_SocketSendEO = NULL;
// UDP 收数(来自服务器)
BYTE g_receiveDataBuffer[g_MaxBufferLen];
BYTE g_receiveDataBuffer_middle[g_MaxBufferLen];
int g_validDataLen = 0;
// 接收到的有效数据:用于进行组播组包
BYTE g_receiveDataBufferSocket[g_MaxBufferLenSocket];
BYTE g_receiveDataBuffer_middleSocket[g_MaxBufferLenSocket];
int g_validDataLenSocket = 0;
// 解码图像存储队列
std::deque<cv::Mat> g_CH96VideoDeque;
// 目标定位用复接数据存储队列
std::deque<struQB_FJ> g_TgtLocStructDeque; // 目标定位 复接数据 队列 容量
//主界面数引功能全局控制变量
float g_Guide_Azimuth = 0; //方位角
float g_Guide_Pitch = -90; //俯仰角
bool g_bGuide_Button = false; //主界面数引键默认抬起
// ProcessData线程开关变量
bool g_bProcessDataFlag = false;
bool g_bProcessDataSocketFlag = false;
// 手动搜索控制指令盘变量
double g_MS_Ratio = 0; // 比率
double g_MS_Angle = 0; // 角度
// 精确飞机位置姿态
double g_UAVLon = 0;
double g_UAVLat = 0;
double g_UAVAlt = 0;
double g_UAVRoll = 0;
double g_UAVYaw = 0;
double g_UAVPitch = 0;
//定义UDP据发送对象
CUDPSocket g_UdpSend2Payload;
CUDPSocket g_UdpSendTgtInfo;
CUDPSocket g_UdpSend2Mobile;
bool g_bCreatUDP;
bool g_bCreatTgtInfoUDP;
bool g_bCreatSend2Mobile;
BYTE g_payloadCtrlInstruction[32]; // 发送指令
int g_payloadCtrlProtocol = 0; // 载荷控制开关指令
BYTE g_payloadCtrlInstructionFromVK[8]; // 收到来自视频键盘的控制指令
BOOL g_bCtrlFromSoftware = FALSE; // 判断指令是否来自视频键盘或者软件软键盘 TURE:视频键盘 FALSE:视频键盘
bool g_CtrlFocusThroughMouseWheel = false; // 是否通过滚轮控制载荷焦距
BOOL g_bShowEOInBigArea = TRUE; // 变换显示,在大区域显示可见光或红外
// 定义收取目标定位信息结构体
MostSimpleTgtInfo tgtRecvInfo;
// 载荷软件存储文件
CString g_DataSavePath = "";
// 地图导引模块中高程设置变量
float g_DEMSetting = 0.0;
// 设置跟踪阈值全局变量
int g_ThresholdSetting = 6; // 范围[0,10]默认6
BOOL g_bMapDirectGuide = FALSE; // 是否是地图直接导引标志
// 数码照片名称
CString g_str_DCname = "";
CString g_DCPath = "";
cv::Mat g_DCImg;
// 目标定位
HANDLE g_hMutex_TgtLoc = NULL;// 目标定位互斥句柄
double g_LLA[3] = {0, 0, 0};// 定位结果
double g_VD[2] = {0, 0}; // 动目标定位速度方向
double g_TgtLocReliability = 0.0; // 定位结果可信度
BOOL g_bMoveTarget = FALSE; // TRUE动目标定位 FALSE静目标定位
BOOL g_bWithLaser = TRUE; //
BOOL g_bStartTargetLoc = FALSE;
BOOL g_bReStartTargetLoc = FALSE; // TRUE: 重新开始目标定位 FALSE: 不重新开始目标定位
CString g_strTargetLocResult_Lon = ""; // 目标定位经度
CString g_strTargetLocResult_Lat = ""; // 目标定位纬度
// 语言变量获取语言内容时先用char格式获取再将char转为CString
// [TITLE]
char g_char_TitleReplay[30]; // 视频回放标题
CString g_str_TitleReplay = "";
// [WARNING]
char g_char_WarningTitle[100]; // 信息提示
CString g_str_WarningTitle = "";
char g_char_WarningStorage[100]; // 磁盘空间
CString g_str_WarningStorage= "";
char g_char_WarningUDPReceive[100]; // UDP收数提示测控、情报
CString g_str_WarningUDPReceive = "";
char g_char_WarningSerialReceive[100]; // 串口收数提示
CString g_str_WarningSerialReceive = "";
char g_char_WarningPayloadControl[100]; // 载荷控制连接提示
CString g_str_WarningPayloadControl = "";
char g_char_WarningLRFCode[100]; // 激光编码密码登陆提示
CString g_str_WarningLRFCode = "";
char g_char_WarningLRFNumber[100]; // 激光编码周期范围提示
CString g_str_WarningLRFNumber = "";
char g_char_WarningInputNumber[100]; // 输入数字提示(数引)
CString g_str_WarningInputNumber = "";
char g_char_WarningMapAltSet[100]; // 地图高程设定提示
CString g_str_WarningMapAltSet = "";
// [STATIC]
char g_char_CommandSend[30]; // 发送指令
CString g_str_CommandSend;
char g_char_CommandResponse[30]; // 回报指令
CString g_str_CommandResponse;
char g_char_State[30]; // 载荷状态
CString g_str_State;
char g_char_FilePath[30]; // 文件路径
CString g_str_FilePath;
char g_char_EOCommand[30]; // 可见光相机指令
CString g_str_EOCommand = "";
char g_char_IRCommand[30]; // 红外相机指令
CString g_str_IRCommand = "";
char g_char_Drift[30]; // 陀螺修正
CString g_str_Drift = "";
char g_char_AVTGate[30]; // 波门位移
CString g_str_AVTGate = "";
char g_char_LogIn[30]; // 密码登陆
CString g_str_LogIn = "";
char g_char_LaserNum[30]; // 编码序号:
CString g_str_LaserNum = "";
char g_char_LaserPeriod[30]; // 编码周期:
CString g_str_LaserPeriod = "";
// [COMMAND]——按照协议顺序编写
char g_char_TargetLonSet[30]; // 目标经度装订
CString g_str_TargetLonSet = "";
char g_char_TargetLatSet[30]; // 目标纬度导引
CString g_str_TargetLatSet = "";
char g_char_TargetAltSet[30]; // 目标高度导引
CString g_str_TargetAltSet = "";
char g_char_GeographyTracking[30]; // 地理坐标跟踪
CString g_str_GeographyTracking = "";
char g_char_ManualSlew[30]; // 手动搜索
CString g_str_ManualSlew = "";
char g_char_VerticalView[30]; // 锁定
CString g_str_VerticalView = "";
char g_char_AutoScan[30]; // 扫描
CString g_str_AutoScan = "";
char g_char_AngleLock[30]; // 数引
CString g_str_AngleLock = "";
char g_char_TurretReset[30]; // 平台复位
CString g_str_TurretReset = "";
char g_char_DriftRight[30]; // 陀螺右修
CString g_str_DriftRight = "";
char g_char_DriftLeft[30]; // 陀螺左修
CString g_str_DriftLeft = "";
char g_char_DriftUp[30]; // 陀螺上修
CString g_str_DriftUp = "";
char g_char_DriftDown[30]; // 陀螺下修
CString g_str_DriftDown = "";
char g_char_TurretStow[30]; // 载荷升
CString g_str_TurretStow = "";
char g_char_TurretFWD[30]; // 载荷降
CString g_str_TurretFWD = "";
char g_char_EOAutoTracking[30]; // EO自动跟踪
CString g_str_EOAutoTracking = "";
char g_char_IRAutoTracking[30]; // IR自动跟踪
CString g_str_IRAutoTracking = "";
char g_char_CorrelationTracking[30]; // 相关跟踪
CString g_str_CorrelationTracking = "";
char g_char_CentroidBlackTracking[30]; // 重心黑
CString g_str_CentroidBlackTracking = "";
char g_char_CentroidWhiteTracking[30]; // 重心白
CString g_str_CentroidWhiteTracking = "";
char g_char_OSDONOFF[30]; // 字符叠加/消隐
CString g_str_OSDONOFF = "";
char g_char_OffsetTracking[30]; // 偏心跟踪
CString g_str_OffsetTracking = "";
char g_char_StaticTargetTracking[30]; // 静态目标跟踪
CString g_str_StaticTargetTracking = "";
char g_char_MoveTargetTracking[30]; // 动态目标跟踪
CString g_str_MoveTargetTracking = "";
char g_char_ViewTracking[30]; // 场景跟踪
CString g_str_ViewTracking = "";
char g_char_AVTGateSizeBig[30]; // 大波门
CString g_str_AVTGateSizeBig = "";
char g_char_AVTGateSizeSmall[30]; // 小波门
CString g_str_AVTGateSizeSmall = "";
char g_char_AVTGateSizeMiddle[30]; // 中波门
CString g_str_AVTGateSizeMiddle = "";
char g_char_AVTGateSizeAuto[30]; // 自适应波门
CString g_str_AVTGateSizeAuto = "";
char g_char_ImgEnhanceON[30]; // 图像增强开
CString g_str_ImgEnhanceON = "";
char g_char_ImgEnhanceOFF[30]; // 图像增强关
CString g_str_ImgEnhanceOFF = "";
char g_char_AVTGateRight[30]; // 波门右移
CString g_str_AVTGateRight = "";
char g_char_AVTGateLeft[30]; // 波门左移
CString g_str_AVTGateLeft = "";
char g_char_AVTGateUp[30]; // 波门上移
CString g_str_AVTGateUp = "";
char g_char_AVTGateDown[30]; // 波门下移
CString g_str_AVTGateDown = "";
char g_char_LRFPowerON[30]; // 激光电源开
CString g_str_LRFPowerON = "";
char g_char_LRFPowerOFF[30]; // 激光电源关
CString g_str_LRFPowerOFF = "";
char g_char_LRFArmed[30]; // 激光测距开
CString g_str_LRFArmed = "";
char g_char_LRFSafe[30]; // 激光测距关
CString g_str_LRFSafe = "";
char g_char_LDArmed[30]; // 激光照射开
CString g_str_LDArmed = "";
char g_char_LDSafe[30]; // 激光照射关
CString g_str_LDSafe = "";
char g_char_LaserNo1[30]; // 激光编码1
CString g_str_LaserNo1 = "";
char g_char_LaserNo2[30]; // 激光编码2
CString g_str_LaserNo2 = "";
char g_char_LaserNo3[30]; // 激光编码3
CString g_str_LaserNo3 = "";
char g_char_LaserNo4[30]; // 激光编码4
CString g_str_LaserNo4 = "";
char g_char_LaserNo5[30]; // 激光编码5
CString g_str_LaserNo5 = "";
char g_char_LaserNo6[30]; // 激光编码6
CString g_str_LaserNo6 = "";
char g_char_LaserNo7[30]; // 激光编码7
CString g_str_LaserNo7 = "";
char g_char_LaserNo8[30]; // 激光编码8
CString g_str_LaserNo8 = "";
char g_char_LaserNo9[30]; // 激光编码9
CString g_str_LaserNo9 = "";
char g_char_LaserNo10[30]; // 激光编码10
CString g_str_LaserNo10 = "";
char g_char_LaserLoad[30]; // 激光编码加载
CString g_str_LaserLoad = "";
char g_char_ICRON[30]; // 低照度增强开
CString g_str_ICRON = "";
char g_char_ICROFF[30]; // 低照度增强关
CString g_str_ICROFF = "";
char g_char_DefogON[30]; // 透雾开
CString g_str_DefogON = "";
char g_char_DefogOFF[30]; // 透雾关
CString g_str_DefogOFF = "";
char g_char_EOFocusPlus[30]; // EO远焦
CString g_str_EOFocusPlus = "";
char g_char_EOFocusMinus[30]; // EO近焦
CString g_str_EOFocusMinus = "";
char g_char_EOZoomOut[30]; // EO视场大
CString g_str_EOZoomOut = "";
char g_char_EOZoomIn[30]; // EO视场小
CString g_str_EOZoomIn = "";
char g_char_EOLightManual[30]; // EO手动调光
CString g_str_EOLightManual = "";
char g_char_EOLightAuto[30]; // EO自动调光
CString g_str_EOLightAuto = "";
char g_char_EOLightPlus[30]; // EO亮度+
CString g_str_EOLightPlus = "";
char g_char_EOLightMinus[30]; // EO亮度-
CString g_str_EOLightMinus = "";
char g_char_EOPowerON[30]; // EO电源开
CString g_str_EOPowerON = "";
char g_char_EOPowerOFF[30]; // EO电源关
CString g_str_EOPowerOFF = "";
char g_char_EOWDRON[30]; // EO宽动态开
CString g_str_EOWDRON = "";
char g_char_EOWDROFF[30]; // EO宽动态关
CString g_str_EOWDROFF = "";
char g_char_EOFocusAuto[30]; // EO自动调焦
CString g_str_EOFocusAuto = "";
char g_char_EOFocusRealTime[30]; // EO实时调焦
CString g_str_EOFocusRealTime = "";
char g_char_IRFocusPlus[30]; // IR远焦
CString g_str_IRFocusPlus = "";
char g_char_IRFocusMinus[30]; // IR近焦
CString g_str_IRFocusMinus = "";
char g_char_IRFocusAuto[30]; // IR自动调焦
CString g_str_IRFocusAuto = "";
char g_char_IRFocusRealTime[30]; // IR实时调焦
CString g_str_IRFocusRealTime = "";
char g_char_IRZoomOut[30]; // IR视场大
CString g_str_IRZoomOut = "";
char g_char_IRZoomIn[30]; // IR视场小
CString g_str_IRZoomIn = "";
char g_char_BHWH[30]; // IR黑白热
CString g_str_BHWH = "";
char g_char_IRCalibration[30]; // IR校正
CString g_str_IRCalibration = "";
char g_char_IRLightManual[30]; // IR手动调光
CString g_str_IRLightManual = "";
char g_char_IRLightAuto[30]; // IR自动调光
CString g_str_IRLightAuto = "";
char g_char_IRLightPlus[30]; // IR亮度+
CString g_str_IRLightPlus = "";
char g_char_IRLightMinus[30]; // IR亮度-
CString g_str_IRLightMinus = "";
char g_char_IRContrastPlus[30]; // IR对比度+
CString g_str_IRContrastPlus = "";
char g_char_IRContrastMinus[30]; // IR对比度-
CString g_str_IRContrastMinus = "";
char g_char_DDEON[30]; // IR边缘锐化开
CString g_str_DDEON = "";
char g_char_DDEOFF[30]; // IR边缘锐化关
CString g_str_DDEOFF = "";
char g_char_IRPowerON[30]; // IR电源开
CString g_str_IRPowerON = "";
char g_char_IRPowerOFF[30]; // IR电源关
CString g_str_IRPowerOFF = "";
char g_char_ImgTypeSet[30]; // 设置图像类型
CString g_str_ImgTypeSet = "";
char g_char_ImgFlowSet[30]; // 设置图像码流
CString g_str_ImgFlowSet = "";
char g_char_DCWBManual[30]; // DC手动白平衡
CString g_str_DCWBManual = "";
char g_char_DCWBAuto[30]; // DC自动白平衡
CString g_str_DCWBAuto = "";
char g_char_SingleShoot[30]; // 单拍
CString g_str_SingleShoot = "";
char g_char_CC2s[30]; // 两秒连拍
CString g_str_CC2s = "";
char g_char_CC4s[30]; // 四秒连拍
CString g_str_CC4s = "";
char g_char_CCOverlap[30]; // 保证重叠率连拍
CString g_str_CCOverlap = "";
char g_char_CCAutoScan[30]; // 摆扫连拍
CString g_str_CCAutoScan = "";
char g_char_DCExposureAuto[30]; // DC自动曝光
CString g_str_DCExposureAuto = "";
char g_char_DCExposureManual[30]; // DC手动曝光
CString g_str_DCExposureManual = "";
char g_char_DCExposurePlus[30]; // DC曝光+
CString g_str_DCExposurePlus = "";
char g_char_DCExposureMinus[30]; // DC曝光-
CString g_str_DCExposureMinus = "";
char g_char_DCExposureVHR[30]; // DC速高比曝光
CString g_str_DCExposureVHR = "";
char g_char_ServoPowerON[30]; // 伺服电源开
CString g_str_ServoPowerON = "";
char g_char_ServoPowerOFF[30]; // 伺服电源关
CString g_str_ServoPowerOFF = "";
//[OTHER]
char g_char_LaserChoose[30]; // 未选择激光编码
CString g_str_LaserChoose = "";
char g_char_LaserLoadSuccess[30]; // 编码加载成功
CString g_str_LaserLoadSuccess ="";
char g_char_LaserLoadFail[30]; // 编码加载失败
CString g_str_LaserLoadFail = "";
// 创建全局WinSoc套接字
SOCKET g_socketFH96Data = -1;
// 采集图像
bool g_bCaptureImg = false;
// 互斥对象句柄
HANDLE g_hMutex_ImgStitch = nullptr;
// 定义图像队列
std::deque<QBStru> g_StitchImgDeque;
BOOL g_bRun = 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"
};