{$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.