GD-77: fix bug where last zone was not read from flash

replace/45f70711369402807c1a7be8dabd8dfd26c0f758
Federico Amedeo Izzo 2021-03-14 11:08:52 +01:00
rodzic 1637159329
commit a5b0bc57d1
1 zmienionych plików z 7 dodań i 5 usunięć

Wyświetl plik

@ -357,18 +357,20 @@ int nvm_readZoneData(zone_t *zone, uint16_t pos)
{
if((pos <= 0) || (pos > maxNumZones)) return -1;
// zone number is 1-based to be consistent with channels
// Convert to 0-based index to fetch data from flash
uint16_t index = pos - 1;
// ### Read zone bank bitmap ###
uint8_t bitmap[32];
AT24Cx_readData(zoneBaseAddr, ((uint8_t *) &bitmap), sizeof(bitmap));
uint8_t bitmap_byte = pos / 8;
uint8_t bitmap_bit = pos % 8;
uint8_t bitmap_byte = index / 8;
uint8_t bitmap_bit = index % 8;
// The zone is marked not valid in the bitmap
if(!(bitmap[bitmap_byte] & (1 << bitmap_bit))) return -1;
gdxZone_t zoneData;
// Note: pos is 1-based to be consistent with channels
uint32_t zoneAddr = zoneBaseAddr + sizeof(bitmap) + (pos - 1) * sizeof(gdxZone_t);
uint32_t zoneAddr = zoneBaseAddr + sizeof(bitmap) + index * sizeof(gdxZone_t);
AT24Cx_readData(zoneAddr, ((uint8_t *) &zoneData), sizeof(gdxZone_t));
// Check if zone is empty