uart_pty: Introduced the notion of 'tap' port
[simavr] / examples / parts / uart_pty.h
index 41a402f..c6e0603 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef __UART_PTY_H___
 #define __UART_PTY_H___
 
+#include <pthread.h>
 #include "sim_irq.h"
 #include "fifo_declare.h"
 
@@ -34,24 +35,42 @@ enum {
 
 DECLARE_FIFO(uint8_t,uart_pty_fifo, 512);
 
+typedef struct uart_pty_port_t {
+       int                     tap : 1, crlf : 1;
+       int             s;                      // socket we chat on
+       char            slavename[64];
+       uart_pty_fifo_t in;
+       uart_pty_fifo_t out;
+       uint8_t         buffer[512];
+       size_t          buffer_len, buffer_done;
+} uart_pty_port_t, *uart_pty_port_p;
+
 typedef struct uart_pty_t {
        avr_irq_t *     irq;            // irq list
        struct avr_t *avr;              // keep it around so we can pause it
 
        pthread_t       thread;
-       int             s;                      // socket we chat on
-       char            slavename[64];
        int                     xon;
-       uart_pty_fifo_t in;
-       uart_pty_fifo_t out;
 
-       uint8_t         buffer[512];
-       size_t          buffer_len, buffer_done;
+       union {
+               struct {
+                       uart_pty_port_t         pty;
+                       uart_pty_port_t         tap;
+               };
+               uart_pty_port_t port[2];
+       };
 } uart_pty_t;
 
-void uart_pty_init(struct avr_t * avr, uart_pty_t * b);
-void uart_pty_stop(uart_pty_t * p);
-
-void uart_pty_connect(uart_pty_t * p, char uart);
+void
+uart_pty_init(
+               struct avr_t * avr,
+               uart_pty_t * b);
+void
+uart_pty_stop(uart_pty_t * p);
+
+void
+uart_pty_connect(
+               uart_pty_t * p,
+               char uart);
 
 #endif /* __UART_PTY_H___ */