471 lines
15 KiB
C++
Raw Normal View History

2024-05-11 17:43:38 +08:00
#include "DataHandle.h"
#include "FunC.h"
2024-05-30 11:18:10 +08:00
#include "../utils/ConverType.h"
#include "../utils/StringHelper.h"
2024-05-11 17:43:38 +08:00
#define DELP(p) if(p){delete p; p = nullptr;}
2024-05-31 11:49:20 +08:00
#define COLOR_RESET "\033[0m" // 假设你的系统支持ANSI颜色代码
2024-05-11 17:43:38 +08:00
#define COLOR_GREEN "\033[32m"
#define COLOR_YELLOW "\033[33m"
void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg) {
DataHandle* p = (DataHandle*)pthis;
ReadData readData = msg;
p->DataCallBackHandle(readData);
}
DataHandle::DataHandle()
: m_dataCallBack(nullptr)
, m_streamClient(nullptr)
, m_printIndex(-1){
m_dataTypeMp[iBOOL] = "iBOOL";
m_dataTypeMp[iSHORT] = "iSHORT";
m_dataTypeMp[iUSHORT] = "iUSHORT";
m_dataTypeMp[iINT] = "iINT";
m_dataTypeMp[iUINT] = "iUINT";
m_dataTypeMp[iFLOAT] = "iFLOAT";
m_dataTypeMp[iSTRING] = "iSTRING";
m_dataTypeMp[iCHAR] = "iCHAR";
m_dataTypeMp[iUCHAR] = "iUCHAR";
m_dataTypeMp[iWORD] = "iWORD";
2024-05-30 11:18:10 +08:00
m_dataTypeMp[iDOUBLE] = "iDOUBLE";
m_dataTypeMp[iTIMET] = "iTIMET";
2024-05-11 17:43:38 +08:00
m_dataTypeMp[UNKNOW] = "UNKNOW";
}
DataHandle::~DataHandle() {
DELP(m_streamClient);
}
2024-05-15 17:59:04 +08:00
2024-05-11 17:43:38 +08:00
void DataHandle::Init() {
m_streamClient = new StreamClient();
m_streamClient->SetCallBackFunc(this,&DataHandle::DataCallBackProc);
m_streamClient->Init();
2024-05-15 17:59:04 +08:00
//stream::ResponseInfo* response = new stream::ResponseInfo(); //获取一层图层的数据
//m_streamClient->GetLayerByIndex(1, response);
2024-05-11 17:43:38 +08:00
}
void DataHandle::Stop() {
m_streamClient->Stop();
DELP(m_streamClient);
}
2024-05-30 17:25:23 +08:00
void DataHandle::PushMsg(WRITETYPE dataType, const string& nameKey, const string& strValue, DATATYPE valueType, DATAHANDLE handleType) {
2024-05-11 17:43:38 +08:00
if (m_streamClient) {
WriteData msg;
msg.dataType = dataType;
msg.nameKey = nameKey;
msg.strValue = strValue;
msg.valueType = valueType;
2024-05-30 17:25:23 +08:00
msg.handleType = handleType;
2024-05-30 11:18:10 +08:00
m_streamClient->PushMsg(msg);
2024-05-11 17:43:38 +08:00
}
}
void DataHandle::PushMsg(const WriteData& wd) {
if (m_streamClient) {
m_streamClient->PushMsg(wd);
}
}
2024-05-11 17:43:38 +08:00
void DataHandle::PrintValue(const ReadData& msg){
if (m_printIndex == msg.dataType) {
auto it = msg.its.begin();
while (it != msg.its.end()) {
it->nameKey;
string valueType = m_dataTypeMp[(*it).valueType];
printf("接收:dataType:%d,nameKey:%*s, strvalue:%*s, valueType:%s\n",
2024-06-04 17:49:56 +08:00
msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data());
2024-05-11 17:43:38 +08:00
++it;
}
printf("共有参数%zd个...\n", msg.its.size());
2024-05-30 17:25:23 +08:00
if(m_printIndex == LASERPARAM || m_printIndex == XYSCANSTATE){
2024-05-11 17:43:38 +08:00
static int count = 0;
++count;
if (count == 4) { count = 0; m_printIndex = -1; } //激光参数默认4个
}
else if (m_printIndex == COMMUNICATIONCFGPARAM) {
static int count = 0;
++count;
if (count == 23) { count = 0; m_printIndex = -1; } //激光参数默认4个
}
2024-05-15 13:38:34 +08:00
else {
m_printIndex = -1;
}
2024-05-11 17:43:38 +08:00
}
}
void DataHandle::DataCallBackHandle(const ReadData& msg) {
if (msg.dataType == VERSIONRSP) {
if (m_printIndex != VERSIONRSP) return;
m_version = msg.its.front().strValue;
printf("版本:%s\n", m_version.data());
m_printIndex = -1;
}
else {
PrintValue(msg);
}
}
void DataHandle::Usage() {
printf(COLOR_GREEN "print TestClient usage:\n" COLOR_RESET);
printf(" 0: " COLOR_YELLOW "print help information...\n" COLOR_RESET);
printf(" 1: " COLOR_YELLOW "exit program...\n" COLOR_RESET);
2024-05-15 17:59:04 +08:00
printf(" 2: " COLOR_YELLOW "test all...\n" COLOR_RESET);
printf(" 3: " COLOR_YELLOW "test axis move interface...\n" COLOR_RESET);
printf(" 4: " COLOR_YELLOW "test scan control interface...\n" COLOR_RESET);
printf(" 5: " COLOR_YELLOW "test registration interface...\n" COLOR_RESET);
2024-05-17 10:57:17 +08:00
printf(" 6: " COLOR_YELLOW "test camera interface...\n" COLOR_RESET);
2024-05-17 15:57:36 +08:00
printf(" 7: " COLOR_YELLOW "test purifier interface...\n" COLOR_RESET);
printf(" 8: " COLOR_YELLOW "test config interface...\n" COLOR_RESET);
2024-05-11 17:43:38 +08:00
printf(" 100: " COLOR_YELLOW "start test recv param interface...\n" COLOR_RESET);
}
void DataHandle::ParamReadUsage() {
printf(COLOR_GREEN "print param usage:\n" COLOR_RESET);
printf(" h: " COLOR_YELLOW "print this information...\n" COLOR_RESET);
printf(" q: " COLOR_YELLOW "return to the previous level...\n" COLOR_RESET);
printf(" 0: " COLOR_YELLOW "print alarm param...\n" COLOR_RESET);
2024-05-15 13:38:34 +08:00
printf(" 1: " COLOR_YELLOW "print version rsp...\n" COLOR_RESET);
printf(" 2: " COLOR_YELLOW "print io signal rsp...\n" COLOR_RESET);
printf(" 3: " COLOR_YELLOW "print system param data...\n" COLOR_RESET);
printf(" 4: " COLOR_YELLOW "print laserchiller data...\n" COLOR_RESET);
printf(" 5: " COLOR_YELLOW "print ups param data...\n" COLOR_RESET);
printf(" 6: " COLOR_YELLOW "print temp ctrl param data...\n" COLOR_RESET);
printf(" 7: " COLOR_YELLOW "print oxygenparam data...\n" COLOR_RESET);
printf(" 8: " COLOR_YELLOW "print laser param data...\n" COLOR_RESET);
printf(" 9: " COLOR_YELLOW "print simplesupplyparam_v10 data...\n" COLOR_RESET);
printf(" 10: " COLOR_YELLOW "print SIMPLESUPPLYPARAM_V21 data...\n" COLOR_RESET);
printf(" 11: " COLOR_YELLOW "print SIMPLESUPPLYPARAM_V22 data...\n" COLOR_RESET);
printf(" 12: " COLOR_YELLOW "print purifier param data...\n" COLOR_RESET);
printf(" 13: " COLOR_YELLOW "print power meter param data...\n" COLOR_RESET);
printf(" 14: " COLOR_YELLOW "print powder supply simple param data...\n" COLOR_RESET);
printf(" 15: " COLOR_YELLOW "print scanner power param data...\n" COLOR_RESET);
printf(" 16: " COLOR_YELLOW "print axismold data...\n" COLOR_RESET);
printf(" 17: " COLOR_YELLOW "print axismold slave data...\n" COLOR_RESET);
printf(" 18: " COLOR_YELLOW "print axisclean data...\n" COLOR_RESET);
printf(" 19: " COLOR_YELLOW "print axisclean slave data...\n" COLOR_RESET);
printf(" 20: " COLOR_YELLOW "print axisload data...\n" COLOR_RESET);
printf(" 21: " COLOR_YELLOW "print axismarm data...\n" COLOR_RESET);
printf(" 22: " COLOR_YELLOW "print axismsupply data...\n" COLOR_RESET);
printf(" 23: " COLOR_YELLOW "print axisele data...\n" COLOR_RESET);
printf(" 24: " COLOR_YELLOW "print axisele slave data...\n" COLOR_RESET);
printf(" 25: " COLOR_YELLOW "print paramlimitcfg param data...\n" COLOR_RESET);
printf(" 26: " COLOR_YELLOW "print extcfg param data...\n" COLOR_RESET);
2024-05-28 18:07:35 +08:00
printf(" 27: " COLOR_YELLOW "print runcfg param data...\n" COLOR_RESET);
printf(" 28: " COLOR_YELLOW "print infraredtemp cfg param data...\n" COLOR_RESET);
2024-05-30 11:18:10 +08:00
printf(" 29: " COLOR_YELLOW "print machine cfg param data...\n" COLOR_RESET);
2024-05-30 17:25:23 +08:00
printf(" 30: " COLOR_YELLOW "print favorite cfg param data...\n" COLOR_RESET);
2024-05-31 11:49:20 +08:00
printf(" 31: " COLOR_YELLOW "print cameracalibration cfg param data...\n" COLOR_RESET);
printf(" 32: " COLOR_YELLOW "print uishow cfg param data...\n" COLOR_RESET);
printf(" 33: " COLOR_YELLOW "print recoatcheck cfg param data...\n" COLOR_RESET);
printf(" 34: " COLOR_YELLOW "print powderestimate cfg param data...\n" COLOR_RESET);
printf(" 35: " COLOR_YELLOW "print communication cfg param data...\n" COLOR_RESET);
printf(" 36: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET);
printf(" 37: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET);
printf(" 38: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET);
printf(" 39: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET);
printf(" 40: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET);
printf(" 41: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET);
printf(" 42: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET);
printf(" 43: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET);
printf(" 44: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET);
printf(" 45: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET);
printf(" 46: " COLOR_YELLOW "print camera param data...\n" COLOR_RESET);
2024-05-15 17:59:04 +08:00
}
2024-05-11 17:43:38 +08:00
2024-05-15 17:59:04 +08:00
int DataHandle::Request(int index) {
int result = 0;
string userInput;
switch (index) {
case 0:
Usage(); break;
case 1:
Stop(); break;
case 2:
AllTest(); break;
case 3:
AxisMoveTest(); break;
case 4:
ScanCtrlTest(); break;
case 5:
RegistrationTest(); break;
2024-05-17 10:57:17 +08:00
case 6:
CameraTest(); break;
2024-05-17 15:57:36 +08:00
case 7:
PurifierTest(); break;
case 8:
ConfigTest(); break;
2024-05-15 17:59:04 +08:00
case 100:
ParamReadUsage();
while (printf("*请输入命令:") && std::getline(std::cin, userInput)) {
if (userInput == "q") {
printf("返回上一级...\n"); break;
}
else if (userInput.empty()) {
continue;
}
else if (userInput == "h") {
2024-05-30 11:18:10 +08:00
ParamReadUsage();
}
else if (userInput.find("push") != string::npos) {
UpdateParam(userInput);
}
else {
ParamRequest(ConverType::TryToI(userInput));
2024-05-15 17:59:04 +08:00
}
}
break;
default:
result = -1;
break;
}
2024-05-11 17:43:38 +08:00
2024-05-15 17:59:04 +08:00
return result;
2024-05-11 17:43:38 +08:00
}
void DataHandle::AllTest() {
AxisMoveTest();
ScanCtrlTest();
2024-05-15 17:59:04 +08:00
RegistrationTest();
2024-05-17 10:57:17 +08:00
CameraTest();
PurifierTest();
ConfigTest();
2024-05-11 17:43:38 +08:00
}
2024-05-15 17:59:04 +08:00
void DataHandle::ParamRequest(int index) {
2024-05-28 18:07:35 +08:00
if (index == VERSIONRSP) {
2024-05-30 11:18:10 +08:00
PushMsg(VERSIONREQ); //获取版本信息
2024-05-11 17:43:38 +08:00
}
2024-05-28 18:07:35 +08:00
else if (index >= PARAMLIMITCFGPARAM && index <= ELECFGPARAM) {
2024-05-30 11:18:10 +08:00
PushMsg(REQUEST);
2024-05-11 17:43:38 +08:00
}
2024-05-28 18:07:35 +08:00
else if(index == LOADPARAMRSP){
2024-05-30 11:18:10 +08:00
PushMsg(LOADPARAM);
2024-05-11 17:43:38 +08:00
}
2024-05-28 18:07:35 +08:00
else if (index == XYSCANSTATE) {
2024-05-30 11:18:10 +08:00
PushMsg(REQUEST,to_string(index));
2024-05-15 13:38:34 +08:00
}
2024-05-11 17:43:38 +08:00
m_printIndex = index;
while (m_printIndex >= 0) {
2024-05-30 17:25:23 +08:00
Sleep(20);
2024-05-11 17:43:38 +08:00
static int count = 0;
++count;
2024-05-30 17:25:23 +08:00
if (count == 50 && m_printIndex >= 0) { //等待1s没用收到消息判断为服务器没用发送
2024-05-11 17:43:38 +08:00
count = 0;
printf("服务器没有发送此参数...\n");
break;
}
}
2024-05-28 18:07:35 +08:00
2024-05-30 11:18:10 +08:00
}
//选择一个参数更新到服务
void DataHandle::UpdateParam(const string& input) {
int index = ConverType::TryToI(input.substr(5));
switch (index) {
case PARAMLIMITCFGPARAM:
break;
case EXTCFGPARAM: break;
case RUNCFGPARAM:
PushMsg(RUNCFG, "FanFreqLowLimit", to_string(11), iFLOAT);//runcfg test
break;
case INFRAREDTEMPCFGPARAM:
PushMsg(INFRAREDTEMPCFG, "ReflectTempAssist", to_string(11), iFLOAT); //infraredtempcfg test
break;
case MACHINECFGPARAM:
PushMsg(MACHINECFG, "lastStartTime", to_string(time(nullptr)), iTIMET); //machinecfg test
break;
2024-05-30 17:25:23 +08:00
case FAVORITECFGPARAM:
2024-05-31 11:49:20 +08:00
PushMsg(FAVORITECFG, "lastStartTime", to_string(time(nullptr)), iSTRING,ADD); //FavoriteCfg test
break;
case CAMERACALIBRATIONCFGPARAM:
PushMsg(CAMERACALIBRATIONCFG, "ShowCorners", to_string(true), iBOOL); //CameracalibrationCfg test
2024-05-30 17:25:23 +08:00
break;
case UISHOWCFGPARAM:
PushMsg(UISHOWCFG, "ItemInnerSpacingHeight", to_string(125.0f), iFLOAT); //UIshowCfg test
break;
case RECOATCHECKCFGPARAM:
PushMsg(RECOATCHECKCFG, "UncoverPercentage", to_string(125.0f), iFLOAT); //RecoatcheckCfg test
break;
case POWDERESTIMATECFGPARAM:
PushMsg(POWDERESTIMATECFG, "TotalGrids", to_string(4201), iUINT); //PowderestimateCfg test
break;
case COMMUNICATIONCFGPARAM:
PushMsg(COMMUNICATIONCFG, "Type_XT_PURIFIER", to_string(4), iINT); //CommunicationCfg test
break;
2024-05-30 11:18:10 +08:00
case ELECFGPARAM:
break;
case LOADPARAMRSP:
break;
case XYSCANSTATE:
break;
default:
break;
}
2024-05-28 18:07:35 +08:00
2024-05-11 17:43:38 +08:00
}
//轴运动测试
void DataHandle::AxisMoveTest() {
int count =(int)MACHINEFUNC::END0;
for (int i = 0; i < count; ++i) {
2024-05-30 11:18:10 +08:00
PushMsg(WRITETYPE::AXISMOVEFUNC,to_string(i));
2024-05-11 17:43:38 +08:00
printf("发送请求%d成功...\n", i);
Sleep(100);
2024-05-11 17:43:38 +08:00
}
}
//扫描控制测试
void DataHandle::ScanCtrlTest() {
int count = (int)SCANCTRLFUNC::END1;
for (int i = 0; i < count; ++i) {
2024-05-17 10:57:17 +08:00
if (i == REMOVESCANNER) {
2024-05-30 11:18:10 +08:00
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i), to_string(1),iINT);
2024-05-11 17:43:38 +08:00
}
2024-05-17 10:57:17 +08:00
else if (i == STOPHEATINGMOTION) {
2024-05-30 11:18:10 +08:00
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i),to_string(0),iBOOL);
2024-05-11 17:43:38 +08:00
}
else {
2024-05-30 11:18:10 +08:00
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i));
2024-05-11 17:43:38 +08:00
}
printf("发送请求%d成功...\n", i);
Sleep(100);
2024-05-11 17:43:38 +08:00
}
2024-05-15 13:38:34 +08:00
2024-05-15 17:59:04 +08:00
}
void DataHandle::RegistrationTest(){
::stream::ResponseAny resp;
stream::RegResponce result;
2024-05-17 10:57:17 +08:00
WriteData wdata{ REGISTFUNC ,to_string(CHECKREG),to_string(time(nullptr)) ,iSTRING };
2024-05-15 17:59:04 +08:00
m_streamClient->Request(wdata,&resp);
if (resp.data().Is<stream::RegResponce>()) {
resp.data().UnpackTo(&result);
printf("CHECKREG resp:%d\n", result.data());
}
Sleep(100);
wdata.strValue = "123456789";
wdata.nameKey = to_string(GETSN);
m_streamClient->Request(wdata, &resp);
if (resp.data().Is<stream::RegResponce>()) {
resp.data().UnpackTo(&result);
printf("GETSN resp:%u\n", (unsigned int)result.data());
}
Sleep(100);
wdata.strValue = "regconfig";
wdata.nameKey = to_string(CHECKREGKEY);
m_streamClient->Request(wdata, &resp);
if (resp.data().Is<stream::RegResponce>()) {
resp.data().UnpackTo(&result);
printf("CHECKREGKEY resp:%d\n", result.data());
}
2024-05-17 10:57:17 +08:00
}
void DataHandle::CameraTest() {
int count = (int)CAMERAFUNC::END2;
for (int i = 0; i < count; ++i) {
if (i == GETSHOWIMAGE || i == GETSHOWIMAGES) continue;
2024-05-30 11:18:10 +08:00
if(i == SETDEMANDCATPURE) PushMsg(CAMERAFUNC, to_string(i),to_string(1),iBOOL);
else PushMsg(CAMERAFUNC, to_string(i));
2024-05-17 10:57:17 +08:00
printf("发送请求%d成功...\n", i);
Sleep(100);
}
::stream::ResponseAny resp;
stream::ImgInfoResponce result;
WriteData wdata{ CAMERAFUNC ,to_string(GETSHOWIMAGE)};
m_streamClient->Request(wdata, &resp);
if (resp.data().Is<stream::ImgInfoResponce>()) {
resp.data().UnpackTo(&result);
printf("GETSHOWIMAGE resp:%u\n", result.levelimage());
}
Sleep(100);
resp.Clear();
wdata.nameKey = to_string(GETSHOWIMAGES);
wdata.strValue = to_string(5); //测试值
wdata.valueType = iINT; //测试值
m_streamClient->Request(wdata, &resp);
if (resp.data().Is<stream::ImgInfoResponce>()) {
resp.data().UnpackTo(&result);
printf("GETSHOWIMAGES resp levelimg:%u,height:%d,width:%d\n", result.levelimage(),result.width(),result.height());
}
Sleep(100);
//修改参数
PushMsg(CAMERAPARAMUPDATE,"LastMouRefImgPosX", to_string(10),iINT);
PushMsg(CAMERAPARAMUPDATE,"LastMouRefImgPosY", to_string(100),iINT);
PushMsg(CAMERAPARAMUPDATE,"ShowFlag", to_string(1),iBOOL);
2024-05-17 10:57:17 +08:00
printf("CAMERAPARAMUPDATE update finish\n");
2024-05-17 15:57:36 +08:00
}
void DataHandle::PurifierTest() {
2024-05-30 11:18:10 +08:00
PushMsg(PURIFIERFUNC, to_string(STARTAUTODEOXYGEN));
2024-05-17 15:57:36 +08:00
printf("STARTAUTODEOXYGEN is called...\n");
2024-05-30 11:18:10 +08:00
PushMsg(PURIFIERFUNC, to_string(STOPAUTODEOXYGEN));
2024-05-17 15:57:36 +08:00
printf("STOPAUTODEOXYGEN is called...\n");
2024-05-28 18:07:35 +08:00
}
void DataHandle::ConfigTest() {
PushMsg(CONFIGFUNC, to_string(SAVECONFIG));
printf("saveconfig is called...\n");
PushMsg(CONFIGFUNC, to_string(SAVEMACHINECONFIG));
printf("savemachineconfig is called...\n");
PushMsg(CONFIGFUNC, to_string(DELETEMACHINEIO));
printf("deletemachineio is called...\n");
WriteData wd{ CONFIGFUNC, to_string(CONTROLRUN) };
wd.items.emplace_back(Item{ "enable", to_string(true) ,iBOOL });
wd.items.emplace_back(Item{ "code", "usp" ,iSTRING });
PushMsg(wd);
printf("controlrun is called...\n");
2024-06-04 17:49:56 +08:00
::stream::ResponseAny resp;
stream::ComResponce result;
WriteData wdata{ CONFIGFUNC ,to_string(IOVERSIONSTR) };
wdata.items.emplace_back(Item{"index","1",iINT});
m_streamClient->Request(wdata, &resp);
if (resp.data().Is<stream::ComResponce>()) {
resp.data().UnpackTo(&result);
printf("IOVERSIONSTR resp:%s\n", result.data().data());
}
PushMsg(CONFIGFUNC, to_string(REDTESTCFGSTART));
printf("redtestcfgstart is called...\n");
PushMsg(CONFIGFUNC, to_string(REDTESTCFGSTOP));
printf("redtestcfgstop is called...\n");
}