Răsfoiți Sursa

Merge branch 'master' into 1+x

HAPO-9# 3 ani în urmă
părinte
comite
444f9c070c
37 a modificat fișierele cu 1940 adăugiri și 52 ștergeri
  1. 89 0
      src/common/common/getinterface/get_interface.cpp
  2. 9 0
      src/common/common/getinterface/get_interface.h
  3. 217 0
      src/common/common/md5/md5_encode.cpp
  4. 71 0
      src/common/common/md5/md5_encode.h
  5. 140 0
      src/common/common/xodr/OpenDrive/ObjectSignal.cpp
  6. 32 1
      src/common/common/xodr/OpenDrive/ObjectSignal.h
  7. 12 0
      src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.cpp
  8. 3 1
      src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.h
  9. 77 6
      src/common/modulecomm/shm/procsm.cpp
  10. 4 0
      src/common/modulecomm/shm/procsm.h
  11. 107 4
      src/driver/driver_cloud_grpc_pc_thread/grpcpc.cpp
  12. 23 3
      src/driver/driver_cloud_grpc_pc_thread/grpcpc.h
  13. 7 2
      src/driver/driver_cloud_grpc_server_thread/cumsgbuffer.cpp
  14. 5 2
      src/driver/driver_cloud_grpc_server_thread/cumsgbuffer.h
  15. 9 2
      src/driver/driver_cloud_grpc_server_thread/main.cpp
  16. 10 0
      src/driver/driver_cloud_grpc_server_thread/picbuf.cpp
  17. 4 1
      src/driver/driver_cloud_grpc_server_thread/picbuf.h
  18. 73 0
      src/driver/driver_jpg2mp4/.gitignore
  19. 35 0
      src/driver/driver_jpg2mp4/driver_jpg2mp4.pro
  20. 91 0
      src/driver/driver_jpg2mp4/main.cpp
  21. 14 1
      src/tool/RemoteCtrl_Thread/RemoteCtrl_Thread.pro
  22. 78 0
      src/tool/RemoteCtrl_Thread/dialogsetpassword.cpp
  23. 39 0
      src/tool/RemoteCtrl_Thread/dialogsetpassword.h
  24. 97 0
      src/tool/RemoteCtrl_Thread/dialogsetpassword.ui
  25. 54 0
      src/tool/RemoteCtrl_Thread/dialogsetting.cpp
  26. 33 0
      src/tool/RemoteCtrl_Thread/dialogsetting.h
  27. 137 0
      src/tool/RemoteCtrl_Thread/dialogsetting.ui
  28. 1 22
      src/tool/RemoteCtrl_Thread/driver_cloud_grpc_pc.yaml
  29. 74 7
      src/tool/RemoteCtrl_Thread/mainwindow.cpp
  30. 22 0
      src/tool/RemoteCtrl_Thread/mainwindow.h
  31. 24 0
      src/tool/RemoteCtrl_Thread/mainwindow.ui
  32. 143 0
      src/tool/RemoteCtrl_Thread/remotectrlini.cpp
  33. 53 0
      src/tool/RemoteCtrl_Thread/remotectrlini.h
  34. 14 0
      src/tool/map_lanetoxodr/dialogobject_lanevalidity.cpp
  35. 22 0
      src/tool/map_lanetoxodr/dialogobject_lanevalidity.h
  36. 114 0
      src/tool/map_lanetoxodr/dialogobject_lanevalidity.ui
  37. 3 0
      src/tool/map_lanetoxodr/map_lanetoxodr.pro

+ 89 - 0
src/common/common/getinterface/get_interface.cpp

@@ -0,0 +1,89 @@
+#include "get_interface.h"
+
+#include <QtNetwork/QNetworkInterface>
+
+int getmac(std::string & strmac)
+{
+    bool bFindeth0 = false;
+    std::string strmacaddr;
+    std::vector<std::string> xvectormac;
+    QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
+
+    foreach(QNetworkInterface interfaceItem, interfaceList)
+    {
+        if(interfaceItem.flags().testFlag(QNetworkInterface::CanBroadcast)
+                &&interfaceItem.flags().testFlag(QNetworkInterface::CanMulticast)
+                &&!interfaceItem.flags().testFlag(QNetworkInterface::IsLoopBack)
+                &&interfaceItem.hardwareAddress()!="00:50:56:C0:00:01"
+                &&interfaceItem.hardwareAddress()!="00:50:56:C0:00:08")
+        {
+            std::string str = interfaceItem.hardwareAddress().toStdString();
+            xvectormac.push_back(str);
+            if(interfaceItem.name() == "eth0")
+            {
+                strmacaddr = str;
+                bFindeth0 = true;
+            }
+            QList<QNetworkAddressEntry> addressEntryList=interfaceItem.addressEntries();
+            foreach(QNetworkAddressEntry addressEntryItem, addressEntryList)
+            {
+                if(addressEntryItem.ip().protocol()==QAbstractSocket::IPv4Protocol)
+                {
+                    qDebug()<<"------------------------------------------------------------";
+                    qDebug()<<"Adapter Name:"<<interfaceItem.name();
+                    qDebug()<<"Adapter Address:"<<interfaceItem.hardwareAddress();
+                    qDebug()<<"IP Address:"<<addressEntryItem.ip().toString();
+                    qDebug()<<"IP Mask:"<<addressEntryItem.netmask().toString();
+                }
+            }
+        }
+    }
+
+    if(bFindeth0)
+    {
+        strmac = strmacaddr;
+        return 1;
+    }
+
+    if(xvectormac.size()>0)
+    {
+        strmac = xvectormac[0];
+        return 1;
+    }
+
+    return 0;
+}
+
+
+void getAdapterInfoWithQt()
+{
+    QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
+
+    foreach(QNetworkInterface interfaceItem, interfaceList)
+    {
+        if(interfaceItem.flags().testFlag(QNetworkInterface::IsUp)
+                &&interfaceItem.flags().testFlag(QNetworkInterface::IsRunning)
+                &&interfaceItem.flags().testFlag(QNetworkInterface::CanBroadcast)
+                &&interfaceItem.flags().testFlag(QNetworkInterface::CanMulticast)
+                &&!interfaceItem.flags().testFlag(QNetworkInterface::IsLoopBack)
+                &&interfaceItem.hardwareAddress()!="00:50:56:C0:00:01"
+                &&interfaceItem.hardwareAddress()!="00:50:56:C0:00:08")
+        {
+            QList<QNetworkAddressEntry> addressEntryList=interfaceItem.addressEntries();
+            foreach(QNetworkAddressEntry addressEntryItem, addressEntryList)
+            {
+                if(addressEntryItem.ip().protocol()==QAbstractSocket::IPv4Protocol)
+                {
+                    qDebug()<<"------------------------------------------------------------";
+                    qDebug()<<"Adapter Name:"<<interfaceItem.name();
+                    qDebug()<<"Adapter Address:"<<interfaceItem.hardwareAddress();
+                    qDebug()<<"IP Address:"<<addressEntryItem.ip().toString();
+                    qDebug()<<"IP Mask:"<<addressEntryItem.netmask().toString();
+                }
+            }
+        }
+    }
+}
+
+
+

+ 9 - 0
src/common/common/getinterface/get_interface.h

@@ -0,0 +1,9 @@
+#ifndef GET_INTERFACE_H
+#define GET_INTERFACE_H
+
+#include <string>
+
+int getmac(std::string & strmac);
+void getAdapterInfoWithQt();
+
+#endif // GET_INTERFACE_H

+ 217 - 0
src/common/common/md5/md5_encode.cpp

@@ -0,0 +1,217 @@
+#include "md5_encode.h"
+#include <iostream>
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+// 幻数定义
+const int Md5Encode::kA = 0x67452301;
+const int Md5Encode::kB = 0xefcdab89;
+const int Md5Encode::kC = 0x98badcfe;
+const int Md5Encode::kD = 0x10325476;
+
+const unsigned long long Md5Encode::k_ti_num_integer = 4294967296;
+
+// function: CycleMoveLeft
+// @param src_num:要左移的数
+// @param bit_num_to_move:要移动的bit位数
+// @return  循环左移后的结果数
+UInt32 Md5Encode::CycleMoveLeft(UInt32 src_num, int bit_num_to_move) {
+    UInt32 src_num1 = src_num;
+    UInt32 src_num2 = src_num;
+    if (0 >= bit_num_to_move) {
+        return src_num;
+    }
+    UInt32 num1 = src_num1 << bit_num_to_move;
+    UInt32 num2 = src_num2 >> (32 - bit_num_to_move);
+    
+    return ((src_num1 << bit_num_to_move) \
+        | (src_num2 >> (32 - bit_num_to_move)));
+}
+
+// function: FillData
+// @param in_data_ptr:    要加密的信息数据
+// @param data_byte_len: 数据的字节数
+// @param out_data_ptr:  填充必要信息后的数据
+// return : 填充信息后的数据长度,以字节为单位
+UInt32 Md5Encode::FillData(const char *in_data_ptr, int data_byte_len, char** out_data_ptr) {
+    int bit_num = data_byte_len*BIT_OF_BYTE;
+    int grop_num = bit_num / BIT_OF_GROUP;
+    int mod_bit_num = bit_num % BIT_OF_GROUP;
+    int bit_need_fill = 0;
+    if (mod_bit_num > (BIT_OF_GROUP - SRC_DATA_LEN)) {
+        bit_need_fill = (BIT_OF_GROUP - mod_bit_num);
+        bit_need_fill += (BIT_OF_GROUP - SRC_DATA_LEN);
+    }
+    else {
+        bit_need_fill = (BIT_OF_GROUP - SRC_DATA_LEN) - mod_bit_num; //  这里多加了一个BIT_OF_GROUP,避免bit_need_fill正好等于0,暂时不加
+    }
+    int all_bit = bit_num + bit_need_fill;
+    if (0 < bit_need_fill) {
+        *out_data_ptr = new char[all_bit / BIT_OF_BYTE + SRC_DATA_LEN / BIT_OF_BYTE];
+        memset(*out_data_ptr, 0, all_bit / BIT_OF_BYTE + SRC_DATA_LEN / BIT_OF_BYTE);
+        // copy data
+        memcpy(*out_data_ptr, in_data_ptr, data_byte_len);
+        // fill rest data
+        unsigned char *tmp = reinterpret_cast<unsigned char *>(*out_data_ptr);
+        tmp += data_byte_len;
+        // fill 1 and 0
+        *tmp = 0x80;
+        // fill origin data len
+        unsigned long long * origin_num = (unsigned long long *)((*out_data_ptr) + ((all_bit / BIT_OF_BYTE)));
+        *origin_num = data_byte_len*BIT_OF_BYTE;
+    }
+    return (all_bit / BIT_OF_BYTE + SRC_DATA_LEN / BIT_OF_BYTE);
+}
+
+void Md5Encode::RoundF(char *data_BIT_OF_GROUP_ptr, ParamDynamic & param) {
+    UInt32 *M = reinterpret_cast<UInt32*>(data_BIT_OF_GROUP_ptr);
+    int s[] = { 7, 12, 17, 22 };
+    for (int i = 0; i < 16; ++i) {
+        UInt32 ti = k_ti_num_integer * abs(sin(i + 1));
+        if (i % 4 == 0) {
+            FF(param.ua_, param.ub_, param.uc_, param.ud_, M[i], s[i % 4], ti);
+        }
+        else if (i % 4 == 1) {
+            FF(param.ud_, param.ua_, param.ub_, param.uc_, M[i], s[i % 4], ti);
+        }
+        else if (i % 4 == 2) {
+            FF(param.uc_, param.ud_, param.ua_, param.ub_, M[i], s[i % 4], ti);
+        }
+        else if (i % 4 == 3) {
+            FF(param.ub_, param.uc_, param.ud_, param.ua_, M[i], s[i % 4], ti);
+        }
+    }
+}
+
+void Md5Encode::RoundG(char *data_BIT_OF_GROUP_ptr, ParamDynamic & param) {
+    UInt32 *M = reinterpret_cast<UInt32*>(data_BIT_OF_GROUP_ptr);
+    int s[] = { 5, 9, 14, 20 };
+    for (int i = 0; i < 16; ++i) {
+        UInt32 ti = k_ti_num_integer * abs(sin(i + 1 + 16));
+        int index = (i * 5 + 1) % 16;
+        if (i % 4 == 0) {
+            GG(param.ua_, param.ub_, param.uc_, param.ud_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 1) {
+            GG(param.ud_, param.ua_, param.ub_, param.uc_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 2) {
+            GG(param.uc_, param.ud_, param.ua_, param.ub_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 3) {
+            GG(param.ub_, param.uc_, param.ud_, param.ua_, M[index], s[i % 4], ti);
+        }
+    }
+}
+
+void Md5Encode::RoundH(char *data_BIT_OF_GROUP_ptr, ParamDynamic & param) {
+    UInt32 *M = reinterpret_cast<UInt32*>(data_BIT_OF_GROUP_ptr);
+    int s[] = { 4, 11, 16, 23 };
+    for (int i = 0; i < 16; ++i) {
+        UInt32 ti = k_ti_num_integer * abs(sin(i + 1 + 32));
+        int index = (i * 3 + 5) % 16;
+        if (i % 4 == 0) {
+            HH(param.ua_, param.ub_, param.uc_, param.ud_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 1) {
+            HH(param.ud_, param.ua_, param.ub_, param.uc_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 2) {
+            HH(param.uc_, param.ud_, param.ua_, param.ub_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 3) {
+            HH(param.ub_, param.uc_, param.ud_, param.ua_, M[index], s[i % 4], ti);
+        }
+    }
+}
+
+void Md5Encode::RoundI(char *data_BIT_OF_GROUP_ptr, ParamDynamic & param) {
+    UInt32 *M = reinterpret_cast<UInt32*>(data_BIT_OF_GROUP_ptr);
+    int s[] = { 6, 10, 15, 21 };
+    for (int i = 0; i < 16; ++i) {
+        UInt32 ti = k_ti_num_integer * abs(sin(i + 1 + 48));
+        int index = (i * 7 + 0) % 16;
+        if (i % 4 == 0) {
+            II(param.ua_, param.ub_, param.uc_, param.ud_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 1) {
+            II(param.ud_, param.ua_, param.ub_, param.uc_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 2) {
+            II(param.uc_, param.ud_, param.ua_, param.ub_, M[index], s[i % 4], ti);
+        }
+        else if (i % 4 == 3) {
+            II(param.ub_, param.uc_, param.ud_, param.ua_, M[index], s[i % 4], ti);
+        }
+    }
+}
+
+void Md5Encode::RotationCalculate(char *data_512_ptr, ParamDynamic & param) {
+    if (NULL == data_512_ptr) {
+        return;
+    }
+    RoundF(data_512_ptr, param);
+    RoundG(data_512_ptr, param);
+    RoundH(data_512_ptr, param);
+    RoundI(data_512_ptr, param);
+    param.ua_ = param.va_last_ + param.ua_;
+    param.ub_ = param.vb_last_ + param.ub_;
+    param.uc_ = param.vc_last_ + param.uc_;
+    param.ud_ = param.vd_last_ + param.ud_;
+    
+    param.va_last_ = param.ua_;
+    param.vb_last_ = param.ub_;
+    param.vc_last_ = param.uc_;
+    param.vd_last_ = param.ud_;
+}
+
+// 转换成十六进制字符串输出
+std::string Md5Encode::GetHexStr(unsigned int num_str) {
+    std::string hexstr = "";
+    char szch[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+    unsigned char *tmptr = (unsigned char *)&num_str;
+    int len = sizeof(num_str);
+    // 小端字节序,逆序打印
+    for (int i = 0; i < len; i++){
+        unsigned char ch = tmptr[i] & 0xF0;
+        ch = ch >> 4;
+        hexstr.append(1, szch[ch]);
+        ch = tmptr[i] & 0x0F;
+        hexstr.append(1, szch[ch]);
+    }
+    return hexstr;
+}
+
+// function: Encode
+// @param src_info:要加密的信息
+// return :加密后的MD5值
+std::string Md5Encode::Encode(std::string src_info) {
+    ParamDynamic param;
+    param.ua_ = kA;
+    param.ub_ = kB;
+    param.uc_ = kC;
+    param.ud_ = kD;
+    param.va_last_ = kA;
+    param.vb_last_ = kB;
+    param.vc_last_ = kC;
+    param.vd_last_ = kD;
+
+    std::string result;
+    const char *src_data = src_info.c_str();
+    char *out_data_ptr = NULL;
+    int total_byte = FillData(src_data, strlen(src_data), &out_data_ptr);
+    //char * data_BIT_OF_GROUP = out_data_ptr;
+    for (int i = 0; i < total_byte / (BIT_OF_GROUP / BIT_OF_BYTE); ++i) {
+        char * data_BIT_OF_GROUP = out_data_ptr;
+        data_BIT_OF_GROUP += i*(BIT_OF_GROUP / BIT_OF_BYTE);
+        RotationCalculate(data_BIT_OF_GROUP, param);
+    }
+    if (NULL != out_data_ptr) {
+        delete[] out_data_ptr, out_data_ptr = NULL;
+    }
+    result.append(GetHexStr(param.ua_));
+    result.append(GetHexStr(param.ub_));
+    result.append(GetHexStr(param.uc_));
+    result.append(GetHexStr(param.ud_));
+    return result;
+}

+ 71 - 0
src/common/common/md5/md5_encode.h

@@ -0,0 +1,71 @@
+/*
+*******************************************************
+* brief: md5 encryption
+* author: Monkey.Knight
+*******************************************************
+*/
+
+#ifndef __MD5_ENCODE_H__
+#define __MD5_ENCODE_H__
+
+// std
+#include <string>
+
+// define
+#define UInt32 unsigned int
+#define BIT_OF_BYTE  8
+#define BIT_OF_GROUP 512
+#define SRC_DATA_LEN 64
+
+// 四个非线性函数宏定义
+#define DEF_F(X, Y, Z ) ((( (X) & (Y) )|((~X)&(Z))))
+#define DEF_G(X, Y, Z)  (((X)&(Z))|((Y)&(~Z)))
+#define DEF_H(X, Y, Z)  ((X)^(Y)^(Z))
+#define DEF_I(X, Y, Z)  ((Y)^((X)|(~Z)))
+
+// 求链接数函数宏定义
+#define FF(a, b, c, d, Mj, s, ti)  (a = b + CycleMoveLeft((a + DEF_F(b,c,d) + Mj + ti),s));
+#define GG(a, b, c, d, Mj, s, ti)  (a = b + CycleMoveLeft((a + DEF_G(b,c,d) + Mj + ti),s));
+#define HH(a, b, c, d, Mj, s, ti)  (a = b + CycleMoveLeft((a + DEF_H(b,c,d) + Mj + ti),s));
+#define II(a, b, c, d, Mj, s, ti)  (a = b + CycleMoveLeft((a + DEF_I(b,c,d) + Mj + ti),s));
+
+
+class Md5Encode {
+public:
+    // 4轮循环算法
+    struct ParamDynamic{
+        UInt32 ua_;
+        UInt32 ub_;
+        UInt32 uc_;
+        UInt32 ud_;
+        UInt32 va_last_;
+        UInt32 vb_last_;
+        UInt32 vc_last_;
+        UInt32 vd_last_;
+    };
+public:
+    Md5Encode() {
+    }
+    std::string Encode(std::string src_info);
+
+protected:
+
+    UInt32 CycleMoveLeft(UInt32 src_num, int bit_num_to_move);
+    UInt32 FillData(const char *in_data_ptr, int data_byte_len, char** out_data_ptr);
+    void RoundF(char *data_512_ptr, ParamDynamic & param);
+    void RoundG(char *data_512_ptr, ParamDynamic & param);
+    void RoundH(char *data_512_ptr, ParamDynamic & param);
+    void RoundI(char *data_512_ptr, ParamDynamic & param);
+    void RotationCalculate(char *data_512_ptr, ParamDynamic & param);
+    std::string GetHexStr(unsigned int num_str);
+
+private:
+    // 幻数定义
+    static const int kA;
+    static const int kB;
+    static const int kC;
+    static const int kD;
+    static const unsigned long long k_ti_num_integer;
+};
+
+#endif

+ 140 - 0
src/common/common/xodr/OpenDrive/ObjectSignal.cpp

@@ -2,6 +2,129 @@
 
 #include <iostream>
 
+
+int Object_markings_marking::Getside(string & strside)
+{
+    if(mside.size() == 0)return 0;
+    strside = mside[0];
+    return 1;
+}
+
+int Object_markings_marking::Getweight(string & strweight)
+{
+    if(mweight.size() == 0)return 0;
+    strweight = mweight[0];
+    return 1;
+}
+
+int Object_markings_marking::Getwidth(double & fwidth)
+{
+    if(mwidth.size() == 0)return 0;
+    fwidth = mwidth[0];
+    return 1;
+}
+
+string Object_markings_marking::Getcolor()
+{
+    return mcolor;
+}
+
+int Object_markings_marking::GetzOffset(double & zOffset)
+{
+    if(mzOffset.size() == 0)return 0;
+    zOffset = mzOffset[0];
+    return 1;
+}
+
+double Object_markings_marking::GetspaceLength()
+{
+    return mspaceLength;
+}
+
+double Object_markings_marking::GetlineLength()
+{
+    return mlineLength;
+}
+
+double Object_markings_marking::GetstartOffset()
+{
+    return mstartOffset;
+}
+
+double Object_markings_marking::GetstopOffset()
+{
+    return mstopOffset;
+}
+
+void Object_markings_marking::Setside(string strside)
+{
+    if(mside.size()>0)mside.clear();
+    mside.push_back(strside);
+}
+
+void Object_markings_marking::Setweight(string strweight)
+{
+    if(mweight.size()>0)mweight.clear();
+    mweight.push_back(strweight);
+}
+
+void Object_markings_marking::Setwidth(double fwidth)
+{
+    if(mwidth.size()>0)mwidth.clear();
+    mwidth.push_back(fwidth);
+}
+
+void Object_markings_marking::Setcolor(string strcolor)
+{
+    mcolor = strcolor;
+}
+
+void Object_markings_marking::SetzOffset(double zOffset)
+{
+    if(mzOffset.size() > 0)mzOffset.clear();
+    mzOffset.push_back(zOffset);
+}
+
+void Object_markings_marking::SetspaceLength(double spaceLength)
+{
+    mspaceLength = spaceLength;
+}
+
+void Object_markings_marking::SetlineLength(double lineLength)
+{
+    mlineLength = lineLength;
+}
+
+void Object_markings_marking::SetstartOffset(double startOffset)
+{
+    mstartOffset = startOffset;
+}
+
+void Object_markings_marking::SetstopOffset(double stopOffset)
+{
+    mstopOffset = stopOffset;
+}
+
+void Object_markings_marking::Clearside()
+{
+    if(mside.size()>0)mside.clear();
+}
+
+void Object_markings_marking::Clearweight()
+{
+    if(mweight.size()>0)mweight.clear();
+}
+
+void Object_markings_marking::Clearwidth()
+{
+    if(mwidth.size()>0)mwidth.clear();
+}
+
+void Object_markings_marking::ClearzOffset()
+{
+    if(mzOffset.size()>0)mzOffset.clear();
+}
+
 Object_markings_marking::Object_markings_marking(std::string color, double spaceLength, double lineLength,
                                                  double startOffset, double stopOffset)
 {
@@ -918,6 +1041,12 @@ Object_outlines * Object::Getoutlines()
     return &(mObject_outlines[0]);
 }
 
+Object_markings * Object::Getmarkings()
+{
+    if(mObject_markings.size()<1)return NULL;
+    return &(mObject_markings[0]);
+}
+
 void Object::Sett(double t)
 {
     mt = t;
@@ -1032,6 +1161,17 @@ void Object::Resetoutlines()
     if(mObject_outlines.size()>0) mObject_outlines.clear();
 }
 
+void Object::Setmarkings(Object_markings &xObject_markings)
+{
+    if(mObject_markings.size()>0)mObject_markings.clear();
+    mObject_markings.push_back(xObject_markings);
+}
+
+void Object::Resetmarkings()
+{
+    if(mObject_markings.size()>0) mObject_markings.clear();
+}
+
 vector<Object_repeat> * Object::GetObjectrepeatVector()
 {
     return &mObject_repeat;

+ 32 - 1
src/common/common/xodr/OpenDrive/ObjectSignal.h

@@ -13,7 +13,7 @@ class Object_markings_marking
 {
 private:
     vector<string> mside;
-    vector<string> mwight;
+    vector<string> mweight;
     vector<double> mwidth;
     string mcolor;
     vector<double> mzOffset;
@@ -22,6 +22,32 @@ private:
     double mstartOffset;
     double mstopOffset;
 
+public:
+    int Getside(string & strside);
+    int Getweight(string & strweight);
+    int Getwidth(double & fwidth);
+    string Getcolor();
+    int GetzOffset(double & zOffset);
+    double GetspaceLength();
+    double GetlineLength();
+    double GetstartOffset();
+    double GetstopOffset();
+
+    void Setside(string strside);
+    void Setweight(string strweight);
+    void Setwidth(double fwidth);
+    void Setcolor(string strcolor);
+    void SetzOffset(double zOffset);
+    void SetspaceLength(double spaceLength);
+    void SetlineLength(double lineLength);
+    void SetstartOffset(double startOffset);
+    void SetstopOffset(double stopOffset);
+
+    void Clearside();
+    void Clearweight();
+    void Clearwidth();
+    void ClearzOffset();
+
 
 
 public:
@@ -332,6 +358,7 @@ private:
 
     vector<Object_outlines> mObject_outlines;
     vector<Object_outlines_outline> mObject_outlines_outline;
+    vector<Object_markings> mObject_markings;
 
     unsigned int mLastAddedObjectrepeat;
     unsigned int mLastAddedObjectmaterial;
@@ -362,6 +389,7 @@ public:
     int GetparkingSpace(Object_parkingSpace & parkingSpace);
 
     Object_outlines * Getoutlines();
+    Object_markings * Getmarkings();
 
     void Sett(double t);
     void SetzOffset(double zOffset);
@@ -387,6 +415,9 @@ public:
     void Setoutlines(Object_outlines &xObject_outlines);
     void Resetoutlines();
 
+    void Setmarkings(Object_markings & xObject_markings);
+    void Resetmarkings();
+
     vector<Object_repeat> * GetObjectrepeatVector();
     Object_repeat* GetObjectrepeat(unsigned int i);
     unsigned int GetObjectrepeatCount();

+ 12 - 0
src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.cpp

@@ -1263,6 +1263,8 @@ bool OpenDriveXmlWriter::WriteObject(TiXmlElement *node, Object *pObject)
         WriteObjectOutlinesOutline(nodeObject,pObject_outlines_outline);
     }
 
+//    unsigned nmarkingcount =
+
     return true;
 }
 //--------------
@@ -1448,6 +1450,16 @@ bool OpenDriveXmlWriter::WriteObjectOutlinesOutline(TiXmlElement *node, Object_o
 
 //--------------
 
+bool OpenDriveXmlWriter::WriteObjectMarkingsMarking(TiXmlElement *node, Object_markings_marking *pObject_markings_marking)
+{
+    TiXmlElement * nodemarking = new TiXmlElement("marking");
+    node->LinkEndChild(nodemarking);
+
+ //   if(pObject_markings_marking->g)
+}
+
+//--------------
+
 bool OpenDriveXmlWriter::WriteObjectOutlinesOutlinecornerRoad(TiXmlElement *node, Object_outlines_outline_cornerRoad *pObject_outlines_outline_cornerRoad)
 {
     TiXmlElement* nodecornerRoad = new TiXmlElement("cornerRoad");

+ 3 - 1
src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.h

@@ -84,7 +84,9 @@ public:
     bool WriteSignal(TiXmlElement * node, Signal * pSignal);
     bool WriteSignal_positionInertial(TiXmlElement * node, signal_positionInertial * pSignal_positionInertial);
     bool WriteSignal_laneValidity(TiXmlElement * node, signal_laneValidity * pSignal_laneValidity);
-	//--------------
+    bool WriteObjectMarkingsMarking(TiXmlElement * node,Object_markings_marking * pObject_markings_marking);
+
+    //--------------
 
 	bool WriteSurface (TiXmlElement *node, Road* road);
 	//--------------

+ 77 - 6
src/common/modulecomm/shm/procsm.cpp

@@ -9,6 +9,9 @@
 #include <unistd.h>
 #endif
 
+#include <QFile>
+#include <QDir>
+
 
 //#define RESET   "\033[0m"
 //#define BLACK   "\033[30m"      /* Black */
@@ -63,6 +66,7 @@ void procsm::threadAttachMon()
         nCount++;
         if(nCount>300)
         {
+            setfailmark();
             std::cerr<<"\033[1m\033[31m"<<" modulecomm msg "<<mstrsmname<<" Attach Fail."<<" Now Exit."<<"\033[0m"<<std::endl;
             std::this_thread::sleep_for(std::chrono::milliseconds(10));
             exit(-1);
@@ -71,6 +75,46 @@ void procsm::threadAttachMon()
     mbAttachThreadComplete = true;
 }
 
+void procsm::setfailmark()
+{
+    char strfailpath[300];
+    QDateTime xdt = QDateTime::currentDateTime();
+    snprintf(strfailpath,300,"/dev/shm/%04d%02d%02d-%s",xdt.date().year(),
+             xdt.date().month(),xdt.date().day(),mstrsmname);
+    std::cerr<<"\033[1m\033[31m"<<" modulecomm msg "<<mstrsmname<<" fail. set mark file"<<strfailpath<<"\033[0m"<<std::endl;
+    QFile xFile;
+    xFile.setFileName(strfailpath);
+    if(xFile.open(QIODevice::ReadWrite))
+    {
+        xFile.write(strfailpath,strnlen(strfailpath,256));
+        xFile.close();
+        std::cerr<<"\033[1m\033[31m"<<" modulecomm msg "<<mstrsmname<<" had save mark"<<"\033[0m"<<std::endl;
+    }
+    else
+    {
+        std::cerr<<"\033[1m\033[31m"<<" modulecomm msg "<<mstrsmname<<" save mark fail."<<"\033[0m"<<std::endl;
+    }
+}
+
+bool procsm::checkfailmark()
+{
+    char strfailpath[300];
+    QDateTime xdt = QDateTime::currentDateTime();
+    snprintf(strfailpath,300,"/dev/shm/%04d%02d%02d-%s",xdt.date().year(),
+             xdt.date().month(),xdt.date().day(),mstrsmname);
+
+    QFile xFile;
+    xFile.setFileName(strfailpath);
+    if(xFile.exists())
+    {
+        QDir xDir("/dev/shm");
+        xDir.remove(strfailpath);
+        std::cout<<"\033[1m\033[32m"<<" Last Time Attach Fail. Now Direct Create."<<"\033[0m"<<std::endl;
+        return true;
+    }
+    return false;
+}
+
 procsm::procsm(const char * strsmname,const unsigned int nBufSize,const unsigned int nMaxPacCount,const int nMode)
 {
 //    mnBufSize = nBufSize;
@@ -90,12 +134,39 @@ procsm::procsm(const char * strsmname,const unsigned int nBufSize,const unsigned
 
     if(nMode == ModeWrite)
     {
-        bool bres = mpASMPtr->attach();
-        if(bres == false)
-        {
-            mpASMPtr->create(sizeof(ASM_PTR));
+        bool bres;
+//        if(checkfailmark())
+//        {
+//            bres = false;
+//        }
+//        else
+//        {
+//            bres = mpASMPtr->attach();
+//        }
+//        if(bres == false)
+//        {
+//            mpASMPtr->create(sizeof(ASM_PTR));
+
+//        }
 
+        bres = mpASMPtr->create(sizeof(ASM_PTR));
+        if(bres == true)
+        {
+            std::cout<<"\033[1m\033[32m"<<mstrsmname<<" create successfully."<<"\033[0m"<<std::endl;
+        }
+        else
+        {
+            bres = mpASMPtr->attach();
+            if(bres == true)
+            {
+                std::cout<<"\033[1m\033[32m"<<mstrsmname<<" exist. attach successfully."<<"\033[0m"<<std::endl;
+            }
+            else
+            {
+                return;
+            }
         }
+
         ASM_PTR * pasm = (ASM_PTR *)mpASMPtr->data();
         if(pasm == NULL)
         {
@@ -495,7 +566,7 @@ int procsm::writemsg(const char *str, const unsigned int nSize)
     }
     if(mbAttach == false)
     {
-        std::cout<<"ShareMemory Attach fail."<<std::endl;
+        std::cout<<mstrsmname<<"ShareMemory Attach fail."<<std::endl;
         return -1;
     }
     mpASM->lock();
@@ -606,7 +677,7 @@ int procsm::readmsg(unsigned int index, char *str, unsigned int nMaxSize,unsigne
     checkasm();
     if(mbAttach == false)
     {
-        std::cout<<"ShareMemory Attach fail."<<std::endl;
+        std::cout<<mstrsmname<<"ShareMemory Attach fail."<<std::endl;
         return -3;
     }    
     int nRtn = 0;

+ 4 - 0
src/common/modulecomm/shm/procsm.h

@@ -135,6 +135,10 @@ private:
 private:
     std::thread * mpthreadattmon;
 
+private:
+    void setfailmark();
+    bool checkfailmark(); //if have fail mark file,return true
+
 
 
 };

+ 107 - 4
src/driver/driver_cloud_grpc_pc_thread/grpcpc.cpp

@@ -1,5 +1,6 @@
 #include "grpcpc.h"
 
+#include "remotectrlini.h"
 
 static grpcpc * ggrpcpc;
 
@@ -12,6 +13,7 @@ void ListenData(const char * strdata,const unsigned int nSize,const unsigned int
 grpcpc::grpcpc(std::string stryamlpath)
 {
 
+
     mstrpicmsgname[0] = "picfront";
     mstrpicmsgname[1] = "picrear";
     mstrpicmsgname[2] = "picleft";
@@ -20,9 +22,55 @@ grpcpc::grpcpc(std::string stryamlpath)
 
     ggrpcpc = this;
     dec_yaml(stryamlpath.data());
+
+    if(mvectormsgunit.size() == 0)
+    {
+        iv::msgunit xmu;
+        snprintf(xmu.mstrmsgname,256,"hcp2_gpsimu");
+        xmu.mnBufferSize = 10000;
+        xmu.mnBufferCount = 1;
+        mvectormsgunit.push_back(xmu);
+        snprintf(xmu.mstrmsgname,256,"simpletrace");
+        xmu.mnBufferSize = 100000;
+        xmu.mnBufferCount = 1;
+        mvectormsgunit.push_back(xmu);
+
+        if(mvectorctrlmsgunit.size() == 0)
+        {
+            snprintf(xmu.mstrmsgname,256,"xodrdst");
+            xmu.mnBufferSize = 1000;
+            xmu.mnBufferCount = 1;
+            mvectorctrlmsgunit.push_back(xmu);
+            snprintf(xmu.mstrmsgname,256,"xodrreq");
+            xmu.mnBufferSize = 1000;
+            xmu.mnBufferCount = 1;
+            xmu.mbImportant = true;
+            xmu.mnkeeptime = 3000;
+            mvectorctrlmsgunit.push_back(xmu);
+            snprintf(xmu.mstrmsgname,256,"remotectrl");
+            xmu.mnBufferSize = 1000;
+            xmu.mnBufferCount = 1;
+            mvectorctrlmsgunit.push_back(xmu);
+        }
+    }
+
     unsigned int i;
     for(i=0;i<mvectormsgunit.size();i++)
     {
+        bool bPicMsg = false;
+        unsigned int j;
+        for(j=0;j<NUM_CAM;j++)
+        {
+            if(strncmp(mvectormsgunit[i].mstrmsgname,mstrpicmsgname[j].data(),255 ) == 0)
+            {
+                bPicMsg = true;
+                break;
+            }
+        }
+        if(bPicMsg)
+        {
+            continue;
+        }
         mvectormsgunit[i].mpa = iv::modulecomm::RegisterSend(mvectormsgunit[i].mstrmsgname,mvectormsgunit[i].mnBufferSize,mvectormsgunit[i].mnBufferCount);
     }
 
@@ -34,6 +82,9 @@ grpcpc::grpcpc(std::string stryamlpath)
     for(i=0;i<NUM_CAM;i++)
     {
         mpaPic[i] = iv::modulecomm::RegisterSend(mstrpicmsgname[i].data(),2000000,1);
+        mnPicUpLatency[i] = 1000;
+        mnFrameRate[i] = 0;
+        mnPicDownLatency[i] = 1000;
     }
 
 
@@ -387,7 +438,7 @@ void grpcpc::threadpicdownload(int nCamPos)
     int nsize = mvectormsgunit.size();
     int i;
 
-    std::string strcclientid = "test";
+    std::string strcclientid = ServiceRCIni.GetClientID();
 
     int ninterval = atoi(gstruploadinterval.data());
     if(ninterval<=0)ninterval = 100;
@@ -454,9 +505,12 @@ void grpcpc::threadpicdownload(int nCamPos)
             if(reply.nres() == 1)
             {
                 std::cout<<nCamPos<<":pic time is "<<reply.npictime()<<std::endl;
-                mMutexPic.lock();
+                mnPicUpLatency[nCamPos] = reply.npicuplatency();
+                mnFrameRate[nCamPos] = reply.npicframerate();
+                mnPicDownLatency[nCamPos] = QDateTime::currentMSecsSinceEpoch() - time1;
+                mMutexPic[nCamPos].lock();
                 iv::modulecomm::ModuleSendMsg(mpaPic[nCamPos],reply.xdata().data(),reply.xdata().size());
-                mMutexPic.unlock();
+                mMutexPic[nCamPos].unlock();
 //                iv::cloud::cloudmsg xmsg;
 //                if(xmsg.ParseFromArray(reply.xdata().data(),reply.xdata().size()))
 //                {
@@ -465,7 +519,7 @@ void grpcpc::threadpicdownload(int nCamPos)
             }
             else
             {
-                std::this_thread::sleep_for(std::chrono::milliseconds(100));
+                std::this_thread::sleep_for(std::chrono::milliseconds(10*NUM_THREAD_PERCAM));
             }
         } else {
           std::cout << status.error_code() << ": " << status.error_message()
@@ -487,3 +541,52 @@ void grpcpc::threadpicdownload(int nCamPos)
     }
 }
 
+qint64 grpcpc::GetPicLatency(int nCamPos)
+{
+    if((nCamPos < 0)||(nCamPos >= NUM_CAM))return -1;
+    return mnPicUpLatency[nCamPos];
+}
+
+int grpcpc::GetFrameRate(int nCamPos)
+{
+    if((nCamPos < 0)||(nCamPos >= NUM_CAM))return -1;
+    return mnFrameRate[nCamPos];
+}
+
+qint64 grpcpc::GetPicDownLatency(int nCamPos)
+{
+    if((nCamPos < 0)||(nCamPos >= NUM_CAM))return -1;
+    return mnPicDownLatency[nCamPos];
+}
+
+void grpcpc::setserverip(std::string strip)
+{
+    gstrserverip = strip;
+}
+
+void grpcpc::setserverport(std::string strport)
+{
+    gstrserverport = strport;
+}
+
+void grpcpc::setqueryinterval(std::string strinterval)
+{
+    gstruploadinterval = strinterval;
+}
+
+void grpcpc::setVIN(std::string strVIN)
+{
+    gstrVIN = strVIN;
+}
+
+void grpcpc::setqueryMD5(std::string strmd5)
+{
+    gstrqueryMD5 = strmd5;
+}
+
+void grpcpc::setctrlMD5(std::string strmd5)
+{
+    gstrctrlMD5 = strmd5;
+}
+
+

+ 23 - 3
src/driver/driver_cloud_grpc_pc_thread/grpcpc.h

@@ -35,7 +35,8 @@
 #endif
 
 #ifndef NUM_THREAD_PERCAM
-#define NUM_THREAD_PERCAM 4
+#define NUM_THREAD_PERCAM 1
+//int NUM_THREAD_PERCAM = 1;
 #endif
 
 using grpc::Channel;
@@ -66,7 +67,7 @@ private:
     void run();
 
 private:
-    std::string gstrserverip = "111.33.136.149";//"192.168.14.98";//"127.0.0.1";// "140.143.237.38";
+    std::string gstrserverip = "192.168.14.98";//"111.33.136.149";//"127.0.0.1";// "140.143.237.38";
     std::string gstrserverport = "50051";//"9000";
     std::string gstruploadinterval = "100";
     void * gpa;
@@ -101,7 +102,26 @@ private:
 
     std::thread * mpThread[NUM_CAM * NUM_THREAD_PERCAM];
 
-    QMutex mMutexPic;
+    QMutex mMutexPic[NUM_CAM];
+
+    qint64 mnPicUpLatency[NUM_CAM];
+    int mnFrameRate[NUM_CAM];
+    int mnPicDownLatency[NUM_CAM];
+
+
+public:
+    qint64 GetPicLatency(int nCamPos);
+    int GetFrameRate(int nCamPos);
+    qint64 GetPicDownLatency(int nCamPos);
+
+
+public:
+    void setserverip(std::string strip);
+    void setserverport(std::string strport);
+    void setqueryinterval(std::string strinterval);
+    void setVIN(std::string strVIN);
+    void setqueryMD5(std::string strmd5);
+    void setctrlMD5(std::string strmd5);
 
 
 };

+ 7 - 2
src/driver/driver_cloud_grpc_server_thread/cumsgbuffer.cpp

@@ -109,7 +109,7 @@ int cumsgbuffer::getmsg(std::string strVIN,std::string strqueryMD5, qint64 nlast
 }
 
 void cumsgbuffer::addPicData(std::string strVIN, const char *strdata, const unsigned int ndatasize,
-                             qint64 npictime, int nCamPos)
+                             qint64 npictime, int nCamPos,qint64 nLatency)
 {
     mMutex.lock();
     iv::cumsg * pmsg = 0;
@@ -141,6 +141,7 @@ void cumsgbuffer::addPicData(std::string strVIN, const char *strdata, const unsi
             xPicData.mdatasize = ndatasize;
             xPicData.mnMsgTime = npictime;
             pmsg->mpicbuf[nCamPos].AddData(xPicData);
+            pmsg->mpicbuf[nCamPos].SetLatency(nLatency);
         }
     }
 
@@ -148,7 +149,7 @@ void cumsgbuffer::addPicData(std::string strVIN, const char *strdata, const unsi
 }
 
 int cumsgbuffer::getPicData(std::string strVIN, std::string strqueryMD5,std::shared_ptr<char> &pdata_ptr,
-                            unsigned int &ndatasize,std::string strclientid, int nCamPos,qint64 & nPicTime)
+                            unsigned int &ndatasize,std::string strclientid, int nCamPos,qint64 & nPicTime,qint64 & nPicLatency,int & nFrameRate)
 {
     mMutex.lock();
     iv::cumsg * pmsg = 0;
@@ -202,9 +203,13 @@ int cumsgbuffer::getPicData(std::string strVIN, std::string strqueryMD5,std::sha
         nPicTime = nLastPicTime;
     }
 
+    nPicLatency = pmsg->mpicbuf[nCamPos].GetLatency();
+    nFrameRate = pmsg->mpicbuf[nCamPos].GetFrameRate();
+
     mclienttime.SetClientCamLastTime(strclientid,nCamPos,nLastPicTime);
 
 
     mMutex.unlock();
     return nrtn;
 }
+

+ 5 - 2
src/driver/driver_cloud_grpc_server_thread/cumsgbuffer.h

@@ -59,10 +59,13 @@ public:
                 std::vector<char> * pxdata);
 
 
-    void addPicData(std::string strVIN,const char * strdata,const unsigned int ndatasize,qint64 npictime,int nCamPos);
+    void addPicData(std::string strVIN,const char * strdata,const unsigned int ndatasize,qint64 npictime,int nCamPos,qint64 nLatency);
 
     int getPicData(std::string strVIN,std::string strqueryMD5,std::shared_ptr<char> & pdata_ptr,unsigned int & ndatasize,
-                   std::string strclientid,int nCamPos,qint64 & nPicTime);
+                   std::string strclientid,int nCamPos,qint64 & nPicTime,qint64 & nPicLatency,int & nFrameRate);
+
+
+
 
 
 };

+ 9 - 2
src/driver/driver_cloud_grpc_server_thread/main.cpp

@@ -114,8 +114,10 @@ class UploadServiceImpl final : public iv::UploadThread::Service {
   Status uploadpic(ServerContext* context, const iv::PicUpRequestThread* request,
                   iv::PicUpReplyThread* reply) override {
       gcumsgbuf.addPicData(request->strvin(),request->xdata().data(),
-                           request->xdata().size(),request->npictime(),request->ncampos());
+                           request->xdata().size(),request->npictime(),request->ncampos(),request->nlatency());
       reply->set_nres(0);
+      reply->set_npicsendtime(request->npictime());
+
 
       return Status::OK;
 
@@ -126,13 +128,18 @@ class UploadServiceImpl final : public iv::UploadThread::Service {
         std::shared_ptr<char> pstr_data;
         unsigned int ndatasize;
         qint64 nPicTime;
-        int nres =gcumsgbuf.getPicData(request->strvin(),request->strquerymd5(),pstr_data,ndatasize,request->strclientid(), request->ncampos(),nPicTime);
+        qint64 nPicLatency;
+        int nFrameRate;
+        int nres =gcumsgbuf.getPicData(request->strvin(),request->strquerymd5(),pstr_data,ndatasize,request->strclientid(), request->ncampos(),nPicTime,
+                                       nPicLatency,nFrameRate);
         response->set_nres(nres);
         if(nres == 1)
         {
             response->set_ncampos(request->ncampos());
             response->set_npictime(nPicTime);
             response->set_xdata(pstr_data.get(),ndatasize);
+            response->set_npicframerate(nFrameRate);
+            response->set_npicuplatency(nPicLatency);
         }
 
         return Status::OK;

+ 10 - 0
src/driver/driver_cloud_grpc_server_thread/picbuf.cpp

@@ -123,3 +123,13 @@ int PicBuf::GetFrameRate()
 {
     return mnFrameRate;
 }
+
+void PicBuf::SetLatency(qint64 nlatency)
+{
+    mnUpLatency = nlatency;
+}
+
+qint64 PicBuf::GetLatency()
+{
+    return mnUpLatency;
+}

+ 4 - 1
src/driver/driver_cloud_grpc_server_thread/picbuf.h

@@ -22,7 +22,7 @@ class PicBuf
 private:
     std::vector<iv::PicData> mvectordata_ptr;
     qint64 mBufTime = 500;
-    qint64 mnReceiveBufTime = 50;
+    qint64 mnReceiveBufTime = 0;
     qint64 mLastBufTime = 0;
     QMutex mMutexBuf;
 
@@ -30,12 +30,15 @@ private:
     int mnFrameRate = 0;
     qint64 mnSecondTime = 0;   //Time  Second.
     int mnFrameSecondCount =0; //Last Second Receive message
+    qint64 mnUpLatency = 1000;
 public:
     PicBuf();
     PicBuf(const PicBuf & other);
     void AddData(iv::PicData xPicData);
     int GetData(qint64 & nLastTime,iv::PicData & xPicData);  //0 No Data  1 Have Data
     int GetFrameRate();
+    void SetLatency(qint64 nlatency);
+    qint64 GetLatency();
 };
 
 #endif // PICBUF_H

+ 73 - 0
src/driver/driver_jpg2mp4/.gitignore

@@ -0,0 +1,73 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+

+ 35 - 0
src/driver/driver_jpg2mp4/driver_jpg2mp4.pro

@@ -0,0 +1,35 @@
+QT -= gui
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which as been marked 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 \
+    ../../include/msgtype/rawpic.pb.cc
+
+!include(../../../include/common.pri ) {
+    error( "Couldn't find the common.pri file!" )
+}
+
+!include(../../../include/ivopencv.pri ) {
+    error( "Couldn't find the ivopencv.pri file!" )
+}
+
+!include(../../../include/ivprotobuf.pri ) {
+    error( "Couldn't find the ivprotobuf.pri file!" )
+
+}
+
+
+HEADERS += \
+    ../../include/msgtype/rawpic.pb.h

+ 91 - 0
src/driver/driver_jpg2mp4/main.cpp

@@ -0,0 +1,91 @@
+#include <QCoreApplication>
+
+#include <iostream>
+
+#include "modulecomm.h"
+
+
+#include "rawpic.pb.h"
+
+#include "opencv2/video.hpp"
+#include "opencv2/videoio.hpp"
+
+#include <opencv2/opencv.hpp>
+#include <opencv2/core.hpp>
+
+#ifdef SYSTEM_AGX
+#include <opencv2/imgcodecs/legacy/constants_c.h>    //OpenCV4 use this line
+#include <opencv2/imgproc/types_c.h>   //OpenCV4 use this line
+#endif
+
+cv::VideoWriter mWriter;
+
+bool mbSave = true;
+
+void encode(iv::vision::rawpic & xrawpic)
+{
+    std::cout<<"jpg size : "<<xrawpic.picdata().size()<<std::endl;
+
+    cv::Mat mat(xrawpic.height(),xrawpic.width(),xrawpic.mattype());
+
+    if(mbSave)
+    {
+        if(xrawpic.type() == 1)
+            memcpy(mat.data,xrawpic.picdata().data(),mat.rows*mat.cols*mat.elemSize());
+        else
+        {
+            std::vector<unsigned char> buff(xrawpic.picdata().data(),xrawpic.picdata().data()+xrawpic.picdata().size());
+            mat = cv::imdecode(buff,CV_LOAD_IMAGE_COLOR);
+        }
+        int font = cv::FONT_HERSHEY_DUPLEX;
+        QDateTime xrecvtime = QDateTime::fromMSecsSinceEpoch(xrawpic.time());
+ //       char strtext[256];
+  //      snprintf(strtext,"%s",xrecvtime.toString("yyyy-MM-dd hh:mm:ss:zzz").toLatin1().data());
+        std::string strtext = xrecvtime.toString("yyyy-MM-dd hh:mm:ss:zzz").toStdString();
+        double fratio = xrawpic.width()/640;
+        int fontsize = 0.5*fratio;
+        if(fontsize<1)fontsize = 1;
+        cv::putText(mat,strtext,cv::Point(xrawpic.width() - 230*fratio,30*fratio),font,0.5*fratio,cv::Scalar(0,255,0),fontsize);
+  //      cv::putText(mat,mstrvin,cv::Point(10,30*fratio),font,0.5*fratio,cv::Scalar(0,255,0),fontsize);
+
+    }
+    static int ncount = 0;
+    ncount++;
+    if(ncount<11)
+    {
+        QTime xTime;
+        xTime.start();
+        mWriter<<mat;
+        std::cout<<"comp time :"<<xTime.elapsed()<<std::endl;
+    }
+    if(ncount == 11)
+    {
+        mWriter.release();
+    }
+
+    return;
+}
+
+
+void ListenPicData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
+{
+    iv::vision::rawpic xrawpic;
+    if(xrawpic.ParseFromArray(strdata,nSize))
+    {
+        encode(xrawpic);
+    }
+}
+
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+    char strpath[256];
+    snprintf(strpath,256,"%s/testcv.mkv",getenv("HOME"));
+    mWriter.open(strpath,cv::VideoWriter::fourcc('M','P','4','2'),30.0,cv::Size(1920,1080),1);
+
+    void * pa = iv::modulecomm::RegisterRecv("picfront",ListenPicData);
+
+    return a.exec();
+
+}

+ 14 - 1
src/tool/RemoteCtrl_Thread/RemoteCtrl _Thread.pro → src/tool/RemoteCtrl_Thread/RemoteCtrl_Thread.pro

@@ -28,18 +28,23 @@ DEFINES += QT_DEPRECATED_WARNINGS
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
 SOURCES += \
+    ../../common/common/getinterface/get_interface.cpp \
+    ../../common/common/md5/md5_encode.cpp \
     ../../include/msgtype/gps.pb.cc \
     ../../include/msgtype/gpsimu.pb.cc \
     ../../include/msgtype/imu.pb.cc \
     ../../include/msgtype/rawpic.pb.cc \
     ../../include/msgtype/remotectrl.pb.cc \
     dialogbigpic.cpp \
+    dialogsetpassword.cpp \
+    dialogsetting.cpp \
     ivpicview.cpp \
     ivview.cpp \
     joyreadthread.cpp \
     main.cpp \
     mainwindow.cpp \
     myview.cpp \
+    remotectrlini.cpp \
     speed.cpp \
     ../../driver/driver_cloud_grpc_pc_thread/grpcpc.cpp \
     ../../driver/driver_cloud_grpc_thread/uploadthreadmsg.grpc.pb.cc \
@@ -49,18 +54,23 @@ SOURCES += \
     ../../include/msgtype/uploadthreadmsg.pb.cc
 
 HEADERS += \
+    ../../common/common/getinterface/get_interface.h \
+    ../../common/common/md5/md5_encode.h \
     ../../include/msgtype/gps.pb.h \
     ../../include/msgtype/gpsimu.pb.h \
     ../../include/msgtype/imu.pb.h \
     ../../include/msgtype/rawpic.pb.h \
     ../../include/msgtype/remotectrl.pb.h \
     dialogbigpic.h \
+    dialogsetpassword.h \
+    dialogsetting.h \
     ivpicview.h \
     ivview.h \
     joyreadthread.h \
     mainwindow.h \
     myview.h \
     pos_def.h \
+    remotectrlini.h \
     speed.h \
     ../../driver/driver_cloud_grpc_pc_thread/grpcpc.h \
     ../../driver/driver_cloud_grpc_thread/uploadthreadmsg.grpc.pb.h \
@@ -71,6 +81,8 @@ HEADERS += \
 
 FORMS += \
     dialogbigpic.ui \
+    dialogsetpassword.ui \
+    dialogsetting.ui \
     mainwindow.ui \
     dialogpic.ui
 
@@ -115,6 +127,7 @@ LIBS += -L$$PWD/../../../thirdpartylib/grpc/lib
 
 LIBS += -lgrpc++_unsecure -lgrpc++_reflection -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_bad_variant_access -labsl_city -labsl_status -labsl_cord -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_symbolize -labsl_demangle_internal -labsl_stacktrace -labsl_debugging_internal -labsl_malloc_internal -labsl_time -labsl_time_zone -labsl_civil_time -labsl_strings -labsl_strings_internal -labsl_throw_delegate -labsl_int128 -labsl_base -labsl_spinlock_wait -labsl_bad_optional_access -labsl_raw_logging_internal -labsl_log_severity
 
-
+INCLUDEPATH += $$PWD/../../common/common/md5
+INCLUDEPATH += $$PWD/../../common/common/getinterface
 
 

+ 78 - 0
src/tool/RemoteCtrl_Thread/dialogsetpassword.cpp

@@ -0,0 +1,78 @@
+#include "dialogsetpassword.h"
+#include "ui_dialogsetpassword.h"
+
+#include <QMessageBox>
+#include <iostream>
+
+#include <remotectrlini.h>
+
+DialogSetPassWord::DialogSetPassWord(DialogSetPassWord_Type xtype,std::string strmd5, QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::DialogSetPassWord)
+{
+    ui->setupUi(this);
+
+    mType = xtype;
+
+    if(xtype == DialogSetPassWord_Type::QUERY)
+    {
+        setWindowTitle("设置查询密码");
+    }
+
+    if(xtype == DialogSetPassWord_Type::CTRL)
+    {
+        setWindowTitle("设置控制密码");
+    }
+
+    mstrmd5 = strmd5;
+}
+
+DialogSetPassWord::~DialogSetPassWord()
+{
+    delete ui;
+}
+
+void DialogSetPassWord::on_pushButton_Set_clicked()
+{
+    std::string stroldpass = ui->lineEdit_OldPass->text().toStdString();
+    std::string strnewpass = ui->lineEdit_NewPass->text().toStdString();
+    if(stroldpass =="")
+    {
+        QMessageBox::warning(this,"Warning"," Old Pass is NULL",QMessageBox::YesAll);
+        return;
+    }
+
+    if(strnewpass == "")
+    {
+        QMessageBox::warning(this,"Warning"," New Pass is NULL",QMessageBox::YesAll);
+        return;
+    }
+
+    Md5Encode encode_obj;
+    std::string stroldmd5 = encode_obj.Encode(stroldpass);
+
+    if(stroldmd5 != mstrmd5)
+    {
+        QMessageBox::warning(this,"Warning"," Old PassWord Error",QMessageBox::YesAll);
+        return;
+    }
+
+    std::string strnewmd5 = encode_obj.Encode(strnewpass);
+
+    std::cout<<"New Pass: "<<strnewmd5<<std::endl;
+
+    if(mType == DialogSetPassWord_Type::QUERY)
+        RemoteCtrlIni::Inst().SetQueryMD5(strnewmd5);
+    else
+       ServiceRCIni.SetCtrlMD5(strnewmd5);
+
+    QMessageBox::information(this,"Info","修改密码成功",QMessageBox::YesAll);
+
+    this->accept();
+
+}
+
+void DialogSetPassWord::on_pushButton_Close_clicked()
+{
+    this->accept();
+}

+ 39 - 0
src/tool/RemoteCtrl_Thread/dialogsetpassword.h

@@ -0,0 +1,39 @@
+#ifndef DIALOGSETPASSWORD_H
+#define DIALOGSETPASSWORD_H
+
+#include <QDialog>
+
+#include "md5_encode.h"
+
+namespace Ui {
+class DialogSetPassWord;
+}
+
+enum DialogSetPassWord_Type
+{
+    QUERY,
+    CTRL
+};
+
+class DialogSetPassWord : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit DialogSetPassWord(DialogSetPassWord_Type xtype,std::string strmd5, QWidget *parent = nullptr);
+    ~DialogSetPassWord();
+
+private slots:
+    void on_pushButton_Set_clicked();
+
+    void on_pushButton_Close_clicked();
+
+private:
+    Ui::DialogSetPassWord *ui;
+
+    std::string mstrmd5;
+
+    DialogSetPassWord_Type mType;
+};
+
+#endif // DIALOGSETPASSWORD_H

+ 97 - 0
src/tool/RemoteCtrl_Thread/dialogsetpassword.ui

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DialogSetPassWord</class>
+ <widget class="QDialog" name="DialogSetPassWord">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>504</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QLineEdit" name="lineEdit_NewPass">
+   <property name="geometry">
+    <rect>
+     <x>180</x>
+     <y>103</y>
+     <width>221</width>
+     <height>40</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_OldPass">
+   <property name="geometry">
+    <rect>
+     <x>180</x>
+     <y>44</y>
+     <width>221</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>100</y>
+     <width>101</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>新密码</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>40</y>
+     <width>101</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>原密码</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Set">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>200</y>
+     <width>151</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>设置</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Close">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>200</y>
+     <width>151</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>关闭</string>
+   </property>
+  </widget>
+ </widget>
+ <tabstops>
+  <tabstop>lineEdit_OldPass</tabstop>
+  <tabstop>lineEdit_NewPass</tabstop>
+  <tabstop>pushButton_Set</tabstop>
+  <tabstop>pushButton_Close</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>

+ 54 - 0
src/tool/RemoteCtrl_Thread/dialogsetting.cpp

@@ -0,0 +1,54 @@
+#include "dialogsetting.h"
+#include "ui_dialogsetting.h"
+
+#include <QMessageBox>
+
+#include "remotectrlini.h"
+
+DialogSetting::DialogSetting(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::DialogSetting)
+{
+    ui->setupUi(this);
+
+
+    mstrserverip = ServiceRCIni.GetServerIP();
+    mstrserverport = ServiceRCIni.GetServerPort();
+    mstrinterval = ServiceRCIni.GetInterval();
+    mstrVIN = ServiceRCIni.GetVIN();
+
+
+    ui->lineEdit_serverip->setText(mstrserverip.data());
+    ui->lineEdit_serverport->setText(mstrserverport.data());
+    ui->lineEdit_queryinterval->setText(mstrinterval.data());
+    ui->lineEdit_VIN->setText(mstrVIN.data());
+
+
+    setWindowTitle("Set Server");
+
+}
+
+DialogSetting::~DialogSetting()
+{
+    delete ui;
+}
+
+void DialogSetting::on_pushButton_Set_clicked()
+{
+    mstrserverip = ui->lineEdit_serverip->text().toStdString();
+    mstrserverport = ui->lineEdit_serverport->text().toStdString();
+    mstrinterval = ui->lineEdit_queryinterval->text().toStdString();
+    mstrVIN = ui->lineEdit_VIN->text().toStdString();
+
+    ServiceRCIni.SetServerIP(mstrserverip);
+    ServiceRCIni.SetServerPort(mstrserverport);
+    ServiceRCIni.SetInterval(mstrinterval);
+    ServiceRCIni.SetVIN(mstrVIN);
+
+    this->accept();
+}
+
+void DialogSetting::on_pushButton_Close_clicked()
+{
+    this->reject();
+}

+ 33 - 0
src/tool/RemoteCtrl_Thread/dialogsetting.h

@@ -0,0 +1,33 @@
+#ifndef DIALOGSETTING_H
+#define DIALOGSETTING_H
+
+#include <QDialog>
+#include <QSettings>
+
+namespace Ui {
+class DialogSetting;
+}
+
+class DialogSetting : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit DialogSetting(QWidget *parent = nullptr);
+    ~DialogSetting();
+
+private slots:
+    void on_pushButton_Set_clicked();
+
+    void on_pushButton_Close_clicked();
+
+private:
+    Ui::DialogSetting *ui;
+
+    std::string mstrserverip;
+    std::string mstrserverport;
+    std::string mstrinterval;
+    std::string mstrVIN;
+};
+
+#endif // DIALOGSETTING_H

+ 137 - 0
src/tool/RemoteCtrl_Thread/dialogsetting.ui

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DialogSetting</class>
+ <widget class="QDialog" name="DialogSetting">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>594</width>
+    <height>361</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QPushButton" name="pushButton_Set">
+   <property name="geometry">
+    <rect>
+     <x>110</x>
+     <y>277</y>
+     <width>111</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>设置</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Close">
+   <property name="geometry">
+    <rect>
+     <x>360</x>
+     <y>281</y>
+     <width>111</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>关闭</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>50</x>
+     <y>20</y>
+     <width>101</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>服务器 IP</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_serverip">
+   <property name="geometry">
+    <rect>
+     <x>170</x>
+     <y>24</y>
+     <width>221</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>50</x>
+     <y>80</y>
+     <width>101</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>服务器端口</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_3">
+   <property name="geometry">
+    <rect>
+     <x>50</x>
+     <y>140</y>
+     <width>111</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>查询间隔(ms)</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_serverport">
+   <property name="geometry">
+    <rect>
+     <x>170</x>
+     <y>83</y>
+     <width>113</width>
+     <height>40</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_queryinterval">
+   <property name="geometry">
+    <rect>
+     <x>170</x>
+     <y>140</y>
+     <width>113</width>
+     <height>40</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_VIN">
+   <property name="geometry">
+    <rect>
+     <x>170</x>
+     <y>196</y>
+     <width>221</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_5">
+   <property name="geometry">
+    <rect>
+     <x>50</x>
+     <y>196</y>
+     <width>101</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>车辆识别码</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 1 - 22
src/tool/RemoteCtrl_Thread/driver_cloud_grpc_pc.yaml

@@ -1,28 +1,7 @@
-server : 47.96.250.93
-port : 50051
-uploadinterval : 100
 
-VIN : AAAAAAAAAAAAAAAAA
-queryMD5 : 5d41402abc4b2a76b9719d911017c592
-ctrlMD5  : 5d41402abc4b2a76b9719d911017c592
 
 querymessage:
-  picfront:
-    msgname: picfront
-    buffersize: 10000000
-    buffercount: 1
-  picrear:
-    msgname: picrear
-    buffersize: 10000000
-    buffercount: 1
-  picleft:
-    msgname: picleft
-    buffersize: 10000000
-    buffercount: 1
-  picright:
-    msgname: picright
-    buffersize: 10000000
-    buffercount: 1
+
   hcp2_gpsimu:
     msgname: hcp2_gpsimu
     buffersize: 10000

+ 74 - 7
src/tool/RemoteCtrl_Thread/mainwindow.cpp

@@ -2,6 +2,8 @@
 #include "ui_mainwindow.h"
 #include "pos_def.h"
 
+#include "remotectrlini.h"
+
 MainWindow * gw;
 //#include "QStringLiteral"
 
@@ -120,20 +122,22 @@ MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
     , ui(new Ui::MainWindow)
 {
+
     gw = this;
+
     ui->setupUi(this);
 
-//    int * pax = 0;
-//    *pax = 1;
+    mstrserverip = ServiceRCIni.GetServerIP();
+    mstrserverport = ServiceRCIni.GetServerPort();
+    mstruploadinterval = ServiceRCIni.GetInterval();
+    mstrVehVIN = ServiceRCIni.GetVIN();
+    mstrqueryMD5 = ServiceRCIni.GetQueryMD5();
+    mstrctrlMD5 = ServiceRCIni.GetCtrlMD5();
 
     mpJRT = new JoyReadThread();
     mpJRT->start();
 
-    void * pa = iv::modulecomm::RegisterRecv(gstrmem_gpsimu.data(),Listengpsimu);
     int i;
-    for(i=0;i<CAMERA_NUM;i++)
-        pa = iv::modulecomm::RegisterRecv(gstrmem_pic[i].data(),Listenpic);
-
 
     CreateView();
 
@@ -168,9 +172,15 @@ MainWindow::MainWindow(QWidget *parent)
     timer->start(10);
 
     mpadst = iv::modulecomm::RegisterSend("xodrreq",1000,1);
-    mpasimpletrace = iv::modulecomm::RegisterRecv("simpletrace",Listensimpletrace);
+
 
     mgrpcpc = new grpcpc(gstryaml_path);
+    mgrpcpc->setserverip(mstrserverip);
+    mgrpcpc->setserverport(mstrserverport);
+    mgrpcpc->setqueryinterval(mstruploadinterval);
+    mgrpcpc->setVIN(mstrVehVIN);
+    mgrpcpc->setqueryMD5(mstrqueryMD5);
+    mgrpcpc->setctrlMD5(mstrctrlMD5);
     mgrpcpc->start();
 
     mstrVIN = mgrpcpc->GetVIN().data();
@@ -194,6 +204,21 @@ MainWindow::MainWindow(QWidget *parent)
     mpbigpicdlg->setModal(false);
     connect(mpbigpicdlg,SIGNAL(finished(int)),this,SLOT(onCloseBigDlg()));
 
+    QLabel * pLabel = new QLabel();
+    pLabel->setFixedWidth(600);
+    pLabel->setText("Latency");
+    mpLabelLatency = pLabel;
+    ui->statusbar->addPermanentWidget(pLabel);
+
+    mpasimpletrace = iv::modulecomm::RegisterRecv("simpletrace",Listensimpletrace);
+
+    void * pa = iv::modulecomm::RegisterRecv(gstrmem_gpsimu.data(),Listengpsimu);
+
+    for(i=0;i<CAMERA_NUM;i++)
+        pa = iv::modulecomm::RegisterRecv(gstrmem_pic[i].data(),Listenpic);
+
+
+
     setWindowTitle(mstrProgName +mstrVIN+  mstrGPSTime + mstrPicTime);
 
 }
@@ -634,6 +659,17 @@ void MainWindow::onTimerUpdateView()
 {
     static qint64 time_gps = 0;
 
+    unsigned int i;
+
+   char strlatency[1000];
+   char strtem[100];
+   snprintf(strlatency,1000,"Latency(Up|FrameRate|Down): ");
+   snprintf(strtem,100,"FT(%d|%d|%d) ",mgrpcpc->GetPicLatency(0),mgrpcpc->GetFrameRate(0),mgrpcpc->GetPicDownLatency(0));strncat(strlatency,strtem,1000);
+   snprintf(strtem,100,"RR(%d|%d|%d) ",mgrpcpc->GetPicLatency(1),mgrpcpc->GetFrameRate(1),mgrpcpc->GetPicDownLatency(1));strncat(strlatency,strtem,1000);
+   snprintf(strtem,100,"LT(%d|%d|%d) ",mgrpcpc->GetPicLatency(2),mgrpcpc->GetFrameRate(2),mgrpcpc->GetPicDownLatency(2));strncat(strlatency,strtem,1000);
+   snprintf(strtem,100,"RT(%d|%d|%d) ",mgrpcpc->GetPicLatency(3),mgrpcpc->GetFrameRate(3),mgrpcpc->GetPicDownLatency(3));strncat(strlatency,strtem,1000);
+
+   mpLabelLatency->setText(strlatency);
 
 
     if(gTimeGPSIMUUpdate != time_gps)
@@ -839,3 +875,34 @@ void MainWindow::onCloseBigDlg()
 {
     mpbigpicdlg->setRefresh(false);
 }
+
+void MainWindow::on_actionSet_Query_Pass_triggered()
+{
+    DialogSetPassWord xdlg(DialogSetPassWord_Type::QUERY,mstrqueryMD5,this);
+    if(xdlg.exec() == xdlg.Accepted)
+    {
+        mgrpcpc->setqueryMD5(ServiceRCIni.GetQueryMD5());
+        mstrqueryMD5 = ServiceRCIni.GetQueryMD5();
+    }
+}
+
+void MainWindow::on_actionSetting_triggered()
+{
+    DialogSetting xdlg(this);
+    if(xdlg.exec() == QDialog::Accepted)
+    {
+        mgrpcpc->setVIN(ServiceRCIni.GetVIN());
+        mstrVehVIN = ServiceRCIni.GetVIN();
+    }
+}
+
+void MainWindow::on_actionSet_Ctrl_Pass_triggered()
+{
+    DialogSetPassWord xdlg(DialogSetPassWord_Type::CTRL,mstrctrlMD5,this);
+    if(xdlg.exec() == xdlg.Accepted)
+    {
+        mgrpcpc->setctrlMD5(ServiceRCIni.GetCtrlMD5());
+        mstrctrlMD5 = ServiceRCIni.GetCtrlMD5();
+    }
+
+}

+ 22 - 0
src/tool/RemoteCtrl_Thread/mainwindow.h

@@ -10,6 +10,7 @@
 #include <QtWebEngineWidgets/QtWebEngineWidgets>
 #include <QSet>
 #include <QMutex>
+#include <QLabel>
 
 #include <iostream>
 
@@ -31,6 +32,10 @@
 
 #include "joyreadthread.h"
 
+#include "dialogsetpassword.h"
+#include "dialogsetting.h"
+
+
 
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
@@ -101,6 +106,12 @@ private slots:
 
     void on_pushButton_big_clicked();
 
+    void on_actionSet_Query_Pass_triggered();
+
+    void on_actionSetting_triggered();
+
+    void on_actionSet_Ctrl_Pass_triggered();
+
 public:
      void resizeEvent(QResizeEvent *event);
 
@@ -179,5 +190,16 @@ public:
 
 private:
     void CreateView();
+
+private:
+    QLabel * mpLabelLatency;
+
+private:
+    std::string mstrserverip = "192.168.14.98";//"111.33.136.149";//"127.0.0.1";// "140.143.237.38";
+    std::string mstrserverport = "50051";//"9000";
+    std::string mstruploadinterval = "100";
+    std::string mstrVehVIN = "AAAAAAAAAAAAAAAAA";
+    std::string mstrqueryMD5 = "5d41402abc4b2a76b9719d911017c592";
+    std::string mstrctrlMD5 = "5d41402abc4b2a76b9719d911017c592";
 };
 #endif // MAINWINDOW_H

+ 24 - 0
src/tool/RemoteCtrl_Thread/mainwindow.ui

@@ -489,8 +489,32 @@
      <height>28</height>
     </rect>
    </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <addaction name="actionSetting"/>
+    <addaction name="actionSet_Query_Pass"/>
+    <addaction name="actionSet_Ctrl_Pass"/>
+   </widget>
+   <addaction name="menuFile"/>
   </widget>
   <widget class="QStatusBar" name="statusbar"/>
+  <action name="actionSetting">
+   <property name="text">
+    <string>Setting</string>
+   </property>
+  </action>
+  <action name="actionSet_Query_Pass">
+   <property name="text">
+    <string>Set Query Pass</string>
+   </property>
+  </action>
+  <action name="actionSet_Ctrl_Pass">
+   <property name="text">
+    <string>Set Ctrl Pass</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="remotectrl.qrc"/>

+ 143 - 0
src/tool/RemoteCtrl_Thread/remotectrlini.cpp

@@ -0,0 +1,143 @@
+#include "remotectrlini.h"
+#include <QSettings>
+#include "get_interface.h"
+
+RemoteCtrlIni::RemoteCtrlIni()
+{
+    mstrinipath = "RemoteCtrl_Thread.ini";
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+
+    mstrserverip = configini->value("setting/serverip").toString().toStdString();
+    if(mstrserverip == "")
+    {
+        mstrserverip = "111.33.136.149";
+    }
+
+    mstrserverport = configini->value("setting/serverport").toString().toStdString();
+    if(mstrserverport == "")
+    {
+        mstrserverport = "50051";
+    }
+
+    mstruploadinterval = configini->value("setting/interval").toString().toStdString();
+    if(mstruploadinterval == "")
+    {
+        mstruploadinterval = "100";
+    }
+
+    mstrVehVIN = configini->value("setting/VIN").toString().toStdString();
+    if(mstrVehVIN == "")
+    {
+        mstrVehVIN = "AAAAAAAAAAAAAAAAA";
+    }
+
+    mstrqueryMD5 = configini->value("setting/queryMD5").toString().toStdString();
+    if(mstrqueryMD5 == "")
+    {
+        mstrqueryMD5 = "5d41402abc4b2a76b9719d911017c592";
+    }
+
+    mstrctrlMD5 = configini->value("setting/ctrlMD5").toString().toStdString();
+    if(mstrctrlMD5 == "")
+    {
+        mstrctrlMD5 = "5d41402abc4b2a76b9719d911017c592";
+    }
+
+    delete configini;
+
+    std::string strclientid;
+    if(getmac(strclientid) == 1)
+    {
+        mstrclientid = strclientid;
+    }
+
+}
+
+RemoteCtrlIni & RemoteCtrlIni::Inst()
+{
+    static RemoteCtrlIni xRemoteIni;
+    return xRemoteIni;
+}
+
+std::string RemoteCtrlIni::GetQueryMD5()
+{
+    return mstrqueryMD5;
+}
+
+void RemoteCtrlIni::SetQueryMD5(std::string strmd5)
+{
+    mstrqueryMD5 = strmd5;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/queryMD5",strmd5.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetServerIP()
+{
+    return mstrserverip;
+}
+
+void RemoteCtrlIni::SetServerIP(std::string strserverip)
+{
+    mstrserverip = strserverip;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/serverip",strserverip.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetServerPort()
+{
+    return mstrserverport;
+}
+
+void RemoteCtrlIni::SetServerPort(std::string strserverport)
+{
+    mstrserverport = strserverport;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/serverport",strserverport.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetInterval()
+{
+    return mstruploadinterval;
+}
+
+void RemoteCtrlIni::SetInterval(std::string strinterval)
+{
+    mstruploadinterval = strinterval;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/interval",strinterval.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetVIN()
+{
+    return mstrVehVIN;
+}
+
+void RemoteCtrlIni::SetVIN(std::string strVIN)
+{
+    mstrVehVIN = strVIN;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/VIN",strVIN.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetCtrlMD5()
+{
+    return mstrctrlMD5;
+}
+
+void RemoteCtrlIni::SetCtrlMD5(std::string strmd5)
+{
+    mstrctrlMD5 = strmd5;
+    QSettings * configini = new QSettings(mstrinipath,QSettings::IniFormat);
+    configini->setValue("setting/ctrlMD5",strmd5.data());
+    delete configini;
+}
+
+std::string RemoteCtrlIni::GetClientID()
+{
+    return mstrclientid;
+}

+ 53 - 0
src/tool/RemoteCtrl_Thread/remotectrlini.h

@@ -0,0 +1,53 @@
+#ifndef REMOTECTRLINI_H
+#define REMOTECTRLINI_H
+
+#include <string>
+
+#include <QSettings>
+
+class RemoteCtrlIni
+{
+public:
+    RemoteCtrlIni();
+
+public:
+    static RemoteCtrlIni & Inst();
+
+public:
+    std::string GetQueryMD5();
+    void SetQueryMD5(std::string strmd5);
+
+    std::string GetServerIP();
+    void SetServerIP(std::string strserverip);
+
+    std::string GetServerPort();
+    void SetServerPort(std::string strserverport);
+
+    std::string GetInterval();
+    void SetInterval(std::string strinterval);
+
+    std::string GetVIN();
+    void SetVIN(std::string strVIN);
+
+    std::string GetCtrlMD5();
+    void SetCtrlMD5(std::string strmd5);
+
+    std::string GetClientID();
+
+private:
+    QString mstrinipath;
+
+private:
+    std::string mstrserverip = "192.168.14.98";//"111.33.136.149";//"127.0.0.1";// "140.143.237.38";
+    std::string mstrserverport = "50051";//"9000";
+    std::string mstruploadinterval = "100";
+    std::string mstrVehVIN = "AAAAAAAAAAAAAAAAA";
+    std::string mstrqueryMD5 = "5d41402abc4b2a76b9719d911017c592";
+    std::string mstrctrlMD5 = "5d41402abc4b2a76b9719d911017c592";
+
+    std::string mstrclientid = "test";
+};
+
+#define ServiceRCIni RemoteCtrlIni::Inst()
+
+#endif // REMOTECTRLINI_H

+ 14 - 0
src/tool/map_lanetoxodr/dialogobject_lanevalidity.cpp

@@ -0,0 +1,14 @@
+#include "dialogobject_lanevalidity.h"
+#include "ui_dialogobject_lanevalidity.h"
+
+DialogObject_laneValidity::DialogObject_laneValidity(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::DialogObject_laneValidity)
+{
+    ui->setupUi(this);
+}
+
+DialogObject_laneValidity::~DialogObject_laneValidity()
+{
+    delete ui;
+}

+ 22 - 0
src/tool/map_lanetoxodr/dialogobject_lanevalidity.h

@@ -0,0 +1,22 @@
+#ifndef DIALOGOBJECT_LANEVALIDITY_H
+#define DIALOGOBJECT_LANEVALIDITY_H
+
+#include <QDialog>
+
+namespace Ui {
+class DialogObject_laneValidity;
+}
+
+class DialogObject_laneValidity : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit DialogObject_laneValidity(QWidget *parent = nullptr);
+    ~DialogObject_laneValidity();
+
+private:
+    Ui::DialogObject_laneValidity *ui;
+};
+
+#endif // DIALOGOBJECT_LANEVALIDITY_H

+ 114 - 0
src/tool/map_lanetoxodr/dialogobject_lanevalidity.ui

@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DialogObject_laneValidity</class>
+ <widget class="QDialog" name="DialogObject_laneValidity">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>420</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QLineEdit" name="lineEdit_fromLane">
+   <property name="geometry">
+    <rect>
+     <x>216</x>
+     <y>80</y>
+     <width>121</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>76</x>
+     <y>80</y>
+     <width>121</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>fromLane</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_toLane">
+   <property name="geometry">
+    <rect>
+     <x>216</x>
+     <y>140</y>
+     <width>121</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>76</x>
+     <y>140</y>
+     <width>121</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>toLane</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Add">
+   <property name="geometry">
+    <rect>
+     <x>30</x>
+     <y>220</y>
+     <width>91</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Add</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Change">
+   <property name="geometry">
+    <rect>
+     <x>170</x>
+     <y>220</y>
+     <width>91</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Change</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_Delete">
+   <property name="geometry">
+    <rect>
+     <x>310</x>
+     <y>220</y>
+     <width>91</width>
+     <height>51</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Delete</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox">
+   <property name="geometry">
+    <rect>
+     <x>70</x>
+     <y>10</y>
+     <width>261</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 3 - 0
src/tool/map_lanetoxodr/map_lanetoxodr.pro

@@ -38,6 +38,7 @@ SOURCES += \
     dialoghideroad.cpp \
     dialoglanefromrtk.cpp \
     dialoglaneoffset.cpp \
+    dialogobject_lanevalidity.cpp \
     dialogparkingspaceedit.cpp \
     dialogparkingspacefromrtk.cpp \
     dialogroadborrow.cpp \
@@ -98,6 +99,7 @@ HEADERS += \
     dialoghideroad.h \
     dialoglanefromrtk.h \
     dialoglaneoffset.h \
+    dialogobject_lanevalidity.h \
     dialogparkingspaceedit.h \
     dialogparkingspacefromrtk.h \
     dialogroadborrow.h \
@@ -152,6 +154,7 @@ FORMS += \
         dialoghideroad.ui \
         dialoglanefromrtk.ui \
         dialoglaneoffset.ui \
+        dialogobject_lanevalidity.ui \
         dialogparkingspaceedit.ui \
         dialogparkingspacefromrtk.ui \
         dialogroadborrow.ui \