internal-storage-i.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include "internal-storage.h"
  3. #include <furi.h>
  4. #include <api-hal.h>
  5. #include <lfs.h>
  6. #define INTERNAL_STORAGE_THREAD_FLAG_CALL_COMPLETE (1)
  7. struct InternalStorage {
  8. osMessageQueueId_t queue;
  9. InternalStorageState state;
  10. const size_t start_address;
  11. const size_t start_page;
  12. struct lfs_config config;
  13. lfs_t lfs;
  14. };
  15. typedef struct {
  16. const char* key;
  17. uint8_t* buffer;
  18. size_t size;
  19. int ret;
  20. } InternalStorageCommandKey;
  21. typedef void (*InternalStorageCommandFunction)(InternalStorage* internal_storage, void* data);
  22. typedef struct {
  23. osThreadId thread;
  24. InternalStorageCommandFunction function;
  25. void* data;
  26. } InternalStorageCommand;
  27. int internal_storage_device_read(
  28. const struct lfs_config* c,
  29. lfs_block_t block,
  30. lfs_off_t off,
  31. void* buffer,
  32. lfs_size_t size);
  33. int internal_storage_device_prog(
  34. const struct lfs_config* c,
  35. lfs_block_t block,
  36. lfs_off_t off,
  37. const void* buffer,
  38. lfs_size_t size);
  39. int internal_storage_device_erase(const struct lfs_config* c, lfs_block_t block);
  40. int internal_storage_device_sync(const struct lfs_config* c);
  41. InternalStorage* internal_storage_alloc();
  42. void internal_storage_free(InternalStorage* internal_storage);
  43. int32_t internal_storage_task(void* p);
  44. void _internal_storage_read_key(InternalStorage* internal_storage, InternalStorageCommandKey* data);
  45. void _internal_storage_write_key(
  46. InternalStorage* internal_storage,
  47. InternalStorageCommandKey* data);