Program Listing for File ascreader.h#
↰ Return to documentation for file (ascformat\ascreader.h)
#ifndef ASC_FILE_READER_H
#define ASC_FILE_READER_H
#include <list>
#include <functional>
#include <filesystem>
#include <thread>
namespace asc
{
struct SCanMessage
{
double dTimestamp;
uint32_t uiChannel;
uint32_t uiId;
bool bExtended;
bool bCanFd;
enum class EDirection { rx, tx } eDirection;
uint32_t uiLength;
uint8_t rguiData[64];
};
class CAscReader
{
public:
CAscReader();
~CAscReader();
bool Read(const std::filesystem::path& rpathFile);
std::pair<SCanMessage, bool> Get() const;
uint32_t GetLoopCount() const;
void JumpBegin();
void JumpEnd();
CAscReader& operator++();
CAscReader& operator++(int);
CAscReader& operator--();
CAscReader& operator--(int);
bool IsBOF() const;
bool IsEOF() const;
void StartPlayback(std::function<void(const SCanMessage&)> fnCallback, bool bRepeat = true);
void StopPlayback();
void ResetPlayback();
bool PlaybackRunning() const;
private:
void ProcessSample(const std::string& rssSample);
void PlaybackThreadFunc(std::function<void(const SCanMessage&)> fnCallback, std::atomic<uint32_t>& loopCount, bool bRepeat);
std::list<SCanMessage> m_lstMessages;
std::list<SCanMessage>::iterator m_itCurrent;
std::thread m_threadPlayback;
bool m_bPlaybackThread = false;
bool m_bPlayback = false;
std::atomic<uint32_t> m_uiLoopCount{ 0 };
};
}
#endif // !defined ASC_FILE_READER_H