You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 line
699 B

  1. #include "RawSdFile.h"
  2. namespace sd {
  3. RawSdFile::RawSdFile(SdFat *sd, const char *filename) {
  4. _sd = sd;
  5. _filename = filename;
  6. }
  7. RawSdFile::~RawSdFile() {
  8. flush();
  9. }
  10. void RawSdFile::open(const uint32_t pos) {
  11. if (!_file.isOpen()) {
  12. _sd->chdir();
  13. _file = _sd->open(_filename, O_RDWR | O_CREAT);
  14. }
  15. _file.seek(pos);
  16. }
  17. void RawSdFile::flush() {
  18. if (!_file.isOpen()) return;
  19. _file.close();
  20. }
  21. void RawSdFile::write(const uint32_t pos, const void *val, const size_t size) {
  22. open(pos);
  23. _file.write(val, size);
  24. }
  25. void RawSdFile::read(const uint32_t pos, void *val, const size_t size) {
  26. open(pos);
  27. if (!_file.available()) return;
  28. _file.read(val, size);
  29. }
  30. }