// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) #pragma once #include "common/bitfield.h" #include "controller.h" #include #include #include #include #include namespace MemoryCardImage { enum : u32 { DATA_SIZE = 128 * 1024, // 1mbit BLOCK_SIZE = 8192, FRAME_SIZE = 128, FRAMES_PER_BLOCK = BLOCK_SIZE / FRAME_SIZE, NUM_BLOCKS = DATA_SIZE / BLOCK_SIZE, NUM_FRAMES = DATA_SIZE / FRAME_SIZE, ICON_WIDTH = 16, ICON_HEIGHT = 16 }; using DataArray = std::array; bool LoadFromFile(DataArray* data, const char* filename); bool SaveToFile(const DataArray& data, const char* filename); void Format(DataArray* data); struct IconFrame { u32 pixels[ICON_WIDTH * ICON_HEIGHT]; }; struct FileInfo { std::string filename; std::string title; u32 size; u32 first_block; u32 num_blocks; bool deleted; std::vector icon_frames; }; bool IsValid(const DataArray& data); u32 GetFreeBlockCount(const DataArray& data); std::vector EnumerateFiles(const DataArray& data, bool include_deleted); bool ReadFile(const DataArray& data, const FileInfo& fi, std::vector* buffer); bool WriteFile(DataArray* data, const std::string_view& filename, const std::vector& buffer); bool DeleteFile(DataArray* data, const FileInfo& fi, bool clear_sectors); bool UndeleteFile(DataArray* data, const FileInfo& fi); bool ImportCard(DataArray* data, const char* filename); bool ImportCard(DataArray* data, const char* filename, std::vector file_data); bool ExportSave(DataArray* data, const FileInfo& fi, const char* filename); bool ImportSave(DataArray* data, const char* filename); } // namespace MemoryCardImage