-{$mode delphi}
-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.
+{$mode delphi}\r
+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 or O_NONBLOCK);\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.\r