Skip to content

Commit ffe9656

Browse files
committed
avoid corrupt dumps by creating new files instead of appending, allow setting dumper and serum options via config file
1 parent bb4e0ae commit ffe9656

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

include/DMDUtil/Config.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class DMDUTILAPI Config
5555
void SetShowNotColorizedFrames(bool showNotColorizedFrames) { m_showNotColorizedFrames = showNotColorizedFrames; }
5656
bool IsDumpNotColorizedFrames() const { return m_dumpNotColorizedFrames; }
5757
void SetDumpNotColorizedFrames(bool dumpNotColorizedFrames) { m_dumpNotColorizedFrames = dumpNotColorizedFrames; }
58+
bool IsDumpFrames() const { return m_dumpFrames; }
59+
void SetDumpFrames(bool dumpFrames) { m_dumpFrames = dumpFrames; }
5860
bool IsFilterTransitionalFrames() const { return m_filterTransitionalFrames; }
5961
void SetFilterTransitionalFrames(bool filterTransitionalFrames)
6062
{
@@ -107,6 +109,7 @@ class DMDUTILAPI Config
107109
int m_framesToSkip;
108110
bool m_showNotColorizedFrames;
109111
bool m_dumpNotColorizedFrames;
112+
bool m_dumpFrames;
110113
bool m_filterTransitionalFrames;
111114
bool m_zedmd;
112115
std::string m_zedmdDevice;

include/DMDUtil/DMD.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ class DMDUTILAPI DMD
183183
void AdjustRGB24Depth(uint8_t* pData, uint8_t* pDstData, int length, uint8_t* palette, uint8_t depth);
184184
void HandleTrigger(uint16_t id);
185185
void QueueSerumFrames(Update* dmdUpdate, bool render32 = true, bool render64 = true);
186+
void GenerateRandomSuffix(char* buffer, size_t length);
186187

187188
void DmdFrameThread();
188189
void LevelDMDThread();

src/Config.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Config::Config()
2525
m_framesToSkip = 0;
2626
m_showNotColorizedFrames = false;
2727
m_dumpNotColorizedFrames = false;
28+
m_dumpFrames = false;
2829
m_filterTransitionalFrames = false;
2930
m_zedmd = true;
3031
m_zedmdDevice.clear();
@@ -44,6 +45,7 @@ void Config::parseConfigFile(const char* path)
4445
{
4546
inih::INIReader r{path};
4647

48+
// DMDServer
4749
SetDMDServerAddr(r.Get<std::string>("DMDServer", "Addr", "localhost").c_str());
4850
SetDMDServerPort(r.Get<int>("DMDServer", "Port", 6789));
4951
SetAltColor(r.Get<bool>("DMDServer", "AltColor", true));
@@ -62,6 +64,14 @@ void Config::parseConfigFile(const char* path)
6264
// Pixelcade
6365
SetPixelcade(r.Get<bool>("Pixelcade", "Enabled", true));
6466
SetPixelcadeDevice(r.Get<std::string>("Pixelcade", "Device", "").c_str());
67+
// Serum
68+
SetIgnoreUnknownFramesTimeout(r.Get<int>("Serum", "IgnoreUnknownFramesTimeout", 0));
69+
SetMaximumUnknownFramesToSkip(r.Get<int>("Serum", "MaximumUnknownFramesToSkip", 0));
70+
SetShowNotColorizedFrames(r.Get<bool>("Serum", "ShowNotColorizedFrames", false));
71+
// Dumper
72+
SetDumpNotColorizedFrames(r.Get<bool>("Dumper", "DumpNotColorizedFrames", false));
73+
SetDumpFrames(r.Get<bool>("Dumper", "DumpFrames", false));
74+
SetFilterTransitionalFrames(r.Get<bool>("Dumper", "FilterTransitionalFrames", false));
6575
}
6676

6777
} // namespace DMDUtil

src/DMD.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,6 +1463,18 @@ void DMD::AdjustRGB24Depth(uint8_t* pData, uint8_t* pDstData, int length, uint8_
14631463
}
14641464
}
14651465

1466+
void DMD::GenerateRandomSuffix(char* buffer, size_t length)
1467+
{
1468+
const char charset[] = "abcdefghijklmnopqrstuvwxyz0123456789";
1469+
size_t charsetSize = sizeof(charset) - 1; // exclude null terminator
1470+
1471+
for (size_t i = 0; i < length; ++i)
1472+
{
1473+
buffer[i] = charset[rand() % charsetSize];
1474+
}
1475+
buffer[length] = '\0';
1476+
}
1477+
14661478
void DMD::DumpDMDTxtThread()
14671479
{
14681480
char name[DMDUTIL_MAX_NAME_SIZE] = {0};
@@ -1523,8 +1535,10 @@ void DMD::DumpDMDTxtThread()
15231535
if (name[0] != '\0')
15241536
{
15251537
char filename[128];
1526-
snprintf(filename, DMDUTIL_MAX_NAME_SIZE + 5, "%s.txt", name);
1527-
f = fopen(filename, "a");
1538+
char suffix[9]; // 8 chars + null terminator
1539+
GenerateRandomSuffix(suffix, 8);
1540+
snprintf(filename, DMDUTIL_MAX_NAME_SIZE + 5, "%s-%s.txt", name, suffix);
1541+
f = fopen(filename, "w");
15281542
update = true;
15291543
memset(renderBuffer, 0, 2 * 256 * 64);
15301544
passed[0] = passed[1] = 0;

0 commit comments

Comments
 (0)