mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-20 18:40:31 +00:00
btstack_tlv_flash_bank: cache bank size in interator
This commit is contained in:
parent
c299d189d6
commit
4c7f527567
@ -83,13 +83,14 @@ static const char * btstack_tlv_header_magic = "BTstack";
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
int bank;
|
int bank;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
uint32_t size;
|
||||||
uint32_t tag;
|
uint32_t tag;
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
} tlv_iterator_t;
|
} tlv_iterator_t;
|
||||||
|
|
||||||
static uint32_t btstack_tlv_flash_bank_align_size(btstack_tlv_flash_bank_t * self, uint32_t size){
|
static uint32_t btstack_tlv_flash_bank_align_size(btstack_tlv_flash_bank_t * self, uint32_t size){
|
||||||
uint32_t aligment = self->hal_flash_bank_impl->get_alignment(self->hal_flash_bank_context);
|
uint32_t alignment = self->hal_flash_bank_impl->get_alignment(self->hal_flash_bank_context);
|
||||||
return (size + aligment - 1) & ~(aligment - 1);
|
return (size + alignment - 1) & ~(alignment - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// support unaligned flash read/writes
|
// support unaligned flash read/writes
|
||||||
@ -141,6 +142,7 @@ static void btstack_tlv_flash_bank_write(btstack_tlv_flash_bank_t * self, int ba
|
|||||||
// iterator
|
// iterator
|
||||||
|
|
||||||
static void btstack_tlv_flash_bank_iterator_fetch_tag_len(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
static void btstack_tlv_flash_bank_iterator_fetch_tag_len(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
||||||
|
// abort if header doesn't fit into remaining space
|
||||||
if (it->offset + 8 + self->delete_tag_len >= self->hal_flash_bank_impl->get_size(self->hal_flash_bank_context)){
|
if (it->offset + 8 + self->delete_tag_len >= self->hal_flash_bank_impl->get_size(self->hal_flash_bank_context)){
|
||||||
it->tag = 0xffffffff;
|
it->tag = 0xffffffff;
|
||||||
return;
|
return;
|
||||||
@ -165,13 +167,13 @@ static void btstack_tlv_flash_bank_iterator_init(btstack_tlv_flash_bank_t * self
|
|||||||
memset(it, 0, sizeof(tlv_iterator_t));
|
memset(it, 0, sizeof(tlv_iterator_t));
|
||||||
it->bank = bank;
|
it->bank = bank;
|
||||||
it->offset = BTSTACK_TLV_HEADER_LEN;
|
it->offset = BTSTACK_TLV_HEADER_LEN;
|
||||||
|
it->size = self->hal_flash_bank_impl->get_size(self->hal_flash_bank_context);
|
||||||
btstack_tlv_flash_bank_iterator_fetch_tag_len(self, it);
|
btstack_tlv_flash_bank_iterator_fetch_tag_len(self, it);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int btstack_tlv_flash_bank_iterator_has_next(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
static bool btstack_tlv_flash_bank_iterator_has_next(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
||||||
UNUSED(self);
|
UNUSED(self);
|
||||||
if (it->tag == 0xffffffff) return 0;
|
return it->tag != 0xffffffff;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tlv_iterator_fetch_next(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
static void tlv_iterator_fetch_next(btstack_tlv_flash_bank_t * self, tlv_iterator_t * it){
|
||||||
@ -182,7 +184,7 @@ static void tlv_iterator_fetch_next(btstack_tlv_flash_bank_t * self, tlv_iterato
|
|||||||
it->offset += self->delete_tag_len;
|
it->offset += self->delete_tag_len;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (it->offset >= self->hal_flash_bank_impl->get_size(self->hal_flash_bank_context)) {
|
if (it->offset >= it->size) {
|
||||||
it->tag = 0xffffffff;
|
it->tag = 0xffffffff;
|
||||||
it->len = 0;
|
it->len = 0;
|
||||||
return;
|
return;
|
||||||
@ -230,7 +232,7 @@ static int btstack_tlv_flash_bank_test_erased(btstack_tlv_flash_bank_t * self, i
|
|||||||
while (offset < size){
|
while (offset < size){
|
||||||
uint32_t copy_size = (offset + sizeof(empty16) < size) ? sizeof(empty16) : (size - offset);
|
uint32_t copy_size = (offset + sizeof(empty16) < size) ? sizeof(empty16) : (size - offset);
|
||||||
btstack_tlv_flash_bank_read(self, bank, offset, buffer, copy_size);
|
btstack_tlv_flash_bank_read(self, bank, offset, buffer, copy_size);
|
||||||
if (memcmp(buffer, empty16, copy_size)) {
|
if (memcmp(buffer, empty16, copy_size) != 0) {
|
||||||
log_info("not erased %x - %x", (unsigned int) offset, (unsigned int) (offset + copy_size));
|
log_info("not erased %x - %x", (unsigned int) offset, (unsigned int) (offset + copy_size));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user