diff --git a/CMakeLists.txt b/CMakeLists.txt index 569fe28..161de1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ include(FetchContent) FetchContent_Declare( wxWidgets GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git - GIT_TAG v3.2.5 + #GIT_TAG v3.2.5 GIT_SHALLOW ON ) FetchContent_MakeAvailable(wxWidgets) @@ -21,12 +21,12 @@ FetchContent_MakeAvailable(wxWidgets) set(Sources "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}") set(SRCS ${Sources}/Application.h - ${Sources}/Application.cpp + ${Sources}/Application.cpp ${Sources}/CANParser.h ${Sources}/CANParser.cpp ${Sources}/CircularFrameBuffer.h ${Sources}/CircularFrameBuffer.cpp - ${Sources}/Common.h + ${Sources}/Common.h ${Sources}/FormMain.h ${Sources}/FormMain.cpp ${Sources}/FramesContainer.h diff --git a/README.md b/README.md index 88a7bf1..3ca3de4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -# wxCAN Sniffer - CAN bus sniffer (PC side) +# wxCAN-Sniffer - CAN bus sniffer (PC side) -#### Возможности +[TOC] + +## Возможности - Отображение передаваемых в CAN-шине пакетов - Сохранение всех данных в журнал - Отображение выбранных данных в двоичном и десятичном виде @@ -10,28 +12,29 @@ ## Статья [О проекте](https://habr.com/ru/post/479672) -## Сборка приложения используя CMake -1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/) (используется компилятор и SDK) -2. Распаковать исходники -3. Запустить **Developer Command Prompt for VS 2022** и перейти в директорию с исходниками -4. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build`: +## Сборка приложения в Windows +### Используя Windows CMake +1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/) (используется компилятор и SDK) и [CMake](https://cmake.org/download/) +2. Запустить **Developer Command Prompt for VS 2022** и перейти в директорию с исходниками +3. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build`: ```sh cmake -S . -B build ``` -5. Запустить сборку (результат будет в `./build/Release`): +4. Запустить сборку (результат будет в `./build/Release`): ```sh cmake --build build -j --config Release ``` -6. Если необходима отладочная сборка (результат будет в `./build/Debug`): +5. Если необходима отладочная сборка (результат будет в `./build/Debug`): ```sh cmake --build build -j ``` -PS: Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно убрать строку **GIT_TAG v3.2.5**. В таком случае, будет использоваться самая свежая версия wxWidgets. -## Сборка приложения используя Visual Studio 2022 +Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно указать версию wxWidgets раскомментировав строку **GIT_TAG v3.2.5** и задав в ней номер версии. + +### Используя Visual Studio 2022 Community Сначала необходимо собрать **wxWidgets** в static-режиме и потом само приложение. -#### Сборка wxWidgets +#### 1. Сборка Windows wxWidgets 1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/) 2. Скачать и установить [wxWidgets](https://www.wxwidgets.org/downloads/) если это установщик, либо распаковать, если это архив. Например в директорию `C:/wxWidget` 3. Создать переменную окружения `WXWIN` и присвоить ей значение директории `C:/wxWidget` @@ -41,11 +44,92 @@ PS: Если по каким-либо причинам подготовка за - для конфигурации **Debug** выбрать **/MTd** - для конфигурации **Release** выбрать **/MT** 7. Нажать **Ok** и скомпилировать (**Ctrl+B**) библиотеки wxWidgets по очереди для Debug и Release конфигураций. -#### Сборка приложения в Visual Studio -1. Распаковать исходники -2. Открыть файл решения `wxCAN-Sniffer.sln` -3. Выбрать необходимую конфигурацию **Debug** или **Release** -4. Произвести сборку **F7** (результат будет в `./x64/Debug` и `./x64/Release` соответственно) - + +#### 2. Сборка приложения в Visual Studio +1. Открыть файл решения `wxCAN-Sniffer.sln` +2. Выбрать необходимую конфигурацию **Release** или **Debug** +3. Произвести сборку нажав **F7** (результат будет в `./x64/Release` или `./x64/Debug` соответственно) + +## Сборка приложения в Linux +### Используя Linux CMake +1. Понадобится установить следующие пакеты: +``` +sudo apt-get install build-essential +sudo apt-get install libgtk-3-dev +sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev +sudo apt-get install cmake +``` +2. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build-release`: +```sh +cmake -S . -B build-release -DCMAKE_BUILD_TYPE=Release +``` +или отладчной сборки в `./build-debug`: +```sh +cmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug +``` +3. Запустить сборку Release (результат будет в `./build-release`): +```sh +cmake --build build-release -j +``` +или Debug (результат будет в `./build-debug`): +```sh +cmake --build build-debug -j +``` + +По каким-то причинам, сборка через CMake в Linux требует огромных ресурсов памяти. На компьютере с 8 ГБ оперативной памяти сборка не завершалась. Помогло увеличение размера swap-файла до 64 ГБ: +``` +sudo swapoff /swapfile +sudo fallocate -l 64G /swapfile +sudo mkswap /swapfile +sudo swapon /swapfile +``` + +Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно указать версию wxWidgets раскомментировав строку **GIT_TAG v3.2.5** и задав в ней номер версии. + +### Используя Visual Studio Code +#### 1. Сборка Linux wxWidgets +1. Понадобится [Visual Studio Code](https://code.visualstudio.com/download/) и установить следующие пакеты: +``` +sudo apt-get install build-essential +sudo apt-get install libgtk-3-dev +sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev +``` +2. Скачать и установить wxWidgets: +``` +git clone https://github.com/wxWidgets/wxWidgets.git +``` +3. Обновить необходимые зависимости: +``` +cd wxWidgets +git submodule update --init src/stc/scintilla +git submodule update --init src/stc/lexilla +git submodule update --init 3rdparty/catch +git submodule update --init 3rdparty/nanosvg +``` +4. Подготовить директорию `./gtk-build` для сборки и запустить настройку: +``` +mkdir gtk-build +cd gtk-build +../configure --with-gtk=3 --with-opengl --disable-shared +``` +5. Запустить сборку (использовать 8 потоков): +``` +make -j8 +``` +6. Установить собранный пакет в систему: +``` +sudo make install +sudo ldconfig +``` +7. Скопировать файл **setup.h** (обратите внимание на номер версии в директориях, если версия отличается от 3.3, то их надо поправить): +``` +sudo cp ./lib/wx/include/gtk3-unicode-static-3.3/wx/setup.h /usr/local/include/wx-3.3/wx +``` + +#### 2. Сборка приложения в Visual Studio Code +1. Открыть директорию проекта `./wxCAN-Sniffer/wxCAN-Sniffer` в редакторе Visual Studio Code +2. Открыть файл **Application.cpp** +3. В меню **Terminal** выбрать пункт **Run Task**, выбрать необходимую конфигурацию **C/C++: GCC build release** или **C/C++: GCC build debug** (результат будет в этой же директории) + ## License MIT \ No newline at end of file diff --git a/wxCAN-Sniffer.sln b/wxCAN-Sniffer.sln index 1232951..6bc08f8 100644 --- a/wxCAN-Sniffer.sln +++ b/wxCAN-Sniffer.sln @@ -8,8 +8,12 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D6E6DD6C-F675-4E06-ACA2-D5C0B6EAF174}" ProjectSection(SolutionItems) = preProject CMakeLists.txt = CMakeLists.txt + wxCAN-Sniffer\.vscode\c_cpp_properties.json = wxCAN-Sniffer\.vscode\c_cpp_properties.json + wxCAN-Sniffer\.vscode\launch.json = wxCAN-Sniffer\.vscode\launch.json LICENSE = LICENSE README.md = README.md + wxCAN-Sniffer\.vscode\settings.json = wxCAN-Sniffer\.vscode\settings.json + wxCAN-Sniffer\.vscode\tasks.json = wxCAN-Sniffer\.vscode\tasks.json EndProjectSection EndProject Global @@ -26,4 +30,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {13BEFDE9-4814-4D22-B5B7-6E9DD93F6D5A} + EndGlobalSection EndGlobal diff --git a/wxCAN-Sniffer/.vscode/c_cpp_properties.json b/wxCAN-Sniffer/.vscode/c_cpp_properties.json index 9e6a681..991880c 100644 --- a/wxCAN-Sniffer/.vscode/c_cpp_properties.json +++ b/wxCAN-Sniffer/.vscode/c_cpp_properties.json @@ -1,19 +1,20 @@ { - "configurations": [ - { - "name": "Linux", - "includePath": [ - "${workspaceFolder}/**", - "/usr/include", - "/usr/include/x86_64-linux-gnu", - "/usr/local/include/wx-3.2" - ], - "defines": [], - "compilerPath": "/usr/bin/gcc", - "cStandard": "c17", - "cppStandard": "c++20", - "intelliSenseMode": "linux-gcc-x64" - } - ], - "version": 4 + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/usr/include", + "/usr/include/x86_64-linux-gnu", + "/usr/local/include/wx-3.3", + "/usr/local/include/wx-3.2" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c17", + "cppStandard": "c++20", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 } \ No newline at end of file diff --git a/wxCAN-Sniffer/.vscode/launch.json b/wxCAN-Sniffer/.vscode/launch.json index 61e48d8..f3337ef 100644 --- a/wxCAN-Sniffer/.vscode/launch.json +++ b/wxCAN-Sniffer/.vscode/launch.json @@ -1,57 +1,57 @@ { - "configurations": [ + "configurations": [ + { + "name": "C/C++: GCC build and debug active file", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}/wxCAN-Sniffer", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ { - "name": "C/C++: GCC build and debug active file", - "type": "cppdbg", - "request": "launch", - "program": "${fileDirname}/wxCAN-Sniffer", - "args": [], - "stopAtEntry": false, - "cwd": "${fileDirname}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ], - "preLaunchTask": "C/C++: GCC debug build", - "miDebuggerPath": "/usr/bin/gdb" + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true }, { - "name": "C/C++: GCC build release", - "type": "cppdbg", - "request": "launch", - "program": "${fileDirname}/wxCAN-Sniffer", - "args": [], - "stopAtEntry": false, - "cwd": "${fileDirname}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ], - "preLaunchTask": "C/C++: GCC release build", - "miDebuggerPath": "/usr/bin/gdb" + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true } - ], - "version": "2.0.0" + ], + "preLaunchTask": "C/C++: GCC build debug", + "miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "C/C++: GCC build release", + "type": "cppdbg", + "request": "launch", + "program": "${fileDirname}/wxCAN-Sniffer", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ], + "preLaunchTask": "C/C++: GCC build release", + "miDebuggerPath": "/usr/bin/gdb" + } + ], + "version": "2.0.0" } \ No newline at end of file diff --git a/wxCAN-Sniffer/.vscode/settings.json b/wxCAN-Sniffer/.vscode/settings.json index eb284a0..3fc3429 100644 --- a/wxCAN-Sniffer/.vscode/settings.json +++ b/wxCAN-Sniffer/.vscode/settings.json @@ -1,53 +1,53 @@ { - "files.associations": { - "string": "cpp", - "array": "cpp", - "atomic": "cpp", - "bit": "cpp", - "*.tcc": "cpp", - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "compare": "cpp", - "concepts": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "deque": "cpp", - "unordered_map": "cpp", - "vector": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "initializer_list": "cpp", - "iosfwd": "cpp", - "limits": "cpp", - "new": "cpp", - "numbers": "cpp", - "ostream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "typeinfo": "cpp", - "iostream": "cpp", - "istream": "cpp", - "hash_map": "cpp", - "cstring": "cpp", - "list": "cpp", - "fstream": "cpp" - } + "files.associations": { + "string": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp", + "iostream": "cpp", + "istream": "cpp", + "hash_map": "cpp", + "cstring": "cpp", + "list": "cpp", + "fstream": "cpp" + } } \ No newline at end of file diff --git a/wxCAN-Sniffer/.vscode/tasks.json b/wxCAN-Sniffer/.vscode/tasks.json index 96a0d13..9862b9f 100644 --- a/wxCAN-Sniffer/.vscode/tasks.json +++ b/wxCAN-Sniffer/.vscode/tasks.json @@ -1,54 +1,57 @@ { - "tasks": [ - { - "type": "cppbuild", - "label": "C/C++: GCC debug build", - "command": "/usr/bin/g++", - "args": [ - "-fdiagnostics-color=always", - "-g", - "${workspaceFolder}/*.cpp", - "-o", - "${fileDirname}/wxCAN-Sniffer", - "`/usr/local/bin/wx-config", - "--cxxflags", - "--libs`" - ], - "options": { - "cwd": "${fileDirname}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": "build", - "detail": "Task generated by Debugger." - }, - { - "type": "cppbuild", - "label": "C/C++: GCC release build", - "command": "/usr/bin/g++", - "args": [ - "-fdiagnostics-color=always", - "-O3", - "-s", - "-DNDEBUG", - "-g", - "${workspaceFolder}/*.cpp", - "-o", - "${fileDirname}/wxCAN-Sniffer", - "`/usr/local/bin/wx-config", - "--cxxflags", - "--libs`" - ], - "options": { - "cwd": "${fileDirname}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": "build", - "detail": "Task generated by Debugger." - } - ], - "version": "2.0.0" + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: GCC build debug", + "command": "/usr/bin/g++", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${workspaceFolder}/*.cpp", + "-o", + "${fileDirname}/wxCAN-Sniffer", + "`/usr/local/bin/wx-config", + "--cxxflags", + "--libs`" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Build debug version" + }, + { + "type": "cppbuild", + "label": "C/C++: GCC build release", + "command": "/usr/bin/g++", + "args": [ + "-fdiagnostics-color=always", + "-O3", + "-s", + "-DNDEBUG", + "-g", + "${workspaceFolder}/*.cpp", + "-o", + "${fileDirname}/wxCAN-Sniffer", + "`/usr/local/bin/wx-config", + "--cxxflags", + "--libs`" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": "build", + "detail": "Build release version" + } + ], + "version": "2.0.0" } \ No newline at end of file diff --git a/wxCAN-Sniffer/Common.h b/wxCAN-Sniffer/Common.h index 4c10629..ffc1292 100644 --- a/wxCAN-Sniffer/Common.h +++ b/wxCAN-Sniffer/Common.h @@ -10,8 +10,12 @@ #include #define MEMCOPY(dest, source, size) memcpy(dest, source, size); #endif +#ifdef __APPLE__ + #include + #define MEMCOPY(dest, source, size) memcpy(dest, source, size); +#endif -#define CAPTION wxT("CAN Sniffer 2.2.0 beta 2") +#define CAPTION wxT("CAN Sniffer 2.2.0") #define SIGNATURE_DWORD 0x55AA55AA // сигнатура пакета (big-endian) #define UDP_PORT 0xAA55 // UDP порт