OXYGENHUB
◆ main openmsx / src / FirmwareSwitch.cc
1.2 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#include "FirmwareSwitch.hh"
2
3
#include "File.hh"
4
#include "FileContext.hh"
5
#include "FileException.hh"
6
#include "MSXCliComm.hh"
7
8
#include <array>
9
#include <cstdint>
10
11
namespace openmsx {
12
13
static constexpr std::string_view filename = "firmwareswitch";
14
15
FirmwareSwitch::FirmwareSwitch(const DeviceConfig& config_)
16
	: config(config_)
17
	, setting(
18
		config.getCommandController(), "firmwareswitch",
19
		"This setting controls the firmware switch",
20
		false, Setting::Save::NO)
21
{
22
	// load firmware switch setting from persistent data
23
	try {
24
		File file(config.getFileContext().resolveCreate(filename));
25
		std::array<uint8_t, 1> byteBuf;
26
		file.read(byteBuf);
27
		setting.setBoolean(byteBuf[0] != 0);
28
	} catch (FileException& e) {
29
		config.getCliComm().printWarning(
30
			"Couldn't load firmwareswitch status: ", e.getMessage());
31
	}
32
}
33
34
FirmwareSwitch::~FirmwareSwitch()
35
{
36
	// save firmware switch setting value to persistent data
37
	try {
38
		File file(config.getFileContext().resolveCreate(filename),
39
		          File::OpenMode::TRUNCATE);
40
		std::array byteBuf = {uint8_t(setting.getBoolean() ? 0xFF : 0x00)};
41
		file.write(byteBuf);
42
	} catch (FileException& e) {
43
		config.getCliComm().printWarning(
44
			"Couldn't save firmwareswitch status: ", e.getMessage());
45
	}
46
}
47
48
} // namespace openmsx