#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 g_CH96VideoDeque; // 目标定位用复接数据存储队列 std::deque 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 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" };