OXYGENHUB
◆ main openmsx / src / serial / MidiInReader.hh
1.3 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef MIDIINREADER_HH
2
#define MIDIINREADER_HH
3
4
#include "MidiInDevice.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 <mutex>
15
#include <optional>
16
#include <thread>
17
18
namespace openmsx {
19
20
class EventDistributor;
21
class Scheduler;
22
class CommandController;
23
24
class MidiInReader final : public MidiInDevice, private EventListener
25
{
26
public:
27
	MidiInReader(EventDistributor& eventDistributor, Scheduler& scheduler,
28
	             CommandController& commandController);
29
	~MidiInReader() override;
30
31
	// Pluggable
32
	void plugHelper(Connector& connector, EmuTime time) override;
33
	void unplugHelper(EmuTime time) override;
34
	[[nodiscard]] zstring_view getName() const override;
35
	[[nodiscard]] zstring_view getDescription() const override;
36
37
	// MidiInDevice
38
	void signal(EmuTime time) override;
39
40
	template<typename Archive>
41
	void serialize(Archive& ar, unsigned version);
42
43
private:
44
	void run();
45
46
	// EventListener
47
	bool signalEvent(const Event& event) override;
48
49
private:
50
	EventDistributor& eventDistributor;
51
	Scheduler& scheduler;
52
	std::thread thread;
53
	FileOperations::FILE_t file;
54
	cb_queue<uint8_t> queue;
55
	std::mutex mutex; // to protect queue
56
	std::optional<Poller> poller;
57
58
	FilenameSetting readFilenameSetting;
59
};
60
61
} // namespace openmsx
62
63
#endif