Adding option to change CR to NL conversion

Signed-off-by: dkubischlu1 <daniel.kubisch@sigmatechnology.se>
diff --git a/src/SerialPort.cc b/src/SerialPort.cc
index f1c61f2..59f4833 100644
--- a/src/SerialPort.cc
+++ b/src/SerialPort.cc
@@ -23,6 +23,7 @@
     dataBits = CS8;     //8 data bits
     stopBit  = ~CSTOPB; //1 stop bit
     parity   = 0;       //parity: none
+	CRtoNL   = false;   // convert NL to CR: false
   }
 
   SerialPort::~SerialPort()
@@ -33,8 +34,11 @@
   //    Implementation of the external function <set_parameter>.
   void set__port__parameter(const CHARSTRING& parameter_name, const CHARSTRING& parameter_value, SerialPort& serial_port) {
 	serial_port.set_parameter(parameter_name, parameter_value);
-	const char* device_file_name = serial_port.get_device_file_name();
-	printf("Device File Name: %s\n", device_file_name);
+	
+	if (strcmp(parameter_name, "deviceFileName") == 0) {
+		const char* device_file_name = serial_port.get_device_file_name();
+		printf("Device File Name: %s\n", device_file_name);
+	}
   }
 
   char* SerialPort::get_device_file_name(){
@@ -123,7 +127,7 @@
       //printf("Parameter %s set to %s (int: %d)\n", parameter_name, parameter_value, blocking);
     } else if (strncmp(parameter_name, "EOLChar", 7) == 0) {
       eolChars.push_back(parameter_value[0]);
-      printf("Parameter %s set to %s (int: %d)\n", parameter_name, parameter_value, eolChars.back());
+      //printf("Parameter %s set to %s (int: %d)\n", parameter_name, parameter_value, eolChars.back());
     } else if (strcmp(parameter_name, "dataBits") == 0) {
       if (strcmp(parameter_value, "5") == 0) {
 	dataBits = CS5;
@@ -146,6 +150,12 @@
 	TTCN_error("Invalid %s value: %s\n", parameter_name, parameter_value);
       }
       //printf("Parameter %s set to %s (int: %d, hex: 0x%0)\n", parameter_name, parameter_value, stopBit);
+    }else if (strcmp(parameter_name, "CRtoNL") == 0) {
+	  if (strcmp(parameter_value, "no") == 0){
+	    CRtoNL = false;
+	  } else if (strcmp(parameter_value, "yes") == 0){
+	    CRtoNL = true;
+	  }
     }
   }
 
@@ -190,7 +200,7 @@
 	  incoming_message(ret_val);
 	}
       }
-    }
+    } 
   }
 
   /*void SerialPort::Handle_Timeout(double time_since_last_call) {}*/
@@ -203,7 +213,7 @@
 	{
 	  TTCN_error("Unable to open port %s", param_device_file);
 	} else {
-	set_interface_attribs (device_fd, speed, parity, dataBits, stopBit);
+	set_interface_attribs (device_fd, speed, parity, dataBits, stopBit, CRtoNL);
 	set_blocking (device_fd, blocking);
 	Handler_Add_Fd_Read(device_fd);
 	ret_buffer = CHARSTRING("");
@@ -246,7 +256,7 @@
     }
   }
 
-  int SerialPort::set_interface_attribs (int fd, speed_t speed, int parity, int dataBits, int stopBit)
+  int SerialPort::set_interface_attribs (int fd, speed_t speed, int parity, int dataBits, int stopBit, bool CRtoNL)
   {
     struct termios tty;
     memset (&tty, 0, sizeof tty);
@@ -259,6 +269,8 @@
     cfsetospeed (&tty, speed);
     cfsetispeed (&tty, speed);
 
+	
+	
     tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;     // 8-bit chars
     // disable IGNBRK for mismatched speed tests; otherwise receive break
     // as \000 chars
@@ -266,7 +278,15 @@
     tty.c_lflag = 0;                // no signaling chars, no echo,
     // no canonical processing
     tty.c_oflag = 0;                // no remapping, no delays
-
+	
+    if(CRtoNL){
+	    tty.c_iflag |= ICRNL;
+		//printf("now iflag: %u ",tty.c_iflag);
+    } else {
+	    tty.c_iflag &= ~ICRNL;
+		//printf("iflag: %u ",tty.c_iflag);
+	}
+	
     tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl
 
     tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls,
@@ -275,7 +295,7 @@
     tty.c_cflag |= parity;
     tty.c_cflag &= ~CSTOPB;
     tty.c_cflag &= ~CRTSCTS;
-
+	
     if (tcsetattr (fd, TCSANOW, &tty) != 0)
       {
 	TTCN_error ("error %d from tcsetattr", errno);
@@ -304,3 +324,4 @@
 
 } /* end of namespace */
 
+
diff --git a/src/SerialPort.hh b/src/SerialPort.hh
index 1520779..d4c0c44 100644
--- a/src/SerialPort.hh
+++ b/src/SerialPort.hh
@@ -50,7 +50,7 @@
     void user_stop();
     void outgoing_send(const CHARSTRING& send_par);
 
-    int  set_interface_attribs (int fd, speed_t speed, int parity, int dataBits, int stopBit);
+    int  set_interface_attribs (int fd, speed_t speed, int parity, int dataBits, int stopBit, bool CRtoNL);
     void set_blocking (int fd, int should_block);
 
     char *param_device_file;
@@ -61,9 +61,11 @@
     std::vector<char> eolChars;
     int dataBits;
     int stopBit;
+	bool CRtoNL;
     CHARSTRING ret_buffer;
   };
 
 } /* end of namespace */
 
 #endif
+