xref: /haiku/headers/os/drivers/tty/tty_module.h (revision 445d4fd926c569e7b9ae28017da86280aaecbae2)
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 #define TTYFLUSH		9	/* clear input and/or output buffers */
43 
44 typedef struct tty_module_info tty_module_info;
45 
46 struct tty_module_info {
47 	module_info	mi;
48 
49 	status_t	(*tty_create)(tty_service_func serviceFunction, struct tty *master,
50 					struct tty **tty);
51 	void		(*tty_destroy)(struct tty *tty);
52 
53 	status_t	(*tty_create_cookie)(struct tty *masterTTY, struct tty *slaveTTY,
54 					uint32 openMode, struct tty_cookie **cookie);
55 	void		(*tty_close_cookie)(struct tty_cookie *cookie);
56 	void		(*tty_destroy_cookie)(struct tty_cookie *cookie);
57 
58 	status_t	(*tty_read)(struct tty_cookie *cookie, void *_buffer,
59 					size_t *_length);
60 	status_t	(*tty_write)(struct tty_cookie *cookie, const void *buffer,
61 					size_t *length);
62 	status_t	(*tty_control)(struct tty_cookie *cookie, uint32 op,
63 					void *buffer, size_t length);
64 	status_t	(*tty_select)(struct tty_cookie *cookie, uint8 event,
65 					uint32 ref, selectsync *sync);
66 	status_t	(*tty_deselect)(struct tty_cookie *cookie, uint8 event,
67 					selectsync *sync);
68 
69 	status_t	(*tty_hardware_signal)(struct tty_cookie *cookie,
70 					int signal, bool);
71 };
72 
73 #define B_TTY_MODULE_NAME			"generic/tty/v1"
74 
75 #endif /* _TTY_MODULE_H */
76