// (Log is kept at end of this file)
+#include <errno.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
}
bool fgSERIAL::open_port(const string& device) {
+ struct termios config;
+
if ( (fd = open(device.c_str(), O_RDWR | O_NONBLOCK)) == -1 ) {
FG_LOG( FG_SERIAL, FG_ALERT, "Cannot open " << device
<< " for serial I/O" );
return false;
} else {
dev_open = true;
- return true;
}
+
+ // set required port parameters
+ if ( tcgetattr( fd, &config ) != 0 ) {
+ FG_LOG( FG_SERIAL, FG_ALERT, "Unable to poll port settings" );
+ return false;
+ }
+
+ cfmakeraw( &config );
+
+ // cout << "config.c_iflag = " << config.c_iflag << endl;
+
+ // software flow control on
+ // config.c_iflag |= IXON;
+ // config.c_iflag |= IXOFF;
+
+ // disable hardware flow control
+ // config.c_cflag |= CRTSCTS;
+
+ // cout << "config.c_iflag = " << config.c_iflag << endl;
+
+ if ( tcsetattr( fd, TCSANOW, &config ) != 0 ) {
+ FG_LOG( FG_SERIAL, FG_ALERT, "Unable to update port settings" );
+ return false;
+ }
+
+ return true;
}
bool fgSERIAL::set_baud(int baud) {
struct termios config;
- speed_t speed;
-
- cout << "attempting to set baud rate to: " << baud << endl;
+ speed_t speed = B9600;
if ( tcgetattr( fd, &config ) != 0 ) {
FG_LOG( FG_SERIAL, FG_ALERT, "Unable to poll port settings" );
speed = B57600;
} else if ( baud == 115200 ) {
speed = B115200;
+#if defined( linux ) || defined( __FreeBSD__ )
} else if ( baud == 230400 ) {
speed = B230400;
+#endif
} else {
FG_LOG( FG_SERIAL, FG_ALERT, "Unsupported baud rate " << baud );
return false;
return false;
}
- cout << "successfully set baud to " << baud << endl;
-
return true;
}
// $Log$
+// Revision 1.4 1998/11/23 21:47:00 curt
+// Cygnus tools compatibility tweaks.
+//
+// Revision 1.3 1998/11/19 13:52:54 curt
+// port configuration tweaks & experiments.
+//
+// Revision 1.2 1998/11/19 03:35:43 curt
+// Updates ...
+//
// Revision 1.1 1998/11/16 13:53:02 curt
// Initial revision.
//