Skip to content

Commit

Permalink
Добавлена аозможность выбора типа данных для отображения и построения…
Browse files Browse the repository at this point in the history
… графика. Оптимизации кода.
  • Loading branch information
KruFFT committed Jul 24, 2024
1 parent cd25182 commit 6eb6d60
Show file tree
Hide file tree
Showing 11 changed files with 655 additions and 351 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ message(STATUS "wxWidgets sources: " ${wxWidgets_SOURCE_DIR})
# Building
if(APPLE)
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${SRCS})
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${Sources}/Info.plist)
else()
add_executable(${PROJECT_NAME} WIN32 ${SRCS} ${Sources}/${PROJECT_NAME}.manifest)
endif()
Expand Down
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,16 @@ 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 src/stc/scintilla
git submodule update --init src/expat
git submodule update --init src/jpeg
git submodule update --init src/png
git submodule update --init src/tiff
git submodule update --init src/zlib
git submodule update --init 3rdparty/catch
git submodule update --init 3rdparty/nanosvg
git submodule update --init 3rdparty/pcre
```
4. Подготовить директорию `./gtk-build` для сборки и запустить настройку:
```
Expand Down
10 changes: 10 additions & 0 deletions wxCAN-Sniffer/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ bool Application::OnInit()
//locale.AddCatalog(GetAppDir() + wxT("\\."));
}

// определение системной темы, если тёмная
/*if (wxSystemSettings::GetAppearance().AreAppsDark())
{
}
else
{
}*/

auto form = new FormMain();
form->Show(true);
SetTopWindow(form);
Expand Down
10 changes: 5 additions & 5 deletions wxCAN-Sniffer/CircularFrameBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
CircularFrameBuffer::CircularFrameBuffer(size_t windowSize)
{
// размер буфера должен быть минимум в два раза больше размера окна
bufferSize = windowSize * 2;
buffer = new uint32_t[bufferSize + 1] { 0 };
bufferSize = windowSize * 4;
buffer = new float[bufferSize + 1] { 0 };
frameSize = windowSize;
frameBegin = 0;
frameEnd = frameSize;
frameSizeBytesCount = bufferSize * sizeof(uint32_t);
frameSizeBytesCount = bufferSize * sizeof(float);
}

// Деструктор
Expand All @@ -31,7 +31,7 @@ void CircularFrameBuffer::Clear()
}

// Добавить новое значение со сдвигом при необходимости
void CircularFrameBuffer::Add(uint32_t value)
void CircularFrameBuffer::Add(float value)
{
// если достигнут предел массива - надо сдвинуть данные
if (frameEnd >= bufferSize)
Expand All @@ -47,7 +47,7 @@ void CircularFrameBuffer::Add(uint32_t value)
}

// Вернуть указатель на начало кадра
uint32_t* CircularFrameBuffer::Frame()
float* CircularFrameBuffer::Frame()
{
return &buffer[frameBegin];
}
Expand Down
6 changes: 3 additions & 3 deletions wxCAN-Sniffer/CircularFrameBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ class CircularFrameBuffer
~CircularFrameBuffer();

void Clear();
void Add(uint32_t value);
uint32_t* Frame();
void Add(float value);
float* Frame();
size_t FrameSize();

private:
uint32_t* buffer = nullptr; // массив данных
float* buffer = nullptr; // массив данных
size_t bufferSize; // размер массива данных
size_t frameSize; // размер окна данных
size_t frameBegin; // начало окна данных
Expand Down
6 changes: 4 additions & 2 deletions wxCAN-Sniffer/Common.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#define MEMCOPY(dest, source, size) memcpy(dest, source, size);
#endif

#define CAPTION wxT("CAN Sniffer 2.2.1 beta 1")
#define CAPTION wxT("CAN Sniffer 2.2.1 beta 2")

#define SIGNATURE_DWORD 0x55AA55AA // сигнатура пакета (big-endian)
#define UDP_PORT 0xAA55 // UDP порт
Expand Down Expand Up @@ -85,9 +85,11 @@ struct LogFile
#define FORMAT_HEX3 wxT("%03X")
#define FORMAT_HEX8 wxT("%08X")
#define FORMAT_INT wxT("%i")
#define FORMAT_UINT wxT("%u")
#define FORMAT_INT0 wxT("%0i")
#define FORMAT_INT3 wxT("%03i")
#define FORMAT_FLOAT wxT("%1.6f")
#define FORMAT_FLOAT1_0 wxT("%1.0f")
#define FORMAT_FLOAT1_3 wxT("%1.3f")

#define ERROR_CAPTION wxT("Ошибка")
#define ERROR_SERIAL wxT("Невозможно работать с этим последовательным портом")
Expand Down
852 changes: 556 additions & 296 deletions wxCAN-Sniffer/FormMain.cpp

Large diffs are not rendered by default.

83 changes: 45 additions & 38 deletions wxCAN-Sniffer/FormMain.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,23 @@
#include "Common.h"
#include <wx/splitter.h>
#include <wx/grid.h>
#include <wx/collpane.h>
#include <wx/dcbuffer.h>
#include <wx/socket.h>
#include "ThreadedSerialPort.h"
#include "CircularFrameBuffer.h"
#include "FramesContainer.h"

#define DRAW_COLOR 0x0000FF // red (BGR)
#define TIMER_INTERVAL 40 // интервал срабатывания таймера обновления данных на экране (около 25 кадров/с)
#define DRAW_COLOR 0xFF0000FFlu // (ABGR) красный
#define TIMER_INTERVAL 40 // интервал срабатывания таймера обновления данных на экране (около 25 кадров/с)

// Идентификаторы необходимых объектов
enum IDs
{
ID_MAIN_FORM = wxID_HIGHEST + 1,
ID_MAIN_TIMER,
ID_BUTON_CONNECT_DISCONNECT,
ID_CHECKBOX_LOG_ENABLE,
ID_BUTTON_ADD,
ID_BUTTON_REMOVE,
ID_BUTTON_REMOVE_ALL,
ID_BUTTON_SEND,
ID_BUTTON_CLEAR_LOG,
ID_GRID_CAN_VIEW,
ID_COMBO_EXT,
ID_COMBO_SEP,
ID_CHECKBOX_SINGLE,
ID_CHECKBOX_DEC,
ID_CHECKBOX_ENDIAN,
ID_CHECKBOX_ASCII,
ID_DRAW_PANEL,
ID_TEXT_DEC_WORD_MUL,
ID_TEXT_CAN_ANSWER_ID,
ID_UDP_SOCKET
};
#define TEXT_UINT8 wxT("UInt8")
#define TEXT_UINT16 wxT("UInt16")
#define TEXT_UINT32 wxT("UInt32")
#define TEXT_INT8 wxT("Int8")
#define TEXT_INT16 wxT("Int16")
#define TEXT_INT32 wxT("Int32")
#define TEXT_FLOAT wxT("Float")

//  Класс окна
class FormMain : public wxFrame
Expand All @@ -51,14 +35,15 @@ class FormMain : public wxFrame
void ButtonRemoveAll_OnClick(wxCommandEvent& event);
void ButtonSend_OnClick(wxCommandEvent& event);
void ButtonClearCANLog_OnClick(wxCommandEvent& event);
void ComboExt_OnChoice(wxCommandEvent& event);
void ComboSep_OnChoice(wxCommandEvent& event);
void ChoiceExt_OnChoice(wxCommandEvent& event);
void ChoiceSep_OnChoice(wxCommandEvent& event);
void CheckLogEnable_OnClick(wxCommandEvent& event);
void CheckDec_OnClick(wxCommandEvent& event);
void CheckSingle_OnClick(wxCommandEvent& event);
void CheckASCII_OnClick(wxCommandEvent& event);
void MainTimer_OnTimer(wxTimerEvent& event);
void GridCANView_OnSelectCell(wxGridEvent& event);
void ChoiceDataType_OnChoice(wxCommandEvent& event);
void CheckEndian_OnClick(wxCommandEvent& event);
void TextDecWordMul_OnEnter(wxCommandEvent& event);
void TextCANAnswerID_OnEnter(wxCommandEvent& event);
Expand Down Expand Up @@ -94,25 +79,46 @@ class FormMain : public wxFrame
wxTextCtrl* textFPS;
wxTextCtrl* textBPS;
wxButton* buttonConnectDisconnect;
wxCollapsiblePane* paneLog;
wxButton* buttonAdd;
wxButton* buttonRemove;
wxButton* buttonRemoveAll;
wxListBox* listLog;
wxChoice* comboExt;
wxChoice* comboSep;
wxChoice* choiceExt;
wxChoice* choiceSep;
wxCheckBox* checkLogEnable;
wxCheckBox* checkDec;
wxCheckBox* checkSingle;
wxCheckBox* checkASCII;
wxTextCtrl* textBinByte;
wxTextCtrl* textDecByte;
wxChoice* choiceDataType;
wxTextCtrl* textBin;
wxTextCtrl* textDec;
wxCheckBox* checkEndian;
wxTextCtrl* textDecWord;
wxTextCtrl* textDecWordMul;
wxTextCtrl* textDecWordResult;
wxTextCtrl* textDecimalResult;
wxPanel* drawPanel;
wxTimer* timerMain;

// Идентификаторы необходимых объектов
enum IDs
{
ID_MAIN_FORM = wxID_HIGHEST + 1,
ID_MAIN_TIMER,
ID_UDP_SOCKET
};

// Типы данных для преобразования и графика
enum DataTypes
{
UInt8 = 0,
UInt16,
UInt32,
Int8,
Int16,
Int32,
Float
};

ThreadedSerialPort* serialPort = nullptr; // последовательный порт в отдельном потоке
FramesContainer frames; // список отображаемых на экране пакетов

Expand All @@ -130,15 +136,14 @@ class FormMain : public wxFrame

int32_t rowToView = -1; // номер строки выбранной ячейки для отображения данных о ней
int32_t colToView = -1; // номер столбца выбранной ячейки для отображения данных о ней
double mul = 0.125; // множитель для отображаемых чисел
float mul = 1.0; // множитель для отображаемых чисел
DataTypes dataType = DataTypes::UInt8; // тип данных для отображения

wxPen blackPen = *wxBLACK; // кисть рамки для отрисовки графика
wxPen graphPen = wxPen(wxColour(DRAW_COLOR, 0, 0), 3); // кисть для отрисовки графика заданной ширины
wxRect drawRectangle; // область отрисовки графика
wxPen graphPen = wxPen(wxColour(DRAW_COLOR), 3); // кисть для отрисовки графика заданной ширины
CircularFrameBuffer* drawData = nullptr; // круговой массив данных для отрисовки
size_t drawFrameSize; // размер кадра отрисовки (равен ширине области панель)
uint32_t drawDataBegin = 0; // начало данных в массиве
uint32_t drawMaxValue = 0; // наибольшее рисуемое значение для масштабирования графика

uint32_t answerID = 0x7E8; // ID пакета, от которого будут отображаться данные
bool bigEndian = true; // порядок следования байтов в слове big-endian
Expand All @@ -153,6 +158,8 @@ class FormMain : public wxFrame
void FlushLogs();
void LogWriteLine(wxFFile* file, CANFrameIn& frame);
wxString ToBinary(uint8_t value);
wxString ToBinary(uint16_t value);
wxString ToBinary(uint32_t value);
void AddToDraw();
void ShowNumbers();
void UDPSocket_SendFrame(CANFrameOut& frame);
Expand Down
10 changes: 5 additions & 5 deletions wxCAN-Sniffer/FramesContainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

#include "Common.h"

#define FRAMES_DATA_RESERV 1000 // количество элементов для резерва в векторе
#define NEW_COLOR 0xFF00FF00 // (ABGR) зелёный - для выделения новых данных
#define CHANGE_COLOR 0xFF0000FF // (ABGR) красный - для выделения изменяемых данных
#define DEFAULT_COLOR 0xFFFFFFFF // (ABGR) белый - цвет ячейки по умолчанию
#define SELECTED_COLOR 0xFFFFB080 // (ABGR) голубой - цвет выделенных ячеек
#define FRAMES_DATA_RESERV 1000 // количество элементов для резерва в векторе
#define NEW_COLOR 0xFF00FF00lu // (ABGR) зелёный - для выделения новых данных
#define CHANGE_COLOR 0xFF0000FFlu // (ABGR) красный - для выделения изменяемых данных
#define DEFAULT_COLOR 0xFFFFFFFFlu // (ABGR) белый - цвет ячейки по умолчанию
#define SELECTED_COLOR 0xFFE3A04Clu // (ABGR) голубой - цвет выделенных ячеек

class FramesContainer
{
Expand Down
16 changes: 16 additions & 0 deletions wxCAN-Sniffer/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>ru.krufft.can_sniffer</string>
<key>CFBundleDevelopmentRegion</key>
<string>ru-RU</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
3 changes: 3 additions & 0 deletions wxCAN-Sniffer/wxCAN-Sniffer.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,9 @@
<ItemGroup>
<Manifest Include="wxCAN-Sniffer.manifest" />
</ItemGroup>
<ItemGroup>
<None Include="Info.plist" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Expand Down

0 comments on commit 6eb6d60

Please sign in to comment.