add O_NONBLOCK in lserial.pas, apparently some serial ports need this to
[lcore.git] / lserial.pas
index e7b6d2743d9900971e7ed6c74e804f2e09ade38b..cee472708da49cb622129a3eabd022ccb3f676a4 100755 (executable)
@@ -1,71 +1,71 @@
 {$mode delphi}
-unit lserial;\r
-interface\r
-uses \r
-  lcore;\r
-  \r
-type\r
-  tlserial=class(tlasio)\r
-  public \r
-    device: string;\r
-       baudrate: longint;\r
-    procedure open;\r
-  end;\r
-  \r
-  \r
-implementation\r
-uses\r
-  baseunix,\r
-  unix,\r
-  unixutil,\r
-  termio, // despite the name the fpc termio unit seems to be an interface to termios\r
-  sysutils;\r
-procedure tlserial.open;\r
-var\r
-  fd : longint;\r
-  config : termios;\r
-  baudrateos : longint;\r
-begin\r
-  fd := fpopen(device,O_RDWR or O_NOCTTY);\r
-  \r
-  if isatty(fd)=0 then begin\r
-    writeln('not a tty');\r
-    halt(1);\r
-  end;\r
-\r
-  fillchar(config,sizeof(config),#0);\r
-  config.c_cflag := CLOCAL or CREAD;\r
-  cfmakeraw(config);\r
-  case baudrate of\r
-    50:     baudrateos := B50;\r
-       75:     baudrateos := B75;\r
-       110:    baudrateos := B110;\r
-       134:    baudrateos := B134;\r
-       150:    baudrateos := B150;\r
-       200:    baudrateos := B200;\r
-       300:    baudrateos := B300;\r
-       600:    baudrateos := B600;\r
-       1200:   baudrateos := B1200;\r
-       1800:   baudrateos := B1800;\r
-       2400:   baudrateos := B2400;\r
-       4800:   baudrateos := B4800;\r
-       9600:   baudrateos := B9600;\r
-       19200:  baudrateos := B19200;\r
-       38400:  baudrateos := B38400;\r
-       57600:  baudrateos := B57600;\r
-       115200: baudrateos := B115200;\r
-       230400: baudrateos := B230400; \r
-       else raise exception.create('unrecognised baudrate');\r
-  end;\r
-  cfsetispeed(config,baudrateos);\r
-  cfsetospeed(config,baudrateos);\r
-  config.c_cc[VMIN]  := 1;\r
-  config.c_cc[VTIME] := 0;\r
-  if   tcsetattr(fd,TCSAFLUSH,config) <0 then begin\r
-    writeln('could not set termios attributes');\r
-    halt(3);\r
-  end;\r
-  dup(fd);\r
-  closehandles := true;\r
-end;\r
-end.
\ No newline at end of file
+unit lserial;
+interface
+uses 
+  lcore;
+  
+type
+  tlserial=class(tlasio)
+  public 
+    device: string;
+       baudrate: longint;
+    procedure open;
+  end;
+  
+  
+implementation
+uses
+  baseunix,
+  unix,
+  unixutil,
+  termio, // despite the name the fpc termio unit seems to be an interface to termios
+  sysutils;
+procedure tlserial.open;
+var
+  fd : longint;
+  config : termios;
+  baudrateos : longint;
+begin
+  fd := fpopen(device,O_RDWR or O_NOCTTY or O_NONBLOCK);
+  
+  if isatty(fd)=0 then begin
+    writeln('not a tty');
+    halt(1);
+  end;
+
+  fillchar(config,sizeof(config),#0);
+  config.c_cflag := CLOCAL or CREAD;
+  cfmakeraw(config);
+  case baudrate of
+    50:     baudrateos := B50;
+       75:     baudrateos := B75;
+       110:    baudrateos := B110;
+       134:    baudrateos := B134;
+       150:    baudrateos := B150;
+       200:    baudrateos := B200;
+       300:    baudrateos := B300;
+       600:    baudrateos := B600;
+       1200:   baudrateos := B1200;
+       1800:   baudrateos := B1800;
+       2400:   baudrateos := B2400;
+       4800:   baudrateos := B4800;
+       9600:   baudrateos := B9600;
+       19200:  baudrateos := B19200;
+       38400:  baudrateos := B38400;
+       57600:  baudrateos := B57600;
+       115200: baudrateos := B115200;
+       230400: baudrateos := B230400; 
+       else raise exception.create('unrecognised baudrate');
+  end;
+  cfsetispeed(config,baudrateos);
+  cfsetospeed(config,baudrateos);
+  config.c_cc[VMIN]  := 1;
+  config.c_cc[VTIME] := 0;
+  if   tcsetattr(fd,TCSAFLUSH,config) <0 then begin
+    writeln('could not set termios attributes');
+    halt(3);
+  end;
+  dup(fd);
+  closehandles := true;
+end;
+end.