furi_hal_compress.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * @file furi_hal_compress.h
  3. * LZSS based compression HAL API
  4. */
  5. #pragma once
  6. #include <stdbool.h>
  7. #include <stdint.h>
  8. #include <stddef.h>
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /** Defines encoder and decoder window size */
  13. #define FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG (8)
  14. /** Defines encoder and decoder lookahead buffer size */
  15. #define FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG (4)
  16. /** FuriHalCompress control structure */
  17. typedef struct FuriHalCompress FuriHalCompress;
  18. /** Initialize icon decoder
  19. */
  20. void furi_hal_compress_icon_init();
  21. /** Icon decoder
  22. *
  23. * @param icon_data pointer to icon data
  24. * @param decoded_buff pointer to decoded buffer
  25. */
  26. void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff);
  27. /** Allocate encoder and decoder
  28. *
  29. * @param compress_buff_size size of decoder and encoder buffer to allocate
  30. *
  31. * @return FuriHalCompress instance
  32. */
  33. FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size);
  34. /** Free encoder and decoder
  35. *
  36. * @param compress FuriHalCompress instance
  37. */
  38. void furi_hal_compress_free(FuriHalCompress* compress);
  39. /** Encode data
  40. *
  41. * @param compress FuriHalCompress instance
  42. * @param data_in pointer to input data
  43. * @param data_in_size size of input data
  44. * @param data_out maximum size of output data
  45. * @param data_res_size pointer to result output data size
  46. *
  47. * @return true on success
  48. */
  49. bool furi_hal_compress_encode(
  50. FuriHalCompress* compress,
  51. uint8_t* data_in,
  52. size_t data_in_size,
  53. uint8_t* data_out,
  54. size_t data_out_size,
  55. size_t* data_res_size);
  56. /** Decode data
  57. *
  58. * @param compress FuriHalCompress instance
  59. * @param data_in pointer to input data
  60. * @param data_in_size size of input data
  61. * @param data_out maximum size of output data
  62. * @param data_res_size pointer to result output data size
  63. *
  64. * @return true on success
  65. */
  66. bool furi_hal_compress_decode(
  67. FuriHalCompress* compress,
  68. uint8_t* data_in,
  69. size_t data_in_size,
  70. uint8_t* data_out,
  71. size_t data_out_size,
  72. size_t* data_res_size);
  73. #ifdef __cplusplus
  74. }
  75. #endif