Documented the class, some small changes

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2348 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2003-01-02 13:01:45 +00:00
parent 005069f4e1
commit 7cf3b2f4b1
+71 -10
View File
@@ -18,8 +18,23 @@
#include <unistd.h> #include <unistd.h>
#include <termios.h> #include <termios.h>
#define SERIAL_DIR "/dev/ports" /* The directory where the serial driver publishes its devices */
#define SERIAL_DIR "/dev/ports"
/* Creates and initializes a BSerialPort object, */
/* query the driver, and builds a list of available */
/* serial ports. */
/* The BSerialPort object is initialized to these */
/* values: */
/* 19200 BPS, */
/* 8 Data Bits, */
/* 1 Stop Bit, */
/* No Parity, */
/* Hardware Flow Control, */
/* Infinite Timeout */
/* and Blocking mode. */
BSerialPort::BSerialPort() BSerialPort::BSerialPort()
: ffd(-1), : ffd(-1),
fBaudRate(B_19200_BPS), fBaudRate(B_19200_BPS),
@@ -35,18 +50,20 @@ BSerialPort::BSerialPort()
} }
/* Closes the port, if it's open, and deletes the devices list */
BSerialPort::~BSerialPort() BSerialPort::~BSerialPort()
{ {
if (ffd > 0) if (ffd > 0)
close(ffd); close(ffd);
for (int32 count = _fDevices->CountItems() - 1; count >= 0; count--) for (int32 count = _fDevices->CountItems() - 1; count >= 0; count--)
free(_fDevices->ItemAt(count)); free(_fDevices->RemoveItem(count));
delete _fDevices; delete _fDevices;
} }
/* Opens a serial port. @param a valid port name */
status_t status_t
BSerialPort::Open(const char *portName) BSerialPort::Open(const char *portName)
{ {
@@ -67,6 +84,7 @@ BSerialPort::Open(const char *portName)
} }
/* Closes the port */
void void
BSerialPort::Close(void) BSerialPort::Close(void)
{ {
@@ -76,6 +94,9 @@ BSerialPort::Close(void)
} }
/* Read some data from the serial port. */
/* @param the buffer where to transfer the data */
/* @param how many bytes to read */
ssize_t ssize_t
BSerialPort::Read(void *buf, size_t count) BSerialPort::Read(void *buf, size_t count)
{ {
@@ -86,6 +107,9 @@ BSerialPort::Read(void *buf, size_t count)
} }
/* Write some data to the serial port. */
/* @param the buffer from which transfer the data */
/* @param how many bytes to write */
ssize_t ssize_t
BSerialPort::Write(const void *buf, size_t count) BSerialPort::Write(const void *buf, size_t count)
{ {
@@ -96,6 +120,7 @@ BSerialPort::Write(const void *buf, size_t count)
} }
/* Set blocking mode */
void void
BSerialPort::SetBlocking(bool Blocking) BSerialPort::SetBlocking(bool Blocking)
{ {
@@ -104,6 +129,8 @@ BSerialPort::SetBlocking(bool Blocking)
} }
/* Set the timeout for the port */
/* Valid values: B_INFINITE_TIMEOUT or any value between 0 and 25000000 */
status_t status_t
BSerialPort::SetTimeout(bigtime_t microSeconds) BSerialPort::SetTimeout(bigtime_t microSeconds)
{ {
@@ -119,6 +146,7 @@ BSerialPort::SetTimeout(bigtime_t microSeconds)
} }
/* Set the data rate (Baud rate) for the port */
status_t status_t
BSerialPort::SetDataRate(data_rate bitsPerSecond) BSerialPort::SetDataRate(data_rate bitsPerSecond)
{ {
@@ -128,6 +156,7 @@ BSerialPort::SetDataRate(data_rate bitsPerSecond)
} }
/* Get the data rate (Baud Rate) */
data_rate data_rate
BSerialPort::DataRate(void) BSerialPort::DataRate(void)
{ {
@@ -135,6 +164,7 @@ BSerialPort::DataRate(void)
} }
/* Set the data bits (7 or 8) */
void void
BSerialPort::SetDataBits(data_bits numBits) BSerialPort::SetDataBits(data_bits numBits)
{ {
@@ -143,6 +173,7 @@ BSerialPort::SetDataBits(data_bits numBits)
} }
/* Get the data bits */
data_bits data_bits
BSerialPort::DataBits(void) BSerialPort::DataBits(void)
{ {
@@ -150,6 +181,7 @@ BSerialPort::DataBits(void)
} }
/* Set the stop bits (1 or 2) */
void void
BSerialPort::SetStopBits(stop_bits numBits) BSerialPort::SetStopBits(stop_bits numBits)
{ {
@@ -158,6 +190,7 @@ BSerialPort::SetStopBits(stop_bits numBits)
} }
/* Get the stop bits */
stop_bits stop_bits
BSerialPort::StopBits(void) BSerialPort::StopBits(void)
{ {
@@ -165,6 +198,7 @@ BSerialPort::StopBits(void)
} }
/* Set the parity mode (ODD, PAIR, or NONE) */
void void
BSerialPort::SetParityMode(parity_mode which) BSerialPort::SetParityMode(parity_mode which)
{ {
@@ -173,6 +207,7 @@ BSerialPort::SetParityMode(parity_mode which)
} }
/* Get the parity mode */
parity_mode parity_mode
BSerialPort::ParityMode(void) BSerialPort::ParityMode(void)
{ {
@@ -180,6 +215,7 @@ BSerialPort::ParityMode(void)
} }
/* Clear the input buffer */
void void
BSerialPort::ClearInput(void) BSerialPort::ClearInput(void)
{ {
@@ -187,6 +223,7 @@ BSerialPort::ClearInput(void)
} }
/* Clear the output buffer */
void void
BSerialPort::ClearOutput(void) BSerialPort::ClearOutput(void)
{ {
@@ -194,6 +231,7 @@ BSerialPort::ClearOutput(void)
} }
/* Set the flow control (HARDWARE, SOFTWARE, or NONE) */
void void
BSerialPort::SetFlowControl(uint32 method) BSerialPort::SetFlowControl(uint32 method)
{ {
@@ -202,6 +240,7 @@ BSerialPort::SetFlowControl(uint32 method)
} }
/* Get the flow control */
uint32 uint32
BSerialPort::FlowControl(void) BSerialPort::FlowControl(void)
{ {
@@ -209,6 +248,7 @@ BSerialPort::FlowControl(void)
} }
/* Set the DTR */
status_t status_t
BSerialPort::SetDTR(bool asserted) BSerialPort::SetDTR(bool asserted)
{ {
@@ -218,6 +258,7 @@ BSerialPort::SetDTR(bool asserted)
} }
/* Set the RTS status */
status_t status_t
BSerialPort::SetRTS(bool asserted) BSerialPort::SetRTS(bool asserted)
{ {
@@ -227,6 +268,8 @@ BSerialPort::SetRTS(bool asserted)
} }
/* See how many chars are queued on the serial port, */
/* waiting to be read */
status_t status_t
BSerialPort::NumCharsAvailable(int32 *wait_until_this_many) BSerialPort::NumCharsAvailable(int32 *wait_until_this_many)
{ {
@@ -234,10 +277,12 @@ BSerialPort::NumCharsAvailable(int32 *wait_until_this_many)
if (ffd < 0) if (ffd < 0)
return B_ERROR; return B_ERROR;
//TODO: Implement
return B_OK; return B_OK;
} }
/* See if CTS is set */
bool bool
BSerialPort::IsCTS(void) BSerialPort::IsCTS(void)
{ {
@@ -250,6 +295,7 @@ BSerialPort::IsCTS(void)
} }
/* See if DSR is set */
bool bool
BSerialPort::IsDSR(void) BSerialPort::IsDSR(void)
{ {
@@ -262,6 +308,7 @@ BSerialPort::IsDSR(void)
} }
/* See if RI is set */
bool bool
BSerialPort::IsRI(void) BSerialPort::IsRI(void)
{ {
@@ -274,6 +321,7 @@ BSerialPort::IsRI(void)
} }
/* See if DCD is set */
bool bool
BSerialPort::IsDCD(void) BSerialPort::IsDCD(void)
{ {
@@ -286,16 +334,21 @@ BSerialPort::IsDCD(void)
} }
/* Wait until there's something to read from the serial port. */
/* If no data is ready, it will always block, ignoring the */
/* value of SetBlocking(); however, it respects the timeout */
/* set by SetTimeout(). */
ssize_t ssize_t
BSerialPort::WaitForInput(void) BSerialPort::WaitForInput(void)
{ {
int size; ssize_t size;
int err = ioctl(ffd, TCWAITEVENT, &size, sizeof(size)); int err = ioctl(ffd, TCWAITEVENT, &size, sizeof size);
return (err < B_OK) ? errno : size; return (err < B_OK) ? errno : size;
} }
/* Returns the number of available Serial Ports. */
int32 int32
BSerialPort::CountDevices() BSerialPort::CountDevices()
{ {
@@ -308,6 +361,11 @@ BSerialPort::CountDevices()
} }
/* Get the device name for the given device.*/
/* The first parameter is the number of the device */
/* you want to know the name, the second is the buffer */
/* where you want to store the name, and the third is */
/* the length of that buffer. */
status_t status_t
BSerialPort::GetDeviceName(int32 n, char *name, size_t bufSize) BSerialPort::GetDeviceName(int32 n, char *name, size_t bufSize)
{ {
@@ -325,8 +383,10 @@ BSerialPort::GetDeviceName(int32 n, char *name, size_t bufSize)
} }
// Private or Reserved /* Private or Reserved */
/* Query the serial driver about the available devices, */
/* and build a list of them. */
void void
BSerialPort::ScanDevices() BSerialPort::ScanDevices()
{ {
@@ -336,10 +396,8 @@ BSerialPort::ScanDevices()
//First, we empty the list //First, we empty the list
for (int32 count = _fDevices->CountItems() - 1; count >= 0; count--) for (int32 count = _fDevices->CountItems() - 1; count >= 0; count--)
free(_fDevices->ItemAt(count)); free(_fDevices->RemoveItem(count));
_fDevices->MakeEmpty();
//Then, add the devices to the list //Then, add the devices to the list
while (dir.GetNextEntry(&entry) == B_OK) while (dir.GetNextEntry(&entry) == B_OK)
{ {
@@ -349,6 +407,9 @@ BSerialPort::ScanDevices()
} }
/* Send the options to the serial driver. */
/* Returns B_OK if all goes fine, an error code */
/* if something goes wrong. */
int int
BSerialPort::DriverControl() BSerialPort::DriverControl()
{ {
@@ -418,7 +479,7 @@ BSerialPort::DriverControl()
} }
//FBC /* These functions are here to maintain Binary Compatibility */
void BSerialPort::_ReservedSerialPort1() {} void BSerialPort::_ReservedSerialPort1() {}
void BSerialPort::_ReservedSerialPort2() {} void BSerialPort::_ReservedSerialPort2() {}
void BSerialPort::_ReservedSerialPort3() {} void BSerialPort::_ReservedSerialPort3() {}