OXYGENHUB
◆ main openmsx / src / input / JoystickPort.hh
1.3 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#ifndef JOYSTICKPORT_HH
2
#define JOYSTICKPORT_HH
3
4
#include "Connector.hh"
5
#include <cstdint>
6
#include <string>
7
8
namespace openmsx {
9
10
class JoystickDevice;
11
class PluggingController;
12
13
class JoystickPortIf
14
{
15
public:
16
	virtual ~JoystickPortIf() = default;
17
	[[nodiscard]] virtual uint8_t read(EmuTime time) = 0;
18
	virtual void write(uint8_t value, EmuTime time) = 0;
19
protected:
20
	JoystickPortIf() = default;
21
};
22
23
class JoystickPort final : public JoystickPortIf, public Connector
24
{
25
public:
26
	JoystickPort(PluggingController& pluggingController,
27
	             std::string name, std::string description);
28
29
	[[nodiscard]] JoystickDevice& getPluggedJoyDev() const;
30
31
	// Connector
32
	[[nodiscard]] zstring_view getDescription() const override;
33
	[[nodiscard]] zstring_view getClass() const override;
34
	void plug(Pluggable& device, EmuTime time) override;
35
36
	[[nodiscard]] uint8_t read(EmuTime time) override;
37
	void write(uint8_t value, EmuTime time) override;
38
39
	template<typename Archive>
40
	void serialize(Archive& ar, unsigned version);
41
42
private:
43
	void writeDirect(uint8_t value, EmuTime time);
44
45
private:
46
	uint8_t lastValue = 255; // != 0
47
	std::string description;
48
};
49
50
class DummyJoystickPort final : public JoystickPortIf
51
{
52
public:
53
	[[nodiscard]] uint8_t read(EmuTime time) override;
54
	void write(uint8_t value, EmuTime time) override;
55
};
56
57
} // namespace openmsx
58
59
#endif