1 // license:BSD-3-Clause
2 // copyright-holders:Patrick Mackinlay
3 
4 #ifndef MAME_BUS_RTPC_KBD_CON_H
5 #define MAME_BUS_RTPC_KBD_CON_H
6 
7 #pragma once
8 
9 class device_rtpc_kbd_interface;
10 
11 class rtpc_kbd_con_device
12 	: public device_t
13 	, public device_single_card_slot_interface<device_rtpc_kbd_interface>
14 {
15 public:
16 	template <typename T>
rtpc_kbd_con_device(machine_config const & mconfig,char const * tag,device_t * owner,T && opts,char const * dflt)17 	rtpc_kbd_con_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
18 		: rtpc_kbd_con_device(mconfig, tag, owner, 0U)
19 	{
20 		option_reset();
21 		opts(*this);
22 		set_default_option(dflt);
23 		set_fixed(false);
24 	}
25 	rtpc_kbd_con_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0U);
26 
out_clock_cb()27 	auto out_clock_cb() { return m_out_clock_cb.bind(); }
out_data_cb()28 	auto out_data_cb() { return m_out_data_cb.bind(); }
29 
clock_signal()30 	int clock_signal() { return m_clock_state; }
data_signal()31 	int data_signal() { return m_data_state; }
32 
33 	void clock_write_from_mb(int state);
34 	void data_write_from_mb(int state);
35 	void clock_write_from_kb(int state);
36 	void data_write_from_kb(int state);
37 
38 protected:
39 	virtual void device_resolve_objects() override;
40 	virtual void device_config_complete() override;
41 	virtual void device_start() override;
42 
43 	void update_clock_state(bool fromkb);
44 	void update_data_state(bool fromkb);
45 
46 	devcb_write_line m_out_clock_cb;
47 	devcb_write_line m_out_data_cb;
48 
49 	int8_t m_clock_state;
50 	int8_t m_data_state;
51 
52 	uint8_t m_mb_clock_state;
53 	uint8_t m_mb_data_state;
54 	uint8_t m_kb_clock_state;
55 	uint8_t m_kb_data_state;
56 
57 	device_rtpc_kbd_interface *m_keyboard;
58 };
59 
DECLARE_DEVICE_TYPE(RTPC_KBD_CON,rtpc_kbd_con_device)60 DECLARE_DEVICE_TYPE(RTPC_KBD_CON, rtpc_kbd_con_device)
61 
62 class device_rtpc_kbd_interface : public device_interface
63 {
64 	friend class rtpc_kbd_port_device;
65 public:
66 	virtual ~device_rtpc_kbd_interface() {}
67 
68 	virtual void clock_w(int state) {}
69 	virtual void data_w(int state) {}
70 
71 protected:
72 	device_rtpc_kbd_interface(machine_config const &mconfig, device_t &device);
73 
74 	int clock_signal() const { return m_port->clock_signal(); }
75 	int data_signal() const { return m_port->data_signal(); }
76 
77 	rtpc_kbd_con_device *m_port;
78 };
79 
80 #endif // MAME_BUS_RTPC_KBD_CON_H
81