furi-hal-compress.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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(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);
  47. /** Decode data
  48. *
  49. * @param compress FuriHalCompress instance
  50. * @param data_in pointer to input data
  51. * @param data_in_size size of input data
  52. * @param data_out maximum size of output data
  53. * @param data_res_size pointer to result output data size
  54. *
  55. * @return true on success
  56. */
  57. 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);