furi_hal_compress.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. /** Defines encoder and decoder window size */
  10. #define FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG (8)
  11. /** Defines encoder and decoder lookahead buffer size */
  12. #define FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG (4)
  13. /** FuriHalCompress control structure */
  14. typedef struct FuriHalCompress FuriHalCompress;
  15. /** Initialize icon decoder
  16. */
  17. void furi_hal_compress_icon_init();
  18. /** Icon decoder
  19. *
  20. * @param icon_data pointer to icon data
  21. * @param decoded_buff pointer to decoded buffer
  22. */
  23. void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff);
  24. /** Allocate encoder and decoder
  25. *
  26. * @param compress_buff_size size of decoder and encoder buffer to allocate
  27. *
  28. * @return FuriHalCompress instance
  29. */
  30. FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size);
  31. /** Free encoder and decoder
  32. *
  33. * @param compress FuriHalCompress instance
  34. */
  35. void furi_hal_compress_free(FuriHalCompress* compress);
  36. /** Encode data
  37. *
  38. * @param compress FuriHalCompress instance
  39. * @param data_in pointer to input data
  40. * @param data_in_size size of input data
  41. * @param data_out maximum size of output data
  42. * @param data_res_size pointer to result output data size
  43. *
  44. * @return true on success
  45. */
  46. bool furi_hal_compress_encode(
  47. FuriHalCompress* compress,
  48. uint8_t* data_in,
  49. size_t data_in_size,
  50. uint8_t* data_out,
  51. size_t data_out_size,
  52. size_t* data_res_size);
  53. /** Decode data
  54. *
  55. * @param compress FuriHalCompress instance
  56. * @param data_in pointer to input data
  57. * @param data_in_size size of input data
  58. * @param data_out maximum size of output data
  59. * @param data_res_size pointer to result output data size
  60. *
  61. * @return true on success
  62. */
  63. bool furi_hal_compress_decode(
  64. FuriHalCompress* compress,
  65. uint8_t* data_in,
  66. size_t data_in_size,
  67. uint8_t* data_out,
  68. size_t data_out_size,
  69. size_t* data_res_size);