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