diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-09-18 15:09:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-18 21:09:11 +0200 |
commit | 5bfe51e670bb0806b254144cbe4c60d3f914c735 (patch) | |
tree | 0253b50ff73621f86283d6caf41c1a9ea06b0639 /src/SPI.h | |
parent | db963aa002cdf943c86d19f8abd3f4fd40be38ec (diff) |
Refactor the core's handling of firmware and BIOS images to rely less on the file system (#1826)
* Introduce firmware-related structs
* Fix some indents
* Move the generated firmware identifier to a constant
* Document the WifiAccessPoint constructors
* Add some constants
* Remove a stray comment
* Implement Firmware::UserData
* Add Firmware::Mask
* Document Firmware::Buffer
* Add a Firmware constructor that uses a FileHandle
* Set the default username in UserData
* Update the UserData checksum
* Forgot to include Platform.h
* Remove some redundant assignments in the default Firmware constructor
* const-ify CRC16
* Replace the plain Firmware buffer with a Firmware object
- Remove some functions that were reimplemented in the Firmware constructors
* Fix some crashes due to undefined behavior
* Fix the user data initialization
- Initialize both user data objects to default
- Set both user data objects to the same touch screen calibration
* Follow the DS logic in determining which user data section is current
* Remove an unneeded include
* Remove another unneeded include
* Initialize FirmwareMask in Firmware::Firmware
* Use the DEFAULT_SSID constant
* Add SPI_Firmware::InstallFirmware and SPI_Firmware::RemoveFirmware
* Move a logging call to after the file is written
* Add a SaveManager for the firmware
* Touch up the SPI_Firmware::Firmware declaration
* Move all firmware loading and customization to the frontend
* Call Platform::WriteFirmware when it's time to write the firmware back to disk
* Fix some missing stuff
* Remove the Get* functions from SPI_Firmware in favor of GetFirmware()
* Implement SPI_Firmware::DeInit in terms of RemoveFirmware
* Add Firmware::UpdateChecksums
* Fix an incorrect length
* Update all checksums in the firmware after setting touch screen calibration data
* Use the Firmware object's Position methods
* Remove register fields from the Firmware object
* Install the firmware before seeing if direct boot is necessary
* Install the firmware before calling NDS::Reset in LoadROM
* Slight cleanup in ROMManager
* Fix the default access point name
* Shorten the various getters in Firmware
* Add qualifiers for certain uses of firmware types
- GCC can get picky if -fpermissive isn't defined
* Add an InstallFirmware overload that takes a unique_ptr
* Log when firmware is added or removed
* Don't clear the firmware in SPI_Firmware::Init
- The original code didn't, it just set the pointer to nullptr
* Fix a typo
* Write back the full firmware if it's not generated
* Move the FreeBIOS to an external file
* Load wfcsettings.bin into the correct part of the generated firmware blob
* Load BIOS files in the frontend, not in the core
* Fix logging the firmware ID
* Add some utility functions
* Mark Firmware's constructors as explicit
* Remove obsolete ConfigEntry values
* Include <locale> explicitly in ROMManager
* Fix up some includes
* Add Firmware::IsBootable()
* Add a newline to a log entry
- Whoops
* Log the number of bytes written out in SaveManager
* Mark FirmwareHeader's constructor as explicit
* Clean up GenerateDefaultFirmware and LoadFirmwareFromFile
- Now they return a pair instead of two by-ref values
* Refactor SaveManager a little bit
- Manage its buffers as unique_ptrs to mitigate leaks
- Reallocate the internal buffer if SetPath is asked to reload the file (and the new length is different)
* Remove some stray parens
* Fix some firmware-related bugs I introduced
- Firmware settings are now properly saved to disk (beforehand I misunderstood when the firmware blob was written)
- Firmware is no longer overwritten by contents of wfcsettings.bin
* Slight cleanup
Diffstat (limited to 'src/SPI.h')
-rw-r--r-- | src/SPI.h | 22 |
1 files changed, 16 insertions, 6 deletions
@@ -19,22 +19,32 @@ #ifndef SPI_H #define SPI_H +#include <algorithm> +#include <array> +#include <memory> +#include <string_view> +#include <string.h> + #include "Savestate.h" +#include "SPI_Firmware.h" namespace SPI_Firmware { +u16 CRC16(const u8* data, u32 len, u32 start); void SetupDirectBoot(bool dsi); u32 FixFirmwareLength(u32 originalLength); -u32 GetFirmwareLength(); -u8 GetConsoleType(); -u8 GetWifiVersion(); -u8 GetNWifiVersion(); -u8 GetRFVersion(); -u8* GetWifiMAC(); +/// @return A pointer to the installed firmware blob if one exists, otherwise \c nullptr. +/// @warning The pointer refers to memory that melonDS owns. Do not deallocate it yourself. +/// @see InstallFirmware +const Firmware* GetFirmware(); +bool IsLoadedFirmwareBuiltIn(); +bool InstallFirmware(Firmware&& firmware); +bool InstallFirmware(std::unique_ptr<Firmware>&& firmware); +void RemoveFirmware(); } namespace SPI_Powerman |