- added instructions how to update the online documentation
[bochs-mirror.git] / iodev / serial_raw.h
blobc5748cca8e285a3af9e61a58056f82a20cb68f4e
1 /////////////////////////////////////////////////////////////////////////
2 // $Id: serial_raw.h,v 1.13 2007/11/03 16:47:49 vruppert Exp $
3 /////////////////////////////////////////////////////////////////////////
4 //
6 #if USE_RAW_SERIAL
8 #ifdef __linux__
9 #include <linux/serial.h>
10 #endif
12 #ifdef WIN32
13 // experimental raw serial receive support on win32
14 //#define WIN32_RECEIVE_RAW
15 #endif
17 #define P_NONE 0
18 #define P_ODD 1
19 #define P_EVEN 2
20 #define P_HIGH 3
21 #define P_LOW 4
23 #define RAW_EVENT_BREAK -1
24 #define RAW_EVENT_CTS_ON -2
25 #define RAW_EVENT_CTS_OFF -3
26 #define RAW_EVENT_DSR_ON -4
27 #define RAW_EVENT_DSR_OFF -5
28 #define RAW_EVENT_RING_ON -6
29 #define RAW_EVENT_RING_OFF -7
30 #define RAW_EVENT_RLSD_ON -8
31 #define RAW_EVENT_RLSD_OFF -9
32 #define RAW_EVENT_FRAME -10
33 #define RAW_EVENT_OVERRUN -11
34 #define RAW_EVENT_PARITY -12
36 #define THREAD_RX_BUFSIZE 8192
37 #define RX_BUFSIZE 256
39 class serial_raw : public logfunctions {
40 public:
41 serial_raw(const char *devname);
42 virtual ~serial_raw();
43 void set_baudrate(int rate);
44 void set_data_bits(int);
45 void set_stop_bits(int);
46 void set_parity_mode(int mode);
47 void set_break(int mode);
48 void set_modem_control(int ctrl);
49 int get_modem_status();
50 void transmit(Bit8u byte);
51 bx_bool ready_transmit();
52 bx_bool ready_receive();
53 int receive ();
54 #ifdef WIN32_RECEIVE_RAW
55 void serial_thread();
56 #endif
58 private:
59 void setup_port();
60 #ifdef WIN32_RECEIVE_RAW
61 void enq_event(Bit16s event);
62 #endif
63 bx_bool present;
64 unsigned rxdata_count;
65 #ifdef WIN32
66 HANDLE hCOM;
67 DCB dcb;
68 BOOL DCBchanged;
69 DWORD MSR_value;
70 Bit16s rxdata_buffer[RX_BUFSIZE];
71 #ifdef WIN32_RECEIVE_RAW
72 HANDLE hRawSerialThread;
73 BOOL thread_active;
74 BOOL thread_quit;
75 OVERLAPPED rx_ovl;
76 OVERLAPPED thread_ovl;
77 unsigned thread_rxdata_count;
78 Bit16s thread_rxdata_buffer[THREAD_RX_BUFSIZE];
79 #endif
80 #endif
82 #endif