xref: /haiku/headers/os/device/SerialPort.h (revision ed6250c95736c0b55da79d6e9dd01369532260c0)
1 /********************************************************************************
2 /
3 /	File:		SerialPort.h
4 /
5 /	Description:	Serial Port class header.
6 /
7 /	Copyright 1995-98, Be Incorporated, All Rights Reserved.
8 /
9 ********************************************************************************/
10 
11 
12 #ifndef	_SERIAL_PORT_H
13 #define	_SERIAL_PORT_H
14 
15 #include <BeBuild.h>
16 #include <stddef.h>
17 #include <OS.h>
18 #include <SupportDefs.h>
19 
20 class BList;
21 
22 enum data_rate { B_0_BPS = 0, B_50_BPS, B_75_BPS, B_110_BPS, B_134_BPS,
23 				 B_150_BPS, B_200_BPS, B_300_BPS, B_600_BPS, B_1200_BPS,
24 				 B_1800_BPS, B_2400_BPS, B_4800_BPS, B_9600_BPS, B_19200_BPS,
25 				 B_38400_BPS, B_57600_BPS, B_115200_BPS,
26 				 B_230400_BPS, B_31250_BPS };
27 
28 enum data_bits { B_DATA_BITS_7, B_DATA_BITS_8 };
29 
30 enum stop_bits { B_STOP_BITS_1, B_STOP_BITS_2 };
31 #define B_STOP_BIT_1	B_STOP_BITS_1
32 
33 enum parity_mode { B_NO_PARITY, B_ODD_PARITY, B_EVEN_PARITY };
34 
35 enum { B_NOFLOW_CONTROL = 0, B_HARDWARE_CONTROL = 0x00000001,
36 								B_SOFTWARE_CONTROL = 0x00000002 };
37 
38 /* -----------------------------------------------------------------------*/
39 class BSerialPort {
40 
41 public:
42 					BSerialPort();
43 virtual				~BSerialPort();
44 
45 		status_t	Open(const char *portName);
46 		void		Close(void);
47 
48 		ssize_t		Read(void *buf, size_t count);
49 		ssize_t		Write(const void *buf, size_t count);
50 		void		SetBlocking(bool Blocking);
51 		status_t	SetTimeout(bigtime_t microSeconds);
52 
53 		status_t	SetDataRate(data_rate bitsPerSecond);
54 		data_rate	DataRate(void);
55 
56 		void		SetDataBits(data_bits numBits);
57 		data_bits	DataBits(void);
58 		void		SetStopBits(stop_bits numBits);
59 		stop_bits	StopBits(void);
60 
61 		void		SetParityMode(parity_mode which);
62 		parity_mode	ParityMode(void);
63 
64 		void		ClearInput(void);
65 		void		ClearOutput(void);
66 
67 		void		SetFlowControl(uint32 method);
68 		uint32		FlowControl(void);
69 
70 		status_t	SetDTR(bool asserted);
71 		status_t	SetRTS(bool asserted);
72 		status_t	NumCharsAvailable(int32 *wait_until_this_many);
73 
74 		bool		IsCTS(void);
75 		bool		IsDSR(void);
76 		bool		IsRI(void);
77 		bool		IsDCD(void);
78 		ssize_t		WaitForInput(void);
79 /* -----------------------------------------------------------------------*/
80 
81 		int32		CountDevices();
82 		status_t	GetDeviceName(int32 n, char * name,
83 						size_t bufSize = B_OS_NAME_LENGTH);
84 
85 private:
86 
87 		void		ScanDevices();
88 
89 virtual	void		_ReservedSerialPort1();
90 virtual	void		_ReservedSerialPort2();
91 virtual	void		_ReservedSerialPort3();
92 virtual	void		_ReservedSerialPort4();
93 
94 		int			ffd;
95 		data_rate	fBaudRate;
96 		data_bits	fDataBits;
97 		stop_bits	fStopBits;
98 		parity_mode	fParityMode;
99 		uint32		fFlow;
100 		bigtime_t	fTimeout;
101 		bool		fBlocking;
102 
103 		int			DriverControl();
104 
105 		BList *		_fDevices;
106 		uint32		_fReserved[3];
107 };
108 
109 #endif
110