Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/targets/furi_hal_include/furi_hal_compress.h')
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_compress.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/firmware/targets/furi_hal_include/furi_hal_compress.h b/firmware/targets/furi_hal_include/furi_hal_compress.h
new file mode 100644
index 00000000..17ce3e69
--- /dev/null
+++ b/firmware/targets/furi_hal_include/furi_hal_compress.h
@@ -0,0 +1,79 @@
+/**
+ * @file furi_hal_compress.h
+ * LZSS based compression HAL API
+ */
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+
+/** Defines encoder and decoder window size */
+#define FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG (8)
+
+/** Defines encoder and decoder lookahead buffer size */
+#define FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG (4)
+
+/** FuriHalCompress control structure */
+typedef struct FuriHalCompress FuriHalCompress;
+
+/** Initialize icon decoder
+ */
+void furi_hal_compress_icon_init();
+
+/** Icon decoder
+ *
+ * @param icon_data pointer to icon data
+ * @param decoded_buff pointer to decoded buffer
+ */
+void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff);
+
+/** Allocate encoder and decoder
+ *
+ * @param compress_buff_size size of decoder and encoder buffer to allocate
+ *
+ * @return FuriHalCompress instance
+ */
+FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size);
+
+/** Free encoder and decoder
+ *
+ * @param compress FuriHalCompress instance
+ */
+void furi_hal_compress_free(FuriHalCompress* compress);
+
+/** Encode data
+ *
+ * @param compress FuriHalCompress instance
+ * @param data_in pointer to input data
+ * @param data_in_size size of input data
+ * @param data_out maximum size of output data
+ * @param data_res_size pointer to result output data size
+ *
+ * @return true on success
+ */
+bool furi_hal_compress_encode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size);
+
+/** Decode data
+ *
+ * @param compress FuriHalCompress instance
+ * @param data_in pointer to input data
+ * @param data_in_size size of input data
+ * @param data_out maximum size of output data
+ * @param data_res_size pointer to result output data size
+ *
+ * @return true on success
+ */
+bool furi_hal_compress_decode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size);