Simple RAM file system.

Dependents:   modem_ref_helper_for_v5_3_217 modem_ref_helper

Committer:
Jeej
Date:
Thu May 11 15:20:03 2017 +0000
Revision:
2:91473a2fac1c
Parent:
1:73a2c1814a34
Child:
3:1bc9159847ab
Disable prints

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:befc17558de9 1 #include "ram_fs.h"
Jeej 0:befc17558de9 2 #include "WizziDebug.h"
Jeej 0:befc17558de9 3
Jeej 2:91473a2fac1c 4 #if 0
Jeej 2:91473a2fac1c 5 #define RAM_FS_PRINT(...) PRINT(__VA_ARGS__)
Jeej 2:91473a2fac1c 6 #else
Jeej 2:91473a2fac1c 7 #define RAM_FS_PRINT(...);
Jeej 2:91473a2fac1c 8 #endif
Jeej 2:91473a2fac1c 9
Jeej 0:befc17558de9 10 static ram_fs_file_t* g_fs = NULL;
Jeej 0:befc17558de9 11
Jeej 0:befc17558de9 12 static void ram_fs_append(ram_fs_file_t** file, ram_fs_file_t* file_new)
Jeej 0:befc17558de9 13 {
Jeej 0:befc17558de9 14 if (*file == NULL)
Jeej 0:befc17558de9 15 {
Jeej 0:befc17558de9 16 *file = file_new;
Jeej 0:befc17558de9 17 return;
Jeej 0:befc17558de9 18 }
Jeej 0:befc17558de9 19
Jeej 0:befc17558de9 20 ram_fs_append((ram_fs_file_t**)&((*file)->next), file_new);
Jeej 0:befc17558de9 21 }
Jeej 0:befc17558de9 22
Jeej 0:befc17558de9 23 static ram_fs_file_t* ram_fs_get(ram_fs_file_t* file, uint8_t fid)
Jeej 0:befc17558de9 24 {
Jeej 0:befc17558de9 25 if (file == NULL)
Jeej 0:befc17558de9 26 {
Jeej 0:befc17558de9 27 return NULL;
Jeej 0:befc17558de9 28 }
Jeej 0:befc17558de9 29
Jeej 0:befc17558de9 30 if (file->file_id == fid)
Jeej 0:befc17558de9 31 {
Jeej 0:befc17558de9 32 return file;
Jeej 0:befc17558de9 33 }
Jeej 0:befc17558de9 34
Jeej 0:befc17558de9 35 return ram_fs_get((ram_fs_file_t*)file->next, fid);
Jeej 0:befc17558de9 36 }
Jeej 0:befc17558de9 37
Jeej 0:befc17558de9 38 static bool ram_fs_remove(ram_fs_file_t** file, uint8_t fid)
Jeej 0:befc17558de9 39 {
Jeej 0:befc17558de9 40 if (*file == NULL)
Jeej 0:befc17558de9 41 {
Jeej 0:befc17558de9 42 // File does nor exist
Jeej 0:befc17558de9 43 return true;
Jeej 0:befc17558de9 44 }
Jeej 0:befc17558de9 45
Jeej 0:befc17558de9 46 if ((*file)->file_id == fid)
Jeej 0:befc17558de9 47 {
Jeej 0:befc17558de9 48 ram_fs_file_t* file_old = *file;
Jeej 0:befc17558de9 49 *file = (ram_fs_file_t*)file_old->next;
Jeej 0:befc17558de9 50 FREE(file_old);
Jeej 0:befc17558de9 51 return false;
Jeej 0:befc17558de9 52 }
Jeej 0:befc17558de9 53
Jeej 0:befc17558de9 54 return ram_fs_remove((ram_fs_file_t**)&((*file)->next), fid);
Jeej 0:befc17558de9 55 }
Jeej 0:befc17558de9 56
Jeej 0:befc17558de9 57 void ram_fs_new(uint8_t file_id, uint8_t* header, uint8_t* data)
Jeej 0:befc17558de9 58 {
Jeej 2:91473a2fac1c 59 RAM_FS_PRINT("NF(%d)\r\n", file_id);
Jeej 1:73a2c1814a34 60
Jeej 0:befc17558de9 61 ram_fs_file_t* file_new = (ram_fs_file_t*)MALLOC(sizeof(ram_fs_file_t));
Jeej 0:befc17558de9 62
Jeej 0:befc17558de9 63 file_new->file_id = file_id;
Jeej 0:befc17558de9 64 file_new->header = header;
Jeej 0:befc17558de9 65 file_new->data = data;
Jeej 0:befc17558de9 66 file_new->next = NULL;
Jeej 0:befc17558de9 67
Jeej 0:befc17558de9 68 ram_fs_append(&g_fs, file_new);
Jeej 0:befc17558de9 69 }
Jeej 0:befc17558de9 70
Jeej 0:befc17558de9 71 bool ram_fs_delete(uint8_t file_id)
Jeej 0:befc17558de9 72 {
Jeej 2:91473a2fac1c 73 RAM_FS_PRINT("DF(%d)\r\n", file_id);
Jeej 0:befc17558de9 74 return ram_fs_remove(&g_fs, file_id);
Jeej 0:befc17558de9 75 }
Jeej 0:befc17558de9 76
Jeej 0:befc17558de9 77 bool ram_fs_write(uint8_t file_id, uint16_t offset, uint16_t size, uint8_t* content)
Jeej 0:befc17558de9 78 {
Jeej 0:befc17558de9 79 ram_fs_file_t* file;
Jeej 0:befc17558de9 80
Jeej 2:91473a2fac1c 81 RAM_FS_PRINT("WF(%d)\r\n", file_id);
Jeej 0:befc17558de9 82
Jeej 0:befc17558de9 83 // Retrieve pointer to file
Jeej 0:befc17558de9 84 file = ram_fs_get(g_fs, file_id);
Jeej 0:befc17558de9 85
Jeej 0:befc17558de9 86 if (file == NULL)
Jeej 0:befc17558de9 87 {
Jeej 0:befc17558de9 88 return true;
Jeej 0:befc17558de9 89 }
Jeej 0:befc17558de9 90
Jeej 0:befc17558de9 91 // Write the new data
Jeej 0:befc17558de9 92 memcpy((void*)(file->data+offset), (void*)content, size);
Jeej 0:befc17558de9 93
Jeej 0:befc17558de9 94 return false;
Jeej 0:befc17558de9 95 }
Jeej 0:befc17558de9 96
Jeej 0:befc17558de9 97 bool ram_fs_read(uint8_t file_id, uint16_t offset, uint16_t size, uint8_t* buf)
Jeej 0:befc17558de9 98 {
Jeej 0:befc17558de9 99 ram_fs_file_t* file;
Jeej 0:befc17558de9 100
Jeej 2:91473a2fac1c 101 RAM_FS_PRINT("RF(%d)\r\n", file_id);
Jeej 0:befc17558de9 102
Jeej 0:befc17558de9 103 // Retrieve pointer to file
Jeej 0:befc17558de9 104 file = ram_fs_get(g_fs, file_id);
Jeej 0:befc17558de9 105
Jeej 0:befc17558de9 106 if (file == NULL)
Jeej 0:befc17558de9 107 {
Jeej 0:befc17558de9 108 return true;
Jeej 0:befc17558de9 109 }
Jeej 0:befc17558de9 110
Jeej 0:befc17558de9 111 // Read data
Jeej 0:befc17558de9 112 memcpy((void*)buf, (void*)(file->data+offset), size);
Jeej 0:befc17558de9 113
Jeej 0:befc17558de9 114 return false;
Jeej 0:befc17558de9 115 }
Jeej 0:befc17558de9 116
Jeej 0:befc17558de9 117 void* ram_fs_get_header(uint8_t file_id)
Jeej 0:befc17558de9 118 {
Jeej 0:befc17558de9 119 ram_fs_file_t* file;
Jeej 0:befc17558de9 120
Jeej 2:91473a2fac1c 121 RAM_FS_PRINT("RH(%d)\r\n", file_id);
Jeej 0:befc17558de9 122
Jeej 0:befc17558de9 123 // Retrieve pointer to file
Jeej 0:befc17558de9 124 file = ram_fs_get(g_fs, file_id);
Jeej 0:befc17558de9 125
Jeej 1:73a2c1814a34 126 //ASSERT(file != NULL, "File %d does not exist!\r\n", file_id);
Jeej 0:befc17558de9 127
Jeej 1:73a2c1814a34 128 if (file == NULL)
Jeej 1:73a2c1814a34 129 {
Jeej 1:73a2c1814a34 130 return NULL;
Jeej 1:73a2c1814a34 131 }
Jeej 1:73a2c1814a34 132 else
Jeej 1:73a2c1814a34 133 {
Jeej 1:73a2c1814a34 134 // Return header pointer
Jeej 1:73a2c1814a34 135 return file->header;
Jeej 1:73a2c1814a34 136 }
Jeej 0:befc17558de9 137 }