[fpc-pascal] Serial to TCP gateway in FPC?

Bo Berglund bo.berglund at gmail.com
Wed Jun 21 01:37:50 CEST 2017


On Tue, 20 Jun 2017 09:18:50 +0000, Mark Morgan Lloyd
<markMLl.fpc-pascal at telemetry.co.uk> wrote:

>
>I tend to use the lower-level serial.pp unit. The patches I contributed 
>a couple of years ago specifically added a couple of read-with-timeout 
>functions.

I'm back with a question:
I used the serial example in the hardware access wiki:
http://wiki.freepascal.org/Hardware_Access#FPC_built_in_Serial_unit

as a template and I have a button on my form to open/close the serial
port, but it does not work properly. Below is my button code to open
and close the port depending on the state it is in, which is set by
the global boolean var FComOpen.
The port number is taken from a spinedit speComPort and the baud rate
is from a preloaded combobox cbxBaud:

procedure TForm1.btnConnectComClick(Sender: TObject);
begin
  if FComOpen then
  begin
    //Close com port
    SerSync(FComH); { flush out any remaining before closure }
    SerFlushOutput(FComH); { discard any remaining output }
    SerClose(FComH);
    FComOpen := false;
    TButton(Sender).Caption:= 'Open Serial';
    ledSerial.Brush.Color:= clRed;
  end
  else
  begin
    //Open com port
    FComPortName := 'COM' + IntToStr(speComPort.Value) + ':';
    FComFlags := [ ];
    FBaud := StrToInt(cbxBaud.Text);
    FComH := SerOpen(FComPortName);
    if FComH <> 0 then
    begin
      FComOpen := true;
      SerSetParams(FComH,FBaud,8,NoneParity,1,FComFlags);
      TButton(Sender).Caption:= 'Close Serial';
      ledSerial.Brush.Color:= clLime;
    end;
  end;
end;

The problem I have is that it seems only to work for COM1 or COM3, as
soon as I use a higher numbered port like COM33 then it fails.
What have I missed here?
Is serial only able to work with the low numbered ports (single
digit)?


-- 
Bo Berglund
Developer in Sweden




More information about the fpc-pascal mailing list