Armin Diehl wrote:
I need some hint regarding opening a serial (ttyUSB) port using the unit serial. Minicom works fine under my user id. When i call SerOpen('/dev/ttyUSB0'), fpopen blocks forever. When i first start minicom on that port, SerOpen and all other functions of serial.pp works fine.
I don't use serial.pp but here is how I open a serial port for basic communication (no flow control, modem control or stuff like that) under linux. I remember this taking some experimentation to get right.

procedure tlserial.open;
var
 fd : longint;
 config : termios;
 baudrateos : longint;
begin
 fd := fpopen(device,O_RDWR or O_NOCTTY);
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;
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to