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
Отказался от очередей, переписал парсе CAN-пакетов
  • Loading branch information
KruFFT authored and KruFFT committed Jun 27, 2022
commit ccfb80890b919ba507f7583249fd608ee19cdacf
70 changes: 20 additions & 50 deletions wxCAN Sniffer/CANParser.cpp
Original file line number Diff line number Diff line change
@@ -1,61 +1,31 @@
#include "CANParser.h"

// Деструктор очищает очередь
CANParser::~CANParser()
// Собрать CAN-пакет из входящего потока байтов (контроль границ вне этого кода, должно быть не менее 17 байт данных)
CANFrame CANParser::Parse(uint8_t** bufferHead, bool* ok)
{
wxMutexLocker lock(syncCanQueue);
while (!frames.empty())
{
frames.pop();
}
}

void CANParser::ParseAll(FIFOBuffer& buffer)
{
bool ok;
CANFrame frame;
CANFrame frame = { 0 };
*ok = false;

while (buffer.Count() > 17)
{
if (buffer.Next(ok) == SIG_BYTE_0 &&
buffer.Next(ok) == SIG_BYTE_1 &&
buffer.Next(ok) == SIG_BYTE_2 &&
buffer.Next(ok) == SIG_BYTE_3)
// ниже "магия" указателей на указатели :)
// поиск сигнатуры в потоке байтов
if (*(uint32_t*)*bufferHead == SIG_DWORD)
{
*bufferHead += 4;
// сборка пакета
frame.ID = *(uint32_t*)*bufferHead;
*bufferHead += 4;
frame.Length = *(*bufferHead)++;
if (frame.Length <= 8)
{
// сборка ID пакета
uint8_t id0 = buffer.Next(ok);
uint8_t id1 = buffer.Next(ok);
uint8_t id2 = buffer.Next(ok);
uint8_t id3 = buffer.Next(ok);
frame.ID = id3 << 24 | id2 << 16 | id1 << 8 | id0;
frame.Length = buffer.Next(ok);
if (frame.Length <= 8)
{
for (size_t iData = 0; iData < frame.Length; iData++)
frame.Data[iData] = buffer.Next(ok);
for (size_t iData = 0; iData < frame.Length; iData++)
frame.Data[iData] = *(*bufferHead)++;

syncCanQueue.Lock();
frames.push(frame);
syncCanQueue.Unlock();
}
*ok = true;
}
}
}

CANFrame CANParser::Next(bool& ok)
{
CANFrame value;
syncCanQueue.Lock();
if (ok = !frames.empty())
{
value = frames.front();
frames.pop();
}
else
{
value.ID = 0;
(*bufferHead)++;
}
syncCanQueue.Unlock();

return value;
}
return frame;
}
13 changes: 1 addition & 12 deletions wxCAN Sniffer/CANParser.h
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
#pragma once

#include "Common.h"
#include "FIFOBuffer.h"
#include <queue>

static wxMutex syncCanQueue;

class CANParser
{
public:
CANParser() = default;
~CANParser();

void ParseAll(FIFOBuffer& buffer);
CANFrame Next(bool& ok);

private:
std::queue<CANFrame> frames; // очередь с полученными пакетами
static CANFrame Parse(uint8_t** bufferHead, bool* ok);
};

20 changes: 13 additions & 7 deletions wxCAN Sniffer/Common.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,12 @@
using namespace std;

#define CAPTION wxT("CAN Sniffer 2.0.0")
#define COM_NAME wxT("COM3")

#define SIG_BYTE_0 0xAA
#define SIG_BYTE_1 0x55
#define SIG_BYTE_2 0xAA
#define SIG_BYTE_3 0x55

#define UDP_PORT 0xAA55
#define SIG_DWORD 0x55AA55AA
#define SIG_BYTE_0 0xAA
#define SIG_BYTE_1 0x55
#define SIG_BYTE_2 0xAA
#define SIG_BYTE_3 0x55

// CAN-пакет данных
struct CANFrame
Expand Down Expand Up @@ -61,3 +59,11 @@ struct LogFile
uint32_t ID; // идентификатор пакета
wxFFile* File; // хэндл ассоциированного файла
};

// Описание одного байтового буфера
struct Buffer
{
public:
uint8_t* Pointer;
size_t Size;
};
60 changes: 0 additions & 60 deletions wxCAN Sniffer/FIFOBuffer.cpp

This file was deleted.

22 changes: 0 additions & 22 deletions wxCAN Sniffer/FIFOBuffer.h

This file was deleted.

Loading