fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
rklaassen
Date:
Tue Jan 15 09:25:58 2019 -0600
Revision:
8:7ba1f2abb8c0
Parent:
3:63d10f2375ea
README test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 /*
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 * spiffs_nucleus.h
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4 * Created on: Jun 15, 2013
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 * Author: petera
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8 /* SPIFFS layout
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10 * spiffs is designed for following spi flash characteristics:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 * - only big areas of data (blocks) can be erased
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12 * - erasing resets all bits in a block to ones
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 * - writing pulls ones to zeroes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 * - zeroes cannot be pulled to ones, without erase
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15 * - wear leveling
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17 * spiffs is also meant to be run on embedded, memory constraint devices.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 * Entire area is divided in blocks. Entire area is also divided in pages.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 * Each block contains same number of pages. A page cannot be erased, but a
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21 * block can be erased.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 * Entire area must be block_size * x
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 * page_size must be block_size / (2^y) where y > 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 * ex: area = 1024*1024 bytes, block size = 65536 bytes, page size = 256 bytes
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 * BLOCK 0 PAGE 0 object lookup 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 * PAGE 1 object lookup 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31 * PAGE n-1 object lookup n
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 * PAGE n object data 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 * PAGE n+1 object data 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 * PAGE n+m-1 object data m
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 * BLOCK 1 PAGE n+m object lookup 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38 * PAGE n+m+1 object lookup 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 * PAGE 2n+m-1 object lookup n
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 * PAGE 2n+m object data 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42 * PAGE 2n+m object data 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 * PAGE 2n+2m-1 object data m
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47 * n is number of object lookup pages, which is number of pages needed to index all pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 * in a block by object id
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 * : block_size / page_size * sizeof(obj_id) / page_size
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50 * m is number data pages, which is number of pages in block minus number of lookup pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51 * : block_size / page_size - block_size / page_size * sizeof(obj_id) / page_size
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 * thus, n+m is total number of pages in a block
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 * : block_size / page_size
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 * ex: n = 65536/256*2/256 = 2, m = 65536/256 - 2 = 254 => n+m = 65536/256 = 256
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 * Object lookup pages contain object id entries. Each entry represent the corresponding
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 * data page.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 * Assuming a 16 bit object id, an object id being 0xffff represents a free page.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 * An object id being 0x0000 represents a deleted page.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 * ex: page 0 : lookup : 0008 0001 0aaa ffff ffff ffff ffff ffff ..
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 * page 1 : lookup : ffff ffff ffff ffff ffff ffff ffff ffff ..
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 * page 2 : data : data for object id 0008
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65 * page 3 : data : data for object id 0001
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 * page 4 : data : data for object id 0aaa
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 * ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70 * Object data pages can be either object index pages or object content.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 * All object data pages contains a data page header, containing object id and span index.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 * The span index denotes the object page ordering amongst data pages with same object id.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 * This applies to both object index pages (when index spans more than one page of entries),
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 * and object data pages.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 * An object index page contains page entries pointing to object content page. The entry index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 * in a object index page correlates to the span index in the actual object data page.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77 * The first object index page (span index 0) is called object index header page, and also
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 * contains object flags (directory/file), size, object name etc.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 * ex:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 * BLOCK 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 * PAGE 256: objectl lookup page 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 * [*123] [ 123] [ 123] [ 123]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 * [ 123] [*123] [ 123] [ 123]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85 * [free] [free] [free] [free] ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 * PAGE 257: objectl lookup page 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 * [free] [free] [free] [free] ...
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 * PAGE 258: object index page (header)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89 * obj.id:0123 span.ix:0000 flags:INDEX
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 * size:1600 name:ex.txt type:file
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 * [259] [260] [261] [262]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 * PAGE 259: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 * obj.id:0123 span.ix:0000 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 * PAGE 260: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 * obj.id:0123 span.ix:0001 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 * PAGE 261: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97 * obj.id:0123 span.ix:0002 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 * PAGE 262: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99 * obj.id:0123 span.ix:0003 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 * PAGE 263: object index page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 * obj.id:0123 span.ix:0001 flags:INDEX
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 * [264] [265] [fre] [fre]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 * [fre] [fre] [fre] [fre]
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104 * PAGE 264: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 * obj.id:0123 span.ix:0004 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 * PAGE 265: object data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 * obj.id:0123 span.ix:0005 flags:DATA
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 109 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 110 #ifndef SPIFFS_NUCLEUS_H_
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 111 #define SPIFFS_NUCLEUS_H_
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 112
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 113 #define _SPIFFS_ERR_CHECK_FIRST (SPIFFS_ERR_INTERNAL - 1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 114 #define SPIFFS_ERR_CHECK_OBJ_ID_MISM (SPIFFS_ERR_INTERNAL - 1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 115 #define SPIFFS_ERR_CHECK_SPIX_MISM (SPIFFS_ERR_INTERNAL - 2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 116 #define SPIFFS_ERR_CHECK_FLAGS_BAD (SPIFFS_ERR_INTERNAL - 3)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 117 #define _SPIFFS_ERR_CHECK_LAST (SPIFFS_ERR_INTERNAL - 4)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 118
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 119 #define SPIFFS_VIS_COUNTINUE (SPIFFS_ERR_INTERNAL - 20)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 120 #define SPIFFS_VIS_COUNTINUE_RELOAD (SPIFFS_ERR_INTERNAL - 21)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 121 #define SPIFFS_VIS_END (SPIFFS_ERR_INTERNAL - 22)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 122
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 123 #define SPIFFS_EV_IX_UPD 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 124 #define SPIFFS_EV_IX_NEW 1
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 125 #define SPIFFS_EV_IX_DEL 2
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 126
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 127 #define SPIFFS_OBJ_ID_IX_FLAG (1<<(8*sizeof(spiffs_obj_id)-1))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 128
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 129 #define SPIFFS_UNDEFINED_LEN (-1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 130
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 131 #define SPIFFS_OBJ_ID_DELETED ((spiffs_obj_id)0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 132 #define SPIFFS_OBJ_ID_FREE ((spiffs_obj_id)-1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 133
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 134 #if SPIFFS_SINGLETON == 0
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 135 #define SPIFFS_CFG_LOG_PAGE_SZ(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 136 ((fs)->cfg.log_page_size)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 137 #define SPIFFS_CFG_LOG_BLOCK_SZ(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 138 ((fs)->cfg.log_block_size)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 139 #define SPIFFS_CFG_PHYS_SZ(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 140 ((fs)->cfg.phys_size)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 141 #define SPIFFS_CFG_PHYS_ERASE_SZ(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 142 ((fs)->cfg.phys_erase_block)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 143 #define SPIFFS_CFG_PHYS_ADDR(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 144 ((fs)->cfg.phys_addr)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 145 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 146
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 147 // total number of pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 148 #define SPIFFS_MAX_PAGES(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 149 ( SPIFFS_CFG_PHYS_SZ(fs)/SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 150 // total number of pages per block, including object lookup pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 151 #define SPIFFS_PAGES_PER_BLOCK(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 152 ( SPIFFS_CFG_LOG_BLOCK_SZ(fs)/SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 153 // number of object lookup pages per block
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 154 #define SPIFFS_OBJ_LOOKUP_PAGES(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 155 (MAX(1, (SPIFFS_PAGES_PER_BLOCK(fs) * sizeof(spiffs_obj_id)) / SPIFFS_CFG_LOG_PAGE_SZ(fs)) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 156 // checks if page index belongs to object lookup
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 157 #define SPIFFS_IS_LOOKUP_PAGE(fs,pix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 158 (((pix) % SPIFFS_PAGES_PER_BLOCK(fs)) < SPIFFS_OBJ_LOOKUP_PAGES(fs))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 159 // number of object lookup entries in all object lookup pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 160 #define SPIFFS_OBJ_LOOKUP_MAX_ENTRIES(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 161 (SPIFFS_PAGES_PER_BLOCK(fs)-SPIFFS_OBJ_LOOKUP_PAGES(fs))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 162 // converts a block to physical address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 163 #define SPIFFS_BLOCK_TO_PADDR(fs, block) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 164 ( SPIFFS_CFG_PHYS_ADDR(fs) + (block)* SPIFFS_CFG_LOG_BLOCK_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 165 // converts a object lookup entry to page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 166 #define SPIFFS_OBJ_LOOKUP_ENTRY_TO_PIX(fs, block, entry) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 167 ((block)*SPIFFS_PAGES_PER_BLOCK(fs) + (SPIFFS_OBJ_LOOKUP_PAGES(fs) + entry))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 168 // converts a object lookup entry to physical address of corresponding page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 169 #define SPIFFS_OBJ_LOOKUP_ENTRY_TO_PADDR(fs, block, entry) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 170 (SPIFFS_BLOCK_TO_PADDR(fs, block) + (SPIFFS_OBJ_LOOKUP_PAGES(fs) + entry) * SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 171 // converts a page to physical address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 172 #define SPIFFS_PAGE_TO_PADDR(fs, page) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 173 ( SPIFFS_CFG_PHYS_ADDR(fs) + (page) * SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 174 // converts a physical address to page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 175 #define SPIFFS_PADDR_TO_PAGE(fs, addr) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 176 ( ((addr) - SPIFFS_CFG_PHYS_ADDR(fs)) / SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 177 // gives index in page for a physical address
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 178 #define SPIFFS_PADDR_TO_PAGE_OFFSET(fs, addr) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 179 ( ((addr) - SPIFFS_CFG_PHYS_ADDR(fs)) % SPIFFS_CFG_LOG_PAGE_SZ(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 180 // returns containing block for given page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 181 #define SPIFFS_BLOCK_FOR_PAGE(fs, page) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 182 ( (page) / SPIFFS_PAGES_PER_BLOCK(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 183 // returns starting page for block
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 184 #define SPIFFS_PAGE_FOR_BLOCK(fs, block) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 185 ( (block) * SPIFFS_PAGES_PER_BLOCK(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 186 // converts page to entry in object lookup page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 187 #define SPIFFS_OBJ_LOOKUP_ENTRY_FOR_PAGE(fs, page) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 188 ( (page) % SPIFFS_PAGES_PER_BLOCK(fs) - SPIFFS_OBJ_LOOKUP_PAGES(fs) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 189 // returns data size in a data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 190 #define SPIFFS_DATA_PAGE_SIZE(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 191 ( SPIFFS_CFG_LOG_PAGE_SZ(fs) - sizeof(spiffs_page_header) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 192 // returns physical address for block's erase count
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 193 #define SPIFFS_ERASE_COUNT_PADDR(fs, bix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 194 ( SPIFFS_BLOCK_TO_PADDR(fs, bix) + SPIFFS_OBJ_LOOKUP_PAGES(fs) * SPIFFS_CFG_LOG_PAGE_SZ(fs) - sizeof(spiffs_obj_id) )
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 195
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 196 // define helpers object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 197
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 198 // entries in an object header page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 199 #define SPIFFS_OBJ_HDR_IX_LEN(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 200 ((SPIFFS_CFG_LOG_PAGE_SZ(fs) - sizeof(spiffs_page_object_ix_header))/sizeof(spiffs_page_ix))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 201 // entries in an object page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 202 #define SPIFFS_OBJ_IX_LEN(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 203 ((SPIFFS_CFG_LOG_PAGE_SZ(fs) - sizeof(spiffs_page_object_ix))/sizeof(spiffs_page_ix))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 204 // object index entry for given data span index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 205 #define SPIFFS_OBJ_IX_ENTRY(fs, spix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 206 ((spix) < SPIFFS_OBJ_HDR_IX_LEN(fs) ? (spix) : (((spix)-SPIFFS_OBJ_HDR_IX_LEN(fs))%SPIFFS_OBJ_IX_LEN(fs)))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 207 // object index span index number for given data span index or entry
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 208 #define SPIFFS_OBJ_IX_ENTRY_SPAN_IX(fs, spix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 209 ((spix) < SPIFFS_OBJ_HDR_IX_LEN(fs) ? 0 : (1+((spix)-SPIFFS_OBJ_HDR_IX_LEN(fs))/SPIFFS_OBJ_IX_LEN(fs)))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 210
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 211
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 212 #define SPIFFS_OP_T_OBJ_LU (0<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 213 #define SPIFFS_OP_T_OBJ_LU2 (1<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 214 #define SPIFFS_OP_T_OBJ_IX (2<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 215 #define SPIFFS_OP_T_OBJ_DA (3<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 216 #define SPIFFS_OP_C_DELE (0<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 217 #define SPIFFS_OP_C_UPDT (1<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 218 #define SPIFFS_OP_C_MOVS (2<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 219 #define SPIFFS_OP_C_MOVD (3<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 220 #define SPIFFS_OP_C_FLSH (4<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 221 #define SPIFFS_OP_C_READ (5<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 222 #define SPIFFS_OP_C_WRTHRU (6<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 223
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 224 #define SPIFFS_OP_TYPE_MASK (3<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 225 #define SPIFFS_OP_COM_MASK (7<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 226
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 227
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 228 // if 0, this page is written to, else clean
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 229 #define SPIFFS_PH_FLAG_USED (1<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 230 // if 0, writing is finalized, else under modification
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 231 #define SPIFFS_PH_FLAG_FINAL (1<<1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 232 // if 0, this is an index page, else a data page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 233 #define SPIFFS_PH_FLAG_INDEX (1<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 234 // if 0, page is deleted, else valid
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 235 #define SPIFFS_PH_FLAG_DELET (1<<7)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 236 // if 0, this index header is being deleted
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 237 #define SPIFFS_PH_FLAG_IXDELE (1<<6)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 238
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 239
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 240 #define SPIFFS_CHECK_MOUNT(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 241 ((fs)->block_count > 0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 242
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 243 #define SPIFFS_CHECK_RES(res) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 244 do { \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 245 if ((res) < SPIFFS_OK) return (res); \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 246 } while (0);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 247
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 248 #define SPIFFS_API_CHECK_MOUNT(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 249 if (!SPIFFS_CHECK_MOUNT((fs))) { \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 250 (fs)->err_code = SPIFFS_ERR_NOT_MOUNTED; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 251 return -1; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 252 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 253
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 254 #define SPIFFS_API_CHECK_RES(fs, res) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 255 if ((res) < SPIFFS_OK) { \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 256 (fs)->err_code = (res); \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 257 return -1; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 258 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 259
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 260 #define SPIFFS_API_CHECK_RES_UNLOCK(fs, res) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 261 if ((res) < SPIFFS_OK) { \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 262 (fs)->err_code = (res); \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 263 SPIFFS_UNLOCK(fs); \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 264 return -1; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 265 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 266
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 267 #define SPIFFS_VALIDATE_OBJIX(ph, objid, spix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 268 if (((ph).flags & SPIFFS_PH_FLAG_USED) != 0) return SPIFFS_ERR_IS_FREE; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 269 if (((ph).flags & SPIFFS_PH_FLAG_DELET) == 0) return SPIFFS_ERR_DELETED; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 270 if (((ph).flags & SPIFFS_PH_FLAG_FINAL) != 0) return SPIFFS_ERR_NOT_FINALIZED; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 271 if (((ph).flags & SPIFFS_PH_FLAG_INDEX) != 0) return SPIFFS_ERR_NOT_INDEX; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 272 if (((objid) & SPIFFS_OBJ_ID_IX_FLAG) == 0) return SPIFFS_ERR_NOT_INDEX; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 273 if ((ph).span_ix != (spix)) return SPIFFS_ERR_INDEX_SPAN_MISMATCH;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 274 //if ((spix) == 0 && ((ph).flags & SPIFFS_PH_FLAG_IXDELE) == 0) return SPIFFS_ERR_DELETED;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 275
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 276 #define SPIFFS_VALIDATE_DATA(ph, objid, spix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 277 if (((ph).flags & SPIFFS_PH_FLAG_USED) != 0) return SPIFFS_ERR_IS_FREE; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 278 if (((ph).flags & SPIFFS_PH_FLAG_DELET) == 0) return SPIFFS_ERR_DELETED; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 279 if (((ph).flags & SPIFFS_PH_FLAG_FINAL) != 0) return SPIFFS_ERR_NOT_FINALIZED; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 280 if (((ph).flags & SPIFFS_PH_FLAG_INDEX) == 0) return SPIFFS_ERR_IS_INDEX; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 281 if ((objid) & SPIFFS_OBJ_ID_IX_FLAG) return SPIFFS_ERR_IS_INDEX; \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 282 if ((ph).span_ix != (spix)) return SPIFFS_ERR_DATA_SPAN_MISMATCH;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 283
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 284
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 285 // check id
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 286 #define SPIFFS_VIS_CHECK_ID (1<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 287 // report argument object id to visitor - else object lookup id is reported
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 288 #define SPIFFS_VIS_CHECK_PH (1<<1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 289 // stop searching at end of all look up pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 290 #define SPIFFS_VIS_NO_WRAP (1<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 291
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 292 #if SPIFFS_CACHE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 293
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 294 #define SPIFFS_CACHE_FLAG_DIRTY (1<<0)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 295 #define SPIFFS_CACHE_FLAG_WRTHRU (1<<1)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 296 #define SPIFFS_CACHE_FLAG_OBJLU (1<<2)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 297 #define SPIFFS_CACHE_FLAG_OBJIX (1<<3)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 298 #define SPIFFS_CACHE_FLAG_DATA (1<<4)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 299 #define SPIFFS_CACHE_FLAG_TYPE_WR (1<<7)
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 300
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 301 #define SPIFFS_CACHE_PAGE_SIZE(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 302 (sizeof(spiffs_cache_page) + SPIFFS_CFG_LOG_PAGE_SZ(fs))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 303
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 304 #define spiffs_get_cache(fs) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 305 ((spiffs_cache *)((fs)->cache))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 306
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 307 #define spiffs_get_cache_page_hdr(fs, c, ix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 308 ((spiffs_cache_page *)(&((c)->cpages[(ix) * SPIFFS_CACHE_PAGE_SIZE(fs)])))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 309
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 310 #define spiffs_get_cache_page(fs, c, ix) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 311 ((u8_t *)(&((c)->cpages[(ix) * SPIFFS_CACHE_PAGE_SIZE(fs)])) + sizeof(spiffs_cache_page))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 312
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 313 // cache page struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 314 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 315 // cache flags
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 316 u8_t flags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 317 // cache page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 318 u8_t ix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 319 // last access of this cache page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 320 u32_t last_access;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 321 union {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 322 // type read cache
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 323 struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 324 // read cache page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 325 spiffs_page_ix pix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 326 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 327 #if SPIFFS_CACHE_WR
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 328 // type write cache
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 329 struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 330 // write cache
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 331 spiffs_obj_id obj_id;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 332 // offset in cache page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 333 u32_t offset;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 334 // size of cache page
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 335 u16_t size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 336 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 337 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 338 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 339 } spiffs_cache_page;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 340
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 341 // cache struct
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 342 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 343 u8_t cpage_count;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 344 u32_t last_access;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 345 u32_t cpage_use_map;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 346 u32_t cpage_use_mask;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 347 u8_t *cpages;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 348 } spiffs_cache;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 349
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 350 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 351
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 352
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 353 // spiffs nucleus file descriptor
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 354 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 355 // the filesystem of this descriptor
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 356 spiffs *fs;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 357 // number of file descriptor - if 0, the file descriptor is closed
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 358 spiffs_file file_nbr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 359 // object id - if SPIFFS_OBJ_ID_ERASED, the file was deleted
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 360 spiffs_obj_id obj_id;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 361 // size of the file
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 362 u32_t size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 363 // cached object index header page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 364 spiffs_page_ix objix_hdr_pix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 365 // cached offset object index page index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 366 spiffs_page_ix cursor_objix_pix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 367 // cached offset object index span index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 368 spiffs_span_ix cursor_objix_spix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 369 // current absolute offset
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 370 u32_t offset;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 371 // current file descriptor offset
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 372 u32_t fdoffset;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 373 // fd flags
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 374 spiffs_flags flags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 375 #if SPIFFS_CACHE_WR
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 376 spiffs_cache_page *cache_page;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 377 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 378 } spiffs_fd;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 379
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 380
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 381 // object structs
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 382
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 383 // page header, part of each page except object lookup pages
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 384 #ifdef __ICCARM__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 385 typedef __packed struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 386 #else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 387 typedef struct __attribute(( packed )) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 388 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 389 // object id
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 390 spiffs_obj_id obj_id;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 391 // object span index
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 392 spiffs_span_ix span_ix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 393 // flags
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 394 u8_t flags;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 395 } spiffs_page_header;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 396
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 397 // object index header page header
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 398 #ifdef __ICCARM__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 399 typedef __packed struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 400 #else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 401 typedef struct __attribute(( packed )) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 402 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 403 // common page header
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 404 spiffs_page_header p_hdr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 405 // alignment
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 406 u8_t _align[4 - (sizeof(spiffs_page_header)&3)==0 ? 4 : (sizeof(spiffs_page_header)&3)];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 407 // size of object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 408 u32_t size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 409 // type of object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 410 spiffs_obj_type type;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 411 // name of object
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 412 u8_t name[SPIFFS_OBJ_NAME_LEN];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 413 } spiffs_page_object_ix_header;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 414
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 415 // object index page header
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 416 #ifdef __ICCARM__
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 417 typedef __packed struct {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 418 #else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 419 typedef struct __attribute(( packed )) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 420 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 421 spiffs_page_header p_hdr;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 422 u8_t _align[4 - (sizeof(spiffs_page_header)&3)==0 ? 4 : (sizeof(spiffs_page_header)&3)];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 423 } spiffs_page_object_ix;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 424
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 425 // callback func for object lookup visitor
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 426 typedef s32_t (*spiffs_visitor_f)(spiffs *fs, spiffs_obj_id id, spiffs_block_ix bix, int ix_entry,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 427 u32_t user_data, void *user_p);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 428
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 429
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 430 #if SPIFFS_CACHE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 431 #define _spiffs_rd(fs, op, fh, addr, len, dst) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 432 spiffs_phys_rd((fs), (op), (fh), (addr), (len), (dst))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 433 #define _spiffs_wr(fs, op, fh, addr, len, src) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 434 spiffs_phys_wr((fs), (op), (fh), (addr), (len), (src))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 435 #else
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 436 #define _spiffs_rd(fs, op, fh, addr, len, dst) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 437 spiffs_phys_rd((fs), (addr), (len), (dst))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 438 #define _spiffs_wr(fs, op, fh, addr, len, src) \
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 439 spiffs_phys_wr((fs), (addr), (len), (src))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 440 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 441
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 442 #ifndef MIN
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 443 #define MIN(a,b) ((a) < (b) ? (a) : (b))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 444 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 445 #ifndef MAX
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 446 #define MAX(a,b) ((a) > (b) ? (a) : (b))
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 447 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 448
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 449 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 450
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 451 s32_t spiffs_phys_rd(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 452 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 453 #if SPIFFS_CACHE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 454 u8_t op,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 455 spiffs_file fh,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 456 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 457 u32_t addr,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 458 u32_t len,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 459 u8_t *dst);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 460
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 461 s32_t spiffs_phys_wr(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 462 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 463 #if SPIFFS_CACHE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 464 u8_t op,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 465 spiffs_file fh,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 466 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 467 u32_t addr,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 468 u32_t len,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 469 u8_t *src);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 470
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 471 s32_t spiffs_phys_cpy(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 472 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 473 spiffs_file fh,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 474 u32_t dst,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 475 u32_t src,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 476 u32_t len);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 477
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 478 s32_t spiffs_phys_count_free_blocks(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 479 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 480
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 481 s32_t spiffs_obj_lu_find_entry_visitor(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 482 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 483 spiffs_block_ix starting_block,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 484 int starting_lu_entry,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 485 u8_t flags,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 486 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 487 spiffs_visitor_f v,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 488 u32_t user_data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 489 void *user_p,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 490 spiffs_block_ix *block_ix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 491 int *lu_entry);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 492
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 493 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 494
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 495 s32_t spiffs_obj_lu_scan(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 496 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 497
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 498 s32_t spiffs_obj_lu_find_free_obj_id(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 499 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 500 spiffs_obj_id *obj_id);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 501
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 502 s32_t spiffs_obj_lu_find_free(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 503 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 504 spiffs_block_ix starting_block,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 505 int starting_lu_entry,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 506 spiffs_block_ix *block_ix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 507 int *lu_entry);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 508
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 509 s32_t spiffs_obj_lu_find_id(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 510 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 511 spiffs_block_ix starting_block,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 512 int starting_lu_entry,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 513 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 514 spiffs_block_ix *block_ix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 515 int *lu_entry);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 516
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 517 s32_t spiffs_obj_lu_find_id_and_span(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 518 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 519 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 520 spiffs_span_ix spix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 521 spiffs_page_ix exclusion_pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 522 spiffs_page_ix *pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 523
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 524 s32_t spiffs_obj_lu_find_id_and_span_by_phdr(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 525 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 526 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 527 spiffs_span_ix spix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 528 spiffs_page_ix exclusion_pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 529 spiffs_page_ix *pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 530
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 531 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 532
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 533 s32_t spiffs_page_allocate_data(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 534 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 535 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 536 spiffs_page_header *ph,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 537 u8_t *data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 538 u32_t len,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 539 u32_t page_offs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 540 u8_t finalize,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 541 spiffs_page_ix *pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 542
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 543 s32_t spiffs_page_move(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 544 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 545 spiffs_file fh,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 546 u8_t *page_data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 547 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 548 spiffs_page_header *page_hdr,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 549 spiffs_page_ix src_pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 550 spiffs_page_ix *dst_pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 551
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 552 s32_t spiffs_page_delete(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 553 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 554 spiffs_page_ix pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 555
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 556 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 557
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 558 s32_t spiffs_object_create(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 559 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 560 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 561 u8_t name[SPIFFS_OBJ_NAME_LEN],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 562 spiffs_obj_type type,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 563 spiffs_page_ix *objix_hdr_pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 564
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 565 s32_t spiffs_object_update_index_hdr(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 566 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 567 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 568 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 569 spiffs_page_ix objix_hdr_pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 570 u8_t *new_objix_hdr_data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 571 u8_t name[SPIFFS_OBJ_NAME_LEN],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 572 u32_t size,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 573 spiffs_page_ix *new_pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 574
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 575 void spiffs_cb_object_event(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 576 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 577 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 578 int ev,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 579 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 580 spiffs_span_ix spix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 581 spiffs_page_ix new_pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 582 u32_t new_size);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 583
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 584 s32_t spiffs_object_open_by_id(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 585 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 586 spiffs_obj_id obj_id,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 587 spiffs_fd *f,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 588 spiffs_flags flags,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 589 spiffs_mode mode);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 590
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 591 s32_t spiffs_object_open_by_page(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 592 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 593 spiffs_page_ix pix,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 594 spiffs_fd *f,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 595 spiffs_flags flags,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 596 spiffs_mode mode);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 597
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 598 s32_t spiffs_object_append(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 599 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 600 u32_t offset,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 601 u8_t *data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 602 u32_t len);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 603
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 604 s32_t spiffs_object_modify(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 605 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 606 u32_t offset,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 607 u8_t *data,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 608 u32_t len);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 609
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 610 s32_t spiffs_object_read(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 611 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 612 u32_t offset,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 613 u32_t len,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 614 u8_t *dst);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 615
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 616 s32_t spiffs_object_truncate(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 617 spiffs_fd *fd,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 618 u32_t new_len,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 619 u8_t remove_object);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 620
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 621 s32_t spiffs_object_find_object_index_header_by_name(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 622 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 623 u8_t name[SPIFFS_OBJ_NAME_LEN],
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 624 spiffs_page_ix *pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 625
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 626 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 627
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 628 s32_t spiffs_gc_check(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 629 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 630 u32_t len);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 631
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 632 s32_t spiffs_gc_erase_page_stats(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 633 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 634 spiffs_block_ix bix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 635
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 636 s32_t spiffs_gc_find_candidate(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 637 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 638 spiffs_block_ix **block_candidate,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 639 int *candidate_count);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 640
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 641 s32_t spiffs_gc_clean(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 642 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 643 spiffs_block_ix bix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 644
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 645 s32_t spiffs_gc_quick(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 646 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 647
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 648 // ---------------
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 649
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 650 s32_t spiffs_fd_find_new(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 651 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 652 spiffs_fd **fd);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 653
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 654 s32_t spiffs_fd_return(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 655 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 656 spiffs_file f);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 657
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 658 s32_t spiffs_fd_get(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 659 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 660 spiffs_file f,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 661 spiffs_fd **fd);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 662
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 663 #if SPIFFS_CACHE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 664 void spiffs_cache_init(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 665 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 666
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 667 void spiffs_cache_drop_page(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 668 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 669 spiffs_page_ix pix);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 670
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 671 #if SPIFFS_CACHE_WR
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 672 spiffs_cache_page *spiffs_cache_page_allocate_by_fd(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 673 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 674 spiffs_fd *fd);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 675
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 676 void spiffs_cache_fd_release(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 677 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 678 spiffs_cache_page *cp);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 679
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 680 spiffs_cache_page *spiffs_cache_page_get_by_fd(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 681 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 682 spiffs_fd *fd);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 683 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 684 #endif
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 685
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 686 s32_t spiffs_lookup_consistency_check(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 687 spiffs *fs,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 688 u8_t check_all_objects);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 689
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 690 s32_t spiffs_page_consistency_check(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 691 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 692
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 693 s32_t spiffs_object_index_consistency_check(
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 694 spiffs *fs);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 695
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 696 #endif /* SPIFFS_NUCLEUS_H_ */