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.

91 lines
3.7 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. #include "sample_data_manager.h"
  2. #include <stdarg.h>
  3. #include "zeeprom_fs.h"
  4. #include "znordic.h"
  5. static sample_data_fileinfo_t fileinfocache[MAX_FILE_NUM * 2];
  6. static uint8_t fileinfocache_count = 0;
  7. void sample_data_mgr_init() { zeeprom_fs_init(); }
  8. void sample_data_mgr_uninit() { zeeprom_fs_uinit(); }
  9. sample_data_fileinfo_list_t* sample_data_mgr_get_fileinfo_list() { //
  10. static sample_data_fileinfo_list_t fileinfo_list;
  11. memset(&fileinfo_list, 0, sizeof(fileinfo_list));
  12. fileinfocache_count = 0;
  13. // ��ȡ���м�¼��Ϣ
  14. zeeprom_header_t* header = zeeprom_fs_get_header();
  15. for (uint16_t i = 0; i < ZARRAY_SIZE(header->sectorinfos); i++) {
  16. zeeprom_sector_info_t* sectorinfo = &header->sectorinfos[i];
  17. if (sectorinfo->usage == 1 && sectorinfo->sector_index_in_file == 0) {
  18. // ��ȡ�ļ���Ϣ
  19. if (fileinfocache_count >= ZARRAY_SIZE(fileinfocache)) {
  20. ZLOGE("fileinfocache_count >= MAX_FILE_NUM");
  21. break;
  22. }
  23. sample_data_fileinfo_t* fileinfo = &fileinfocache[fileinfocache_count];
  24. fileinfo->fileuuid = sectorinfo->fileuuid;
  25. memcpy(fileinfo->filename, sectorinfo->filename, sizeof(fileinfo->filename));
  26. fileinfo->size = zeeprom_fs_get_filesize_by_fileuuid(fileinfo->fileuuid);
  27. fileinfo->checksum = zeeprom_fs_get_checksum_by_fileuuid(fileinfo->fileuuid);
  28. fileinfo_list.fileinfo[fileinfo_list.count] = fileinfo;
  29. fileinfo_list.count++;
  30. fileinfocache_count++;
  31. }
  32. }
  33. // �����ļ�uuid������uuid������������ǰ��
  34. for (uint16_t i = 0; i < fileinfo_list.count; i++) {
  35. for (uint16_t j = i + 1; j < fileinfo_list.count; j++) {
  36. if (fileinfo_list.fileinfo[i]->fileuuid < fileinfo_list.fileinfo[j]->fileuuid) {
  37. sample_data_fileinfo_t* tmp = fileinfo_list.fileinfo[i];
  38. fileinfo_list.fileinfo[i] = fileinfo_list.fileinfo[j];
  39. fileinfo_list.fileinfo[j] = tmp;
  40. }
  41. }
  42. }
  43. return &fileinfo_list;
  44. }
  45. bool sample_data_mgr_storage_is_full() { return zeeprom_fs_get_file_num() >= MAX_FILE_NUM; }
  46. int32_t sample_data_mgr_get_file_num() { return zeeprom_fs_get_file_num(); }
  47. #if 1
  48. static const char* filename2str(uint8_t* filename) {
  49. static char filename_str[32];
  50. sprintf(filename_str, "%02x%02x%02x%02x%02x%02x%02x%02x", filename[0], filename[1], filename[2], filename[3], filename[4], filename[5], filename[6], filename[7]);
  51. return filename_str;
  52. }
  53. #endif
  54. void sample_data_mgr_dump_fileinfo_list() {
  55. zeeprom_fs_dump_sector_state();
  56. sample_data_fileinfo_list_t* fileinfo_list = sample_data_mgr_get_fileinfo_list();
  57. ZLOGI_BLOCK("fileinfo_list->count=%d\n", fileinfo_list->count);
  58. for (uint16_t i = 0; i < fileinfo_list->count; i++) {
  59. sample_data_fileinfo_t* fileinfo = fileinfo_list->fileinfo[i];
  60. ZLOGI_BLOCK("[%d]: filename=%s, fileuuid=%d, size=%d", i, filename2str(fileinfo->filename), fileinfo->fileuuid, fileinfo->size);
  61. }
  62. }
  63. int32_t sample_data_mgr_open(sample_data_filename_t* filename, wrflag_t flag) {
  64. /**
  65. * @brief ļ
  66. */
  67. if (flag == kwrflag_write_only) {
  68. if (zeeprom_fs_get_file_num() >= MAX_FILE_NUM) {
  69. zeeprom_fs_delete_the_oldest_file();
  70. }
  71. }
  72. return zeeprom_fs_open((uint8_t*)filename, flag);
  73. }
  74. int32_t sample_data_mgr_close(int32_t fd) { return zeeprom_fs_close(fd); }
  75. int32_t sample_data_mgr_write(int32_t fd, const uint8_t* data, int32_t size) { return zeeprom_fs_write(fd, data, size); }
  76. int32_t sample_data_mgr_read(int32_t fd, uint8_t* data, int32_t size) { return zeeprom_fs_read(fd, data, size); }
  77. int32_t sample_data_mgr_get_file_size_by_fd(int32_t fd) { return zeeprom_fs_get_filesize_by_fd(fd); }
  78. int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename) { return zeeprom_fs_delete_by_name((uint8_t*)filename); }