diff mbox series

[Ada] Fix serial port control setting on GNU/Linux

Message ID 20201130141711.GA117766@adacore.com
State New
Headers show
Series [Ada] Fix serial port control setting on GNU/Linux | expand

Commit Message

Pierre-Marie de Rodat Nov. 30, 2020, 2:17 p.m. UTC
This fixes an issue when setting the control flags of the serial
communication port. The c_cflag termios field should not be set with the
baud rate. The speed of the communication is set using the c_ispeed and
c_ospeed fields. Setting the baud rate into the c_cflag has unexpected
results as it will wrongly set some bits used to control other aspects
of the communication channel (bits, parity...).

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* libgnat/g-sercom__linux.adb (Set): Fix control flags of the
	serial port setting.
diff mbox series

Patch

diff --git a/gcc/ada/libgnat/g-sercom__linux.adb b/gcc/ada/libgnat/g-sercom__linux.adb
--- a/gcc/ada/libgnat/g-sercom__linux.adb
+++ b/gcc/ada/libgnat/g-sercom__linux.adb
@@ -52,34 +52,6 @@  package body GNAT.Serial_Communications is
    function fcntl (fd : int; cmd : int; value : int) return int;
    pragma Import (C, fcntl, "fcntl");
 
-   C_Data_Rate : constant array (Data_Rate) of unsigned :=
-                   (B75      => OSC.B75,
-                    B110     => OSC.B110,
-                    B150     => OSC.B150,
-                    B300     => OSC.B300,
-                    B600     => OSC.B600,
-                    B1200    => OSC.B1200,
-                    B2400    => OSC.B2400,
-                    B4800    => OSC.B4800,
-                    B9600    => OSC.B9600,
-                    B19200   => OSC.B19200,
-                    B38400   => OSC.B38400,
-                    B57600   => OSC.B57600,
-                    B115200  => OSC.B115200,
-                    B230400  => OSC.B230400,
-                    B460800  => OSC.B460800,
-                    B500000  => OSC.B500000,
-                    B576000  => OSC.B576000,
-                    B921600  => OSC.B921600,
-                    B1000000 => OSC.B1000000,
-                    B1152000 => OSC.B1152000,
-                    B1500000 => OSC.B1500000,
-                    B2000000 => OSC.B2000000,
-                    B2500000 => OSC.B2500000,
-                    B3000000 => OSC.B3000000,
-                    B3500000 => OSC.B3500000,
-                    B4000000 => OSC.B4000000);
-
    C_Bits      : constant array (Data_Bits) of unsigned :=
                    (CS7 => OSC.CS7, CS8 => OSC.CS8);
 
@@ -229,8 +201,7 @@  package body GNAT.Serial_Communications is
 
       --  Change settings now
 
-      Current.c_cflag := C_Data_Rate (Rate)
-                           or C_Bits (Bits)
+      Current.c_cflag := C_Bits (Bits)
                            or C_Stop_Bits (Stop_Bits)
                            or C_Parity (Parity)
                            or CREAD;