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