OXYGENHUB
◆ main openmsx / src / serial / RS232Tester.hh
1.6 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef RS232TESTER_HH
2
#define RS232TESTER_HH
3
4
#include "RS232Device.hh"
5
6
#include "EventListener.hh"
7
#include "FileOperations.hh"
8
#include "FilenameSetting.hh"
9
10
#include "Poller.hh"
11
#include "circular_buffer.hh"
12
13
#include <cstdint>
14
#include <cstdio>
15
#include <fstream>
16
#include <mutex>
17
#include <optional>
18
#include <thread>
19
20
namespace openmsx {
21
22
class EventDistributor;
23
class Scheduler;
24
class CommandController;
25
26
class RS232Tester final : public RS232Device, private EventListener
27
{
28
public:
29
	RS232Tester(EventDistributor& eventDistributor, Scheduler& scheduler,
30
	            CommandController& commandController);
31
	~RS232Tester() override;
32
33
	// Pluggable
34
	void plugHelper(Connector& connector, EmuTime time) override;
35
	void unplugHelper(EmuTime time) override;
36
	[[nodiscard]] zstring_view getName() const override;
37
	[[nodiscard]] zstring_view getDescription() const override;
38
	[[nodiscard]] std::optional<bool> getDSR(EmuTime time) const override;
39
	[[nodiscard]] std::optional<bool> getCTS(EmuTime time) const override;
40
41
	// input
42
	void signal(EmuTime time) override;
43
44
	// output
45
	void recvByte(uint8_t value, EmuTime time) override;
46
47
	template<typename Archive>
48
	void serialize(Archive& ar, unsigned version);
49
50
private:
51
	void run();
52
53
	// EventListener
54
	bool signalEvent(const Event& event) override;
55
56
private:
57
	EventDistributor& eventDistributor;
58
	Scheduler& scheduler;
59
	std::thread thread;
60
	FileOperations::FILE_t inFile;
61
	cb_queue<uint8_t> queue;
62
	std::mutex mutex; // to protect queue
63
	std::optional<Poller> poller;
64
65
	std::ofstream outFile;
66
67
	FilenameSetting rs232InputFilenameSetting;
68
	FilenameSetting rs232OutputFilenameSetting;
69
};
70
71
} // namespace openmsx
72
73
#endif