Skip to content

Commit 8f5a766

Browse files
authored
Merge pull request #304 from mfs12/improve-filename-handling
PanelDue: improved filename handling
2 parents 2078af4 + c7bed65 commit 8f5a766

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

src/PanelDue.cpp

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ enum ThumbnailState {
168168
Data
169169
};
170170

171+
String<MaxFilnameLength> filenameCurrent;
171172
static struct ThumbnailContext {
172-
String<MaxFilnameLength> filename;
173173
enum ThumbnailState state;
174174
struct Thumbnail thumbnail;
175175
int16_t parseErr;
@@ -180,7 +180,6 @@ static struct ThumbnailContext {
180180

181181
void Init()
182182
{
183-
filename.Clear();
184183
state = ThumbnailState::Init;
185184
ThumbnailInit(thumbnail);
186185
parseErr = 0;
@@ -189,7 +188,6 @@ static struct ThumbnailContext {
189188
offset = 0;
190189
next = 0;
191190
};
192-
193191
} thumbnailCurrent, thumbnailNew;
194192

195193
static const ColourScheme *colours = &colourSchemes[0];
@@ -1027,6 +1025,7 @@ static void StartReceivedMessage()
10271025
thumbnailNew.Init();
10281026
if (thumbnailCurrent.state == ThumbnailState::Init)
10291027
{
1028+
filenameCurrent.Clear();
10301029
thumbnailCurrent.Init();
10311030
memset(&thumbnailData, 0, sizeof(thumbnailData));
10321031
}
@@ -1073,8 +1072,8 @@ static void EndReceivedMessage()
10731072
#if DEBUG
10741073
if (thumbnailCurrent.thumbnail.imageFormat != Thumbnail::ImageFormat::Invalid)
10751074
{
1076-
dbg("filename %s offset %d size %d format %d width %d height %d\n",
1077-
thumbnailCurrent.filename.c_str(),
1075+
dbg("filename '%s' offset %d size %d format %d width %d height %d\n",
1076+
filenameCurrent.c_str(),
10781077
thumbnailCurrent.offset, thumbnailCurrent.size,
10791078
thumbnailCurrent.thumbnail.imageFormat,
10801079
thumbnailCurrent.thumbnail.width, thumbnailCurrent.thumbnail.height);
@@ -1978,7 +1977,8 @@ static void ProcessReceivedValue(StringRef id, const char data[], const size_t i
19781977
}
19791978
break;
19801979
case rcvM36Filename:
1981-
thumbnailNew.filename.copy(data);
1980+
filenameCurrent.copy(data);
1981+
dbg("filename current '%s'\n", filenameCurrent.c_str());
19821982
break;
19831983

19841984
case rcvM36GeneratedBy:
@@ -2037,13 +2037,15 @@ static void ProcessReceivedValue(StringRef id, const char data[], const size_t i
20372037
thumbnailNew.thumbnail.imageFormat = Thumbnail::ImageFormat::Qoi;
20382038

20392039
thumbnailNew.state = ThumbnailState::Header;
2040+
dbg("thumbnail header.\n");
20402041
}
20412042
break;
20422043
case rcvM36ThumbnailsHeight:
20432044
uint32_t height;
20442045
if (GetUnsignedInteger(data, height))
20452046
{
20462047
thumbnailNew.thumbnail.height = height;
2048+
dbg("thumbnail height %d '%s'.\n", height, data);
20472049
}
20482050
break;
20492051
case rcvM36ThumbnailsOffset:
@@ -2059,37 +2061,43 @@ static void ProcessReceivedValue(StringRef id, const char data[], const size_t i
20592061
if (GetUnsignedInteger(data, size))
20602062
{
20612063
thumbnailNew.size = size;
2064+
dbg("thumbnail size %d.\n", size);
20622065
}
20632066
break;
20642067
case rcvM36ThumbnailsWidth:
20652068
uint32_t width;
20662069
if (GetUnsignedInteger(data, width))
20672070
{
20682071
thumbnailNew.thumbnail.width = width;
2072+
dbg("thumbnail width %d '%s'.\n", width, data);
20692073
}
20702074
break;
20712075

20722076
case rcvM361ThumbnailData:
20732077
thumbnailData.size = std::min(strlen(data), sizeof(thumbnailData.buffer));
20742078
memcpy(thumbnailData.buffer, data, thumbnailData.size);
20752079
thumbnailCurrent.state = ThumbnailState::Data;
2080+
dbg("thumbnail data.\n");
20762081
break;
20772082
case rcvM361ThumbnailErr:
20782083
if (!GetInteger(data, thumbnailCurrent.err))
20792084
{
20802085
thumbnailCurrent.parseErr = -1;
2086+
dbg("thumbnail error.\n");
20812087
}
20822088
break;
20832089
case rcvM361ThumbnailFilename:
2084-
if (!thumbnailCurrent.filename.Equals(data))
2090+
if (!filenameCurrent.Equals(data))
20852091
{
20862092
thumbnailCurrent.parseErr = -2;
2093+
dbg("thumbnail error filename.\n");
20872094
}
20882095
break;
20892096
case rcvM361ThumbnailNext:
20902097
if (!GetUnsignedInteger(data, thumbnailCurrent.next))
20912098
{
20922099
thumbnailCurrent.parseErr = -3;
2100+
dbg("thumbnail error next.\n");
20932101
break;
20942102
}
20952103
dbg("receive next offset %d.\n", thumbnailCurrent.next);
@@ -2098,6 +2106,7 @@ static void ProcessReceivedValue(StringRef id, const char data[], const size_t i
20982106
if (!GetUnsignedInteger(data, thumbnailNew.offset))
20992107
{
21002108
thumbnailCurrent.parseErr = -4;
2109+
dbg("thumbnail error offset.\n");
21012110
break;
21022111
}
21032112
dbg("receive current offset %d.\n", thumbnailCurrent.offset);
@@ -2140,15 +2149,18 @@ static void ProcessArrayElementEnd(const char id[], const size_t index)
21402149
UNUSED(index);
21412150

21422151
// check if new thumbnail fits better
2143-
if (strcmp(id, "thumbnails^") == 0 &&
2144-
ThumbnailIsValid(thumbnailNew.thumbnail) &&
2145-
thumbnailCurrent.thumbnail.height < thumbnailNew.thumbnail.height &&
2146-
thumbnailNew.thumbnail.height <= fpThumbnail->GetHeight() &&
2147-
thumbnailCurrent.thumbnail.width < thumbnailNew.thumbnail.width &&
2148-
thumbnailNew.thumbnail.width <= fpThumbnail->GetWidth())
2152+
if ((strcmp(id, "thumbnails^") == 0) && ThumbnailIsValid(thumbnailNew.thumbnail))
21492153
{
2150-
dbg("setting new thumbnail %d/%d\r\n", fpThumbnail->GetWidth(), fpThumbnail->GetWidth());
2151-
thumbnailCurrent = thumbnailNew;
2154+
if (thumbnailCurrent.thumbnail.height < thumbnailNew.thumbnail.height &&
2155+
thumbnailNew.thumbnail.height <= fpThumbnail->GetHeight() &&
2156+
thumbnailCurrent.thumbnail.width < thumbnailNew.thumbnail.width &&
2157+
thumbnailNew.thumbnail.width <= fpThumbnail->GetWidth())
2158+
{
2159+
dbg("setting new thumbnail %d/%d\r\n", fpThumbnail->GetWidth(), fpThumbnail->GetWidth());
2160+
thumbnailCurrent = thumbnailNew;
2161+
} else {
2162+
dbg("error thumbnail invalid\r\n");
2163+
}
21522164
thumbnailNew.Init();
21532165
}
21542166

@@ -2645,7 +2657,7 @@ int main(void)
26452657
if (thumbnailCurrent.state == ThumbnailState::DataRequest)
26462658
{
26472659
SerialIo::Sendf("M36.1 P\"%s\" S%d\n",
2648-
thumbnailCurrent.filename.c_str(),
2660+
filenameCurrent.c_str(),
26492661
thumbnailCurrent.next);
26502662
lastPollTime = SystemTick::GetTickCount();
26512663
thumbnailCurrent.state = ThumbnailState::DataWait;

0 commit comments

Comments
 (0)