Просмотр исходного кода

Fix Icons decompression on F6 (#856)

Co-authored-by: あく <alleteam@gmail.com>
Albert Kharisov 4 лет назад
Родитель
Сommit
6f7d93fe72
1 измененных файлов с 9 добавлено и 5 удалено
  1. 9 5
      firmware/targets/f6/furi-hal/furi-hal-compress.c

+ 9 - 5
firmware/targets/f6/furi-hal/furi-hal-compress.c

@@ -6,7 +6,7 @@
 
 
 #define TAG "FuriHalCompress"
 #define TAG "FuriHalCompress"
 
 
-#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (512)
+#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2*512)
 #define FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE (1024)
 #define FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE (1024)
 
 
 #define FURI_HAL_COMPRESS_EXP_BUFF_SIZE (1 << FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG)
 #define FURI_HAL_COMPRESS_EXP_BUFF_SIZE (1 << FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG)
@@ -59,13 +59,17 @@ void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_b
     if(header->is_compressed) {
     if(header->is_compressed) {
         size_t data_processed = 0;
         size_t data_processed = 0;
         heatshrink_decoder_sink(icon_decoder->decoder, (uint8_t*)&icon_data[4], header->compressed_buff_size, &data_processed);
         heatshrink_decoder_sink(icon_decoder->decoder, (uint8_t*)&icon_data[4], header->compressed_buff_size, &data_processed);
-        while(
-            heatshrink_decoder_poll(
+        while (1) {
+            HSD_poll_res res = heatshrink_decoder_poll(
                 icon_decoder->decoder,
                 icon_decoder->decoder,
                 icon_decoder->decoded_buff,
                 icon_decoder->decoded_buff,
                 sizeof(icon_decoder->decoded_buff),
                 sizeof(icon_decoder->decoded_buff),
-                &data_processed) == HSDR_POLL_MORE
-            ) {};
+                &data_processed);
+            furi_assert((res == HSDR_POLL_EMPTY) || (res == HSDR_POLL_MORE));
+            if (res != HSDR_POLL_MORE) {
+                break;
+            }
+        }
         heatshrink_decoder_reset(icon_decoder->decoder);
         heatshrink_decoder_reset(icon_decoder->decoder);
         memset(icon_decoder->compress_buff, 0, sizeof(icon_decoder->compress_buff));
         memset(icon_decoder->compress_buff, 0, sizeof(icon_decoder->compress_buff));
         *decoded_buff = icon_decoder->decoded_buff;
         *decoded_buff = icon_decoder->decoded_buff;