summaryrefslogtreecommitdiff
path: root/app/mac/impl/input-device-serial-controller.hh
blob: eb58907ea8e77014d7a827869a65ca1e8266778d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#pragma once

#include "nes/app/input/input-device-controller.hh"

namespace nes::app::mac
{
	/// Input device for an NES controller plugged in via serial port.
	class input_device_serial_controller final : public input_device_controller
	{
		char const* path_;
		int fd_{ -1 };
		sys::button_mask current_{};
		index index_{ index::unused };

	public:
		explicit input_device_serial_controller(char const* path);
		~input_device_serial_controller() override;

		auto is_reliable() const -> bool override;
		auto get_name() const -> string_view override { return path_; }
		auto get_index() const -> index override { return index_; }
		auto set_index(index const v) -> void override { index_ = v; }
		auto read_buttons() -> sys::button_mask override;

	private:
		auto set_up() -> bool;
		auto close() -> void;
	};
} // namespace nes::app:mac