Hi again,
what are you doing with the seriel port? If it's something like modem communications or Terminal then just let the operating system do the work and "talk" to the device through STD IN/OUT. I rewrote one program that was a terminal driver and now I just use /usr/sbin/mgetty to do the work!
Now a real question for the linux programmers:
I use and open the device using : "fdOpen('/dev/ttyS0'....);"
reading the device with: "FD_SET (PortHdl,FDS);"
and "Select(PortHdl+1,@FDS, nil, nil, 50);"
and "FD_ISSET(PortHdl,FDS) and
"fdRead(PortHdl,TermInStr[1],sizeof(TermInStr)-1); (see examples below)
I would say that the operating system would be doing all then I/O buffering? Is this correct? Or would I loss charater input from the device /dev/ttyS0 if
there would be more then 16 char (whatever the hardware UART holds) waiting?
I POLL my input procedure fairly infrequently and have never lost any seriell input that
I know of!
to you knowledgable linux Gurus...
my regards,
Stefan
EXAMPLES:
function StartInput:boolean;
const
ScalePort = '/dev/ttyS0'; {S0 = com1 S1 = com2}
begin
StartInput:=false;
PortHdl:=fdOpen(ScalePort,Open_RdWr or Open_NonBlock or Open_Excl);
if PortHdl>0 then
begin
{Attempt to Lock the port, I'm not sure this is strictly nessecary}
FLock(PortHdl,LOCK_EX);
IOCtl(PortHdl,TCGETS,@tios);
tios.c_cflag := B2400 or CS8 Or CREAD Or CLOCAL;
tios.c_lflag := 0;
tios.c_oflag := 0;
tios.c_iflag := IGNPAR;
IOCtl(PortHdl,TCSETS,@tios);
DtrOn;
RS485RX;
StartInput:=true;
end;
end;
procedure ScaleInput;
begin
FD_Zero (FDS); {Clear File Descriptors Array}
FD_SET (PortHdl,FDS); {Input from Serial Port}
{index+1 Readfds,Writefds,exceptfds,TimeOut_ms}
{Will Wait 50ms or input from above}
InAct:=Select(PortHdl+1,@FDS, nil, nil, 50);
if InAct= -1 then
begin
WriteLn('Error in "Select"',LinuxError);
TagQuit:=true;
end else
begin
if InAct>0 then
begin
if FD_ISSET(PortHdl,FDS) then {Have we data waiting in UART ? }
begin
InLen:=fdRead(PortHdl,TermInStr[1],sizeof(TermInStr)-1);
if InLen>0 then
begin
for Loop:=1 to Inlen do
begin
poin:= (ord(TermInStr[Loop]) and $7F);
case poin of
10:begin
do_StrIsIn;
inScaleStr:="'';
end;
13:begin
end;
else
InScaleStr:=InScaleStr+chr(poin);
end;
end; {case}
end;
end;
end; {no input}
end; {no error}
end;
Thanks!
I had a look on this code right now, but I am afraid that this code will
not
supply me a buffered input. (I mean: If I currently do NOT read the
arriving
data, the data must be buffered in some kind of FIFO, and I must be able to
check if there are characters available before(!) doing a read operation.
(important, because otherwise my program will hang until something comes
in!)
Show quoted text 25 lines
Is this done with this code?
On Fri, 26 Apr 2002, Stefan Becker wrote:
> Hi,
> I don't know if there is a fossile interface (unit) for linux but
> Brad Campbell's () unit helped me
> alot.
> I put it on
http://home.t-online.de/home/yukonho/seriell.pp
>
> Stefan
>
>
> -----Ursprüngliche Nachricht-----
> Von: Rainer Hantsch
> An: Free Pascal Group
> Datum: Donnerstag, 25. April 2002 10:26
> Betreff: [fpc-pascal]Serial Port Programming under LINUX...
>
>
> >Hello, all!
> >
> >I do really hope that there is somebody here who has real EXPERIENCE
with
> >programming serial communications in FPC and for Linux. - I am totally
> unhappy
> >because I find no WORKING solution for this. Please, if you can help,
leave
Show quoted text 6 lines
> me
> >a message. -- THANKS!
> >
> >What I had in the past:
> >-----------------------
> >When I was programming in TP/BP for DOS, I used the FOSSIL/X00
TSR-driver
Show quoted text 5 lines
> to
> >communicate with serial devices. This TSR driver did all low level stuff
> >for me, including a ring buffer, handshaking (both, XON/XOFF and/or
> RTS/CTS),
> >..., so I only had to write a relatively simple unit, to make "Fossil"
more
> >user friendly.
> >With this simple task I had the possibility to send/receive _buffered_,
> >flush/purge the buffer contents, rise/lower DTR, ask if chars were
received
Show quoted text 5 lines
> >_without_ actually reading them in,... -- EXCELLENT.
> >
> >What I am looking for:
> >----------------------
> >Since my change to Linux and FreePascal, I am really unhappy because
there
Show quoted text 7 lines
> >seems to be nothing similar available here. Well, There are some units
> >available for FPC, but most of them are for DOS or WIN32. The only one
> which
> >appears to be very useful, is OBJCOM.
> >But this unit has an unacceptable BUG inside: It stops any further
> >communication when the DCD is dropped by the modem when the connection
> >breaks. It seems that this causes a total loss of the internal file
handle!
> >Sadly to say, but it appears as if nobody is working on this ObjCOM any
> >longer, including M.Kiesel who contributed ObjCom, so this appears to be
a
> >dead end...
> >
> >
> >If somebody has a unit which works with FOSSIL (DOS), WIN32 *AND* LINUX
and
> >gives me an acceptable control to the data communication, I will be
happy
Show quoted text 57 lines
> to
> >know about that, even if this is a commercial unit.
> >
> >
> >Thanks in advance,
> >
> >mfg
> >
> > Ing. Rainer Hantsch
> >
> >--
> > \\|// Ing. Rainer HANTSCH - Hardware + Software
> > (o o) Forget Windoze! -- We focus on L-I-N-U-X...
> >--oOOo-(_)-oOOo--------------------------------------------------
> >Ing. Rainer HANTSCH | e-Mail:
> >Khunngasse 21/20 | www :
http://www.hantsch.co.at
> >A-1030 Vienna | Tel. : ++43 - 1 - 7988538 0
> >---------------------| Fax : ++43 - 1 - 7988538 18
> >** AUSTRIA ** | Mobile: ++43 - 664 - 9194382
> >-----------------------------------------------------------------
> >
> >
> >
> >
> >_______________________________________________
> >fpc-pascal maillist -
> >
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
> >
>
>
>
> _______________________________________________
> fpc-pascal maillist -
>
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
mfg
Ing. Rainer Hantsch
--
\\|// Ing. Rainer HANTSCH - Hardware + Software
(o o) Forget Windoze! -- We focus on L-I-N-U-X...
--oOOo-(_)-oOOo--------------------------------------------------
Ing. Rainer HANTSCH | e-Mail:
Khunngasse 21/20 | www :
http://www.hantsch.co.at
A-1030 Vienna | Tel. : ++43 - 1 - 7988538 0
---------------------| Fax : ++43 - 1 - 7988538 18
** AUSTRIA ** | Mobile: ++43 - 664 - 9194382
-----------------------------------------------------------------
_______________________________________________
fpc-pascal maillist -
http://lists.freepascal.org/mailman/listinfo/fpc-pascal