@@ -168,8 +168,8 @@ enum ThumbnailState {
168168 Data
169169};
170170
171+ String<MaxFilnameLength> filenameCurrent;
171172static 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
195193static 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