lfs_sfd.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "luat_base.h"
  2. #include "luat_sfd.h"
  3. #include "luat_mem.h"
  4. #include "lfs.h"
  5. #define LUAT_LOG_TAG "lfs2"
  6. #include "luat_log.h"
  7. int lfs_sfd_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) {
  8. sfd_drv_t *drv = (sfd_drv_t *)c->context;
  9. int ret = drv->opts->read(drv, buffer, block*4096+off, size);
  10. if (ret >= 0 && size >= ret) return LFS_ERR_OK;
  11. return LFS_ERR_IO;
  12. }
  13. // Program a region in a block. The block must have previously
  14. // been erased. Negative error codes are propogated to the user.
  15. // May return LFS_ERR_CORRUPT if the block should be considered bad.
  16. int lfs_sfd_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) {
  17. sfd_drv_t *drv = (sfd_drv_t *)c->context;
  18. int ret = drv->opts->write(drv, buffer, block*4096+off, size);
  19. if (ret >= 0 && size >= ret) return LFS_ERR_OK;
  20. return LFS_ERR_IO;
  21. }
  22. // Erase a block. A block must be erased before being programmed.
  23. // The state of an erased block is undefined. Negative error codes
  24. // are propogated to the user.
  25. // May return LFS_ERR_CORRUPT if the block should be considered bad.
  26. int lfs_sfd_erase(const struct lfs_config *c, lfs_block_t block) {
  27. sfd_drv_t *drv = (sfd_drv_t *)c->context;
  28. int ret = drv->opts->erase(drv, block*4096, 4096);
  29. if (ret == 0) return LFS_ERR_OK;
  30. return LFS_ERR_IO;
  31. }
  32. // Sync the state of the underlying block device. Negative error codes
  33. // are propogated to the user.
  34. int lfs_sfd_sync(const struct lfs_config *c) {
  35. // sfd_drv_t *drv = (sfd_drv_t *)c->context;
  36. //drv->opts->ioctl(drv, ???);
  37. return 0;
  38. }