满分学习

This commit is contained in:
lixiao 2025-06-04 12:45:17 +08:00
parent b839458e73
commit 77f41f5c79
13 changed files with 397 additions and 64 deletions

View File

@ -27,7 +27,7 @@
#define JUDGE_VERSION_MAJOR 1
#define JUDGE_VERSION_MINOR 0
#define JUDGE_VERSION_PATCH 3
#define JUDGE_VERSION_STAMP "2505201042b"
#define JUDGE_VERSION_STAMP "2506041100b"
#if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old"
@ -56,4 +56,12 @@
extern const char JUDGE_VERSION_INFO[]; //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030
#endif
struct TVersionInfo
{
int major;
int minor;
int patch;
std::string stamp;
};
#endif // HVERSION_H

View File

@ -2,18 +2,15 @@
#include "HVersion.h"
#include "Loggerxx.h"
bool Tools::checkVersion(const std::string& version)
TVersionInfo Tools::splitVersion(const std::string& sdkver)
{
std::vector<std::string> ver = Tools::split(version, ".");
//int major = std::atoi(ver[0].c_str());
//int minor = std::atoi(ver[1].c_str());
//int patch = std::atoi(ver[2].c_str());
std::string v3 = ver[3];
if(v3.back() == 'b')
{
v3.pop_back();
}
return (v3 < "2505121242");
TVersionInfo verinfo;
std::vector<std::string> ver = Tools::split(sdkver, ".");
verinfo.major = std::atoi(ver[0].c_str());
verinfo.minor = std::atoi(ver[1].c_str());
verinfo.patch = std::atoi(ver[2].c_str());
verinfo.stamp = ver[3];
return verinfo;
}
int64 Tools::nowTime()

View File

@ -9,12 +9,14 @@
#define TOOLS_H
#include "HDefine.h"
#include "HVersion.h"
class Tools
{
public:
static bool checkVersion(const std::string& version);
//解析版本号
static TVersionInfo splitVersion(const std::string& sdkver);
//获取当前系统时间,单位:毫秒
static int64 nowTime();
//壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准

View File

@ -160,6 +160,7 @@ ErrorCode ExamCarSub3::examJudgeExam()
ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type)
{
//810参数为1时所有扣分项均可远程扣分;其它,只能扣 MARKSERIAL 大于 99 的扣分项
const std::string& ksdd = TableSysSet->get211();
if(ksdd == siteof::zjhz && isExamDrill())
{
@ -167,9 +168,12 @@ ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& ser
return QE(errorArtifForbid);
}
const std::string& s342 = TableSysSet->get342();
if(s342 == "1" || s342 == "3")
if(type == MarkTypeArti)
{
return QE(errorArtifForbid);
if(s342 == "1" || s342 == "3") //车上不允许人工扣分
{
return QE(errorArtifForbid);
}
}
examMarkItem(itemno, serial, false, true, true, type);

View File

@ -169,17 +169,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
//航向角(默认是按诺瓦泰的数据格式定义的所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
//2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
if(Tools::checkVersion(m_car->carVerison()))
{
if(gps.bklx == boardTypeTB)
{
gps.hxj += 180.0;
}
if(gps.hxj >= 360.0)
{
gps.hxj -= 360.0;
}
}
//if(Tools::checkVersion(m_car->carVerison()))
//{
// if(gps.bklx == boardTypeTB)
// {
// gps.hxj += 180.0;
// }
// if(gps.hxj >= 360.0)
// {
// gps.hxj -= 360.0;
// }
//}
//实际上车这里经纬度要转化,测试的数据都是转化好的
gps.jd = GpsMath::convertGpsCoord2(gps.jd);
@ -196,17 +196,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
{
TGpsInfo& gps2 = cg->real.gps2;
//2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
if(Tools::checkVersion(m_car->carVerison()))
{
if(gps2.bklx == boardTypeTB)
{
gps2.hxj += 180.0;
}
if(gps2.hxj >= 360.0)
{
gps2.hxj -= 360.0;
}
}
//if(Tools::checkVersion(m_car->carVerison()))
//{
// if(gps2.bklx == boardTypeTB)
// {
// gps2.hxj += 180.0;
// }
// if(gps2.hxj >= 360.0)
// {
// gps2.hxj -= 360.0;
// }
//}
//实际上车这里经纬度要转化,测试的数据都是转化好的
gps2.jd = GpsMath::convertGpsCoord2(gps2.jd);
gps2.wd = GpsMath::convertGpsCoord2(gps2.wd);

View File

@ -552,6 +552,11 @@ struct TSub3Item02Qbxx //起步 2
Pointi PubLCTCPtt;
bool PubCanMarkLC50Flag = true; //注意初始必须是true
int jsc_qibu_10 = 0;
bool Mark_A302ID = false;
int64 ssc2qjsj = 0;
int64 ssc2qjtk = 0;
//新科三参数
int64 obsTime = 0;
};

View File

@ -233,7 +233,7 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1)
m_outLine = false;
}
if(cgcu->move == moveStop && cg01->move == moveBackward && cg02->move == moveBackward)
if(cgcu->move == moveStop && cg01->move == moveBackward) // && cg02->move == moveBackward
{
m_outLine = false;
//车辆入库停止后,车身出线
@ -436,21 +436,27 @@ void Sub2Judge03Cftc::judgeTouchLine()
{
if(IS_C1C2C5(m_carType))
{
//以下计算所有的压线扣分(只用车轮子计算的)
touchLineWheel_C1C2C5(LineNum::L23_NUM);
touchLineWheel_C1C2C5(LineNum::L34_NUM);
touchLineWheel_C1C2C5(LineNum::L45_NUM);
touchLineWheel_C1C2C5(LineNum::L56_NUM);
touchLineWheel_C1C2C5(LineNum::L67_NUM);
touchLineWheel_C1C2C5(LineNum::L18_NUM);
touchLineWheel_C1C2C5(LineNum::L36_NUM); //2024-12-11
TChuanGan* cgcu = m_car->historyChuanGan();
TChuanGan* cg01 = m_car->historyChuanGan(1);
//计算是否过了上库位控制线、是否穿越了结束线
if(cgcu->move != moveStop && cg01->move != moveStop)
{
//以下计算所有的压线扣分(只用车轮子计算的)
touchLineWheel_C1C2C5(LineNum::L23_NUM);
touchLineWheel_C1C2C5(LineNum::L34_NUM);
touchLineWheel_C1C2C5(LineNum::L45_NUM);
touchLineWheel_C1C2C5(LineNum::L56_NUM);
touchLineWheel_C1C2C5(LineNum::L67_NUM);
touchLineWheel_C1C2C5(LineNum::L18_NUM);
touchLineWheel_C1C2C5(LineNum::L36_NUM); //2024-12-11
//#if JUDGE_USE_INSPECT
//无锡所新标准车身触碰库位边线也要判20240605
touchLineBody_C1C2C5(LineNum::L34_NUM);
touchLineBody_C1C2C5(LineNum::L45_NUM);
touchLineBody_C1C2C5(LineNum::L56_NUM);
//#endif
//#if JUDGE_USE_INSPECT
//无锡所新标准车身触碰库位边线也要判20240605
touchLineBody_C1C2C5(LineNum::L34_NUM);
touchLineBody_C1C2C5(LineNum::L45_NUM);
touchLineBody_C1C2C5(LineNum::L56_NUM);
//#endif
}
}
}

View File

@ -23,7 +23,7 @@ bool Sub3Judge02Qbxx::dealJudgeEnter()
const std::vector<std::string> ss = Tools::split(str, "^");
m_itemv.sys502_8_1 = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
m_itemv.sys502_8_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0);
m_itemv.jsc_qibu_10 = s502.size() > 12 && s502[12] != ""? std::atoi(s502[12].c_str()) : 0;
//下面是视觉相关的,先把参数值拿到,暂时不实现
const std::vector<std::string>& s531 = TableSysSet->asArray531();
if(s531.size() > 0 && s531[0] == "1")
@ -221,7 +221,7 @@ void Sub3Judge02Qbxx::dealJudgeItem()
}
//具备起步条件10秒没有起步
void Sub3Judge02Qbxx::nogo_timeout()
void Sub3Judge02Qbxx::nogo_timeout_old()
{
const TChuanGan* cg = m_car->historyChuanGan();
const TSensorInfo& sor = cg->real.sensor;
@ -229,6 +229,20 @@ void Sub3Judge02Qbxx::nogo_timeout()
const TChuanGan* his1 = m_car->historyChuanGan(1);
const TSensorInfo& sor1 = his1->real.sensor;
//502:起步参数: qbcd, ssc2qjsj, qbpdsjl, qbfdjzsgg, qblcjl,cfjxm,qbsj,
//(1)qbcd起步闯动起评值单位度 (2)ssc2qjsj放手刹后X秒车轮未动扣分时间
//(3)qbpdsjl起步判怠速的有效距离 (4)qbfdjzsgg发动机转速过高
//(5)qblcjl起步溜车最小距离
//(6)cfjxm:进项目时机 0表示只要停车满足5秒就进入起步状态 1表示只有差分才能进项目
//(7)qbsj:停车多长时间进入起步状态单位秒最大值5最小值1
//810s未起步只评判第一次^第一次起步以打左方向灯开始计时^
//9检查仪表在车辆启动状态下进行1-是
//10起步触发顺序0-无限制1-上车准备完成2-模拟灯光完成
//11自动挡也评判带档点火p档信号为10
//12点火不松开关不判断转速
//502第8个参数 10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^ “具备起步条件10秒没有起步” 扣几次
// C2 N空挡是0 R倒车档9 P驻车档10 D前进挡11
//档位或者手刹信号发生变化且变化的结果是前进挡和松手刹状态开始计时10秒后扣分
if(m_itemv.ZhunBeiQiBuTK == 0)
@ -290,6 +304,266 @@ void Sub3Judge02Qbxx::nogo_timeout()
*/
}
void Sub3Judge02Qbxx::nogo_timeout()
{
//***此代码和win核对过的一模一样 2025-05-28
int i = 0;
//tempstr := getdotstr(8, sysset[502], ',') + '^';
if(m_itemv.sys502_8_1 == 1)
{
if(m_Pub_First_QiBu_Flag) i = 1;
}
if(m_itemv.sys502_8_1 == 2)
{
if(m_Pub_First_QiBu_Flag) i = 1;
//if(itm20.lstc_zt > 0) //贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态
//{
// i = 0;
//}
}
const std::string& ksdd = TableSysSet->get211();
const TChuanGan* cg = m_car->historyChuanGan();
const TSensorInfo& sor = cg->real.sensor;
const TSensorInfo& sor1 = m_car->historySensor(1);
const TSensorInfo& sor2 = m_car->historySensor(2);
const TSensorInfo& sor3 = m_car->historySensor(3);
TKM3Item* item11 = m_car->findExamItem(Sub3ItemType11Kbtc);
if(item11 && item11->TestPro > ItemProFlagIdle) //if (Km3TsI[ItemArr(11)].TestPro > 0) //²»ÔÚ¿¿±ßÍ£³µ×´Ì¬ÄÚ
i = 1;
if(m_itemv.Mark_A302ID) i = 1;
if (!m_Pub_First_QiBu_Flag && m_itemv.sys502_8_2 == 1)
{
if(m_itemv.ssc2qjsj == 0)
{
if(sor.zfxd == SYES && sor1.zfxd == SYES && sor2.zfxd == SNOT && sor3.zfxd == SNOT)
{
m_itemv.ssc2qjsj = cg->tkCnt;
}
}
if(m_itemv.ssc2qjtk == 0)
{
if (m_itemv.ssc2qjsj > 0 && cg->tkCnt - m_itemv.ssc2qjsj > 3000)
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
if(sor.zfxd == SNOT && sor1.zfxd == SNOT)
{
m_itemv.ssc2qjsj = 0;
m_itemv.ssc2qjtk = 0;
}
if (cg->move != moveStop)
{
m_itemv.ssc2qjsj = 0;
m_itemv.ssc2qjtk = 0;
}
if (m_itemv.ssc2qjtk > 0)
{
if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND)
{
m_itemv.Mark_A302ID = true;
m_itemv.ssc2qjtk = 0;
m_itemv.ssc2qjsj = 0;
if(ksdd == siteof::scms)
{
JUDGE_MARK_SUB3(2, "48", true); //Mark(2, '48', True)
}
else
{
JUDGE_MARK_SUB3(2, "48", false); //Mark(2, '48', False);
}
}
}
i = 1;
}
if(i == 0)
{
if(ksdd == siteof::sxbjxc || ksdd == siteof::sxbjdc)
{
if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0)
{
m_itemv.ssc2qjtk = 0;
}
else
{
if(m_itemv.ssc2qjtk == 0)
{
if(sor.ssc == SNOT && sor1.ssc == SNOT)
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
}
}
else if(ksdd == siteof::nmgcfkm3)
{
if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0)
{
m_itemv.ssc2qjtk = 0;
}
else
{
if(m_itemv.ssc2qjtk == 0)
{
if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES)
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
}
}
else if(ksdd == siteof::scms)
{
if (cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10)
{
m_itemv.ssc2qjtk = 0;
}
else
{
if(m_itemv.ssc2qjtk == 0)
{
int a = 0;
if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
{
if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
{
a = 1;
}
}
if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
}
}
else if(ksdd == siteof::guizhouas)
{
if(cg->move != moveStop)
{
m_itemv.ssc2qjtk = 0;
}
else
{
if(m_itemv.ssc2qjtk == 0)
{
int a = 0;
if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
{
if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
{
a = 1;
}
}
if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
}
}
else
{
if(cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10
|| (m_itemv.jsc_qibu_10 == 1 && sor.jsc == SNOT))
{
m_itemv.ssc2qjtk = 0;
}
else
{
if(m_itemv.ssc2qjtk == 0)
{
int a = 0;
if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
{
if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
{
a = 1;
}
}
if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES && a == 1)
{
if(m_itemv.jsc_qibu_10 == 1)
{
if(sor.jsc == SNOT && sor1.jsc == SNOT)
m_itemv.ssc2qjtk = cg->tkCnt;
}
else
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
a = 0;
if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
{
if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
{
if((sor2.dw == 0 || sor2.dw == 10) && (sor3.dw == 0 || sor3.dw == 10))
{
a = 1;
}
}
}
if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
{
if(m_itemv.jsc_qibu_10 == 1)
{
if(sor.jsc == SNOT && sor1.jsc == SNOT)
m_itemv.ssc2qjtk = cg->tkCnt;
}
else
{
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
if(m_itemv.jsc_qibu_10 == 1)
{
int a = 0;
if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
{
if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
{
a = 1;
}
}
if (sor.jsc == SNOT && sor1.jsc == SNOT && sor2.jsc == SYES && sor3.jsc == SYES && a == 1)
{
if(sor.ssc == SNOT && sor1.ssc == SNOT)
m_itemv.ssc2qjtk = cg->tkCnt;
}
}
}
}
}
if(ksdd == siteof::hnpy)
{
TKM3Item* item05 = m_car->findExamItem(Sub3ItemType05Lkzx);
if(item05 && item05->TestPro > ItemProFlagIdle) //if(Km3TsI[ItemArr(5)].TestPro > 0)
{
m_itemv.ssc2qjtk = 0;
}
}
if(m_itemv.ssc2qjtk > 0)
{
if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND)
{
m_itemv.Mark_A302ID = true;
m_itemv.ssc2qjtk = 0;
if(ksdd == siteof::scms)
{
JUDGE_MARK_SUB3(2, "48", true); //Mark(2, '48', True)
}
else
{
JUDGE_MARK_SUB3(2, "48", false); // Mark(2, '48', False);
}
}
}
}
}
//6、起步方向灯、喇叭
void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
@ -343,7 +617,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TSensorInfo& sori = hisi->real.sensor;
if(hisi->move == moveStop)
//if(hisi->move == moveStop)
{
if(sori.zfxd == SYES && sori.yfxd == SNOT)
{
@ -366,7 +640,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
const TChuanGan* hisi = m_car->historyChuanGan(i);
if(hisi == nullptr) break;
const TSensorInfo& sori = hisi->real.sensor;
if(hisi->move == moveStop)
//if(hisi->move == moveStop)
{
if(sori.zfxd == SYES && sori.yfxd == SNOT)
{

View File

@ -58,6 +58,7 @@ public:
protected:
//具备起步条件10秒没有起步
void nogo_timeout_old();
void nogo_timeout();
//1、溜车评判
void Judge_LiuChe();

View File

@ -794,8 +794,9 @@ void Sub3Judge11Kbtc::DoStatus_3()
//20150702 河南要求 河南洛阳车管所科目三靠边停车修改评判要求:夜考时,靠边停车项目在停车后,拉手刹结束前需要评判是否打开视宽灯或把近光灯调成视宽灯。
if(s326 == "2")
{
TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs);
bool OKFlag = (item && item->Item_Color == itemStateZk);
//TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs);
//bool OKFlag = (item && item->Item_Color == itemStateZk);
bool OKFlag = m_car->getTCar()->Night_ID;
if(OKFlag == true) //夜间驾驶
{
if(sor1.ygd == SYES || sor1.jgd == SYES || sor1.skd == SNOT)
@ -1215,8 +1216,9 @@ void Sub3Judge11Kbtc::DoStatus_6()
JUDGE_MARK_SUB3(11, "07", true); //20160928
}
TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶
bool FindFlag = (item && item->Item_Color == itemStateZk);
//TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶
//bool FindFlag = (item && item->Item_Color == itemStateZk);
bool FindFlag = m_car->getTCar()->Night_ID;
if(FindFlag == true) //夜间驾驶
{
if(ksdd == siteof::hbxy) //20160122

View File

@ -347,7 +347,7 @@ void Sub3Judge20Comm::Init_ZongHe()
//转向灯打开,一开始的距离
m_itemvCJH.ZXD_Open_TempJL = -1;
//临时停车状态
m_itemvCJH.lstc_zt = -1; //20151116
m_itemvCJH.lstc_zt = -1; //20151116 贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态
//夜间行驶用到,同方向近距离跟车行驶
m_itemvCJH.gc_zt = -1; //20160617
//夜间行驶用到,人行横道相关的
@ -685,7 +685,7 @@ void Sub3Judge20Comm::Set_FDJ_DS()
TotalZS = 0;
for(int i = 1; i <= 25; i++)
{
const TChuanGan* hisi = m_car->historyChuanGan(1);
const TChuanGan* hisi = m_car->historyChuanGan(i);
const TSensorInfo& sori = hisi->real.sensor;
if(hisi->move != moveStop)
{
@ -877,7 +877,7 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
return;
}
if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) //2024-11-13杭州新增
if(sor.aqd == SYES && sor1.aqd == SYES) //2024-11-13杭州新增
{
static constexpr int n = 10;
//static constexpr int m = 0;
@ -932,7 +932,9 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
//501第10个参数时间毫秒、如果不配置那就是2米检查如果过程中关闭再打开也算关闭
const std::string& s322 = TableSysSet->get322();
if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100) ||
//触发夜间灯光模拟的条件(0-点完成(先模拟灯光,再绕车一周)+1-插安全带或点火2等待5秒2-点火2+3-上车准备人工评判按钮切换+4-点击“继续考试”按钮触发+5-有点火1信号就可以触发6-有安全带就触发)
//sor.dh2 == SNOT 防止考生长时间拧钥匙不松开会导致出现扣分未及时松开启动开关2次不合格后模拟灯光合格第二次考试不用再考模拟灯光的漏判。
if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100 /*&& sor.dh2 == SNOT*/) ||
(Tools::pos(JUDGE_UTF8S("江淮电动"), m_car->carClass()) && sor.dh1 == SYES) ||
(s386 == "5" && sor.dh1 == SYES) ||
(s386 == "6" && sor.aqd == SYES && sor1.aqd == SYES) ) //20170314 训练模式 只要有dh1就可以进行模拟灯光

View File

@ -66,6 +66,7 @@ bool TrackReader::read(TTrackData::Ptr& data)
{
if(root.contains("kskm") && root.contains("carmodel"))
{
m_sdkver = Tools::splitVersion(root["sdkver"]);
data->type = TTrackTypeInitExam;
}
else if(root.contains("exam") && root.contains("sfzmhm"))
@ -75,6 +76,36 @@ bool TrackReader::read(TTrackData::Ptr& data)
else if(root.contains("sensor") && root.contains("gps"))
{
data->type = TTrackTypeRealExam;
if(m_sdkver.stamp < "2505121242")
{
int type = root["gps"]["bklx"];
double hxj = root["gps"]["hxj"];
if(type == boardTypeTB)
{
hxj += 180.0;
}
if(hxj >= 360.0)
{
hxj -= 360.0;
}
root["gps"]["hxj"] = hxj;
if(root.contains("gps2"))
{
int type = root["gps2"]["bklx"];
double hxj = root["gps2"]["hxj"];
if(type == boardTypeTB)
{
hxj += 180.0;
}
if(hxj >= 360.0)
{
hxj -= 360.0;
}
root["gps2"]["hxj"] = hxj;
}
}
}
else if(root.contains("method") && root["method"] == "examJudgeRealVision" &&
root.contains("type") && root.contains("data"))

View File

@ -24,6 +24,7 @@ public:
private:
std::string m_content;
std::stringstream m_stream;
TVersionInfo m_sdkver;
};
#endif // TRACKREADER_H