mirror of
https://gitlab.com/Theopse/fbi-i18n-zh.git
synced 2025-08-26 16:29:46 +08:00
Fix pasting to ext save data, possibly fix 128kb EEPROM support.
This commit is contained in:
parent
253f808982
commit
2c9dffd4c0
@ -241,13 +241,22 @@ static Result spi_read_data(SaveChip chip, u32* bytesRead, void* data, u32 offse
|
|||||||
break;
|
break;
|
||||||
case CHIP_EEPROM_8KB:
|
case CHIP_EEPROM_8KB:
|
||||||
case CHIP_EEPROM_64KB:
|
case CHIP_EEPROM_64KB:
|
||||||
case CHIP_EEPROM_128KB:
|
|
||||||
cmdSize = 3;
|
cmdSize = 3;
|
||||||
cmd[0] = SPI_EEPROM_CMD_READ;
|
cmd[0] = SPI_EEPROM_CMD_READ;
|
||||||
cmd[1] = (u8) (pos >> 8);
|
cmd[1] = (u8) (pos >> 8);
|
||||||
cmd[2] = (u8) pos;
|
cmd[2] = (u8) pos;
|
||||||
res = spi_execute_command(chip, cmd, cmdSize, data, size, NULL, 0);
|
res = spi_execute_command(chip, cmd, cmdSize, data, size, NULL, 0);
|
||||||
|
|
||||||
|
pos += size;
|
||||||
|
break;
|
||||||
|
case CHIP_EEPROM_128KB:
|
||||||
|
cmdSize = 4;
|
||||||
|
cmd[0] = SPI_EEPROM_CMD_READ;
|
||||||
|
cmd[1] = (u8) (pos >> 16);
|
||||||
|
cmd[2] = (u8) (pos >> 8);
|
||||||
|
cmd[3] = (u8) pos;
|
||||||
|
res = spi_execute_command(chip, cmd, cmdSize, data, size, NULL, 0);
|
||||||
|
|
||||||
pos += size;
|
pos += size;
|
||||||
break;
|
break;
|
||||||
case CHIP_FLASH_256KB:
|
case CHIP_FLASH_256KB:
|
||||||
@ -305,12 +314,18 @@ static Result spi_write_data(SaveChip chip, u32* bytesWritten, void* data, u32 o
|
|||||||
break;
|
break;
|
||||||
case CHIP_EEPROM_8KB:
|
case CHIP_EEPROM_8KB:
|
||||||
case CHIP_EEPROM_64KB:
|
case CHIP_EEPROM_64KB:
|
||||||
case CHIP_EEPROM_128KB:
|
|
||||||
cmdSize = 3;
|
cmdSize = 3;
|
||||||
cmd[0] = SPI_EEPROM_CMD_WRITE;
|
cmd[0] = SPI_EEPROM_CMD_WRITE;
|
||||||
cmd[1] = (u8) (pos >> 8);
|
cmd[1] = (u8) (pos >> 8);
|
||||||
cmd[2] = (u8) pos;
|
cmd[2] = (u8) pos;
|
||||||
break;
|
break;
|
||||||
|
case CHIP_EEPROM_128KB:
|
||||||
|
cmdSize = 4;
|
||||||
|
cmd[0] = SPI_EEPROM_CMD_WRITE;
|
||||||
|
cmd[1] = (u8) (pos >> 16);
|
||||||
|
cmd[2] = (u8) (pos >> 8);
|
||||||
|
cmd[3] = (u8) pos;
|
||||||
|
break;
|
||||||
case CHIP_FLASH_256KB:
|
case CHIP_FLASH_256KB:
|
||||||
case CHIP_FLASH_512KB:
|
case CHIP_FLASH_512KB:
|
||||||
case CHIP_FLASH_1MB:
|
case CHIP_FLASH_1MB:
|
||||||
|
@ -57,7 +57,7 @@ static Result action_export_twl_save_read_src(void* data, u32 handle, u32* bytes
|
|||||||
return spi_read_save(bytesRead, buffer, (u32) offset, size);
|
return spi_read_save(bytesRead, buffer, (u32) offset, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_export_twl_save_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_export_twl_save_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
export_twl_save_data* exportData = (export_twl_save_data*) data;
|
export_twl_save_data* exportData = (export_twl_save_data*) data;
|
||||||
|
|
||||||
Result res = 0;
|
Result res = 0;
|
||||||
|
@ -66,7 +66,7 @@ static Result action_import_twl_save_read_src(void* data, u32 handle, u32* bytes
|
|||||||
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_import_twl_save_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_import_twl_save_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
return spi_init_card();
|
return spi_init_card();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ static Result action_install_cdn_read_src(void* data, u32 handle, u32* bytesRead
|
|||||||
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_install_cdn_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_install_cdn_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
install_cdn_data* installData = (install_cdn_data*) data;
|
install_cdn_data* installData = (install_cdn_data*) data;
|
||||||
|
|
||||||
if(index == 0) {
|
if(index == 0) {
|
||||||
|
@ -109,7 +109,7 @@ static Result action_install_cias_read_src(void* data, u32 handle, u32* bytesRea
|
|||||||
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_install_cias_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_install_cias_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
install_cias_data* installData = (install_cias_data*) data;
|
install_cias_data* installData = (install_cias_data*) data;
|
||||||
|
|
||||||
u64 titleId = util_get_cia_title_id((u8*) initialReadBlock);
|
u64 titleId = util_get_cia_title_id((u8*) initialReadBlock);
|
||||||
|
@ -108,7 +108,7 @@ static Result action_install_tickets_read_src(void* data, u32 handle, u32* bytes
|
|||||||
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_install_tickets_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_install_tickets_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
AM_DeleteTicket(((file_info*) ((list_item*) linked_list_get(&((install_tickets_data*) data)->contents, index))->data)->ticketInfo.titleId);
|
AM_DeleteTicket(((file_info*) ((list_item*) linked_list_get(&((install_tickets_data*) data)->contents, index))->data)->ticketInfo.titleId);
|
||||||
return AM_InstallTicketBegin(handle);
|
return AM_InstallTicketBegin(handle);
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ static Result action_paste_files_read_src(void* data, u32 handle, u32* bytesRead
|
|||||||
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result action_paste_files_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result action_paste_files_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
paste_files_data* pasteData = (paste_files_data*) data;
|
paste_files_data* pasteData = (paste_files_data*) data;
|
||||||
|
|
||||||
Result res = 0;
|
Result res = 0;
|
||||||
@ -135,9 +135,13 @@ static Result action_paste_files_open_dst(void* data, u32 index, void* initialRe
|
|||||||
pasteData->currExists = R_SUCCEEDED(FSUSER_OpenFile(&currHandle, pasteData->target->archive, *fsPath, FS_OPEN_READ, 0));
|
pasteData->currExists = R_SUCCEEDED(FSUSER_OpenFile(&currHandle, pasteData->target->archive, *fsPath, FS_OPEN_READ, 0));
|
||||||
if(pasteData->currExists) {
|
if(pasteData->currExists) {
|
||||||
FSFILE_Close(currHandle);
|
FSFILE_Close(currHandle);
|
||||||
|
} else {
|
||||||
|
res = FSUSER_CreateFile(pasteData->target->archive, *fsPath, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = FSUSER_OpenFile(handle, pasteData->target->archive, *fsPath, FS_OPEN_WRITE | FS_OPEN_CREATE, 0);
|
if(R_SUCCEEDED(res)) {
|
||||||
|
res = FSUSER_OpenFile(handle, pasteData->target->archive, *fsPath, FS_OPEN_WRITE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
util_free_path_utf8(fsPath);
|
util_free_path_utf8(fsPath);
|
||||||
} else {
|
} else {
|
||||||
|
@ -36,7 +36,7 @@ static Result dumpnand_read_src(void* data, u32 handle, u32* bytesRead, void* bu
|
|||||||
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
return FSFILE_Read(handle, bytesRead, offset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result dumpnand_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result dumpnand_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
return FSUSER_OpenFileDirectly(handle, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""), fsMakePath(PATH_UTF16, u"/NAND.bin"), FS_OPEN_WRITE | FS_OPEN_CREATE, 0);
|
return FSUSER_OpenFileDirectly(handle, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, ""), fsMakePath(PATH_UTF16, u"/NAND.bin"), FS_OPEN_WRITE | FS_OPEN_CREATE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ static Result networkinstall_read_src(void* data, u32 handle, u32* bytesRead, vo
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result networkinstall_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result networkinstall_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
network_install_data* networkInstallData = (network_install_data*) data;
|
network_install_data* networkInstallData = (network_install_data*) data;
|
||||||
|
|
||||||
Result res = 0;
|
Result res = 0;
|
||||||
|
@ -104,7 +104,7 @@ static Result qrinstall_read_src(void* data, u32 handle, u32* bytesRead, void* b
|
|||||||
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result qrinstall_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result qrinstall_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
qr_install_data* qrInstallData = (qr_install_data*) data;
|
qr_install_data* qrInstallData = (qr_install_data*) data;
|
||||||
|
|
||||||
Result res = 0;
|
Result res = 0;
|
||||||
|
@ -55,7 +55,7 @@ static Result task_data_op_copy(data_op_data* data, u32 index) {
|
|||||||
if(data->currTotal == 0) {
|
if(data->currTotal == 0) {
|
||||||
if(data->copyEmpty) {
|
if(data->copyEmpty) {
|
||||||
u32 dstHandle = 0;
|
u32 dstHandle = 0;
|
||||||
if(R_SUCCEEDED(res = data->openDst(data->data, index, NULL, &dstHandle))) {
|
if(R_SUCCEEDED(res = data->openDst(data->data, index, NULL, data->currTotal, &dstHandle))) {
|
||||||
res = data->closeDst(data->data, index, true, dstHandle);
|
res = data->closeDst(data->data, index, true, dstHandle);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -86,7 +86,7 @@ static Result task_data_op_copy(data_op_data* data, u32 index) {
|
|||||||
if(firstRun) {
|
if(firstRun) {
|
||||||
firstRun = false;
|
firstRun = false;
|
||||||
|
|
||||||
if(R_FAILED(res = data->openDst(data->data, index, buffer, &dstHandle))) {
|
if(R_FAILED(res = data->openDst(data->data, index, buffer, data->currTotal, &dstHandle))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ typedef struct data_op_info_s {
|
|||||||
Result (*getSrcSize)(void* data, u32 handle, u64* size);
|
Result (*getSrcSize)(void* data, u32 handle, u64* size);
|
||||||
Result (*readSrc)(void* data, u32 handle, u32* bytesRead, void* buffer, u64 offset, u32 size);
|
Result (*readSrc)(void* data, u32 handle, u32* bytesRead, void* buffer, u64 offset, u32 size);
|
||||||
|
|
||||||
Result (*openDst)(void* data, u32 index, void* initialReadBlock, u32* handle);
|
Result (*openDst)(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle);
|
||||||
Result (*closeDst)(void* data, u32 index, bool succeeded, u32 handle);
|
Result (*closeDst)(void* data, u32 index, bool succeeded, u32 handle);
|
||||||
|
|
||||||
Result (*writeDst)(void* data, u32 handle, u32* bytesWritten, void* buffer, u64 offset, u32 size);
|
Result (*writeDst)(void* data, u32 handle, u32* bytesWritten, void* buffer, u64 offset, u32 size);
|
||||||
|
@ -87,7 +87,7 @@ static Result update_read_src(void* data, u32 handle, u32* bytesRead, void* buff
|
|||||||
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
return res != HTTPC_RESULTCODE_DOWNLOADPENDING ? res : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Result update_open_dst(void* data, u32 index, void* initialReadBlock, u32* handle) {
|
static Result update_open_dst(void* data, u32 index, void* initialReadBlock, u64 size, u32* handle) {
|
||||||
if(util_get_3dsx_path() != NULL) {
|
if(util_get_3dsx_path() != NULL) {
|
||||||
FS_Path* path = util_make_path_utf8(util_get_3dsx_path());
|
FS_Path* path = util_make_path_utf8(util_get_3dsx_path());
|
||||||
if(path != NULL) {
|
if(path != NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user