405 lines
12 KiB
C++
Raw 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 "DataHandle.h"
#include "FunC.h"
#include "../utils/ConverType.h"
#define DELP(p) if(p){delete p; p = nullptr;}
#define COLOR_RESET "\033[0m" // 假设你的系统支持ANSI颜色代码
#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";
m_dataTypeMp[iDOUBLE] = "iDOUBLE";
m_dataTypeMp[iTIMET] = "iTIMET";
m_dataTypeMp[UNKNOW] = "UNKNOW";
}
DataHandle::~DataHandle() {
DELP(m_streamClient);
}
void DataHandle::Init() {
m_streamClient = new StreamClient();
m_streamClient->SetCallBackFunc(this,&DataHandle::DataCallBackProc);
m_streamClient->Init();
//stream::ResponseInfo* response = new stream::ResponseInfo(); //获取一层图层的数据
//m_streamClient->GetLayerByIndex(1, response);
}
void DataHandle::Stop() {
m_streamClient->Stop();
DELP(m_streamClient);
}
void DataHandle::PushMsg(WRITETYPE dataType, const string& nameKey, const string& strValue, DATATYPE valueType, DATAHANDLE handleType) {
if (m_streamClient) {
WriteData msg;
msg.dataType = dataType;
msg.nameKey = nameKey;
msg.strValue = strValue;
msg.valueType = valueType;
msg.handleType = handleType;
m_streamClient->PushMsg(msg);
}
}
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",
msg.dataType, 33, it->nameKey.data(), 13, it->strValue.data(), valueType.data());
++it;
}
printf("共有参数%zd个...\n", msg.its.size());
if(m_printIndex == LASERPARAM || m_printIndex == XYSCANSTATE){
static int count = 0;
++count;
if (count == 4) { count = 0; m_printIndex = -1; } //激光参数默认4个
}
else {
m_printIndex = -1;
}
}
}
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);
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);
printf(" 6: " COLOR_YELLOW "test camera interface...\n" COLOR_RESET);
printf(" 7: " COLOR_YELLOW "test purifier interface...\n" COLOR_RESET);
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);
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);
printf(" 27: " COLOR_YELLOW "print runcfg param data...\n" COLOR_RESET);
printf(" 28: " COLOR_YELLOW "print infraredtemp cfg param data...\n" COLOR_RESET);
printf(" 29: " COLOR_YELLOW "print machine cfg param data...\n" COLOR_RESET);
printf(" 30: " COLOR_YELLOW "print favorite cfg param data...\n" COLOR_RESET);
printf(" 31: " COLOR_YELLOW "print cameracalibration cfg param data...\n" COLOR_RESET);
printf(" 32: " COLOR_YELLOW "print moldcfg param data...\n" COLOR_RESET);
printf(" 33: " COLOR_YELLOW "print loadcfg param data...\n" COLOR_RESET);
printf(" 34: " COLOR_YELLOW "print armcfgparam data...\n" COLOR_RESET);
printf(" 35: " COLOR_YELLOW "print supplycfgparam data...\n" COLOR_RESET);
printf(" 36: " COLOR_YELLOW "print cleancfgparam data...\n" COLOR_RESET);
printf(" 37: " COLOR_YELLOW "print elecfgparam data...\n" COLOR_RESET);
printf(" 38: " COLOR_YELLOW "print loadparamrsp data...\n" COLOR_RESET);
printf(" 39: " COLOR_YELLOW "print scan ctrl state data...\n" COLOR_RESET);
printf(" 40: " COLOR_YELLOW "print scan ctrl Param data...\n" COLOR_RESET);
printf(" 41: " COLOR_YELLOW "print xy scan state data...\n" COLOR_RESET);
printf(" 42: " COLOR_YELLOW "print camera param data...\n" COLOR_RESET);
}
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;
case 6:
CameraTest(); break;
case 7:
PurifierTest(); break;
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") {
ParamReadUsage();
}
else if (userInput.find("push") != string::npos) {
UpdateParam(userInput);
}
else {
ParamRequest(ConverType::TryToI(userInput));
}
}
break;
default:
result = -1;
break;
}
return result;
}
void DataHandle::AllTest() {
AxisMoveTest();
ScanCtrlTest();
RegistrationTest();
CameraTest();
PurifierTest();
}
void DataHandle::ParamRequest(int index) {
if (index == VERSIONRSP) {
PushMsg(VERSIONREQ); //获取版本信息
}
else if (index >= PARAMLIMITCFGPARAM && index <= ELECFGPARAM) {
PushMsg(REQUEST);
}
else if(index == LOADPARAMRSP){
PushMsg(LOADPARAM);
}
else if (index == XYSCANSTATE) {
PushMsg(REQUEST,to_string(index));
}
m_printIndex = index;
while (m_printIndex >= 0) {
Sleep(20);
static int count = 0;
++count;
if (count == 50 && m_printIndex >= 0) { //等待1s没用收到消息判断为服务器没用发送
count = 0;
printf("服务器没有发送此参数...\n");
break;
}
}
}
//选择一个参数更新到服务
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;
case FAVORITECFGPARAM:
PushMsg(FAVORITECFG, "lastStartTime", to_string(time(nullptr)), iSTRING,ADD); //FavoriteCfg test
break;
case CAMERACALIBRATIONCFGPARAM:
PushMsg(CAMERACALIBRATIONCFG, "ShowCorners", to_string(true), iBOOL); //CameracalibrationCfg test
break;
case ELECFGPARAM:
break;
case LOADPARAMRSP:
break;
case XYSCANSTATE:
break;
default:
break;
}
}
//轴运动测试
void DataHandle::AxisMoveTest() {
int count =(int)MACHINEFUNC::END0;
for (int i = 0; i < count; ++i) {
PushMsg(WRITETYPE::AXISMOVEFUNC,to_string(i));
printf("发送请求%d成功...\n", i);
Sleep(100);
}
}
//扫描控制测试
void DataHandle::ScanCtrlTest() {
int count = (int)SCANCTRLFUNC::END1;
for (int i = 0; i < count; ++i) {
if (i == REMOVESCANNER) {
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i), to_string(1),iINT);
}
else if (i == STOPHEATINGMOTION) {
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i),to_string(0),iBOOL);
}
else {
PushMsg(WRITETYPE::SCANCTRLFUNC, to_string(i));
}
printf("发送请求%d成功...\n", i);
Sleep(100);
}
}
void DataHandle::RegistrationTest(){
::stream::ResponseAny resp;
stream::RegResponce result;
WriteData wdata{ REGISTFUNC ,to_string(CHECKREG),to_string(time(nullptr)) ,iSTRING };
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());
}
}
void DataHandle::CameraTest() {
int count = (int)CAMERAFUNC::END2;
for (int i = 0; i < count; ++i) {
if (i == GETSHOWIMAGE || i == GETSHOWIMAGES) continue;
if(i == SETDEMANDCATPURE) PushMsg(CAMERAFUNC, to_string(i),to_string(1),iBOOL);
else PushMsg(CAMERAFUNC, to_string(i));
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(WRITETYPE::CAMERAPARAMUPDATE,"LastMouRefImgPosX", to_string(10),iINT);
PushMsg(WRITETYPE::CAMERAPARAMUPDATE,"LastMouRefImgPosY", to_string(100),iINT);
PushMsg(WRITETYPE::CAMERAPARAMUPDATE,"ShowFlag", to_string(1),iBOOL);
printf("CAMERAPARAMUPDATE update finish\n");
}
void DataHandle::PurifierTest() {
PushMsg(PURIFIERFUNC, to_string(STARTAUTODEOXYGEN));
printf("STARTAUTODEOXYGEN is called...\n");
PushMsg(PURIFIERFUNC, to_string(STOPAUTODEOXYGEN));
printf("STOPAUTODEOXYGEN is called...\n");
}