Files
chenzhen 222dda1e43 1,新增“App_ThermalImageSystem”;
2,新增“Apps”;
3,新增“Common”;
4,新增“FileList”;
5,新增“MediaX”;
6,新增“OpenSource”;
7,新增“Samples”;
8,新增“SoftwareBusinessLines”.
2026-02-14 23:03:23 +08:00

1512 lines
61 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "SerialMovement.h"
#include "Logger.h"
#include "UIHelp/ConfigHelp.h"
#include "Arith/CH375DLL.H"
SerialMovement::SerialMovement(QObject *parent):serialhelp(parent)
{
currentSettings.baudRate = 115200;
ConfigHelp::GetInstance()->loadSerialSendTime(m_SendInterval);
memset(&m_CoreReturnInfo,0,sizeof(m_CoreReturnInfo));
m_bIsSend = true;
m_bIsUSB = false;
}
SerialMovement::~SerialMovement()
{
}
void SerialMovement::readData()
{
if(m_bIsUSB)
{
BYTE* pBuf = new BYTE[2560];
unsigned long pLength = 2560;
//参数2端口号1上位机数据发送端口2视频采集端口3上位机数据接收端口
if(CH375ReadEndP(0, 3, pBuf, &pLength))
{
QString Data ="";
QString val ="";
for(int i = 0;i < pLength;i++)
{
val= QString("%1 ").arg(pBuf[i],2,16,QLatin1Char('0'));
Data += val.toUpper();
}
emit ShowRecvData(Data);
}
else
{
CH375ClearBufUpload(0, 3);
// qDebug()<<"CH375ClearBuf";
}
}
else
{
QByteArray arr = m_serialPort->readAll();
for (int i = 0; i < arr.length(); i++)
{
// 将串口读取的数据放入缓冲区,每当收集到一次完整的数据帧就清空缓冲区
m_byDataBuffer[m_iComPoint++] = arr[i];
if (m_iComState == 0 && (unsigned char)(arr[i]) == 0x55)
{
m_iComState = 101;
}
else if (m_iComState == 101 && (unsigned char)(arr[i]) == 0xBB)
{
m_iComState = 102;
m_iComLength = 14;
}
else if (m_iComState == 101 && (unsigned char)(arr[i]) == 0xCC)
{
m_iComState = 102;
m_iComLength = 40;
}
else if(m_iComState == 102)
{
if(m_iComPoint >= m_iComLength)
{
// if(m_iComLength == 14)//
{
uint8_t chkData = m_byDataBuffer[m_iComLength-2];
//测试屏蔽校验
if(ChkDataCalculate(m_byDataBuffer,m_iComLength) == chkData)
{
QString Data ="";
QString val ="";
for(int i = 0;i<m_iComLength;i++)
{
val= QString("%1 ").arg(m_byDataBuffer[i],2,16,QLatin1Char('0'));
Data += val.toUpper();
}
emit ShowRecvData(Data);
if(m_iComLength == 40)
{
analysisInfo(m_byDataBuffer,40);
emit SendCoreInfo(m_CoreReturnInfo);
}
if(m_iComLength == 14)
{
analysisReplyInfo(m_byDataBuffer,14);
emit SendCoreReplyInfo(m_CoreReplyInfo);
}
}
}
m_iComState = 0;
m_iComPoint = 0;
}
}
else
{
m_iComState = 0;
m_iComPoint = 0;
}
}
//升级准备
for(int i = 0;i < arr.length(); ++i) //0x7E 0x32
{
unsigned char ch = arr[i];
m_pUpdateReadyBuf[m_nUpdateReadyIndex++] = ch;
if(0 == m_nUpdateReadyRes && 0x7E == ch)
{
m_nUpdateReadyRes = 1;
}
else if(1 == m_nUpdateReadyRes && 0x32 == ch)
{
m_nUpdateReadyRes = 2;
}
else if(2 == m_nUpdateReadyRes)
{
if(m_nUpdateReadyIndex>=7)
{
QString Data ="";
QString val ="";
for(int i = 0;i < 7;i++)
{
val= QString("%1 ").arg(m_pUpdateReadyBuf[i],2,16,QLatin1Char('0'));
Data += val.toUpper();
}
emit ShowRecvData(Data);
if(m_pUpdateReadyBuf[m_nUpdateReadyIndex-2] == 0x7E && m_pUpdateReadyBuf[m_nUpdateReadyIndex-1] == 0x55)
{
Parse32Cmd(m_pUpdateReadyBuf);
}
m_nUpdateReadyRes = 0;
m_nUpdateReadyIndex = 0;
}
}
else
{
m_nUpdateReadyRes = 0;
m_nUpdateReadyIndex = 0;
}
}
for(int i = 0;i < arr.length(); ++i) //0x7E 0x42
{
unsigned char ch = arr[i];
m_pUpdateBuf[m_nUpdateIndex++] = ch;
if(0 == m_nUpdateRes && 0x7E == ch)
{
m_nUpdateRes = 1;
}
else if(1 == m_nUpdateRes && 0x42 == ch)
{
m_nUpdateRes = 2;
}
else if(2 == m_nUpdateRes)
{
if(m_nUpdateIndex>=9)
{
QString Data ="";
QString val ="";
for(int i = 0;i < 9;i++)
{
val= QString("%1 ").arg(m_pUpdateBuf[i],2,16,QLatin1Char('0'));
Data += val.toUpper();
}
emit ShowRecvData(Data);
if(m_pUpdateBuf[m_nUpdateIndex-2] == 0x7E && m_pUpdateBuf[m_nUpdateIndex-1] == 0x55)
{
Parse42Cmd(m_pUpdateBuf);
}
m_nUpdateRes = 0;
m_nUpdateIndex = 0;
}
}
else
{
m_nUpdateRes = 0;
m_nUpdateIndex = 0;
}
}
}
}
void SerialMovement::writeDateToMovement(unsigned char ID,QString Data)
{
if(!m_bIsSend)
{
return;
}
int len = (Data.size()+1)/3;
QString str = QString("55 AA %1 %2 %3 00 F0")
.arg(ID,2,16,QLatin1Char('0'))
.arg(len,2,16,QLatin1Char('0'))
.arg(Data);
QByteArray Cmd = createCommand(str);
if(m_bConnectFlag)
{
m_serialPort->write(Cmd);
GLogger::GetInstance()->WriteInfo("Send:"+str);
}
else
{
CommonHelper::ShowMessageBoxError(tr("串口未开启!"));
}
str = showHex(Cmd);
emit ShowSendCmd(str);
int msec = 1;
ConfigHelp::GetInstance()->loadSerialSendTime(msec);
CommonHelper::Sleep(msec);
}
void SerialMovement::writeCmdToolData(QString Data)
{
if(!m_bIsSend)
{
return;
}
QByteArray Cmd = HexStringToByteArray(Data);
// QByteArray Cmd = createCommand(Data);
if(m_bConnectFlag)
{
if(m_bIsUSB)
{
unsigned long pLength = Cmd.size();
BYTE *pBuf = (unsigned char*)Cmd.data();
CH375WriteEndP(0, 1, pBuf, &pLength);
}
else
{
m_serialPort->write(Cmd);
}
GLogger::GetInstance()->WriteInfo("Send:"+Data);
}
else
{
CommonHelper::ShowMessageBoxError(tr("串口未开启!"));
}
QString strHex = showHex(Cmd);
emit ShowSendCmd(QString(strHex));
int msec = 1;
ConfigHelp::GetInstance()->loadSerialSendTime(msec);
CommonHelper::Sleep(msec);
}
void SerialMovement::WriteData(const char *data, qint64 len)
{
if(!m_bIsSend)
{
return;
}
QByteArray sendByteArray;
sendByteArray.resize(len);
for (int i = 0; i < sendByteArray.length(); i++)
{
sendByteArray[i] = data[i];
}
QString sendDataStr = showHex(sendByteArray);
emit ShowSendCmd(QString(sendDataStr));
if(m_bConnectFlag)
{
m_serialPort->write(data,len);
GLogger::GetInstance()->WriteInfo("Send:"+sendDataStr);
}
else
{
CommonHelper::ShowMessageBoxError(tr("串口未开启!"));
}
}
void SerialMovement::PackageUpgradeReq(int fileNo, qint64 fileSize, int frameCount,
const unsigned char* fileCheckValue, int fileCheckValueLen,
unsigned char* req, int& reqLen)
{
int i = 0;
unsigned char szTemp[4] = {0};
int nTempLen = 4;
req[i++] = char(0x7E);
req[i++] = char(0x23);
req[i++] = fileNo;
memset(szTemp, 0, sizeof(szTemp));
IntToHex(fileSize, szTemp, 4);
memcpy(req+i, szTemp, 4);
i += 4;
memset(szTemp, 0, sizeof(szTemp));
IntToHex(frameCount, szTemp, 4);
memcpy(req+i, szTemp, 2);
i += 2;
memcpy(req+i, fileCheckValue, fileCheckValueLen);
i += fileCheckValueLen;
memset(szTemp, 0, sizeof(szTemp));
CheckSum(req, BUFF_SIZE, 1, i, ECHECK_PLUS, szTemp, nTempLen); //从1开始不包含帧头7E
memcpy(req+i, szTemp, 2);
i += 2;
req[i++] = char(0x7E);
req[i++] = char(0x55);
reqLen = i;
}
void SerialMovement::PackageFlashDataReq(int frameNo, int nRealLength, const unsigned char* flashData,
unsigned char*req, int& reqLen)
{
int i = 0;
unsigned char szTemp[4] = {0};
int nTempLen = 4;
req[i++] = char(0x7E);
req[i++] = char(0x24);
memset(szTemp, 0, sizeof(szTemp));
IntToHex(frameNo, szTemp, 4);
memcpy(req+i, szTemp, 2);
i += 2;
memset(szTemp, 0, sizeof(szTemp));
IntToHex(nRealLength, szTemp, 4);
memcpy(req+i, szTemp, 4);
i += 4;
//memcpy(buffer+i, flashData, nRealLength);
//i += nRealLength;
memcpy(req+i, flashData, 1024);
i += 1024;
memset(szTemp, 0, sizeof(szTemp));
CheckSum(req, BUFF_SIZE, 1, i, ECHECK_PLUS, szTemp, nTempLen); //从1开始不包含帧头7E
memcpy(req+i, szTemp, 4);
i += 4;
req[i++] = char(0x7E);
req[i++] = char(0x55);
reqLen = i;
}
void SerialMovement::Parse32Cmd(byte* buf)
{
if(buf[2] == 0x10)
{
emit SigSendShowRecvData("收到准备好,开始发送第一帧");
emit SigSendUpgradeData(1);
}
else if(buf[2] == 0x1F)
{
emit SigSendShowRecvData("未准备好!");
}
}
void SerialMovement::Parse42Cmd(byte* buf)
{
uchar ch = buf[2];
int frameNum = buf[4] << 8 | buf[3];
if(0x22 == ch) //装订成功
{
emit SigSendShowRecvData("装订成功!");
}
else if(0x23 == ch) //装订失败
{
emit SigSendShowRecvData("装订失败!");
}
else if(0x24 == ch) //传输中
{
QString showStr = QString("传输中,下位机请求帧编号:%1").arg(frameNum);
emit SigSendShowRecvData(showStr);
emit SigSendUpgradeData(frameNum);
}
}
void SerialMovement::analysisInfo(unsigned char* DataBuf,int BufSize)
{
int offset = 5;
unsigned char* Buf = DataBuf+offset;
m_CoreReturnInfo.cRecvMode = DataBuf[4];
m_CoreReturnInfo.nMsgId = DataBuf[5];
switch (DataBuf[4])
{
case 0x03:
if(DataBuf[5] == 0)
{
GeneralInfo Gval;
Gval.InfoFlag = Buf[0];
Gval.FrameRate = (ushort)(Buf[1]<<8|Buf[2])/100;
Gval.SyncMode = Buf[3];
Gval.SyncState = Buf[4];
Gval.Resolution_W = (ushort)(Buf[5]<<8|Buf[6]);
Gval.Resolution_H = (ushort)(Buf[7]<<8|Buf[8]);
Gval.EnvirTemp = (short)(Buf[9]<<8|Buf[10])/10.0;
Gval.FocusTemp = (short)(Buf[11]<<8|Buf[12])/10.0;
Gval.TestImage = Buf[13];
Gval.SceneType = Buf[14];
Gval.PicActionAcope = Buf[15];
Gval.ColdTime = (ushort)(Buf[16]<<8|Buf[17]);
Gval.ColdState = Buf[18];
m_CoreReturnInfo.General = Gval;
}
else if(DataBuf[5] == 1)
{
VideoInfo Vval;
Vval.InfoFlag = Buf[0];
Vval.VideoMode = Buf[1];
Vval.LvdsMode = Buf[2];
Vval.TestInfo = Buf[3];
Vval.PseudoColor = Buf[4];
Vval.Polarity = Buf[5];
Vval.Mirror = Buf[6];
Vval.ZoomType = Buf[7];
Vval.Zoom = Buf[8];
Vval.CursorType = Buf[9];
Vval.XPos = (ushort)(Buf[10]<<8|Buf[11]);
Vval.YPos = (ushort)(Buf[12]<<8|Buf[13]);
// Vval.XPosCenter = (ushort)(Buf[10]<<8|Buf[11]);
// Vval.YPosCenter = (ushort)(Buf[12]<<8|Buf[13]);
Vval.ElecSelfTest= (ushort)(Buf[14]<<8|Buf[15]);
Vval.Unlimited = (short)(Buf[16]<<8|Buf[17])/1000.0;
Vval.CharSwitch = Buf[18];
Vval.PicFreezeSwitch = Buf[19];
Vval.PAL_Mode = Buf[20];
m_CoreReturnInfo.Video = Vval;
}
else if(DataBuf[5] == 2)
{
ZoomInfo sZoomInfo;
sZoomInfo.InfoFlag = Buf[0];
sZoomInfo.AnalogVideoSwitch = Buf[1];
sZoomInfo.DigitalVideoMode = Buf[2];
sZoomInfo.XPosCenter = (ushort)(Buf[3]<<8|Buf[4]);
sZoomInfo.YPosCenter = (ushort)(Buf[5]<<8|Buf[6]);
m_CoreReturnInfo.Zoom = sZoomInfo;
}
break;
case 0x04:
if(DataBuf[5] == 0)
{
AirthInfo Alval;
Alval.InfoFlag = Buf[0];
Alval.StripeFilter_Switch = Buf[1];
Alval.StripeFilter_Thres = Buf[2];
Alval.StripeHoriFilter_Switch = Buf[3];
Alval.StripeHoriFilter_Thres = Buf[4];
Alval.Move_Thres = Buf[5];
Alval.MoveNoiseFilter_Switch = Buf[6];
Alval.TimeNoiseFilter_Switch = Buf[7];
Alval.SpaceNoiseFilter_Switch = Buf[8];
Alval.TimeNoiseFilter_LutMode = Buf[9];
Alval.SpaceNoiseFilter_Level = Buf[10];
Alval.Y8NoiseFilter_Switch = Buf[11];
Alval.Y8NoiseFilter_Level = Buf[12];
Alval.DDE_Level = Buf[13];
Alval.DDE_Y8_Level = Buf[14];
Alval.TG_Mode = Buf[15];
Alval.LineBright = Buf[16];
Alval.LineContrast = Buf[17];
Alval.Y8Range = Buf[18];
Alval.Y8Mean = Buf[19];
Alval.HistPer = Buf[20];
Alval.LinePer = Buf[21];
Alval.TL = (ushort)(Buf[22]<<8|Buf[23]);
Alval.TR = (ushort)(Buf[24]<<8|Buf[25]);
Alval.FrameDelay_Switch = Buf[26];
//未用到
Alval.StripeFilter_Window = Buf[4];
Alval.DDE_Switch = Buf[17];
Alval.RangeChange_Switch = Buf[18];
Alval.BrightnessStep = Buf[20];
Alval.ContrastStep = Buf[21];
m_CoreReturnInfo.Airth = Alval;
}
else if(DataBuf[5] == 1)
{
TGInfo Tval;
Tval.InfoFlag = Buf[0];
Tval.Y16Range = (ushort)(Buf[1]<<8|Buf[2]);
Tval.Y16Aver = (ushort)(Buf[3]<<8|Buf[4]);
Tval.Y16Max = (ushort)(Buf[5]<<8|Buf[6]);
Tval.Y16Min = (ushort)(Buf[7]<<8|Buf[8]);
Tval.Sobel = (ushort)(Buf[9]<<8|Buf[10]);
Tval.BlockTG_Switch = Buf[11];
Tval.BlockTG_Use_Switch = Buf[12];
Tval.BlockTG_Para = Buf[13];
Tval.BF_IDE_Switch = Buf[14];
Tval.BF_IDE_Sigma = Buf[15];
Tval.BF_IDE_Level = Buf[16];
Tval.Defog_Switch = Buf[17];
Tval.Defog = Buf[18];
Tval.Y8_AdjustBC_Switch = Buf[19];
Tval.BCMode = Buf[20];
Tval.Brightness = Buf[21];
Tval.Contrast = Buf[22];
Tval.Y16OutStream = Buf[23];
Tval.Y8OutStream = Buf[24];
//未用到
Tval.ContrastLimit = (ushort)(Buf[12]<<8|Buf[13]);
Tval.Coef = (ushort)(Buf[18]<<8|Buf[19]);
m_CoreReturnInfo.TG = Tval;
}
else if(DataBuf[5] == 2) //时域滤波Y16算法
{
TimeY16Info sY16Time;
sY16Time.InfoFlag = Buf[0];
sY16Time.Gause1 = Buf[1];
sY16Time.Gause2 = Buf[2];
sY16Time.Gause3 = Buf[3];
sY16Time.Gause4 = Buf[4];
sY16Time.DfFilter1 = Buf[5];
sY16Time.DfFilter2 = Buf[6];
sY16Time.AddDf1 = Buf[7];
sY16Time.AddDf2 = Buf[8];
sY16Time.Tail1 = (ushort)(Buf[9]<<8|Buf[10]);
sY16Time.Tail2 = Buf[11];
sY16Time.Tail3 = Buf[12];
sY16Time.DiffIir1 = (ushort)(Buf[13]<<8|Buf[14]);
sY16Time.DiffIir2 = Buf[15];
sY16Time.DiffIir3 = Buf[16];
sY16Time.Alpha1 = Buf[17];
sY16Time.Alpha2 = (ushort)(Buf[18]<<8|Buf[19]);
sY16Time.Alpha3 = (ushort)(Buf[20]<<8|Buf[21]);
sY16Time.MD1 = Buf[22];
sY16Time.MD2 = (ushort)(Buf[23]<<8|Buf[24]);
sY16Time.ArithSW = Buf[25];
m_CoreReturnInfo.Y16Time = sY16Time;
}
else if(DataBuf[5] == 3) //去横纹算法
{
StripeHoriInfo sHoriStripe;
sHoriStripe.InfoFlag = Buf[0];
sHoriStripe.Filter1 = Buf[1];
sHoriStripe.Filter2 = Buf[2];
sHoriStripe.Filter3 = Buf[3];
sHoriStripe.Filter4 = Buf[4];
sHoriStripe.Filter5 = Buf[5];
sHoriStripe.ThresParam1 = Buf[6];
sHoriStripe.ThresParam2 = Buf[7];
sHoriStripe.RowDiffTh1 = (uint)(Buf[8]<<24|Buf[9]<<16|Buf[10]<<8|Buf[11]);
sHoriStripe.RowDiffTh2 = (uint)(Buf[12]<<24|Buf[13]<<16|Buf[14]<<8|Buf[15]);
sHoriStripe.HoriNumTh1 = (ushort)(Buf[16]<<8|Buf[17]);
sHoriStripe.HoriNumTh2 = (ushort)(Buf[18]<<8|Buf[19]);
sHoriStripe.HoriNumTh3 = (ushort)(Buf[20]<<8|Buf[21]);
sHoriStripe.ArithHoriSW = Buf[22];
m_CoreReturnInfo.HoriStripe = sHoriStripe;
}
else if(DataBuf[5] == 4) //去竖纹算法
{
StripeVerInfo sVerStripe;
sVerStripe.InfoFlag = Buf[0];
sVerStripe.VerThres1 = (ushort)(Buf[1]<<8|Buf[2]);
sVerStripe.VerThres2 = Buf[3];
sVerStripe.WeightThr1 = (ushort)(Buf[4]<<8|Buf[5]);
sVerStripe.WeightThr2 = (ushort)(Buf[6]<<8|Buf[7]);
sVerStripe.WeightThr3 = (ushort)(Buf[8]<<8|Buf[9]);
sVerStripe.Noise1 = Buf[10];
sVerStripe.Noise2 = Buf[11];
sVerStripe.Noise3 = (ushort)(Buf[12]<<8|Buf[13]);
sVerStripe.ArithVerSW = Buf[14];
m_CoreReturnInfo.VerStripe = sVerStripe;
}
else if(DataBuf[5] == 5) //空域滤波Y6
{
SpaceFilterInfo sFilterSpace;
sFilterSpace.InfoFlag = Buf[0];
sFilterSpace.ResolveThres1 = (ushort)(Buf[1]<<8|Buf[2]);
sFilterSpace.ResolveThres2 = (ushort)(Buf[3]<<8|Buf[4]);
sFilterSpace.Enhance1_Thres1 = (ushort)(Buf[5]<<8|Buf[6]);
sFilterSpace.Enhance1_Thres2 = (ushort)(Buf[7]<<8|Buf[8]);
sFilterSpace.Enhance2_Thres1 = (ushort)(Buf[9]<<8|Buf[10]);
sFilterSpace.Enhance2_Thres2 = (ushort)(Buf[11]<<8|Buf[12]);
sFilterSpace.Enhance_Slop1 = (ushort)(Buf[13]<<8|Buf[14]);
sFilterSpace.Enhance_Slop2 = (ushort)(Buf[15]<<8|Buf[16]);
sFilterSpace.Resolve_Slop1 = Buf[17];
sFilterSpace.Resolve_Slop2 = Buf[18];
sFilterSpace.ArithY16SpaceSW = Buf[19];
m_CoreReturnInfo.FilterSpace = sFilterSpace;
}
else if(DataBuf[5] == 6) //动态范围压缩算法
{
DynamicPressFirstInfo sDynamicPress;
sDynamicPress.InfoFlag = Buf[0];
sDynamicPress.HistmaxMode = Buf[1];
sDynamicPress.HISTMAXMin = (uint)(Buf[2]<<24|Buf[3]<<16|Buf[4]<<8|Buf[5]);
sDynamicPress.HISTMAXMax = (uint)(Buf[6]<<24|Buf[7]<<16|Buf[8]<<8|Buf[9]);
sDynamicPress.ExtValue = (uint)(Buf[10]<<24|Buf[11]<<16|Buf[12]<<8|Buf[13]);
sDynamicPress.Coef1 = Buf[14];
sDynamicPress.Coef2 = (ushort)(Buf[15]<<8|Buf[16]);
sDynamicPress.Coef3 = (ushort)(Buf[17]<<8|Buf[18]);
sDynamicPress.ExternalBright = (ushort)(Buf[19]<<8|Buf[20]);
sDynamicPress.ExternalContrast = (ushort)(Buf[21]<<8|Buf[22]);
sDynamicPress.GsMode = Buf[23];
sDynamicPress.Gs0Coef1 = Buf[24];
sDynamicPress.Gs0Coef2 = Buf[25];
sDynamicPress.Gs0Coef3 = Buf[26];
sDynamicPress.Gs1Coef1 = Buf[27];
sDynamicPress.Gs1Coef2 = Buf[28];
sDynamicPress.Gs1Coef3 = Buf[29];
m_CoreReturnInfo.DynamicFirst = sDynamicPress;
}
else if(DataBuf[5] == 7) //动态范围压缩算法
{
DynamicPressSecondInfo sDynamicPress;
sDynamicPress.InfoFlag = Buf[0];
sDynamicPress.LumTh1 = Buf[1];
sDynamicPress.LumTh2 = Buf[2];
sDynamicPress.LumTh3 = Buf[3];
sDynamicPress.LumTh4 = Buf[4];
sDynamicPress.LumLv1 = Buf[5];
sDynamicPress.LumLv2 = Buf[6];
sDynamicPress.LumLv3 = Buf[7];
sDynamicPress.VarTh1 = (ushort)(Buf[8]<<8|Buf[9]);
sDynamicPress.VarTh2 = (ushort)(Buf[10]<<8|Buf[11]);
// sDynamicPress.VarTh3 = Buf[10];
// sDynamicPress.VarTh4 = Buf[11];
sDynamicPress.VarLv1 = Buf[12];
sDynamicPress.VarLv2 = Buf[13];
sDynamicPress.VarLv3 = Buf[14];
sDynamicPress.ContrastTh1 = Buf[15];
sDynamicPress.ContrastTh2 = Buf[16];
sDynamicPress.ContrastTh3 = Buf[17];
sDynamicPress.ContrastTh4 = Buf[18];
sDynamicPress.ContrastLv1 = Buf[19];
sDynamicPress.ContrastLv2 = Buf[20];
sDynamicPress.ContrastLv3 = Buf[21];
sDynamicPress.LeftPointTh = (uint)(Buf[22]<<24|Buf[23]<<16|Buf[24]<<8|Buf[25]);
sDynamicPress.RightPointTh = (uint)(Buf[26]<<24|Buf[27]<<16|Buf[28]<<8|Buf[29]);
m_CoreReturnInfo.DynamicSecond = sDynamicPress;
}
else if(DataBuf[5] == 8) //动态范围压缩算法
{
DynamicPressThirdInfo sDynamicPress;
sDynamicPress.InfoFlag = Buf[0];
sDynamicPress.GrayMaxMin1 = Buf[1];
sDynamicPress.GrayMaxMin2 = (ushort)(Buf[2]<<8|Buf[3]);
sDynamicPress.GrayMaxMin3 = (ushort)(Buf[4]<<8|Buf[5]);
sDynamicPress.PseudoColor1 = (ushort)(Buf[6]<<8|Buf[7]);
sDynamicPress.PseudoColor2 = (ushort)(Buf[8]<<8|Buf[9]);
sDynamicPress.VarTh3 = (ushort)(Buf[10]<<8|Buf[11]);
sDynamicPress.VarTh4 = (ushort)(Buf[12]<<8|Buf[13]);
m_CoreReturnInfo.DynamicThird = sDynamicPress;
}
else if(DataBuf[5] == 9) //宽动态算法
{
WideDynamicInfo sWideDynamic;
sWideDynamic.InfoFlag = Buf[0];
sWideDynamic.CenterParam1 = Buf[1];
sWideDynamic.CenterParam2 = Buf[2];
sWideDynamic.CenterParam3 = Buf[3];
sWideDynamic.CenterParam4 = (ushort)(Buf[4]<<8|Buf[5]);
sWideDynamic.FusEnable = Buf[6];
sWideDynamic.FusCofe = Buf[7];
sWideDynamic.FusDelta = (ushort)(Buf[8]<<8|Buf[9]);
sWideDynamic.FusThrhd = (ushort)(Buf[10]<<8|Buf[11]);
sWideDynamic.FilterParam1 = Buf[12];
sWideDynamic.FilterParam2 = Buf[13];
sWideDynamic.FilterParam3 = Buf[14];
sWideDynamic.Gaus1 = Buf[15];
sWideDynamic.Gaus2 = Buf[16];
sWideDynamic.Gaus3 = Buf[17];
sWideDynamic.Gaus4 = Buf[18];
sWideDynamic.Gaus5 = Buf[19];
sWideDynamic.ArithWideSW = Buf[20];
m_CoreReturnInfo.WideDynamic = sWideDynamic;
}
else if(DataBuf[5] == 10) //BACA算法
{
BACAInfo sBACA;
sBACA.InfoFlag = Buf[0];
sBACA.BACASW = Buf[1];
sBACA.RatioT1 = Buf[2];
sBACA.RatioT2 = Buf[3];
sBACA.RatioT3 = Buf[4];
sBACA.RatioT4 = Buf[5];
sBACA.RatioR1 = Buf[6];
sBACA.RatioR2 = Buf[7];
sBACA.RatioR3 = Buf[8];
sBACA.MeanParam1 = Buf[9];
sBACA.MeanParam2 = Buf[10];
sBACA.MeanParam3 = Buf[11];
sBACA.Bright = Buf[12];
sBACA.Contrast = Buf[13];
m_CoreReturnInfo.BACA = sBACA;
}
else if(DataBuf[5] == 11) //分块调光
{
BlockTGInfo sBlockTG;
sBlockTG.InfoFlag = Buf[0];
sBlockTG.BonusSel1 = Buf[1];
sBlockTG.BonusSel2 = (ushort)(Buf[2]<<8|Buf[3]);
sBlockTG.BonusSel3 = Buf[4];
sBlockTG.BonusSel4 = Buf[5];
sBlockTG.ClipLimit1 = Buf[6];
sBlockTG.ClipLimit2 = Buf[7];
sBlockTG.ClipLimit3 = Buf[8];
sBlockTG.ClipLimit4 = Buf[9];
sBlockTG.ClipLimit5 = Buf[10];
sBlockTG.ClipLimit6 = Buf[11];
sBlockTG.ClipLimit7 = Buf[12];
sBlockTG.ClipLimit8 = Buf[13];
sBlockTG.ClipLimit9 = Buf[14];
sBlockTG.ArithBlockTGSW = Buf[15];
m_CoreReturnInfo.TGBlock = sBlockTG;
}
else if(DataBuf[5] == 12) //时域滤波Y8算法
{
TimeY8FirstInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.Y8NoiseSwitch = Buf[1];
sY8Time.Nr3dYLowPowerEn = Buf[2];
sY8Time.MeanWinsel1 = Buf[3];
sY8Time.MeanWinsel2 = Buf[4];
sY8Time.DiffFilter1Winsel1 = Buf[5];
sY8Time.DiffFilter1Winsel2 = Buf[6];
sY8Time.DiffFilter1Winsel3 = Buf[7];
sY8Time.DiffFilter1Coef1 = Buf[8];
sY8Time.DiffFilter1Coef2 = Buf[9];
sY8Time.DiffFilter1Coef3 = Buf[10];
sY8Time.DiffFilter1Coef4 = Buf[11];
sY8Time.DiffFilter1Coef5 = Buf[12];
sY8Time.DiffFilter1Coef6 = Buf[13];
sY8Time.DiffFilter1Coef7 = Buf[14];
sY8Time.DiffFilter1Coef8 = Buf[15];
sY8Time.DiffFilter1Coef9 = Buf[16];
sY8Time.DiffFilter1Coef10 = Buf[17];
sY8Time.DiffFilter2Winsel1 = Buf[18];
sY8Time.DiffFilter2Winsel2 = Buf[19];
sY8Time.DiffFilter2Winsel3 = Buf[20];
sY8Time.DiffFilter2Coef1 = Buf[21];
sY8Time.DiffFilter2Coef2 = Buf[22];
sY8Time.DiffFilter2Coef3 = Buf[23];
sY8Time.DiffFilter2Coef4 = Buf[24];
sY8Time.DiffFilter2Coef5 = Buf[25];
sY8Time.DiffFilter2Coef6 = Buf[26];
sY8Time.DiffFilter2Coef7 = Buf[27];
sY8Time.DiffFilter2Coef8 = Buf[28];
sY8Time.DiffFilter2Coef9 = Buf[29];
sY8Time.DiffFilter2Coef10 = Buf[30];
sY8Time.DiffAdjust1Max = Buf[31];
sY8Time.DiffAdjust1Ratio = Buf[32];
m_CoreReturnInfo.Y8TimeFirst = sY8Time;
}
else if(DataBuf[5] == 13) //时域滤波Y8算法
{
TimeY8SecondInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.DiffAdjust2Max = Buf[1];
sY8Time.DiffAdjust2Ratio = Buf[2];
sY8Time.Motion1U16Motion = (ushort)(Buf[3]<<8|Buf[4]);
sY8Time.Motion1MotionCoef = Buf[5];
sY8Time.Motion1MotionOffset = Buf[6];
sY8Time.Motion1LumTh1 = Buf[7];
sY8Time.Motion1LumTh2 = Buf[8];
sY8Time.Motion1LumTh3 = Buf[9];
sY8Time.Motion1LumTh4 = Buf[10];
sY8Time.Motion1LumCoef1 = Buf[11];
sY8Time.Motion1LumCoef2 = Buf[12];
sY8Time.Motion1LumCoef3 = Buf[13];
sY8Time.Motion2U16Motion = (ushort)(Buf[14]<<8|Buf[15]);
sY8Time.Motion2MotionCoef = Buf[16];
sY8Time.Motion2MotionOffset = Buf[17];
sY8Time.Motion2LumTh1 = Buf[18];
sY8Time.Motion2LumTh2 = Buf[19];
sY8Time.Motion2LumTh3 = Buf[20];
sY8Time.Motion2LumTh4 = Buf[21];
sY8Time.Motion2LumCoef1 = Buf[22];
sY8Time.Motion2LumCoef2 = Buf[23];
sY8Time.Motion2LumCoef3 = Buf[24];
sY8Time.MD1Param1 = (ushort)(Buf[25]<<8|Buf[26]);
sY8Time.MD1Param2 = (ushort)(Buf[27]<<8|Buf[28]);
sY8Time.MD1Param3 = (ushort)(Buf[29]<<8|Buf[30]);
sY8Time.MD1Param4 = (ushort)(Buf[31]<<8|Buf[32]);
m_CoreReturnInfo.Y8TimeSecond = sY8Time;
}
else if(DataBuf[5] == 14) //时域滤波Y8算法
{
TimeY8ThirdInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.MD1Param5 = (ushort)(Buf[1]<<8|Buf[2]);
sY8Time.MD1Param6 = (ushort)(Buf[3]<<8|Buf[4]);
sY8Time.MD1Param7 = (ushort)(Buf[5]<<8|Buf[6]);
sY8Time.MD1Param8 = (ushort)(Buf[7]<<8|Buf[8]);
sY8Time.MD1Param9 = (ushort)(Buf[9]<<8|Buf[10]);
sY8Time.MD1Param10 = (ushort)(Buf[11]<<8|Buf[12]);
sY8Time.MD1Param11 = (ushort)(Buf[13]<<8|Buf[14]);
sY8Time.MD1Param12 = (ushort)(Buf[15]<<8|Buf[16]);
sY8Time.MD1Param13Mdratios0 = Buf[17];
sY8Time.MD1Param13Mdratios1 = Buf[18];
sY8Time.MD1Param13Mdratios2 = Buf[19];
sY8Time.MD1Param14Mdratiom0 = Buf[20];
sY8Time.MD1Param14Mdratiom1 = Buf[21];
sY8Time.MD1Param14Mdratiom2 = Buf[22];
sY8Time.MD1Param15Mdenhs0 = Buf[23];
sY8Time.MD1Param15Mdenhs1 = Buf[24];
sY8Time.MD1Param15Mdenhs2 = Buf[25];
sY8Time.MD1Param16Mdenhm0 = Buf[26];
sY8Time.MD1Param16Mdenhm1 = Buf[27];
sY8Time.MD1Param16Mdenhm2 = Buf[28];
sY8Time.MD1Param17Mddark = Buf[29];
sY8Time.MD1Param17Mdbright = Buf[30];
sY8Time.MD1Param17Mddbmax = Buf[31];
sY8Time.MD1Param17Mddbmin = Buf[32];
m_CoreReturnInfo.Y8TimeThird = sY8Time;
}
else if(DataBuf[5] == 15) //时域滤波Y8算法
{
TimeY8ForthInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.MD1Param18MdGsCoef0 = Buf[1];
sY8Time.MD1Param18MdGsCoef1 = Buf[2];
sY8Time.MD1Param18MdGsCoef2 = Buf[3];
sY8Time.MD2Param1 = (ushort)(Buf[4]<<8|Buf[5]);
sY8Time.MD2Param2 = (ushort)(Buf[6]<<8|Buf[7]);
sY8Time.MD2Param3 = (ushort)(Buf[8]<<8|Buf[9]);
sY8Time.MD2Param4 = (ushort)(Buf[10]<<8|Buf[11]);
sY8Time.MD2Param5 = (ushort)(Buf[12]<<8|Buf[13]);
sY8Time.MD2Param6 = (ushort)(Buf[14]<<8|Buf[15]);
sY8Time.MD2Param7 = (ushort)(Buf[16]<<8|Buf[17]);
sY8Time.MD2Param8 = (ushort)(Buf[18]<<8|Buf[19]);
sY8Time.MD2Param9 = (ushort)(Buf[20]<<8|Buf[21]);
sY8Time.MD2Param10 = (ushort)(Buf[22]<<8|Buf[23]);
sY8Time.MD2Param11 = (ushort)(Buf[24]<<8|Buf[25]);
sY8Time.MD2Param12 = (ushort)(Buf[26]<<8|Buf[27]);
sY8Time.MD2Param13Mdratios0 = Buf[28];
sY8Time.MD2Param13Mdratios1 = Buf[29];
sY8Time.MD2Param13Mdratios2 = Buf[30];
m_CoreReturnInfo.Y8TimeForth = sY8Time;
}
else if(DataBuf[5] == 16) //时域滤波Y8算法
{
TimeY8FifthInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.MD2Param14Mdratiom0 = Buf[1];
sY8Time.MD2Param14Mdratiom1 = Buf[2];
sY8Time.MD2Param14Mdratiom2 = Buf[3];
sY8Time.MD2Param15Mdenhs0 = Buf[4];
sY8Time.MD2Param15Mdenhs1 = Buf[5];
sY8Time.MD2Param15Mdenhs2 = Buf[6];
sY8Time.MD2Param16Mdenhm0 = Buf[7];
sY8Time.MD2Param16Mdenhm1 = Buf[8];
sY8Time.MD2Param16Mdenhm2 = Buf[9];
sY8Time.MD2Param17Mddark = Buf[10];
sY8Time.MD2Param17Mdbright = Buf[11];
sY8Time.MD2Param17Mddbmax = Buf[12];
sY8Time.MD2Param17Mddbmin = Buf[13];
sY8Time.MD2Param18MdGsCoef0 = Buf[14];
sY8Time.MD2Param18MdGsCoef1 = Buf[15];
sY8Time.MD2Param18MdGsCoef2 = Buf[16];
sY8Time.Tmpd1Alphamax = (ushort)(Buf[17]<<8|Buf[18]);
sY8Time.Tmpd1Alpharatio = Buf[19];
sY8Time.Tmpd2Alphamax = (ushort)(Buf[20]<<8|Buf[21]);
sY8Time.Tmpd2Alpharatio = Buf[22];
sY8Time.Tail1DifIirTailCoef1 = Buf[23];
sY8Time.Tail1DifIirTailCoef2 = Buf[24];
sY8Time.Tail1DifIirTailCoef3 = Buf[25];
sY8Time.Tail1DifIirTailCoef4 = Buf[26];
sY8Time.Tail1DifIirTailCoef5 = Buf[27];
sY8Time.Tail1DifIirTailCoef6 = Buf[28];
sY8Time.Tail1DifIirTailCoef7 = Buf[29];
sY8Time.Tail1DifIirTailCoef8 = Buf[30];
sY8Time.Tail1DifIirTailCoef9 = Buf[31];
sY8Time.Tail1DifIirTailCoef10 = Buf[32];
m_CoreReturnInfo.Y8TimeFifth = sY8Time;
}
else if(DataBuf[5] == 17) //时域滤波Y8算法
{
TimeY8SixthInfo sY8Time;
sY8Time.InfoFlag = Buf[0];
sY8Time.Tail1ShrinkRatio1 = Buf[1];
sY8Time.Tail1ShrinkRatio2 = Buf[2];
sY8Time.Tail1ShrinkRatio3 = Buf[3];
sY8Time.Tail1ShrinkRatio4 = Buf[4];
sY8Time.Tail1ShrinkRatio5 = Buf[5];
sY8Time.Tail1ShrinkThr1 = Buf[6];
sY8Time.Tail1ShrinkThr2 = Buf[7];
sY8Time.Tail1ShrinkThr3 = Buf[8];
sY8Time.Tail1ShrinkThr4 = Buf[9];
sY8Time.Stacor1Offset = Buf[10];
sY8Time.Stacor1Coef = Buf[11];
m_CoreReturnInfo.Y8TimeSixth = sY8Time;
}
else if(DataBuf[5] == 18) //空域滤波Y8算法
{
SpaceY8Info sY8Space;
sY8Space.InfoFlag = Buf[0];
sY8Space.SpaceY8Switch = Buf[1];
sY8Space.ResolveThres1 = (ushort)(Buf[2]<<8|Buf[3]);
sY8Space.ResolveThres2 = (ushort)(Buf[4]<<8|Buf[5]);
sY8Space.Enhance1Thres1 = (ushort)(Buf[6]<<8|Buf[7]);
sY8Space.Enhance1Thres2 = (ushort)(Buf[8]<<8|Buf[9]);
sY8Space.Enhance2Thres1 = (ushort)(Buf[10]<<8|Buf[11]);
sY8Space.Enhance2Thres2 = (ushort)(Buf[12]<<8|Buf[13]);
sY8Space.EnhanceSlop1 = (ushort)(Buf[14]<<8|Buf[15]);
sY8Space.EnhanceSlop2 = (ushort)(Buf[16]<<8|Buf[17]);
sY8Space.ResolveSlop1 = Buf[18];
sY8Space.ResolveSlop2 = Buf[19];
m_CoreReturnInfo.Y8Space = sY8Space;
}
else if(DataBuf[5] == 19) //边缘增强算法
{
IDEEdgeFirstInfo sIDE;
sIDE.InfoFlag = Buf[0];
sIDE.IDConsMode = Buf[1];
sIDE.IDWidthRatio = Buf[2];
sIDE.IDEdgeSmooth = Buf[3];
sIDE.IDEOffsetStrength = Buf[4];
sIDE.IDEFltWinMode = Buf[5];
sIDE.ClipEn = Buf[6];
sIDE.PosStr = Buf[7];
sIDE.PosClipRatio = Buf[8];
sIDE.PosMaxOffset = Buf[9];
sIDE.NegStr = Buf[10];
sIDE.NegClipRatio = Buf[11];
sIDE.NegMinOffset = Buf[12];
sIDE.WidthT1 = Buf[13];
sIDE.WidthT2 = Buf[14];
sIDE.WidthT3 = Buf[15];
sIDE.WidthT4 = Buf[16];
sIDE.WidthR1 = Buf[17];
sIDE.WidthR2 = Buf[18];
sIDE.WidthR3 = Buf[19];
sIDE.ThinAddT1 = Buf[20];
sIDE.ThinAddT2 = Buf[21];
sIDE.ThinAddT3 = Buf[22];
sIDE.ThinAddT4 = Buf[23];
sIDE.ThinAddR1 = Buf[24];
sIDE.ThinAddR2 = Buf[25];
sIDE.ThinAddR3 = Buf[26];
sIDE.ThinPowerT1 = Buf[27];
sIDE.ThinPowerT2 = Buf[28];
sIDE.ThinPowerT3 = Buf[29];
sIDE.ThinPowerT4 = Buf[30];
m_CoreReturnInfo.IDEFirst = sIDE;
}
else if(DataBuf[5] == 20) //边缘增强算法
{
IDEEdgeSecondInfo sIDE;
sIDE.InfoFlag = Buf[0];
sIDE.ThinPower1 = Buf[1];
sIDE.ThinPower2 = Buf[2];
sIDE.ThinPower3 = Buf[3];
sIDE.LumT1 = Buf[4];
sIDE.LumT2 = Buf[5];
sIDE.LumT3 = Buf[6];
sIDE.LumT4 = Buf[7];
sIDE.LumR1 = Buf[8];
sIDE.LumR2 = Buf[9];
sIDE.LumR3 = Buf[10];
sIDE.FreqT1 = Buf[11];
sIDE.FreqT2 = Buf[12];
sIDE.FreqT3 = Buf[13];
sIDE.FreqT4 = Buf[14];
sIDE.FreqR1 = Buf[15];
sIDE.FreqR2 = Buf[16];
sIDE.FreqR3 = Buf[17];
sIDE.ContrastT1 = Buf[18];
sIDE.ContrastT2 = Buf[19];
sIDE.ContrastT3 = Buf[20];
sIDE.ContrastT4 = Buf[21];
sIDE.ContrastR1 = Buf[22];
sIDE.ContrastR2 = Buf[23];
sIDE.ContrastR3 = Buf[24];
sIDE.LightHigh = Buf[25];
sIDE.OffsetThrd = Buf[26];
sIDE.LightNumLow = Buf[27];
sIDE.LightNumHigh = Buf[28];
sIDE.ArithIDEEdgeSW = Buf[29];
m_CoreReturnInfo.IDESecond = sIDE;
}
break;
case 0x05:
OpticsInfo Oval;
Oval.InfoFlag = Buf[0];
Oval.FocusVal = (ushort)(Buf[1]<<8|Buf[2])/10.0;
Oval.CrossSceneAngle = (ushort)(Buf[3]<<8|Buf[4])/100.0;
Oval.AutoFocusState = Buf[5];
Oval.RealTimeAutoFocus_Switch = Buf[6];
Oval.AutoFocus_XPos = (ushort)(Buf[7]<<8|Buf[8]);
Oval.AutoFocus_YPos = (ushort)(Buf[9]<<8|Buf[10]);
Oval.AutoFocus_WH = (ushort)(Buf[11]<<8|Buf[12]);
Oval.AutoFocus_Gray = (uint)(Buf[13]<<24|Buf[14]<<16|Buf[15]<<8|Buf[16]);
Oval.Scene = Buf[17];
Oval.UartExtend = Buf[18];
Oval.SceneCount = Buf[19];
Oval.Shutter = Buf[20];
Oval.OpticalFilter = Buf[21];
Oval.PickDot_StageNum = Buf[22];
Oval.Move_Flag = Buf[23];
Oval.SFTemp = Buf[24];
Oval.FocusStep = Buf[25];
Oval.ZoomStep = Buf[26];
Oval.CurrentScene = Buf[27];
Oval.CurrentFocusVal = (ushort)(Buf[28]<<8|Buf[29])/10.0;;
m_CoreReturnInfo.Optics = Oval;
break;
case 0x06:
if(DataBuf[5] == 0)
{
NUCInfo Nval;
Nval.InfoFlag = Buf[0];
Nval.IntegralGearMode = Buf[1];
Nval.IntegralGear = Buf[2];
Nval.IntegralTime = (ushort)(Buf[3]<<8|Buf[4]);
Nval.BaseGearMode = Buf[5];
Nval.BaseGear = Buf[6];
Nval.BadPointThreshold = Buf[7];
Nval.ReplaceBadPoint_Switch = Buf[8];
Nval.BadPointReplaceMode = Buf[9];
Nval.BadPointCursor_Switch = Buf[10];
Nval.BadPointReplaceType = Buf[11];
Nval.Dynamic_AdjustBadPoint_Switch = Buf[12];
Nval.DecideFlatArea_Threshold = Buf[13];
Nval.Dynamic_AdjustBadPoint_Count = (ushort)(Buf[14]<<8|Buf[15]);
Nval.Move_Flag = Buf[16];
Nval.PotCoverSwitch = Buf[17];
Nval.GG_Coef = (short)(((ushort)Buf[18]<<8)|((ushort)Buf[19]));
Nval.ADMax = (ushort)(Buf[20]<<8|Buf[21]);
Nval.ADMin = (ushort)(Buf[22]<<8|Buf[23]);
Nval.EnvirTemp = (short)(Buf[24]<<8|Buf[25])/10.0;
Nval.SecondaryIntegralGear = Buf[26];
Nval.WorkCheck = Buf[27];
Nval.ObjTemp = (short)(Buf[28]<<8|Buf[29])/10.0;
//暂未用到
Nval.BadPoint_CheckFrameNum = Buf[12];
Nval.FlatAreaFindBadPoint_Threshold = Buf[14];
m_CoreReturnInfo.NUC = Nval;
}
else if(DataBuf[5] == 1)
{
CurGearInfo Cval;
Cval.InfoFlag = Buf[0];
Cval.INT = Buf[1];
Cval.FOV = Buf[2];
Cval.B1 = (ushort)(Buf[3]<<8|Buf[4]);
Cval.B2 = (ushort)(Buf[5]<<8|Buf[6]);
Cval.Bh = (ushort)(Buf[7]<<8|Buf[8]);
Cval.Bs = (ushort)(Buf[9]<<8|Buf[10]);
Cval.DeltaB = (short)(Buf[11]<<8|Buf[12]);
Cval.B = (ushort)(Buf[13]<<8|Buf[14]);
Cval.BadPointCount = (ushort)(Buf[15]<<8|Buf[16]);
Cval.BadPointCount_New = (ushort)(Buf[17]<<8|Buf[18]);
Cval.CurrentBASE = Buf[19];
Cval.AE_Switch = Buf[20];
Cval.AE_ADMax = (ushort)(Buf[21]<<8|Buf[22]);
Cval.AE_ADMin = (ushort)(Buf[23]<<8|Buf[24]);
Cval.AE_TimeMax = (ushort)(Buf[25]<<8|Buf[26]);
Cval.AE_TimeMin = (ushort)(Buf[27]<<8|Buf[28]);
Cval.AE_OptimalAD = (ushort)(Buf[29]<<8|Buf[30]);
m_CoreReturnInfo.CurGear = Cval;
}
else if(DataBuf[5] == 2)
{
ADInfo Aval;
Aval.InfoFlag = Buf[0];
Aval.AD1 = (ushort)(Buf[1]<<8|Buf[2]);
Aval.AD2 = (ushort)(Buf[3]<<8|Buf[4]);
Aval.AD3 = (ushort)(Buf[5]<<8|Buf[6]);
Aval.AD4 = (ushort)(Buf[7]<<8|Buf[8]);
Aval.AD5 = (ushort)(Buf[9]<<8|Buf[10]);
Aval.AD6 = (ushort)(Buf[11]<<8|Buf[12]);
Aval.AD7 = (ushort)(Buf[13]<<8|Buf[14]);
Aval.AD8 = (ushort)(Buf[15]<<8|Buf[16]);
Aval.Ax = (ushort)(Buf[17]<<8|Buf[18]);
Aval.Dx = (ushort)(Buf[19]<<8|Buf[20]);
//
Aval.CrossBadLine = (ushort)(Buf[21]<<8|Buf[22]);
Aval.VerticalBadLine = (ushort)(Buf[23]<<8|Buf[24]);
m_CoreReturnInfo.AD = Aval;
}
else if(DataBuf[5] == 3)
{
ASCINucFirstInfo ASCINuc;
ASCINuc.InfoFlag = Buf[0];
ASCINuc.DeltBSW = Buf[1];
ASCINuc.DeltBCoef = Buf[2];
ASCINuc.AutoCompensation = Buf[3];
ASCINuc.SFFCTemp = Buf[4];
ASCINuc.ManualBadPointSW = Buf[5];
ASCINuc.AutoCheckFrameNum = (ushort)(Buf[6]<<8|Buf[7]);
ASCINuc.AutoCheckThreshold = Buf[8];
ASCINuc.KBadPointSW = Buf[9];
ASCINuc.KBadPointMin = (ushort)(Buf[10]<<8|Buf[11]);
ASCINuc.KBadPointMax = (ushort)(Buf[12]<<8|Buf[13]);
ASCINuc.BprAddSW = Buf[14];
ASCINuc.BprAddParam1 = Buf[15];
ASCINuc.BprAddParam2 = Buf[16];
ASCINuc.BprAddJudgeThres = (ushort)(Buf[17]<<8|Buf[18]);
ASCINuc.BprAddThres = Buf[19];
ASCINuc.BprAddCheckParam = Buf[20];
ASCINuc.DeltBTemp = (ushort)(Buf[21]<<8|Buf[22]);
ASCINuc.SUCSW = Buf[23];
ASCINuc.SUCWorkTime = Buf[24];
ASCINuc.RASEL = Buf[25];
ASCINuc.GAIN = Buf[26];
ASCINuc.HSSD = Buf[27];
ASCINuc.NUCSW = Buf[28];
ASCINuc.NUCXMax = (ushort)(Buf[29]<<8|Buf[30]);
ASCINuc.NUCXMin = (ushort)(Buf[31]<<8|Buf[32]);
m_CoreReturnInfo.ASCINUCFirst = ASCINuc;
}
else if(DataBuf[5] == 4)
{
ASCINucSecondInfo ASCINuc;
ASCINuc.InfoFlag = Buf[0];
ASCINuc.NUCInit = Buf[1];
ASCINuc.NUCFullScreen = Buf[2];
ASCINuc.TECSW = Buf[3];
ASCINuc.PrintEn = Buf[4];
ASCINuc.RegPageNum = Buf[5];
ASCINuc.RegAddr = Buf[6];
ASCINuc.RegValueSet = Buf[7];
ASCINuc.RegValueGet = Buf[8];
m_CoreReturnInfo.ASCINUCSecond = ASCINuc;
}
break;
case 0x07:
if(DataBuf[5] == 0)
{
DetectorInfo Dval;
Dval.InfoFlag = Buf[0];
Dval.DetectorType = (ushort)(Buf[1]<<8|Buf[2]);
Dval.ADDelay = Buf[3];
Dval.GPOL = Buf[4];
Dval.VR = Buf[5];
Dval.UPCOL = Buf[6];
Dval.UPROW = Buf[7];
Dval.Gain = Buf[8];
Dval.DetectorElecControl = Buf[9];
Dval.AccuWorkTime = (uint)(Buf[10]<<24|Buf[11]<<16|Buf[12]<<8|Buf[13]);
Dval.CurWorkTime = (uint)(Buf[14]<<24|Buf[15]<<16|Buf[16]<<8|Buf[17]);
Dval.BootCount = (ushort)(Buf[18]<<8|Buf[19]);
Dval.Version_Inner_Year = (ushort)(Buf[20]<<8|Buf[21]);
Dval.Version_Inner_Mon = Buf[22];
Dval.Version_Inner_Day = Buf[23];
Dval.DetectorWorkMode = Buf[24];
Dval.VREF = Buf[25];
Dval.OpenWindowSwitch = Buf[26];
Dval.FocusTemp = (short)(Buf[27]<<8|Buf[28])/10.0;
Dval.OutHumity = Buf[29];
Dval.OutAspectSW = Buf[30];
Dval.OutAspectVAlue = (ushort)(Buf[31]<<8|Buf[32]);
m_CoreReturnInfo.Detector = Dval;
}
else if(DataBuf[5] == 1)
{
DetectorInfo2 Dval2;
Dval2.InfoFlag = Buf[0];
Dval2.ADAssess = Buf[1];
Dval2.MultiSamplingSwitch = Buf[2];
Dval2.AverageNum = Buf[3];
Dval2.OutputStart = Buf[4];
Dval2.Sort = Buf[5];
Dval2.MachineHeadingCode = (uint)(Buf[6]<<24|Buf[7]<<16|Buf[8]<<8|Buf[9]);
Dval2.Version_Year = (ushort)(Buf[10]<<8|Buf[11]);
Dval2.Version_Mon = Buf[12];
Dval2.Version_Day = Buf[13];
Dval2.SoftwareConfig_User_aa = Buf[14];
Dval2.SoftwareConfig_User_xx = Buf[15];
Dval2.SoftwareConfig_User_yy = Buf[16];
Dval2.SoftwareConfig_Core_aa = Buf[17];
Dval2.SoftwareConfig_Core_xx = Buf[18];
Dval2.SoftwareConfig_Core_yy = Buf[19];
Dval2.Dx = (ushort)(Buf[20]<<8|Buf[21]);
Dval2.DX_ad = (ushort)(Buf[22]<<8|Buf[23])/1000.0;
Dval2.DX_dot = (ushort)(Buf[24]<<8|Buf[25])/1000.0;
Dval2.OpenWindowStart_X = (ushort)(Buf[26]<<8|Buf[27]);
Dval2.OpenWindowStart_Y = (ushort)(Buf[28]<<8|Buf[29]);
m_CoreReturnInfo.Detector2 = Dval2;
}
break;
case 0x0A:
if(DataBuf[5] == 0)
{
UserInfo User;
User.InfoFlag = Buf[0];
User.FocusTemp = (short)(Buf[1]<<8|Buf[2])/10.0;
User.EnvirTemp = (short)(Buf[3]<<8|Buf[4])/10.0;
User.ElecSelfTest = (ushort)(Buf[5]<<8|Buf[6]);
User.ColdTime = (ushort)(Buf[7]<<8|Buf[8]);;
User.AccuWorkTime = (uint)(Buf[9]<<24|Buf[10]<<16|Buf[11]<<8|Buf[12]);
User.CharSwitch = Buf[13];
User.CursorType = Buf[14];
User.XPos = (ushort)(Buf[15]<<8|Buf[16]);
User.YPos = (ushort)(Buf[17]<<8|Buf[18]);
m_CoreReturnInfo.User = User;
}
else if(DataBuf[5] == 1)
{
UserInfo2 User2;
User2.InfoFlag = Buf[0];
User2.FrameRate =(ushort)(Buf[1]<<8|Buf[2])/100;
User2.SyncMode = Buf[3];
User2.SceneType = Buf[4];
User2.LvdsMode = Buf[5];
User2.Polarity = Buf[6];
User2.Mirror = Buf[7];
User2.Zoom = Buf[8];
User2.Unlimited = (short)(Buf[9]<<8|Buf[10])/1000.0;
User2.DDE_Level = Buf[11];
User2.BCMode = Buf[12];
User2.Brightness = Buf[13];
User2.Contrast = Buf[14];
User2.FocusVal = (ushort)(Buf[15]<<8|Buf[16])/10.0;
User2.FocusStep = Buf[17];
User2.RealTimeAutoFocus_Switch = Buf[18];
User2.CurrentScene = Buf[19];
User2.IntegralGearMode = Buf[20];
User2.IntegralGear = Buf[21];
User2.IntegralTime = (ushort)(Buf[22]<<8|Buf[23]);
User2.BadPointCount_New = (ushort)(Buf[24]<<8|Buf[25]);
User2.PseudoColor = Buf[26];
m_CoreReturnInfo.User2 = User2;
}
break;
default:
break;
}
}
void SerialMovement::analysisReplyInfo(unsigned char *DataBuf, int BufSize)
{
int offset = 5;
unsigned char* Buf = DataBuf+offset;
switch (DataBuf[4])
{
case 0x00:
{
if(DataBuf[5] == 0x01) //版本握手命令
{
m_CoreReplyInfo.DetectorReply.SystemTypeName = Buf[1]; //机芯版本==类型 00FPGA; 01:ASIC(格式00V2.00)
m_CoreReplyInfo.DetectorReply.SystemTypeVer_V = Buf[2]; //版本号字母V
m_CoreReplyInfo.DetectorReply.SystemTypeVer_aa = Buf[3]; //版本号aa
m_CoreReplyInfo.DetectorReply.SystemTypeVer_dot = Buf[4]; //版本号"."
m_CoreReplyInfo.DetectorReply.SystemTypeVer_xx = Buf[5]; //版本号xx
}
break;
}
case 0x07:
{
if(DataBuf[5] == 0x01)
{
QString strType;
for(int i = 1;i<7;i++)
{
char ch = Buf[i];
strType += QString(ch);
}
m_CoreReplyInfo.DetectorReply.DetectorType = strType;
}
else if(DataBuf[5] == 0x16)
{
QString strName;
for(int i = 1;i<7;i++)
{
char ch = Buf[i];
strName += QString(ch);
}
m_CoreReplyInfo.DetectorReply.DetectorName = strName;
}
break;
}
default:
break;
}
}
QString SerialMovement::CmdInsertVal(int Num,QString Cmd,ulong val)
{
QString str;
int point;
switch (Num) {
case 1:
str = QString("%1").arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx");
Cmd.replace(point,2,str);
break;
case 2:
str = QString("%1 %2")
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx");
Cmd.replace(point,5,str);
break;
case 3:
str = QString("%1 %2 %3")
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx");
Cmd.replace(point,8,str);
case 4:
str = QString("%1 %2 %3 %4")
.arg((val>>24) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx");
Cmd.replace(point,11,str);
case 6:
str = QString("%1 %2 %3 %4 %5 %6")
.arg((val>>36) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>32) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>24) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx xx xx xx");
Cmd.replace(point,17,str);
default:
break;
}
return Cmd;
}
QString SerialMovement::CmdInsertValPro(int Num,QString Cmd,ulong val)
{
QString str;
int point;
switch (Num) {
case 1:
str = QString("%1").arg(val & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx");
Cmd.replace(point,2,str);
break;
case 2:
str = QString("%1 %2")
.arg(val & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx");
Cmd.replace(point,5,str);
break;
case 3:
str = QString("%1 %2 %3")
.arg(val & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx");
Cmd.replace(point,8,str);
case 4:
str = QString("%1 %2 %3 %4")
.arg(val & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>24) & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx");
Cmd.replace(point,11,str);
case 6:
str = QString("%1 %2 %3 %4 %5 %6")
.arg((val) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>8) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>16) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>24) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>32) & 0xFF,2,16,QLatin1Char('0'))
.arg((val>>36) & 0xFF,2,16,QLatin1Char('0'));
point = Cmd.indexOf("xx xx xx xx xx xx");
Cmd.replace(point,17,str);
default:
break;
}
return Cmd;
}