Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop to Master #2

Merged
merged 18 commits into from
Aug 18, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
e819403
Небольшие изменения
Jun 24, 2022
b689b98
Добавил базовую поддержку приёма данных через UDP
Jun 24, 2022
5ec6e1b
Приём данных через UDP полностью работает
Jun 24, 2022
82ba1ac
Переделаны очереди приёма и обработки данных из последовательного порта
Jun 26, 2022
dd4ed03
Исправил кодировку
Jun 26, 2022
ccfb808
Отказался от очередей, переписал парсе CAN-пакетов
Jun 27, 2022
adf1a12
Закончил с парсером
Jun 28, 2022
912cacd
Переделал кадр отрисовки графика
Jun 29, 2022
c55429c
Данные UDP обрабатываются пакетно
Jun 29, 2022
4c0929f
Реализованы приём и отправка пакетов через Wi-Fi
Jun 30, 2022
a1a431c
Переделал фоновый поток на события
Jul 3, 2022
2b2c0ce
Переделал фоновый поток на события
Jul 3, 2022
5dfd461
Исправил очистку буфера приёма данных при "аварийном" отключении COM-…
KruFFT Jul 9, 2022
fdcd48c
Полностью переделан процесс отображения данных в таблицу
KruFFT Jul 17, 2022
b6ed1c3
Исправил кодировку символов файла
KruFFT Jul 17, 2022
a453d2d
Исправлено вычисление размера отправляемого CAN-пакета
KruFFT Jul 17, 2022
ded972d
Переход на wxWidgets 3.2.0
KruFFT Aug 18, 2022
98a372e
Update README.md
KruFFT Aug 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Приём данных через UDP полностью работает
  • Loading branch information
KruFFT authored and KruFFT committed Jun 24, 2022
commit 5ec6e1b5dac74f2840650703d5d2bd7ad9e8bd56
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -337,4 +337,5 @@ ASALocalRun/
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
healthchecksdb
/wxCAN Sniffer/CAN.csv
23 changes: 10 additions & 13 deletions wxCAN Sniffer/FormMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -411,17 +411,16 @@ FormMain::FormMain() : wxFrame(NULL, ID_MAIN_FORM, CAPTION, wxDefaultPosition, w
ipAddress.Service(UDP_PORT);
udpSocket = new wxDatagramSocket(ipAddress);

if (!udpSocket->IsOk())
if (udpSocket->IsOk())
{
if (udpSocket->Error())
{
std::cout << "Error %d at opening datagram socket" << udpSocket->LastError();
}
udpSocket->SetEventHandler(*this, ID_UDP_SOCKET);
udpSocket->SetNotify(wxSOCKET_INPUT_FLAG);
udpSocket->Notify(true);
}
else if (udpSocket->Error())
{
wxMessageBox(wxT("Ошибка открытия UDP-сокета: " + udpSocket->LastError()));
}

udpSocket->SetEventHandler(*this, ID_UDP_SOCKET);
udpSocket->SetNotify(wxSOCKET_INPUT_FLAG);
udpSocket->Notify(true);
}

// Нажатие кнопки закрытия окна
Expand Down Expand Up @@ -1180,13 +1179,11 @@ void FormMain::UDPSocket_OnEvent(wxSocketEvent& event)
size_t receivedDataLen = udpSocket->RecvFrom(espIpAddress, receivedData, sizeof(receivedData)).LastCount();
if (receivedDataLen)
{
uint32_t prefix = *(uint32_t*)receivedData;
// проверка на префикс
uint32_t prefix = *(uint32_t*)receivedData;
if (prefix == 0x55AA55AA)
{
//CANFrame frame;
//memcpy_s(&frame, 1024, receivedData + 4, receivedDataLen);
//ProcessCANFrame(&frame);
// обработать полученный пакет пропустив префикс
ProcessCANFrame((CANFrame*)&receivedData[4]);
}
}
Expand Down
2 changes: 1 addition & 1 deletion wxCAN Sniffer/FormMain.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ class FormMain : public wxFrame
double mul = 0.125;

vector<LogFile> logFiles; // массив log-файлов
wxFFile* logFile = NULL; // единый log-файл
wxFFile* logFile = NULL; // единый log-файл

wxString decimalSeparator; // выбранный символ разделитель для данных в log-файле

Expand Down
192 changes: 96 additions & 96 deletions wxCAN Sniffer/ThreadedSerialPort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,122 +137,122 @@ wxThread::ExitCode ThreadedSerialPort::Entry()
switch (step)
{
// искомая сигнатура в буфере 0xAA55AA55 - это начало пакета, байт 0 = 0xAA
case 0:
if (*bufferHead == SIG_BYTE_0)
{
step++;
}
else
{
step = 0;
}
bufferHead++;
break;
case 0:
if (*bufferHead == SIG_BYTE_0)
{
step++;
}
else
{
step = 0;
}
bufferHead++;
break;

// поиск сигнатуры, байт 1 = 0x55
case 1:
if (*bufferHead == SIG_BYTE_1)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;
case 1:
if (*bufferHead == SIG_BYTE_1)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;

// поиск сигнатуры, байт 2 = 0xAA
case 2:
if (*bufferHead == SIG_BYTE_2)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;
case 2:
if (*bufferHead == SIG_BYTE_2)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;

// поиск сигнатуры, байт 3 = 0x55
case 3:
if (*bufferHead == SIG_BYTE_3)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;
case 3:
if (*bufferHead == SIG_BYTE_3)
{
step++;
bufferHead++;
}
else
{
step = 0;
}
break;

// ID пакета (байт 0)
case 4:
frame = { 0 };
frame.ID = *bufferHead;
bufferHead++;
step++;
break;
case 4:
frame = { 0 };
frame.ID = *bufferHead;
bufferHead++;
step++;
break;

// ID пакета (байт 1)
case 5:
frame.ID |= (*bufferHead) << 8;
bufferHead++;
step++;
break;
case 5:
frame.ID |= (*bufferHead) << 8;
bufferHead++;
step++;
break;

// ID пакета (байт 2)
case 6:
frame.ID |= (*bufferHead) << 16;
bufferHead++;
step++;
break;
case 6:
frame.ID |= (*bufferHead) << 16;
bufferHead++;
step++;
break;

// ID пакета (байт 3)
case 7:
frame.ID |= (*bufferHead) << 24;
bufferHead++;
step++;
break;
case 7:
frame.ID |= (*bufferHead) << 24;
bufferHead++;
step++;
break;

// длина пакета
case 8:
frame.Length = *bufferHead;
bufferHead++;
step++;
if (frame.Length > 8)
{
// данные некорректные - возврат к поиску заголовка
step = 0;
}
break;

// данные пакета
case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16:
if (step - 9 < frame.Length)
{
frame.Data[step - 9] = *bufferHead;
case 8:
frame.Length = *bufferHead;
bufferHead++;
step++;
}
else
{
step = 17;
}
break;
if (frame.Length > 8)
{
// данные некорректные - возврат к поиску заголовка
step = 0;
}
break;

// данные пакета
case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16:
if (step - 9 < frame.Length)
{
frame.Data[step - 9] = *bufferHead;
bufferHead++;
step++;
}
else
{
step = 17;
}
break;

// пакет собран - положить пакет в очередь
case 17:
syncCANBuffer.Lock();
canBuffer.push(frame);
syncCANBuffer.Unlock();
step = 0;

// сгенерировать событие
wxQueueEvent(handleFrame, new wxThreadEvent(wxEVT_THREAD));
break;
case 17:
syncCANBuffer.Lock();
canBuffer.push(frame);
syncCANBuffer.Unlock();
step = 0;

// сгенерировать событие
wxQueueEvent(handleFrame, new wxThreadEvent(wxEVT_THREAD));
break;
}
}

Expand Down