]> git.mxchange.org Git - simgear.git/blobdiff - Serial/serial.cxx
Cygnus tools compatibility tweaks.
[simgear.git] / Serial / serial.cxx
index 0106e242c458e79a7b439fcd71eb2e88ef6992ae..e866f8f9d91375fe1a2e2b1414a147be767061b3 100644 (file)
@@ -22,6 +22,7 @@
 // (Log is kept at end of this file)
 
 
+#include <errno.h>
 #include <termios.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -50,21 +51,46 @@ fgSERIAL::~fgSERIAL() {
 }
 
 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" );
@@ -89,8 +115,10 @@ bool fgSERIAL::set_baud(int baud) {
        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;
@@ -111,8 +139,6 @@ bool fgSERIAL::set_baud(int baud) {
        return false;
     }
 
-    cout << "successfully set baud to " << baud << endl;
-
     return true;
 }
 
@@ -157,6 +183,15 @@ int fgSERIAL::write_port(const string& value) {
 
 
 // $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.
 //