Having the class destructor close the fd was a bad idea ... especially if you
ever make a copy of the instance and then subsequently destroy either. close_port() is now a separate member function.
This commit is contained in:
parent
b82aef65e5
commit
b4a913e339
2 changed files with 39 additions and 8 deletions
|
@ -47,13 +47,20 @@ fgSERIAL::fgSERIAL(const string& device, int baud) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fgSERIAL::~fgSERIAL() {
|
fgSERIAL::~fgSERIAL() {
|
||||||
close(fd);
|
// closing the port here screws us up because if we would even so
|
||||||
|
// much as make a copy of an fgSERIAL object and then delete it,
|
||||||
|
// the file descriptor gets closed. Doh!!!
|
||||||
|
|
||||||
|
// close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fgSERIAL::open_port(const string& device) {
|
bool fgSERIAL::open_port(const string& device) {
|
||||||
struct termios config;
|
struct termios config;
|
||||||
|
|
||||||
if ( (fd = open(device.c_str(), O_RDWR | O_NONBLOCK)) == -1 ) {
|
fd = open(device.c_str(), O_RDWR | O_NONBLOCK);
|
||||||
|
cout << "Serial fd created = " << fd << endl;
|
||||||
|
|
||||||
|
if ( fd == -1 ) {
|
||||||
FG_LOG( FG_SERIAL, FG_ALERT, "Cannot open " << device
|
FG_LOG( FG_SERIAL, FG_ALERT, "Cannot open " << device
|
||||||
<< " for serial I/O" );
|
<< " for serial I/O" );
|
||||||
return false;
|
return false;
|
||||||
|
@ -72,11 +79,13 @@ bool fgSERIAL::open_port(const string& device) {
|
||||||
// cout << "config.c_iflag = " << config.c_iflag << endl;
|
// cout << "config.c_iflag = " << config.c_iflag << endl;
|
||||||
|
|
||||||
// software flow control on
|
// software flow control on
|
||||||
// config.c_iflag |= IXON;
|
config.c_iflag |= IXON;
|
||||||
// config.c_iflag |= IXOFF;
|
config.c_iflag |= IXOFF;
|
||||||
|
|
||||||
|
// config.c_cflag |= CLOCAL;
|
||||||
|
|
||||||
// disable hardware flow control
|
// disable hardware flow control
|
||||||
// config.c_cflag |= CRTSCTS;
|
config.c_cflag &= ~(CRTSCTS);
|
||||||
|
|
||||||
// cout << "config.c_iflag = " << config.c_iflag << endl;
|
// cout << "config.c_iflag = " << config.c_iflag << endl;
|
||||||
|
|
||||||
|
@ -88,6 +97,13 @@ bool fgSERIAL::open_port(const string& device) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool fgSERIAL::close_port() {
|
||||||
|
close(fd);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool fgSERIAL::set_baud(int baud) {
|
bool fgSERIAL::set_baud(int baud) {
|
||||||
struct termios config;
|
struct termios config;
|
||||||
speed_t speed = B9600;
|
speed_t speed = B9600;
|
||||||
|
@ -174,8 +190,13 @@ int fgSERIAL::write_port(const string& value) {
|
||||||
// cout << "write '" << value << "' " << count << " bytes" << endl;
|
// cout << "write '" << value << "' " << count << " bytes" << endl;
|
||||||
|
|
||||||
if ( (int)count != (int)value.length() ) {
|
if ( (int)count != (int)value.length() ) {
|
||||||
FG_LOG( FG_SERIAL, FG_ALERT,
|
if ( errno == EAGAIN ) {
|
||||||
"Serial I/O on write, error number = " << errno );
|
// ok ... in our context we don't really care if we can't
|
||||||
|
// write a string, we'll just get it the next time around
|
||||||
|
} else {
|
||||||
|
FG_LOG( FG_SERIAL, FG_ALERT,
|
||||||
|
"Serial I/O on write, error number = " << errno );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
@ -183,6 +204,11 @@ int fgSERIAL::write_port(const string& value) {
|
||||||
|
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.6 1998/11/30 17:15:29 curt
|
||||||
|
// Having the class destructor close the fd was a bad idea ... especially if you
|
||||||
|
// ever make a copy of the instance and then subsequently destroy either.
|
||||||
|
// close_port() is now a separate member function.
|
||||||
|
//
|
||||||
// Revision 1.5 1998/11/25 01:33:23 curt
|
// Revision 1.5 1998/11/25 01:33:23 curt
|
||||||
// Remove call to cfmakeraw()
|
// Remove call to cfmakeraw()
|
||||||
//
|
//
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
// if someone know how to do this all with C++ streams let me know
|
// if someone know how to do this all with C++ streams let me know
|
||||||
#include <stdio.h>
|
// #include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
class fgSERIAL
|
class fgSERIAL
|
||||||
|
@ -66,6 +66,11 @@ public:
|
||||||
|
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.2 1998/11/30 17:15:30 curt
|
||||||
|
// Having the class destructor close the fd was a bad idea ... especially if you
|
||||||
|
// ever make a copy of the instance and then subsequently destroy either.
|
||||||
|
// close_port() is now a separate member function.
|
||||||
|
//
|
||||||
// Revision 1.1 1998/11/16 13:53:02 curt
|
// Revision 1.1 1998/11/16 13:53:02 curt
|
||||||
// Initial revision.
|
// Initial revision.
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue