USIO: Backup file fixup

This commit is contained in:
brian218 2023-01-11 14:19:15 +08:00 committed by Megamouse
parent 99c307a68e
commit 659ee81e80
2 changed files with 19 additions and 10 deletions

View File

@ -5,7 +5,6 @@
#include "usio.h"
#include "Input/pad_thread.h"
#include "Emu/IdManager.h"
#include "Emu/system_utils.hpp"
LOG_CHANNEL(usio_log);
@ -106,9 +105,9 @@ extern bool is_input_allowed();
void usb_device_usio::load_backup()
{
usio_backup_path = rpcs3::utils::get_hdd1_dir() + "/caches/usiobackup.bin";
fs::file usio_backup_file;
if (!usio_backup_file.open(usio_backup_path, fs::read + fs::write + fs::lock))
if (!usio_backup_file.open(usio_backup_path, fs::read))
{
usio_log.trace("Failed to load the USIO Backup file: %s", usio_backup_path);
return;
@ -119,23 +118,30 @@ void usb_device_usio::load_backup()
if (usio_backup_file.size() != file_size)
{
usio_log.trace("Invalid USIO Backup file detected: %s", usio_backup_path);
usio_backup_file.trunc(file_size);
return;
}
usio_backup_file.read(g_fxo->get<usio_memory>().backup_memory.data(), g_fxo->get<usio_memory>().backup_memory.size());
usio_backup_file.read(g_fxo->get<usio_memory>().backup_memory.data(), file_size);
}
void usb_device_usio::save_backup()
{
if (!usio_backup_file && !usio_backup_path.empty() && !usio_backup_file.open(usio_backup_path, fs::create + fs::write + fs::lock))
if (!is_used)
return;
fs::file usio_backup_file;
if (!usio_backup_file.open(usio_backup_path, fs::create + fs::write + fs::lock))
{
usio_log.error("Failed to create a new USIO Backup file: %s", usio_backup_path);
usio_log.error("Failed to save the USIO Backup file: %s", usio_backup_path);
return;
}
const u64 file_size = g_fxo->get<usio_memory>().backup_memory.size();
usio_backup_file.seek(0, fs::seek_set);
usio_backup_file.write(g_fxo->get<usio_memory>().backup_memory.data(), g_fxo->get<usio_memory>().backup_memory.size());
usio_backup_file.write(g_fxo->get<usio_memory>().backup_memory.data(), file_size);
usio_backup_file.trunc(file_size);
}
void usb_device_usio::translate_input()
@ -483,6 +489,8 @@ void usb_device_usio::interrupt_transfer(u32 buf_size, u8* buf, u32 endpoint, Us
// The latency varies per operation but it doesn't seem to matter for this device so let's go fast!
transfer->expected_time = get_timestamp();
is_used = true;
switch (endpoint)
{
case 0x01:

View File

@ -1,5 +1,6 @@
#pragma once
#include "Emu/system_utils.hpp"
#include "Emu/Io/usb_device.h"
class usb_device_usio : public usb_device_emulated
@ -23,8 +24,8 @@ private:
bool test_on = false;
bool test_key_pressed = false;
bool coin_key_pressed = false;
bool is_used = false;
le_t<u16> coin_counter = 0;
std::string usio_backup_path;
fs::file usio_backup_file;
const std::string usio_backup_path = rpcs3::utils::get_hdd1_dir() + "/caches/usiobackup.bin";
std::vector<u8> response;
};