| 44 | SPIFFS_ALIGNED_OBJECT_INDEX_TABLES = True |
| 45 | |
| 46 | class SpiffsBuildConfig(): |
| 47 | def __init__(self, page_size, page_ix_len, block_size, |
| 48 | block_ix_len, meta_len, obj_name_len, obj_id_len, |
| 49 | span_ix_len, packed, aligned, endianness, use_magic, use_magic_len): |
| 50 | if block_size % page_size != 0: |
| 51 | raise RuntimeError('block size should be a multiple of page size') |
| 52 | |
| 53 | self.page_size = page_size |
| 54 | self.block_size = block_size |
| 55 | self.obj_id_len = obj_id_len |
| 56 | self.span_ix_len = span_ix_len |
| 57 | self.packed = packed |
| 58 | self.aligned = aligned |
| 59 | self.obj_name_len = obj_name_len |
| 60 | self.meta_len = meta_len |
| 61 | self.page_ix_len = page_ix_len |
| 62 | self.block_ix_len = block_ix_len |
| 63 | self.endianness = endianness |
| 64 | self.use_magic = use_magic |
| 65 | self.use_magic_len = use_magic_len |
| 66 | |
| 67 | self.PAGES_PER_BLOCK = self.block_size // self.page_size |
| 68 | self.OBJ_LU_PAGES_PER_BLOCK = int(math.ceil(self.block_size / self.page_size * self.obj_id_len / self.page_size)) |
| 69 | self.OBJ_USABLE_PAGES_PER_BLOCK = self.PAGES_PER_BLOCK - self.OBJ_LU_PAGES_PER_BLOCK |
| 70 | |
| 71 | self.OBJ_LU_PAGES_OBJ_IDS_LIM = self.page_size // self.obj_id_len |
| 72 | |
| 73 | self.OBJ_DATA_PAGE_HEADER_LEN = self.obj_id_len + self.span_ix_len + SPIFFS_PH_FLAG_LEN |
| 74 | |
| 75 | pad = 4 - (4 if self.OBJ_DATA_PAGE_HEADER_LEN % 4 == 0 else self.OBJ_DATA_PAGE_HEADER_LEN % 4) |
| 76 | |
| 77 | self.OBJ_DATA_PAGE_HEADER_LEN_ALIGNED = self.OBJ_DATA_PAGE_HEADER_LEN + pad |
| 78 | self.OBJ_DATA_PAGE_HEADER_LEN_ALIGNED_PAD = pad |
| 79 | self.OBJ_DATA_PAGE_CONTENT_LEN = self.page_size - self.OBJ_DATA_PAGE_HEADER_LEN |
| 80 | |
| 81 | self.OBJ_INDEX_PAGES_HEADER_LEN = (self.OBJ_DATA_PAGE_HEADER_LEN_ALIGNED + SPIFFS_PH_IX_SIZE_LEN + |
| 82 | SPIFFS_PH_IX_OBJ_TYPE_LEN + self.obj_name_len + self.meta_len) |
| 83 | self.OBJ_INDEX_PAGES_OBJ_IDS_HEAD_LIM = (self.page_size - self.OBJ_INDEX_PAGES_HEADER_LEN) // self.block_ix_len |
| 84 | self.OBJ_INDEX_PAGES_OBJ_IDS_LIM = (self.page_size - self.OBJ_DATA_PAGE_HEADER_LEN_ALIGNED) / self.block_ix_len |
| 85 | |
| 86 | |
| 87 | class SpiffsFullError(RuntimeError): |