MCPcopy Create free account
hub / github.com/BernardoGiordano/Checkpoint / SPIReadSaveData

Function SPIReadSaveData

3ds/source/spi.cpp:288–337  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

286}
287
288Result SPIReadSaveData(CardType type, u32 offset, void* data, u32 size)
289{
290 u8 cmd[4] = {SPI_CMD_READ};
291 u32 cmdSize = 4;
292 if (size == 0)
293 return 0;
294 if (type == NO_CHIP)
295 return 0xC8E13404;
296
297 Result res = SPIWaitWriteEnd(type);
298 if (res)
299 return res;
300
301 size = (size <= SPIGetCapacity(type) - offset) ? size : SPIGetCapacity(type) - offset;
302 u32 pos = offset;
303 switch (type) {
304 case EEPROM_512B:
305 return _SPIReadSaveData_512B_impl(offset, data, size);
306 break;
307 case EEPROM_8KB:
308 case EEPROM_64KB:
309 cmdSize = 3;
310 cmd[1] = (u8)(pos >> 8);
311 cmd[2] = (u8)pos;
312 break;
313 case EEPROM_128KB:
314 cmdSize = 4;
315 cmd[1] = (u8)(pos >> 16);
316 cmd[2] = (u8)(pos >> 8);
317 cmd[3] = (u8)pos;
318 break;
319 case FLASH_256KB_1:
320 case FLASH_256KB_2:
321 case FLASH_512KB_1:
322 case FLASH_512KB_2:
323 case FLASH_1MB:
324 case FLASH_8MB:
325 case FLASH_512KB_INFRARED:
326 case FLASH_256KB_INFRARED:
327 cmdSize = 4;
328 cmd[1] = (u8)(pos >> 16);
329 cmd[2] = (u8)(pos >> 8);
330 cmd[3] = (u8)pos;
331 break;
332 default:
333 return 0; // never happens
334 }
335
336 return SPIWriteRead(type, cmd, cmdSize, data, size, NULL, 0);
337}
338
339Result SPIEraseSector(CardType type, u32 offset)
340{

Callers 2

_SPIIsDataMirroredFunction · 0.85
backupMethod · 0.85

Calls 4

SPIWaitWriteEndFunction · 0.85
SPIGetCapacityFunction · 0.85
SPIWriteReadFunction · 0.85

Tested by

no test coverage detected