xref: /haiku/headers/os/drivers/tty/tty_module.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  *	Copyright 2010, Haiku Inc. All Rights Reserved.
3  *	Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _TTY_MODULE_H
7 #define _TTY_MODULE_H
8 
9 #include <module.h>
10 #include <termios.h>
11 #include <Select.h>
12 
13 struct tty;
14 struct tty_cookie;
15 
16 typedef bool (*tty_service_func)(struct tty *tty, uint32 op, void *buffer,
17 	size_t length);
18 
19 // flags
20 #define	TTYCARRIER		(1 << 0)
21 #define	TTYWRITABLE		(1 << 1)
22 #define	TTYWRITING		(1 << 2)
23 #define	TTYREADING		(1 << 3)
24 #define	TTYOSTOPPED		(1 << 4)
25 #define	TTYEXCLUSIVE	(1 << 5)
26 #define	TTYHWDCD		(1 << 6)
27 #define	TTYHWCTS		(1 << 7)
28 #define	TTYHWDSR		(1 << 8)
29 #define	TTYHWRI			(1 << 9)
30 #define	TTYFLOWFORCED	(1 << 10)
31 
32 // ops
33 #define	TTYENABLE		0	/* bool enabled */
34 #define	TTYSETMODES		1	/* struct termios termios */
35 #define	TTYOSTART		2
36 #define	TTYOSYNC		3
37 #define	TTYISTOP		4	/* bool stopInput */
38 #define	TTYSETBREAK		5	/* bool break */
39 #define	TTYSETDTR		6	/* bool dataTerminalReady */
40 #define TTYSETRTS		7	/* bool requestToSend */
41 #define	TTYGETSIGNALS	8	/* call tty_hardware_signal for all bits */
42 
43 typedef struct tty_module_info tty_module_info;
44 
45 struct tty_module_info {
46 	module_info	mi;
47 
48 	struct tty *(*tty_create)(tty_service_func serviceFunction, bool isMaster);
49 	void		(*tty_destroy)(struct tty *tty);
50 
51 	struct tty_cookie *
52 				(*tty_create_cookie)(struct tty *masterTTY, struct tty *slaveTTY,
53 					uint32 openMode);
54 	void		(*tty_close_cookie)(struct tty_cookie *cookie);
55 	void		(*tty_destroy_cookie)(struct tty_cookie *cookie);
56 
57 	status_t	(*tty_read)(struct tty_cookie *cookie, void *_buffer,
58 					size_t *_length);
59 	status_t	(*tty_write)(struct tty_cookie *cookie, const void *buffer,
60 					size_t *length);
61 	status_t	(*tty_control)(struct tty_cookie *cookie, uint32 op,
62 					void *buffer, size_t length);
63 	status_t	(*tty_select)(struct tty_cookie *cookie, uint8 event,
64 					uint32 ref, selectsync *sync);
65 	status_t	(*tty_deselect)(struct tty_cookie *cookie, uint8 event,
66 					selectsync *sync);
67 
68 	status_t	(*tty_hardware_signal)(struct tty_cookie *cookie,
69 					int signal, bool);
70 };
71 
72 #define B_TTY_MODULE_NAME			"generic/tty/v1"
73 
74 #endif /* _TTY_MODULE_H */
75