Bochs/bochs/iodev/serial_raw.h
Volker Ruppert a2d6bfc786 - raw serial receive support for win32 added. It is disabled for now because it
doesn't work properly (lost data at 300 baud).
2004-05-13 16:23:15 +00:00

83 lines
1.9 KiB
C++

/////////////////////////////////////////////////////////////////////////
// $Id: serial_raw.h,v 1.11 2004-05-13 16:23:15 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
#if USE_RAW_SERIAL
#ifdef __linux__
#include <linux/serial.h>
#endif
#ifdef WIN32
// experimental raw serial receive support on win32
//#define WIN32_RECEIVE_RAW
#endif
#define P_NONE 0
#define P_ODD 1
#define P_EVEN 2
#define P_HIGH 3
#define P_LOW 4
#define RAW_EVENT_BREAK -1
#define RAW_EVENT_CTS_ON -2
#define RAW_EVENT_CTS_OFF -3
#define RAW_EVENT_DSR_ON -4
#define RAW_EVENT_DSR_OFF -5
#define RAW_EVENT_RING_ON -6
#define RAW_EVENT_RING_OFF -7
#define RAW_EVENT_RLSD_ON -8
#define RAW_EVENT_RLSD_OFF -9
#define RAW_EVENT_FRAME -10
#define RAW_EVENT_OVERRUN -11
#define RAW_EVENT_PARITY -12
#define THREAD_RX_BUFSIZE 8192
#define RX_BUFSIZE 256
class serial_raw : public logfunctions {
public:
serial_raw (char *devname);
~serial_raw (void);
void set_baudrate (int rate);
void set_data_bits (int );
void set_stop_bits (int);
void set_parity_mode (int mode);
void set_break (int mode);
void set_modem_control (int ctrl);
int get_modem_status ();
void transmit (Bit8u byte);
bx_bool ready_transmit ();
bx_bool ready_receive ();
int receive ();
#ifdef WIN32_RECEIVE_RAW
void serial_thread ();
#endif
private:
void setup_port ();
#ifdef WIN32_RECEIVE_RAW
void enq_event (Bit16s event);
#endif
bx_bool present;
unsigned rxdata_count;
#ifdef WIN32
HANDLE hCOM;
DCB dcb;
BOOL DCBchanged;
DWORD MSR_value;
Bit16s rxdata_buffer[RX_BUFSIZE];
#ifdef WIN32_RECEIVE_RAW
HANDLE hRawSerialThread;
BOOL thread_active;
BOOL thread_quit;
OVERLAPPED rx_ovl;
OVERLAPPED thread_ovl;
unsigned thread_rxdata_count;
Bit16s thread_rxdata_buffer[THREAD_RX_BUFSIZE];
#endif
#endif
};
#endif