Bladeren bron

complete tool_service_maintain.

yuchuli 1 jaar geleden
bovenliggende
commit
4f364845e1

+ 4 - 0
src/driver/driver_service_maintain/Readme.md

@@ -0,0 +1,4 @@
+driver_service_maintain用来售后维护。
+使用方法,要结合tool_service_maintain来进行。
+driver_service_maintain需要机器上安装上nomachine,并在/home/nvidia/frp目录防止穿透工具frp的frpc程序。
+用户连接车辆的wifi,打开tool_service_maintain会获得一个服务码,将这个服务码告诉售后工程师,售后工程师使用nomachine连接到车辆上的计算单元解决ota不能解决的问题。

+ 5 - 0
src/driver/driver_service_maintain/driver_service_maintain.xml

@@ -0,0 +1,5 @@
+<xml>	
+	<node name="driver_service_maintain">
+		<param name="frpfolder" value="/home/nvidia/frp" />
+	</node>
+</xml>

+ 22 - 2
src/driver/driver_service_maintain/service_maintain.cpp

@@ -80,7 +80,7 @@ void service_maintain::ProcessData(QByteArray & ba)
 
 void service_maintain::StartService()
 {
-    if((mnServcieStatus == 1))
+    if(mnServcieStatus == 1)
     {
         std::cout<<" Service is Opening. "<<std::endl;
         BroadStatus();
@@ -105,6 +105,7 @@ void service_maintain::StartService()
         mstrError = "No frpc program.";
         mnServcieStatus = 0;
         std::cout<<"No frpc program."<<std::endl;
+        BroadStatus();
         return;
     }
 
@@ -114,6 +115,7 @@ void service_maintain::StartService()
         mstrError = "frpc program is not executable.";
         mnServcieStatus = 0;
         std::cout<<"frpc program is not executable."<<std::endl;
+        BroadStatus();
         return;
     }
 
@@ -163,11 +165,13 @@ std::string service_maintain::CreateIniFile()
     snprintf(strline,1000,"server_port = %s\n",mparam.mstrserverport.data());xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"token = %s\n",mparam.mstrtoken.data());xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"\n");xFile.write(strline,strnlen(strline,1000));
-    snprintf(strline,1000,"[nomachine_tcp]\n");xFile.write(strline,strnlen(strline,1000));
+//    snprintf(strline,1000,"[nomachine_tcp]\n",mnServiceCode);xFile.write(strline,strnlen(strline,1000));
+    snprintf(strline,1000,"[nomachine_tcp_%d]\n",mnServiceCode);xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"type = tcp\n");xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"local_ip = 127.0.0.1\n");xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"local_port = %s\n",mparam.mstrnomachineport.data());xFile.write(strline,strnlen(strline,1000));
     snprintf(strline,1000,"remote_port = %d\n",mnServiceCode);xFile.write(strline,strnlen(strline,1000));
+//    snprintf(strline,1000,"remote_port = %d\n",14000);xFile.write(strline,strnlen(strline,1000));
     xFile.close();
     return mstrIniFile;
 
@@ -220,6 +224,22 @@ void service_maintain::onReadStandardOutput()
         std::cout<<"token error.Please Check xml, Maybe token not correct. "<<std::endl;
         BroadStatus();//Send Status Code.
     }
+    if(str.contains("start error: port already used"))
+    {
+        mnServiceCode = -5;
+        mstrError = "port already used.Please re start. ";
+        mnServcieStatus = 0;
+        std::cout<<"port already used.Please re start.  "<<std::endl;
+        BroadStatus();//Send Status Code.
+    }
+    if(str.contains("] is already in use"))
+    {
+        mnServiceCode = -6;
+        mstrError = "Service Name already used.Please re start. ";
+        mnServcieStatus = 0;
+        std::cout<<"Service Name already used.Please re start.  "<<std::endl;
+        BroadStatus();//Send Status Code.
+    }
     if(str.contains("start proxy success"))
     {
         mstrError = "Success.";

+ 1 - 0
src/tool/tool_service_maintain/Readme.md

@@ -0,0 +1 @@
+和driver_service_maintain配合使用,查看那个项目的Readme.md就可以。

+ 11 - 0
src/tool/tool_service_maintain/main.cpp

@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}

+ 109 - 0
src/tool/tool_service_maintain/mainwindow.cpp

@@ -0,0 +1,109 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include <memory>
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+
+    mpSocket = new QUdpSocket(this);
+    mpSocketListen = new QUdpSocket(this);
+
+    mpSocketListen->bind(QHostAddress::Any,60019);//
+
+    connect(mpSocketListen,SIGNAL(readyRead()),this,SLOT(onRecvData()));
+
+#ifdef ANDROID
+    ui->pushButton_Start->setGeometry(100,100,600,100);
+    ui->pushButton_Stop->setGeometry(100,300,600,100);
+    ui->pushButton_Query->setGeometry(100,500,600,100);
+    ui->plainTextEdit->setGeometry(100,800,600,600);
+#endif
+
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::on_pushButton_Start_clicked()
+{
+    ui->plainTextEdit->setPlainText("");
+    int nCode = 1;
+    char strout[100];
+    memcpy(strout,&nCode,sizeof(int));
+    mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
+}
+
+void MainWindow::on_pushButton_Stop_clicked()
+{
+    ui->plainTextEdit->setPlainText("");
+    int nCode = 0;
+    char strout[100];
+    memcpy(strout,&nCode,sizeof(int));
+    mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
+}
+
+void MainWindow::on_pushButton_Query_clicked()
+{
+    ui->plainTextEdit->setPlainText("");
+    int nCode = 2;
+    char strout[100];
+    memcpy(strout,&nCode,sizeof(int));
+    mpSocket->writeDatagram(strout,sizeof(int),QHostAddress::Broadcast,60009);
+}
+
+void MainWindow::onRecvData()
+{
+    while(mpSocketListen->hasPendingDatagrams())
+    {
+        QByteArray ba;
+        ba.resize(static_cast<int>(mpSocketListen->bytesAvailable()) );
+        mpSocketListen->readDatagram(ba.data(),ba.size());
+        if(ba.size()>=2*static_cast<int>(sizeof(int)))
+        {
+            char * pdata = ba.data();
+            int nsize = static_cast<int>(ba.size());
+            int nservicecode,nservicestatus;
+            memcpy(&nservicecode,pdata,sizeof(int));
+            memcpy(&nservicestatus,pdata+sizeof(int),sizeof(int));
+            unsigned long nerrorlen = static_cast<unsigned long>(nsize-2*static_cast<int>(sizeof(int)));
+            std::shared_ptr<char> pstrerr_ptr = std::shared_ptr<char>(new char[nerrorlen +1]);
+            if(nsize>2*static_cast<int>(sizeof(int)))
+            {
+                memcpy(pstrerr_ptr.get(),pdata+2*sizeof(int),nerrorlen);
+                pstrerr_ptr.get()[nerrorlen] = 0;
+            }
+            switch (nservicestatus) {
+            case 0:
+                if(nservicecode == 0)
+                {
+                    ui->plainTextEdit->setPlainText("Init Status.");
+
+                }
+                else
+                {
+                    ui->plainTextEdit->setPlainText(pstrerr_ptr.get());
+                }
+                break;
+            case 1:
+                ui->plainTextEdit->setPlainText("Starting Service.");
+                break;
+            case 2:
+                {
+                    char strout[1000];
+                    snprintf(strout,1000,"Service Code: %d",nservicecode);
+                    ui->plainTextEdit->setPlainText(strout);
+                }
+                break;
+            default:
+                break;
+
+            }
+        }
+    }
+}

+ 35 - 0
src/tool/tool_service_maintain/mainwindow.h

@@ -0,0 +1,35 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QUdpSocket>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+private slots:
+    void on_pushButton_Start_clicked();
+
+    void on_pushButton_Stop_clicked();
+
+    void on_pushButton_Query_clicked();
+
+    void onRecvData();
+
+private:
+    Ui::MainWindow *ui;
+
+    QUdpSocket * mpSocket;
+    QUdpSocket * mpSocketListen;
+};
+
+#endif // MAINWINDOW_H

+ 90 - 0
src/tool/tool_service_maintain/mainwindow.ui

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>572</width>
+    <height>488</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <widget class="QPushButton" name="pushButton_Start">
+    <property name="geometry">
+     <rect>
+      <x>40</x>
+      <y>50</y>
+      <width>100</width>
+      <height>50</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>开启</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushButton_Stop">
+    <property name="geometry">
+     <rect>
+      <x>220</x>
+      <y>50</y>
+      <width>100</width>
+      <height>50</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>关闭</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="pushButton_Query">
+    <property name="geometry">
+     <rect>
+      <x>400</x>
+      <y>50</y>
+      <width>100</width>
+      <height>50</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>查询</string>
+    </property>
+   </widget>
+   <widget class="QPlainTextEdit" name="plainTextEdit">
+    <property name="geometry">
+     <rect>
+      <x>40</x>
+      <y>130</y>
+      <width>491</width>
+      <height>181</height>
+     </rect>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>572</width>
+     <height>28</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QToolBar" name="mainToolBar">
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+  </widget>
+  <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>

+ 34 - 0
src/tool/tool_service_maintain/tool_service_maintain.pro

@@ -0,0 +1,34 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2023-03-27T09:49:54
+#
+#-------------------------------------------------
+
+QT       += core gui network
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = tool_service_maintain
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+
+SOURCES += \
+        main.cpp \
+        mainwindow.cpp
+
+HEADERS += \
+        mainwindow.h
+
+FORMS += \
+        mainwindow.ui