/* * @Author: zjk 1553836110@qq.com * @Date: 2023-10-12 09:52:27 * @LastEditors: zhaojingkui 1553836110@qq.com * @LastEditTime: 2023-11-28 11:32:48 * @FilePath: /moos-ivp-pi/src/pEmulator/Emulator.cpp * @Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. */ // #define DEBUG #include"Emulator.hpp" #include #include"ACTable.h" bool _ListenCB(void * pParam) { Emulator* pMe = (Emulator* )pParam; return pMe->receiveUdpDate(); } bool _ListenBSC(void* pParam) { _150server* pMe = (_150server*)pParam; return pMe->listenInfo(); } bool _Connect(void* pParam) { Emulator* pMe = (Emulator* )pParam; return pMe->_150Connect(); } bool Emulator::OnNewMail(MOOSMSG_LIST &NewMail) { AppCastingMOOSApp::OnNewMail(NewMail); MOOSMSG_LIST::iterator p; for(p=NewMail.begin(); p!=NewMail.end(); p++) { CMOOSMsg &msg = *p; string key = msg.m_sKey; string sval = msg.m_sVal; double dval = msg.m_dfVal; double dfT; msg.IsSkewed(m_curr_time, &dfT); // if(key == "DESIRED_RUDDER") // { // sendBuf[0] = dval; // remus100.rudder = dval; // } // else if(key == "DESIRED_ELEVATOR") // { // sendBuf[1] = dval; // remus100.elevator = dval; // } // else if(key == "DESIRED_THRUST") // { // sendBuf[2] = dval; // remus100.thrust = dval; // } // else if(key == "DESIRED_DEPTH") sendBuf[3] = dval; else if(key == "DESIRED_HEADING") sendBuf[4] = dval; else if(key == "DESIRED_SPEED") sendBuf[5] = dval; // reportRunWarning("UnKown var:" + key); } return true; } bool Emulator::Iterate() { AppCastingMOOSApp::Iterate(); if(_150ServerThread.IsThreadRunning()) { // 这里需要转换数据 if(p_150server_1._150cmd.helm_top_angle > 128) sendBuf[0] = -(p_150server_1._150cmd.helm_top_angle - 128); else sendBuf[0] = p_150server_1._150cmd.helm_top_angle; if(p_150server_1._150cmd.helm_right_angle > 128) sendBuf[1] = -(p_150server_1._150cmd.helm_right_angle - 128); else sendBuf[1] = p_150server_1._150cmd.helm_right_angle; sendBuf[2] = (uint8_t)p_150server_1._150cmd.thrust * 1525 / 100; set150Info(); p_150server_1.postInfo(); isConnect = " 150 Server..."; } else isConnect = "No 150 Connect..."; udp->iSendMessageTo((void*)sendBuf, sendBufSize, matalb_port, matlab_host); //postNodeRecordUpdate(prefix, record); AppCastingMOOSApp::PostReport(); return true; } bool Emulator::OnConnectToServer() { registerVariables(); return true; } bool Emulator::OnStartUp() { AppCastingMOOSApp::OnStartUp(); //TODO: 添加初始状态设置 STRING_LIST sParams; m_MissionReader.GetConfiguration(GetAppName(), sParams); STRING_LIST::iterator p; for(p=sParams.begin(); p!=sParams.end(); p++) { bool unhandled = false; string orig = *p; string line = *p; string param = toupper(biteStringX(line, '=')); string value = line; double dval = atof(value.c_str()); cout << param << endl; if(param == "MATLAB_HOST") { matlab_host = value; } else if(param == "MATLAB_PORT") { matalb_port = (long int)dval; } else if(param == "LOCAL_PORT") { local_port = (long int)dval; } else if(param == "PREFIX") { setNonWhiteVarOnString(prefix, value); } else if(param == "START_X") { start_x = dval; } else if(param == "START_Y") { start_y = dval; } else if(param == "START_Z") { start_z = dval; } else if(param == "START_HEADING") { start_heading = dval; } else unhandled = true; if(unhandled) reportUnhandledConfigWarning(orig); } //添加UDP 设置 //TODO:添加try try { udp = new XPCUdpSocket(local_port); udp->vSetBroadcast(true); udp->vBindSocket(); } catch(const std::exception& e) { std::cerr << e.what() << '\n'; reportRunWarning("Local port Open Field"); } //初始化数据 receiveBufSize = receiveDateSize*sizeof(double); receiveBuf = new char[receiveBufSize]; sendBufSize = sendDataSize*sizeof(double); sendBuf = new double[sendDataSize]; for(int i=0; ip_150server_1)); _150ServerThread.Start(); _150ConnectThread.RequestQuit(); isConnect = "Connected and start server"; return true; } void Emulator::registerVariables() { AppCastingMOOSApp::RegisterVariables(); Register("DESIRED_RUDDER",0); Register("DESIRED_THRUST",0); Register("DESIRED_ELEVATOR",0); Register("DESIRED_DEPTH"); Register("DESIRED_HEADING"); Register("DESIRED_SPEED"); } bool Emulator::buildReport() { // for(int i=0; iiRecieveMessage(receiveBuf,receiveBufSize); if(iRx) { for(int i=0; i