|
@@ -1,10 +1,11 @@
|
|
|
#include "mainwindow.h"
|
|
|
#include "ui_mainwindow.h"
|
|
|
-
|
|
|
+#include <QtMath>
|
|
|
MainWindow::MainWindow(QWidget *parent) :
|
|
|
QMainWindow(parent),
|
|
|
ui(new Ui::MainWindow)
|
|
|
{
|
|
|
+ initMemory();
|
|
|
m_tbox=new Tbox();
|
|
|
initTboxMemory();
|
|
|
m_radio=new Radio();
|
|
@@ -12,6 +13,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
|
|
initUi();
|
|
|
//enableTbox();
|
|
|
initRadio();
|
|
|
+ initRadioMemory();
|
|
|
//20211009,jiaolili
|
|
|
mivlog = new iv::Ivlog("v2x");
|
|
|
//ShareMem: gps
|
|
@@ -21,7 +23,11 @@ MainWindow::MainWindow(QWidget *parent) :
|
|
|
//ShareMem: ui
|
|
|
ModuleFun funUI =std::bind(&MainWindow::UpdateUI,this,std::placeholders::_1, \
|
|
|
std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
|
|
|
- mpMemUI = iv::modulecomm::RegisterRecvPlus("hcp2_gpsimu",funUI);
|
|
|
+ mpMemUI = iv::modulecomm::RegisterRecvPlus("hcp2_hmi",funUI);
|
|
|
+ //ShareMem: control
|
|
|
+ ModuleFun funControl =std::bind(&MainWindow::UpdateControl,this,std::placeholders::_1, \
|
|
|
+ std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
|
|
|
+ mpMemControl = iv::modulecomm::RegisterRecvPlus("hcp2_chassis",funControl);
|
|
|
}
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
@@ -89,14 +95,43 @@ void MainWindow::disableTbox()
|
|
|
}
|
|
|
void MainWindow::initTboxMemory()
|
|
|
{
|
|
|
- m_structM.gps_lng=137.0;
|
|
|
- m_structM.gps_lat=39.0;
|
|
|
- m_structM.speed=20.0;
|
|
|
- m_structM.yaw=12.0;
|
|
|
- m_structM.ele_voltage=90.0;
|
|
|
- m_structM.error=0x02;
|
|
|
- m_tbox->setTboxMemmory(m_structM);
|
|
|
- m_tbox->setTboxConnectEnable(false);
|
|
|
+ setTboxMemoryRaw();
|
|
|
+}
|
|
|
+void MainWindow::setTboxMemoryRaw()
|
|
|
+{
|
|
|
+ Memory tboxM;
|
|
|
+ tboxM.gps_lng=m_structMGpsImu.gps_lng;
|
|
|
+ tboxM.gps_lat=m_structMGpsImu.gps_lat;
|
|
|
+ tboxM.speed=m_structMGpsImu.speed;
|
|
|
+ tboxM.yaw=m_structMGpsImu.yaw;
|
|
|
+ tboxM.ele_voltage=m_structChassisRaw.soc;
|
|
|
+ tboxM.error=getError();
|
|
|
+ m_tbox->setTboxMemmory(tboxM);
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::initRadioMemory()
|
|
|
+{
|
|
|
+ m_radio->setGpsImuMemory(m_structMGpsImu);
|
|
|
+ setRadioControlMemory();
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::initMemory()
|
|
|
+{
|
|
|
+ m_structChassisRaw.soc=90.0;
|
|
|
+ m_structChassisRaw.battery_error=false;
|
|
|
+ m_structChassisRaw.driver_error=false;
|
|
|
+ m_structChassisRaw.fsteer_code_error=false;
|
|
|
+ m_structChassisRaw.remote_error=false;
|
|
|
+ m_structChassisRaw.rlmotor_error=false;
|
|
|
+ m_structChassisRaw.rrmotor_error=false;
|
|
|
+ m_structChassisRaw.steer_motor_error=false;
|
|
|
+ m_structChassisRaw.swj_error=false;
|
|
|
+ m_structMGpsImu.gps_lat=39.0;
|
|
|
+ m_structMGpsImu.gps_lng=137.0;
|
|
|
+ m_structMGpsImu.speed=20.0;
|
|
|
+ m_structMGpsImu.yaw=12.0;
|
|
|
+ m_structMGpsImu.accx=0.0;
|
|
|
+ m_structMGpsImu.accy=0.0;
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_connect_clicked()
|
|
@@ -218,6 +253,7 @@ void MainWindow::on_pushButton_radioConnect_clicked()
|
|
|
void MainWindow::UpdateGPSIMU(const char * strdata,const unsigned int nSize,const unsigned int index,\
|
|
|
const QDateTime * dt,const char * strmemname)
|
|
|
{
|
|
|
+ bool isSend=false;
|
|
|
double accX,accY,lat,lon,heading,rtk,ins,vd,ve,vn;
|
|
|
iv::gps::gpsimu xgpsimu;
|
|
|
if(!xgpsimu.ParseFromArray(strdata,nSize))
|
|
@@ -225,28 +261,36 @@ void MainWindow::UpdateGPSIMU(const char * strdata,const unsigned int nSize,cons
|
|
|
mivlog->warn("ADCIntelligentVehicle::UpdateGPSIMU parse error. nSize is %d",nSize);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- lat = xgpsimu.lat();
|
|
|
- lon = xgpsimu.lon();
|
|
|
- heading = xgpsimu.heading();
|
|
|
-
|
|
|
- rtk = xgpsimu.rtk_state();
|
|
|
- ins = xgpsimu.ins_state();
|
|
|
- vd = xgpsimu.vd(); //地向速度,单位(米/秒)
|
|
|
- ve = xgpsimu.ve(); //东向速度,单位(米/秒)
|
|
|
- vn = xgpsimu.vn(); //北向速度,单位(米/秒)
|
|
|
- if(xgpsimu.has_acce_x())
|
|
|
- {
|
|
|
- accX = xgpsimu.acce_x();
|
|
|
+ if(xgpsimu.has_lat()) {
|
|
|
+ isSend=true;
|
|
|
+ m_structMGpsImu.gps_lat=xgpsimu.lat();
|
|
|
}
|
|
|
- if(xgpsimu.has_acce_y())
|
|
|
- {
|
|
|
- accY = xgpsimu.acce_y();
|
|
|
+ if(xgpsimu.has_lon()) {
|
|
|
+ isSend=true;
|
|
|
+ m_structMGpsImu.gps_lng=xgpsimu.lon();
|
|
|
+ }
|
|
|
+ if(xgpsimu.has_heading()) {
|
|
|
+ isSend=true;
|
|
|
+ m_structMGpsImu.yaw=float(xgpsimu.heading());
|
|
|
+ }
|
|
|
+ if((xgpsimu.has_ve())&&(xgpsimu.has_vn())) {
|
|
|
+ isSend = true;
|
|
|
+ ve = xgpsimu.ve(); //东向速度,单位(米/秒)
|
|
|
+ vn = xgpsimu.vn(); //北向速度,单位(米/秒)
|
|
|
+ m_structMGpsImu.speed=float(sqrt(ve*ve+vn*vn))* 3.6;
|
|
|
+ }
|
|
|
+ if(xgpsimu.has_acce_x()) {
|
|
|
+ isSend=true;
|
|
|
+ m_structMGpsImu.accx=float(xgpsimu.acce_x());
|
|
|
+ }
|
|
|
+ if(xgpsimu.has_acce_y()) {
|
|
|
+ isSend=true;
|
|
|
+ m_structMGpsImu.accy = float(xgpsimu.acce_y());
|
|
|
+ }
|
|
|
+ if(isSend) {
|
|
|
+ setTboxMemoryRaw();
|
|
|
+ m_radio->setGpsImuMemory(m_structMGpsImu);
|
|
|
}
|
|
|
-// mfAcc = (float)sqrt(pow(accX,2)+pow(accY,2));
|
|
|
-
|
|
|
- // mfspeed = sqrt(pow(data->vel_E,2)+pow(data->vel_N,2)) * 3.6; //double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
|
|
|
- //mistGPS = 0;
|
|
|
}
|
|
|
//UI DATA
|
|
|
void MainWindow::UpdateUI(const char * strdata,const unsigned int nSize,const unsigned int index,\
|
|
@@ -340,3 +384,126 @@ void MainWindow::UpdateUI(const char * strdata,const unsigned int nSize,const un
|
|
|
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+void MainWindow::UpdateControl(const char *strdata, const unsigned int nSize, const unsigned int index, const QDateTime *dt, const char *strmemname)
|
|
|
+{
|
|
|
+ iv::chassis xcontrol;
|
|
|
+ if(!xcontrol.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ mivlog->warn("ADCIntelligentVehicle::UpdateGPSIMU parse error. nSize is %d",nSize);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ bool isSend=false;
|
|
|
+
|
|
|
+ if(xcontrol.has_soc()) {
|
|
|
+ isSend=true;
|
|
|
+ float soc = xcontrol.soc();
|
|
|
+ m_structChassisRaw.soc=soc;
|
|
|
+ ui->textEdit->append(QString("Memory control get soc: %1\n").arg(soc));
|
|
|
+ }
|
|
|
+ if(xcontrol.has_driver_error()) {
|
|
|
+ isSend=true;
|
|
|
+ bool error=xcontrol.driver_error();
|
|
|
+ m_structChassisRaw.driver_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get driver_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get driver_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_swj_error()) {
|
|
|
+ isSend=true;
|
|
|
+ bool error = xcontrol.swj_error();
|
|
|
+ m_structChassisRaw.swj_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get swj_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get swj_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_battery_error()) {
|
|
|
+ isSend=true;
|
|
|
+ bool error=xcontrol.battery_error();
|
|
|
+ m_structChassisRaw.battery_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get battery_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get battery_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_remote_error()) {
|
|
|
+ isSend=true;
|
|
|
+ bool error = xcontrol.remote_error();
|
|
|
+ m_structChassisRaw.remote_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get remote_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get remote_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_steer_motor_error()) {
|
|
|
+ isSend = true;
|
|
|
+ bool error= xcontrol.steer_motor_error();
|
|
|
+ m_structChassisRaw.steer_motor_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get steer_motor_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get steer_motor_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_rrmotor_error()) {
|
|
|
+ isSend = true;
|
|
|
+ bool error=xcontrol.rrmotor_error();
|
|
|
+ m_structChassisRaw.rrmotor_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get rrmotor_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get rrmotor_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(xcontrol.has_rlmotor_error()) {
|
|
|
+ isSend=true;
|
|
|
+ bool error = xcontrol.rlmotor_error();
|
|
|
+ m_structChassisRaw.rlmotor_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get rlmotor_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get rlmotor_error false!\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(xcontrol.has_fsteer_code_error()) {
|
|
|
+ isSend = true;
|
|
|
+ bool error=xcontrol.fsteer_code_error();
|
|
|
+ m_structChassisRaw.fsteer_code_error=error;
|
|
|
+ if(error) {
|
|
|
+ ui->textEdit->append("Memory control get fsteer_error true!\n");
|
|
|
+ } else {
|
|
|
+ ui->textEdit->append("Memory control get fsteer_error false!\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(isSend) {
|
|
|
+ setRadioControlMemory();
|
|
|
+ setTboxMemoryRaw();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+void MainWindow::setRadioControlMemory()
|
|
|
+{
|
|
|
+ controlM mcontrol;
|
|
|
+ mcontrol.eleVoltage=m_structChassisRaw.soc;
|
|
|
+ mcontrol.error=getError();
|
|
|
+ m_radio->setControlMemory(mcontrol);
|
|
|
+}
|
|
|
+unsigned char MainWindow::getError()
|
|
|
+{
|
|
|
+ bool error=(m_structChassisRaw.battery_error|m_structChassisRaw.driver_error|
|
|
|
+ m_structChassisRaw.fsteer_code_error|m_structChassisRaw.remote_error|
|
|
|
+ m_structChassisRaw.rlmotor_error|m_structChassisRaw.rrmotor_error|
|
|
|
+ m_structChassisRaw.steer_motor_error|m_structChassisRaw.swj_error);
|
|
|
+ if(error) {
|
|
|
+ return 0x01;
|
|
|
+ } else {
|
|
|
+ return 0x02;
|
|
|
+ }
|
|
|
+}
|