MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / modSPIRead

Function modSPIRead

xs/platforms/esp/xsHost.c:1497–1548  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1495}
1496
1497uint8_t modSPIRead(uint32_t offset, uint32_t size, uint8_t *dst)
1498{
1499 uint8_t temp[512] __attribute__ ((aligned (4)));
1500 uint32_t toAlign;
1501
1502 if (offset & 3) { // long align offset
1503 if (SPI_FLASH_RESULT_OK != spi_flash_read(offset & ~3, (uint32_t *)temp, 4))
1504 return 0;
1505
1506 toAlign = 4 - (offset & 3);
1507 c_memcpy(dst, temp + 4 - toAlign, (size < toAlign) ? size : toAlign);
1508
1509 if (size <= toAlign)
1510 return 1;
1511
1512 dst += toAlign;
1513 offset += toAlign;
1514 size -= toAlign;
1515 }
1516
1517 toAlign = size & ~3;
1518 if (toAlign) {
1519 size -= toAlign;
1520 if (((uintptr_t)dst) & ~3) { // dst is not long aligned, copy through stack
1521 while (toAlign) {
1522 uint32_t use = (toAlign > sizeof(temp)) ? sizeof(temp) : toAlign;
1523
1524 if (SPI_FLASH_RESULT_OK != spi_flash_read(offset, (uint32_t *)temp, use))
1525 return 0;
1526 c_memmove(dst, temp, use);
1527
1528 toAlign -= use;
1529 dst += use;
1530 offset += use;
1531 }
1532 }
1533 else {
1534 if (SPI_FLASH_RESULT_OK != spi_flash_read(offset, (uint32_t *)dst, toAlign))
1535 return 0;
1536 dst += toAlign;
1537 offset += toAlign;
1538 }
1539 }
1540
1541 if (size) { // long align tail
1542 if (SPI_FLASH_RESULT_OK != spi_flash_read(offset, (uint32_t *)temp, 4))
1543 return 0;
1544 c_memcpy(dst, temp, size);
1545 }
1546
1547 return 1;
1548}
1549
1550uint8_t modSPIWrite(uint32_t offset, uint32_t size, const uint8_t *src)
1551{

Callers 15

spiReadFunction · 0.70
xs_preference_keysFunction · 0.50
findPrefsBlockFunction · 0.50
findPrefOffsetFunction · 0.50
modPreferenceSetFunction · 0.50
spiffs_hal_readFunction · 0.50
lfs_readFunction · 0.50
xs_flash_readFunction · 0.50
xs_flash_readStringFunction · 0.50
xs_flash_readFunction · 0.50
xs_flash_readStringFunction · 0.50
lfs_readFunction · 0.50

Calls

no outgoing calls

Tested by

no test coverage detected