Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions include/DMDUtil/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ class DMDUTILAPI Config
void SetShowNotColorizedFrames(bool showNotColorizedFrames) { m_showNotColorizedFrames = showNotColorizedFrames; }
bool IsDumpNotColorizedFrames() const { return m_dumpNotColorizedFrames; }
void SetDumpNotColorizedFrames(bool dumpNotColorizedFrames) { m_dumpNotColorizedFrames = dumpNotColorizedFrames; }
bool IsDumpFrames() const { return m_dumpFrames; }
void SetDumpFrames(bool dumpFrames) { m_dumpFrames = dumpFrames; }
void SetDumpPath(const char* path) { m_dumpPath = path; }
const char* GetDumpPath() const { return m_dumpPath.c_str(); }
bool IsFilterTransitionalFrames() const { return m_filterTransitionalFrames; }
void SetFilterTransitionalFrames(bool filterTransitionalFrames)
{
Expand Down Expand Up @@ -107,6 +111,8 @@ class DMDUTILAPI Config
int m_framesToSkip;
bool m_showNotColorizedFrames;
bool m_dumpNotColorizedFrames;
bool m_dumpFrames;
std::string m_dumpPath;
bool m_filterTransitionalFrames;
bool m_zedmd;
std::string m_zedmdDevice;
Expand Down
2 changes: 2 additions & 0 deletions include/DMDUtil/DMD.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ class DMDUTILAPI DMD
void AdjustRGB24Depth(uint8_t* pData, uint8_t* pDstData, int length, uint8_t* palette, uint8_t depth);
void HandleTrigger(uint16_t id);
void QueueSerumFrames(Update* dmdUpdate, bool render32 = true, bool render64 = true);
void GenerateRandomSuffix(char* buffer, size_t length);

void DmdFrameThread();
void LevelDMDThread();
Expand All @@ -197,6 +198,7 @@ class DMDUTILAPI DMD
char m_romName[DMDUTIL_MAX_NAME_SIZE] = {0};
char m_altColorPath[DMDUTIL_MAX_PATH_SIZE] = {0};
char m_pupVideosPath[DMDUTIL_MAX_PATH_SIZE] = {0};
char m_dumpPath[DMDUTIL_MAX_PATH_SIZE] = {0};
AlphaNumeric* m_pAlphaNumeric;
SerumFrameStruct* m_pSerum;
ZeDMD* m_pZeDMD;
Expand Down
11 changes: 11 additions & 0 deletions src/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Config::Config()
m_framesToSkip = 0;
m_showNotColorizedFrames = false;
m_dumpNotColorizedFrames = false;
m_dumpFrames = false;
m_filterTransitionalFrames = false;
m_zedmd = true;
m_zedmdDevice.clear();
Expand All @@ -44,6 +45,7 @@ void Config::parseConfigFile(const char* path)
{
inih::INIReader r{path};

// DMDServer
SetDMDServerAddr(r.Get<std::string>("DMDServer", "Addr", "localhost").c_str());
SetDMDServerPort(r.Get<int>("DMDServer", "Port", 6789));
SetAltColor(r.Get<bool>("DMDServer", "AltColor", true));
Expand All @@ -62,6 +64,15 @@ void Config::parseConfigFile(const char* path)
// Pixelcade
SetPixelcade(r.Get<bool>("Pixelcade", "Enabled", true));
SetPixelcadeDevice(r.Get<std::string>("Pixelcade", "Device", "").c_str());
// Serum
SetIgnoreUnknownFramesTimeout(r.Get<int>("Serum", "IgnoreUnknownFramesTimeout", 0));
SetMaximumUnknownFramesToSkip(r.Get<int>("Serum", "MaximumUnknownFramesToSkip", 0));
SetShowNotColorizedFrames(r.Get<bool>("Serum", "ShowNotColorizedFrames", false));
// Dump
SetDumpNotColorizedFrames(r.Get<bool>("Dump", "DumpNotColorizedFrames", false));
SetDumpFrames(r.Get<bool>("Dump", "DumpFrames", false));
SetDumpPath(r.Get<std::string>("Dump", "DumpPath", "").c_str());
SetFilterTransitionalFrames(r.Get<bool>("Dump", "FilterTransitionalFrames", false));
}

} // namespace DMDUtil
28 changes: 25 additions & 3 deletions src/DMD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,18 @@ void DMD::AdjustRGB24Depth(uint8_t* pData, uint8_t* pDstData, int length, uint8_
}
}

void DMD::GenerateRandomSuffix(char* buffer, size_t length)
{
const char charset[] = "abcdefghijklmnopqrstuvwxyz0123456789";
size_t charsetSize = sizeof(charset) - 1; // exclude null terminator

for (size_t i = 0; i < length; ++i)
{
buffer[i] = charset[rand() % charsetSize];
}
buffer[length] = '\0';
}

void DMD::DumpDMDTxtThread()
{
char name[DMDUTIL_MAX_NAME_SIZE] = {0};
Expand Down Expand Up @@ -1522,9 +1534,19 @@ void DMD::DumpDMDTxtThread()

if (name[0] != '\0')
{
char filename[128];
snprintf(filename, DMDUTIL_MAX_NAME_SIZE + 5, "%s.txt", name);
f = fopen(filename, "a");
char filename[DMDUTIL_MAX_NAME_SIZE + 128 + 8 + 5];
char suffix[9]; // 8 chars + null terminator
GenerateRandomSuffix(suffix, 8);
if (m_dumpPath[0] == '\0') strcpy(m_dumpPath, Config::GetInstance()->GetDumpPath());
if (m_dumpPath[strlen(m_dumpPath) - 1] == '/' || m_dumpPath[strlen(m_dumpPath) - 1] == '\\')
{
snprintf(filename, sizeof(filename), "%s%s-%s.txt", m_dumpPath, name, suffix);
}
else
{
snprintf(filename, sizeof(filename), "%s/%s-%s.txt", m_dumpPath, name, suffix);
}
f = fopen(filename, "w");
update = true;
memset(renderBuffer, 0, 2 * 256 * 64);
passed[0] = passed[1] = 0;
Expand Down