Selaa lähdekoodia

change g29zlgchassistest, add canfd code.

yuchuli 5 päivää sitten
vanhempi
commit
8bd3748219

+ 1 - 0
src/common/candbc/candbc.pro

@@ -28,3 +28,4 @@ unix {
 
 CONFIG += plugin
 
+

+ 97 - 0
src/tool/g29zlgchassistest/cancard.cpp

@@ -6,6 +6,14 @@
 cancard::cancard()
 {
     LoadAPI();
+    mpthreadcan = new std::thread(&cancard::threadcan,this);
+}
+
+cancard::~cancard()
+{
+    mbrun = false;
+    mpthreadcan->join();
+
 }
 
 void cancard::LoadAPI()
@@ -29,4 +37,93 @@ void cancard::LoadAPI()
     {
         std::cout<<" Load ZCAN_OpenDevice API Successfully. "<<std::endl;
     }
+
+    ZCAN_CloseDevice =(ZCAN_CloseDeviceFunc)xlib.resolve("ZCAN_CloseDevice");
+    ZCAN_GetDeviceInf =(ZCAN_GetDeviceInfFunc)xlib.resolve("ZCAN_GetDeviceInf");
+    ZCAN_GetDeviceInfoEx =(ZCAN_GetDeviceInfoExFunc)xlib.resolve("ZCAN_GetDeviceInfoEx");
+    ZCAN_IsDeviceOnLine =(ZCAN_IsDeviceOnLineFunc)xlib.resolve("ZCAN_IsDeviceOnLine");
+    ZCAN_InitCAN =(ZCAN_InitCANFunc)xlib.resolve("ZCAN_InitCAN");
+    ZCAN_StartCAN =(ZCAN_StartCANFunc)xlib.resolve("ZCAN_StartCAN");
+    ZCAN_ResetCAN =(ZCAN_ResetCANFunc)xlib.resolve("ZCAN_ResetCAN");
+    ZCAN_ClearBuffer =(ZCAN_ClearBufferFunc)xlib.resolve("ZCAN_ClearBuffer");
+    ZCAN_ReadChannelErrInfo =(ZCAN_ReadChannelErrInfoFunc)xlib.resolve("ZCAN_ReadChannelErrInfo");
+    ZCAN_ReadChannelStatus =(ZCAN_ReadChannelStatusFunc)xlib.resolve("ZCAN_ReadChannelStatus");
+    ZCAN_GetReceiveNum =(ZCAN_GetReceiveNumFunc)xlib.resolve("ZCAN_GetReceiveNum");
+    ZCAN_Transmit =(ZCAN_TransmitFunc)xlib.resolve("ZCAN_Transmit");
+    ZCAN_Receive =(ZCAN_ReceiveFunc)xlib.resolve("ZCAN_Receive");
+    ZCAN_TransmitFD =(ZCAN_TransmitFDFunc)xlib.resolve("ZCAN_TransmitFD");
+    ZCAN_ReceiveFD = (ZCAN_ReceiveFDFunc)xlib.resolve("ZCAN_ReceiveFD");
+    ZCAN_TransmitData =(ZCAN_TransmitDataFunc)xlib.resolve("ZCAN_TransmitData");
+    ZCAN_ReceiveData =(ZCAN_ReceiveDataFunc)xlib.resolve("ZCAN_ReceiveData");
+    ZCAN_SetValue =(ZCAN_SetValueFunc)xlib.resolve("ZCAN_SetValue");
+    ZCAN_GetValue =(ZCAN_GetValueFunc)xlib.resolve("ZCAN_GetValue");
+
+
+}
+
+bool cancard::SetCanfdBaudrate()
+{
+
+    char path[50] = { 0 };
+    sprintf_s(path, "%d/canfd_abit_baud_rate", channel_index_);
+    char value[10] = { 0 };
+    sprintf_s(value, "%d",500000);
+    int ret_a = ZCAN_SetValue(device_handle_, path, value);
+
+    sprintf_s(path, "%d/canfd_dbit_baud_rate", channel_index_);
+    sprintf_s(value, "%d", 2000000);
+    int ret_d = ZCAN_SetValue(device_handle_, path, value);
+    return 1 == (ret_a&&ret_d);
+}
+
+bool cancard::SetResistanceEnable()
+{
+
+    char path[50] = {0};
+    sprintf_s(path, "%d/initenal_resistance", channel_index_);
+    char value[10] = {0};
+    sprintf_s(value, "%d", 1);
+    return 1 == ZCAN_SetValue(device_handle_, path, value);
+}
+
+void cancard::threadcan()
+{
+    std::cout<<"enter threadcan. "<<std::endl;
+
+    device_handle_ = ZCAN_OpenDevice(ZCAN_PCIE_CANFD_200U, device_index_, 0);
+
+    if (INVALID_DEVICE_HANDLE == device_handle_)
+    {
+        std::cout<<" Open CAN Fail"<<std::endl;
+        return;
+    }
+
+    ZCAN_CHANNEL_INIT_CONFIG config;
+    memset(&config, 0, sizeof(config));
+
+    char path[50] = {0};
+    char value[100] = {0};
+    sprintf_s(path, "%d/canfd_standard", channel_index_);
+    sprintf_s(value, "%d", 0);
+    ZCAN_SetValue(device_handle_, path, value);
+
+    SetCanfdBaudrate();
+
+    config.can_type = TYPE_CANFD;
+    config.canfd.mode = 0;
+    config.canfd.filter = 1;
+    config.canfd.acc_code = 0x00000000;
+    config.canfd.acc_mask = 0xFFFFFFFF;
+
+    channel_handle_ = ZCAN_InitCAN(device_handle_, channel_index_, &config);
+    if (INVALID_CHANNEL_HANDLE == channel_handle_)
+    {
+        std::cout<<" Init CAN Fail."<<std::endl;
+        return;
+    }
+
+    while(mbrun)
+    {
+        std::this_thread::sleep_for(std::chrono::milliseconds(10));
+    }
 }

+ 41 - 0
src/tool/g29zlgchassistest/cancard.h

@@ -7,16 +7,57 @@
 
 #include "zlgcanlib.h"
 
+#include <thread>
+
 class cancard
 {
 public:
     cancard();
+    ~cancard();
+
+private:
+    bool mbrun = true;
+    bool mbCANOpen = false;
+    std::thread * mpthreadcan;
+
+    DEVICE_HANDLE device_handle_;
+    CHANNEL_HANDLE channel_handle_;
+    IProperty* property_;
+
+    unsigned int device_index_ = 0;
+    int channel_index_ = 0;
+
+
 
 private:
     ZCAN_OpenDeviceFunc ZCAN_OpenDevice;
+    ZCAN_CloseDeviceFunc ZCAN_CloseDevice;
+    ZCAN_GetDeviceInfFunc ZCAN_GetDeviceInf;
+    ZCAN_GetDeviceInfoExFunc ZCAN_GetDeviceInfoEx;
+    ZCAN_IsDeviceOnLineFunc ZCAN_IsDeviceOnLine;
+    ZCAN_InitCANFunc ZCAN_InitCAN;
+    ZCAN_StartCANFunc ZCAN_StartCAN;
+    ZCAN_ResetCANFunc ZCAN_ResetCAN;
+    ZCAN_ClearBufferFunc ZCAN_ClearBuffer;
+    ZCAN_ReadChannelErrInfoFunc ZCAN_ReadChannelErrInfo;
+    ZCAN_ReadChannelStatusFunc ZCAN_ReadChannelStatus;
+    ZCAN_GetReceiveNumFunc ZCAN_GetReceiveNum;
+    ZCAN_TransmitFunc ZCAN_Transmit;
+    ZCAN_ReceiveFunc ZCAN_Receive;
+    ZCAN_TransmitFDFunc ZCAN_TransmitFD;
+    ZCAN_ReceiveFDFunc ZCAN_ReceiveFD;
+    ZCAN_TransmitDataFunc ZCAN_TransmitData;
+    ZCAN_ReceiveDataFunc ZCAN_ReceiveData;
+    ZCAN_SetValueFunc ZCAN_SetValue;
+    ZCAN_GetValueFunc ZCAN_GetValue;
 
 private:
     void LoadAPI();
+
+    void threadcan();
+
+    bool SetCanfdBaudrate();
+    bool SetResistanceEnable();
 };
 
 #endif // CANCARD_H

+ 5 - 0
src/tool/g29zlgchassistest/mainwindow.cpp

@@ -126,3 +126,8 @@ void MainWindow::resizeEvent(QResizeEvent *event)
 }
 
 
+
+void MainWindow::on_pushButton_OpenCAN_clicked()
+{
+
+}

+ 3 - 0
src/tool/g29zlgchassistest/mainwindow.h

@@ -46,6 +46,9 @@ private:
 public:
      void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
 
+private slots:
+     void on_pushButton_OpenCAN_clicked();
+
 private:
     void CreateView();
 

+ 15 - 2
src/tool/g29zlgchassistest/mainwindow.ui

@@ -17,8 +17,8 @@
    <widget class="QCheckBox" name="checkBox">
     <property name="geometry">
      <rect>
-      <x>80</x>
-      <y>30</y>
+      <x>280</x>
+      <y>52</y>
       <width>71</width>
       <height>41</height>
      </rect>
@@ -40,6 +40,19 @@
      <string>仪表</string>
     </property>
    </widget>
+   <widget class="QPushButton" name="pushButton_OpenCAN">
+    <property name="geometry">
+     <rect>
+      <x>70</x>
+      <y>50</y>
+      <width>161</width>
+      <height>51</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>打开CAN卡</string>
+    </property>
+   </widget>
   </widget>
   <widget class="QMenuBar" name="menubar">
    <property name="geometry">

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 883 - 436
src/tool/g29zlgchassistest/zlgcanlib.h


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä