home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Zodiac Super OZ
/
MEDIADEPOT.ISO
/
FILES
/
13
/
PCL4P51.ZIP
/
PCL4PREF.DOC
< prev
next >
Wrap
Text File
|
1996-06-05
|
66KB
|
1,565 lines
Personal Communications Library
For Borland/Turbo Pascal
( PCL4P )
REFERENCE MANUAL
Version 5.1
June 5, 1996
This software is provided as-is.
There are no warranties, expressed or implied.
Copyright (C) 1996
All rights reserved
MarshallSoft Computing, Inc.
Post Office Box 4543
Huntsville AL 35815
Voice : 205-881-4630
FAX : 205|880|0925
BBS : 205-880-9748
email : help@marshallsoft.com
Anon FTP : ftp.marshallsoft.com
web : www.marshallsoft.com
_______
____|__ | (R)
--+ | +-------------------
| ____|__ | Association of
| | |_| Shareware
|__| o | Professionals
--+--+ | +---------------------
|___|___| MEMBER
PCL4P Reference Manual Page 1
C O N T E N T S
Chapter Page
Table of Contents......................................2
Introduction...........................................3
SioBaud.............................................4
SioBrkKey...........................................4
SioBrkSig...........................................5
SioCTS..............................................5
SioDCD..............................................6
SioDelay............................................6
SioDone.............................................7
SioDSR..............................................7
SioDTR..............................................8
SioError............................................8
SioFIFO.............................................9
SioFlow.............................................9
SioGetc............................................10
SioGetDiv..........................................10
SioInfo............................................11
SioIRQ.............................................11
SioLine............................................12
SioLoopBack........................................12
SioModem...........................................13
SioParms...........................................13
SioPorts...........................................14
SioPutc............................................14
SioRead............................................15
SioReset...........................................15
SioRI..............................................16
SioRTS.............................................16
SioRxBuf...........................................17
SioRxClear.........................................17
SioRxQue...........................................18
SioTimer...........................................18
SioTxBuf...........................................19
SioTxClear.........................................19
SioTxFlush.........................................20
SioTxQue...........................................20
SioUART............................................21
SioUnGetc..........................................21
Function Summary......................................22
Error Code Summary....................................23
Example Code..........................................23
PCL4P Reference Manual Page 2
Introduction
This manual lists all the PCL4P functions in alphabetical order. Every
library function will return a value as follows:
1. Negative values for error conditions. See last page of this manual for a
list of error values and their meanings.
2. Non-negative values when returning data ( eg: SioLine ).
3. Zero otherwise.
When debugging an application, be sure to test all return values. Use
SioError to print the associated text for errors.
Example Code Segment
+--------------------------------------------------------+
| RetCode := SioFunction(); (* any PCL4P function *) |
| if RetCode < 0 then begin |
| RetCode := SioError(RetCode); |
| (* ...do some stuff... *) |
| end; |
+--------------------------------------------------------+
Examine PCL4P.PAS for a listing of constants, functions, and procedures.
Examine PCL4P16.PAS for the protected mode version.
For more examples, examine each of the example programs in the distribution
zip-file.
PCL4P Reference Manual Page 3
+-------------+------------------------------------------------------------+
| SioBaud | Sets the baud rate of the selected port. |
+-------------+------------------------------------------------------------+
Syntax function SioBaud(Port,BaudCode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* BaudCode: Baud code *)
Remarks The SioBaud function sets the baud rate without resetting the
port. It is used to change the baud rate after calling SioReset.
Code Rate Name Code Rate Name
0 300 Baud300 5 9600 Baud9600
1 600 Baud600 6 19200 Baud19200
2 1200 Baud1200 7 38400 Baud38400
3 2400 Baud2400 8 57600 Baud57600
4 4800 Baud4800 9 115200 Baud115200
Returns -4 : No such port. Expect 0 to MaxPort.
-11 : Bad baud rate code. See above code values.
>= 0 : OK
See Also SioReset
+-------------+------------+-------------------+---------------------------+
| SioBrkKey | Return non|zero if the Control|Break key was pressed. |
+-------------+------------+-------------------+---------------------------+
Syntax function SioBrkKey:Integer;
Remarks The SioBrkKey function returns a TRUE value (non-zero) if the
Control-BREAK key was pressed, else it returns a zero. Use
SioBrkKey as a safety exit from a polling loop. Don't mix this
function up with SioBrkSig.
Returns <> 0 : Control-BREAK was pressed.
0 : Control-BREAK was NOT pressed.
See Also SioBrkSig
PCL4P Reference Manual Page 4
+-------------+------------------------------------------------------------+
| SioBrkSig | Asserts, cancels, or detects BREAK signal. |
+-------------+------------------------------------------------------------+
Syntax function SioBrkSig(Port:Integer;Cmd:Char):Boolean;
(* Port: Port selected (COM1 thru COM20) *)
(* char Cmd: ASSERT, CANCEL, or DETECT *)
Remarks The SioBrkSig function controls the BREAK bit in the line status
register. The legal commands are:
ASSERT_BREAK ('A') to assert BREAK
CANCEL_BREAK ('C') to cancel BREAK
DETECT_BREAK ('D') to detect BREAK
ASSERT_BREAK, CANCEL_BREAK, and DETECT_BREAK are defined in
PCL4P.PAS. See TERM.PAS for an example of the use of SioBrkSig.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-6 : Illegal command. Expected 'A', 'C', or 'D'.
>0 : BREAK signal detected (DETECT command only)
See Also SioBrkKey
+-------------+------------------------------------------------------------+
| SioCTS | Reads the Clear to Send (CTS) modem status bit. |
+-------------+------------------------------------------------------------+
Syntax function SioCTS(Port:Integer):Integer;
(* int Port: Port selected (COM1 thru COM20) *)
Remarks The SioCTS function is used to read the Clear to Send (CTS)
modem status bit.
The CTS line is used by some error correcting modems to
implement hardware flow control. CTS is dropped by the modem to
signal the computer not to send data and is raised to signal
the computer to continue.
Refer to the User's Manual for a discussion of flow control.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : CTS is clear.
>0 : CTS is set.
See Also SioFlow, SioDSR, SioRI, SioDCD, and SioModem.
PCL4P Reference Manual Page 5
+-------------+------------------------------------------------------------+
| SioDCD | Reads the Data Carrier Detect (DCD) modem staus bit. |
+-------------+------------------------------------------------------------+
Syntax function SioDCD(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioDCD function is used to read the Data Carrier Detect
(DCD) modem status bit. Also see SioModem.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : DCD is clear.
>0 : DCD is set.
See Also SioDSR, SioCTS, SioRI, and SioModem.
+-------------+------------------------------------------------------------+
| SioDelay | Delays one or more timer tics. |
+-------------+------------------------------------------------------------+
Syntax function SioDelay(Tics:Integer):Integer;
(* Tics: # timer tics to delay *)
Remarks The SioDelay function is used to delay one or more timer tics,
where each timer tic is approximately 55 milliseconds (18.2 tics
to the second).
Returns zero.
See Also SioTimer
PCL4P Reference Manual Page 6
+-------------+------------------------------------------------------------+
| SioDone | Terminates further serial processing. |
+-------------+------------------------------------------------------------+
Syntax function SioDone(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioDone function terminates further serial processing.
SioDone MUST be called before exiting your application so that
interrupts can be restored to their original state. Failure to
do this can crash the operating system. If you forget to call
SioDone before exiting, be sure to re-boot your computer. You
can call SioDone even if SioReset has not been called, so it is
good practice to always call SioDone before exiting your
application.
Also note that SioDone dereferences the transmit and receive
buffers set up by SioRxQue and SioTxQue.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : OK.
See Also SioReset.
+-------------+------------------------------------------------------------+
| SioDSR | Reads the Data Set Ready (DSR) modem status bit. |
+-------------+------------------------------------------------------------+
Syntax function SioDSR(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioDSR function is used to read the Data Set Ready (DSR)
modem status bit.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : DSR is clear.
>0 : DSR is set
See Also SioCTS, SioRI, SioDCD, and SioModem
PCL4P Reference Manual Page 7
+-------------+------------------------------------------------------------+
| SioDTR | Set, clear, or read Data Terminal Ready (DTR) status bit. |
+-------------+------------------------------------------------------------+
Syntax function SioDTR(Port:Integer;Cmd Char):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Cmd: DTR command (SET, CLEAR, or READ) *)
Remarks The SioDTR function controls the Data Terminal Ready (DTR) bit
in the modem control register. DTR should always be set when
communicating with a modem. Commands (defined in PCL4P.PAS) are:
SET_LINE ('S') to set DTR (ON)
CLEAR_LINE ('C') to clear DTR (OFF)
READ_LINE ('R') to read DTR
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-5 : Not one of 'S', 'C', or 'R'.
0 : DTR is OFF (READ_LINE Command).
>0 : DTR is ON (READ_LINE Command).
See Also SioRTS.
+-------------+------------------------------------------------------------+
| SioError | Displays error in text. |
+-------------+------------------------------------------------------------+
Syntax function SioError(Code:Integer):Integer;
(* Code: PCL4P error code *)
Remarks The SioError function displays the error in text corresponding
to the error code returned from a PCL4P function. During
development of a communications application, it is a good idea
to always test return codes, and print out their descriptions
with SioError.
Returns zero.
PCL4P Reference Manual Page 8
+-------------+------------------------------------------------------------+
| SioFIFO | Sets the FIFO trigger level (16550 UART only). |
+-------------+------------------------------------------------------------+
Syntax function SioFIFO(Port,LevelCode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* LevelCode: FIFO level code (see below) *)
Remarks The SioFIFO function is used to enable both transmit & receive
FIFOs for 16550 UARTS, and to set the trigger level at which
receive interrupts are generated.
For example, if the FIFO level is set to 8, then the 16550 UART
will not generate an interrupt until 8 bytes have been received.
This reduces the number of interrupts generated. In order to
take advantage of the TX FIFO, use the PCL4P library with TX
interrupts enabled (DEFAULT).
In order to test if your port is a 16550 UART, call SioFIFO with
a LevelCode of other than FIFO_OFF. SioFIFO can be called for
the 8250 and 16450 UART without ill effect.
Code PCL4P.PAS Trigger Level
-1 FIFO_OFF Disable FIFO
0 LEVEL_1 1 byte
1 LEVEL_4 4 bytes
2 LEVEL_8 8 bytes
3 LEVEL_14 14 bytes
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
>0 : FIFO level set.
0 : FIFO level not set (not a 16550).
+------------+-------------------------------------------------------------+
| SioFlow | Sets hardware (RTS/CTS) flow control. |
+------------+-------------------------------------------------------------+
Syntax function SioFlow(Port,Tics:Integer)
(* Port: Port selected (COM1 thru COM20) *)
(* Tics: # tics before TX times out *)
Remarks The SioFlow function is used to enable or disable hardware flow
control. Hardware flow control uses RTS and CTS to control data
flow between the modem and the computer. Refer to the User's
Manual for a discussion of flow control. To enable hardware
flow control, call SioFlow with Tics > 0.
"Tics" is the number of timer tics (18.2 / second) before a call
to SioPutc or SioPuts will time out because CTS was not set.
In order for hardware flow control to work correctly, your modem
must also be configured to work with hardware flow control, and
your computer to modem cable must have RTS and CTS wired
straight through. If you enable hardware flow control, do not
modify the RTS line (by calling SioRTS). To explicitly disable
hardware flow control, call SioFlow with Tics = -1.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
=0 : Flow control disabled.
>0 : Flow control enabled.
See Also SioPutc
PCL4P Reference Manual Page 9
+------------+-------------------------------------------------------------+
| SioGetc | Reads the next character from the serial line. |
+------------+-------------------------------------------------------------+
Syntax function SioGetc(Port,Tics:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Tics: Timeout *)
Remarks The SioGetc function reads a byte from the selected serial port.
The function will wait for the number of system tics given by
the 'Tics' argument before returning 'timed out'. There are
18.2 tics to the second.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-1 : If timed out.
>0 : Character read.
See Also SioUnGetc and SioPutc.
+---------------+----------------------------------------------------------+
| SioGetDiv | Reads the baud rate divisor. |
+---------------+----------------------------------------------------------+
Syntax function SioGetDiv(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioGetDiv function reads the baud rate divisor. The baud
rate can then be determined by the divisor:
Baud Divisor Baud Divisor Baud Divisor
300 0180 4800 0018 38400 0003
1200 0060 9600 000C 57600 0002
2400 0030 19200 0006 115200 0001
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
>0 : Baud rate divisor.
See Also SioParms.
PCL4P Reference Manual Page 10
+-------------+------------------------------------------------------------+
| SioInfo | Returns PCL4P library information. |
+-------------+------------------------------------------------------------+
Syntax function SioInfo(Cmd:Char):Integer;
(* Cmd: See table below *)
Remarks The SioInfo function returns a word value depending on the
character argument Cmd in the table below. This function is
usefull for understanding what the hardware is doing. Note that
the command argument is case sensitive.
Returns Cmd
'V' : Version [as hex byte XY where means version X.Y]
'I' : TRUE if library compiled with TX interrupts enabled.
'P' : TRUE if library compiled for protected mode.
'T' : Total (over all ports) transmitter interrupts.
'R' : Total (over all ports) receiver interrupts.
'd' : Total (over all ports) times RTS dropped.
'r' : Total (over all ports) times RTS raised.
'c' : Total (over all ports) times CTS drop detected.
+-------------+------------------------------------------------------------+
| SioIRQ | Assigns an IRQ line to a port. |
+-------------+------------------------------------------------------------+
Syntax function SioIRQ(Port,IRQcode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* IRQcode: IRQ number [IRQ2..IRQ15] *)
Remarks The SioIRQ function assigns an IRQ line to a port. That is,
SioIRQ maps an IRQ to a port. SioIRQ (like SioUART) must be
called before calling SioReset. Unless you have a non-standard
(COM1 & COM3 use IRQ4 while COM2 & COM4 use IRQ3) serial port
configuration (or don't want to run more than 2 ports
concurrently), you will not need to call SioIRQ. Be EXTREMELY
careful with SioIRQ as it can lock your machine up if given
incorrect information.
In particular, remember that your port hardware must generate
the interrupt that you have specified. You should refer to your
serial board hardware manual for specfic instructions in
configuring your hardware. Be sure to call SioPorts first to
setup DigiBoard or BOCA ports if you have them. Refer to the
PCL4P Users Manual for additional information.
Returns -4 : No such port. Expect 0 to MaxPort.
-15 : Port already enabled. SioReset has already been called.
|17 : No such IRQ.
-18 : ISR limit (maximum of 4 PC IRQs) exceeded.
0 : Otherwise
See Also SioUART and SioPorts.
PCL4P Reference Manual Page 11
+-------------+------------------------------------------------------------+
| SioLine | Reads the line status register. |
+-------------+------------------------------------------------------------+
Syntax function SioLine(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioLine function reads the line status register. The
individual bit masks are as follows:
0x40 = Transmitter empty.
0x20 = Transmitter buffer empty.
0x10 = Break detected.
0x08 = Framming error.
0x04 = Parity error.
0x02 = Overrun error.
0x01 = Data ready.
The above are documented in the file PCL4P.PAS.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
>0 : Line status (rightmost byte of word).
See Also SioModem.
+-------------+------------------------------------------------------------+
| SioLoopBack | Does a UART loopback test. |
+-------------+------------------------------------------------------------+
Syntax function SioLoopBack(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks SioLoopBack makes use of the built in loopback test capability
of the INS8250 family UART. Normally SioLoopBack will never
need to be called unless you suspect that your UART is bad. Many
UARTs must be reset after running a loopback test.
Returns 0 : Loopback test is successfull.
-2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-12 : Loopback test fails.
PCL4P Reference Manual Page 12
+-------------+------------------------------------------------------------+
| SioModem | Reads the modem status register. |
+-------------+------------------------------------------------------------+
Syntax function SioModem(Port,Mask:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Mask: Modem function mask *)
Remarks The SioModem function reads the modem register. The bit
definitions for the function mask are as follows:
Bit Name Function Bit Name Function
7 DCD Data Carrier Detect 3 DeltaDCD DCD has changed
6 RI Ring Indicator 2 DeltaRI RI has changed
5 DSR Data Set Ready 1 DeltaDSR DSR has changed
4 CTS Clear To Send 0 DeltaCTS CTS has changed
Bits 4 through 7 represent the absolute state of their
respective RS-232 inputs. Bits 0 through 3 represent a change
in the state of their respective RS-232 inputs since last read.
Once UART register 3 is read, the Delta bits are cleared. Thus,
it is best not to depend on the Delta bits.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
>0 : Modem status (rightmost byte of word).
See Also SioCTS, SioDCD, SioDSR and SioRI.
+-------------+------------------------------------------------------------+
| SioParms | Sets parity, stop bits, and word length. |
+-------------+------------------------------------------------------------+
Syntax int SioParms(Port,Parity,StopBits,DataBits:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Parity: Parity code [0,1,2] *)
(* StopBits: Stop bits code [0,1] *)
(* DataBits: Word length code [0,1,2,3] *)
Remarks The SioParms function sets the parity, stop bits, and word
length. If the default parity (none), stop bits (1), or word
length (8) is not acceptable, then they can be changed by
calling SioParms. SioParms can be called either before or after
calling SioReset. See file PCL4P.PAS. (8 = default)
Value Description PCL4P.PAS
ParityCode: *0 no parity NoParity
1 odd parity OddParity
3 even parity EvenParity
StopBitsCode: *0 1 stop bit OneStopBit
1 2 stop bits TwoStopBits
WordLengthCode: 0 5 data bits WordLength5
1 6 data bits WordLength6
2 7 data bits WordLength7
*3 8 data bits WordLength8
Returns -4 : No such port. Expect 0 to MaxPort.
-7 : Bad parity code selected. Expecting 0 to 2.
|8 : Bad stop bits code. Expecting 0 or 1.
-9 : Bad word length code. Expecting 0 to 3.
See Also SioReset.
PCL4P Reference Manual Page 13
+-------------+------------------------------------------------------------+
| SioPorts | Sets number of PC & Digiboard / BOCA Board ports. |
+-------------+------------------------------------------------------------+
Syntax function SioPorts(NbrPorts,FirstPort,StatusReg,Code:Integer)
:Integer;
(* NbrPorts: Total number of ports *)
(* FirstPort: First DigiBoard or BOCA port *)
(* StatusReg: DigiBoard Status Register *)
(* Code: PC_PORTS, DIGIBOARD, or BOCABOARD *)
Remarks The SioPorts function must be called before ANY other serial
functions. The purpose of the SioPorts function is to set the
total number of ports, the first DigiBoard (or BOCA board) port
and the DigiBoard (or BOCA board) status register address.
Once SioPorts is called, all COM ports starting with "FirstPort"
will be treated as DigiBoard (or BOCA board) ports. The default
setup is 4 standard PC ports and no DigiBoard or BOCA ports [
SioPorts(4,4,0,PC_PORTS) ].
Refer to ther PCL4P users maniual for more information on the
DigiBoard and BOCA board.
Returns -4 : No such port. Expect 0 to 9.
0 : No error (sets MaxPort to NumberPorts-1).
See Also SioUART, SioIRQ, and Code Examples.
+-------------+------------------------------------------------------------+
| SioPutc | Transmit a character over a serial line. |
+-------------+------------------------------------------------------------+
Syntax function SioPutc(Port:Integer;Ch:Char):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Ch: Character to send *)
Remarks The SioPutc function transmits one character over the selected
serial line.
If flow control has been enabled, then SioPutc may return a -1
(time out) if the number of tics specified in the SioFlow
function was exceeded waiting for the modem to raise CTS.
Refer to the User's Manual for a discussion of flow control.
If transmitter interrupts are enabled (there are separate
versions of the library for transmitter interrupts enabled),
then the byte is placed in the transmit buffer, awaiting
transmission by the PCL4P interrupt service routine.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-1 : Timed out waiting for CTS (flow control enabled)
See Also SioGetc and SioFlow.
PCL4P Reference Manual Page 14
+-------------+------------------------------------------------------------+
| SioRead | Reads any UART register. |
+-------------+------------------------------------------------------------+
Syntax function SioRead(Port,Reg:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Reg: UART register (0 to 7) *)
Remarks The SioReset function directly reads the contents of any of the
7 UART registers. This function is useful when debugging
application programs and as a method for verifying UART
contents. Refer to the PCL4P Users Manual for a discussion of
the 7 UART registers.
The line status register (register 5) can also be read with
SioLine while the modem status register (register 6) can also be
read with SioModem. Refer to the PCL4P User's Manual for a
discussion of the UART registers.
Returns -3 : No buffer available. Call SioRxBuf first.
-4 : No such port. Expect 0 to MaxPort.
See Also SioLine and SioModem.
+-------------+------------------------------------------------------------+
| SioReset | Initialize a serial port for processing. |
+-------------+------------------------------------------------------------+
Syntax function SioReset(Port,BaudCode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* BaudCode: Baud code or -1 *)
Remarks The SioReset function initializes the selected serial port.
SioReset should be called after calling SioParm and SioRxBuf but
before making any other calls to PCL4P. SioReset uses the
parity, stop bits, and word length value previously set if
SioParm was called, otherwise the default values (see SioParm)
are used.
Recall that COM1 and COM3 share the same interrupt vector and
therefore cannot operate simultaneously. Similiarly, COM2 and
COM4 cannot operate simultaneously. Any other combination of two
ports can be used.
By specifing NORESET (-1) for the baud rate code, the port will
NOT be reset. This is used to "take over" a port from a host
communications program that allows a "DOS gateway". External
protocols can be implemented this way. See SioBaud for a list
of the baud rate codes, or see "PCL4P.PAS".
Returns -3 : No buffer available. Call SioRxBuf first.
-4 : No such port. Expect 0 to MaxPort.
-11 : Bad baud rate code selected. Expecting 0 to 9.
|13 : UART undefined. SioUART(Port,0) was called previously.
|14 : Bad or missing UART. You may not have hardware present.
|15 : Port already enabled. SioReset has already been called.
-16 : Interrupt already in use.
See Also SioBaud, SioParms, SioRxBuf, SioDone, and SioUART.
PCL4P Reference Manual Page 15
+-------------+------------------------------------------------------------+
| SioRI | Reads the Ring Indicator (RI) modem status bit. |
+-------------+------------------------------------------------------------+
Syntax function SioRI(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioRI function is used to read the Ring Indicator
(RI) modem status bit. Also see SioModem.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : RI is clear.
>0 : RI is set (RING has occurred).
See Also SioDSR, SioCTS, SioDCD, and SioModem.
+-------------+------------------------------------------------------------+
| SioRTS | Sets, clears, or reads the Request to Send (RTS) line. |
+-------------+------------------------------------------------------------+
Syntax function SioRTS(Port:Integer;Cmd:Char):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Cmd: RTS command (SET, CLEAR, or READ) *)
Remarks The SioRTS function controls the Request to Send (RTS bit in the
modem control register.
The RTS line is used by some error correcting modems to
implement hardware flow control. RTS is dropped by the computer
to signal the modem not to send data, and is raised to signal
the modem to continue. RTS should be set when communicating with
a modem unless Flow Control is being used.
Refer to the User's Manual for a discussion of flow control.
Commands (defined in PCL4P.PAS) are:
SET_LINE ('S') - set RTS (ON)
CLEAR_LINE ('C') | clear RTS (OFF)
READ_LINE ('R') - read RTS
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
-5 : Command is not one of 'S', 'C', or 'R'.
0 : RTS is OFF (READ_LINE Command).
>0 : RTS is ON (READ_LINE Command).
See Also SioFlow and SioDTR.
PCL4P Reference Manual Page 16
+------------+-------------------------------------------------------------+
| SioRxBuf | Sets up receive buffers. |
+------------+-------------------------------------------------------------+
Syntax function SioRxBuf(Port,Selector,SizeCode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* SegPtr: Receive buffer segment pointer *)
(* SizeCode: Buffer size code *)
Remarks The SioRxBuf function passes the address selector and size of
the receive buffer to PCL4P. Recall that PCL4P requires a
receive buffer for each port in simultaneous operation since the
receive function is interrupt driven. It must be called before
any incoming characters can be received. SioRxBuf must be called
before SioReset. Buffer size codes are listed in "PCL4P.PAS".
Size Code Buffer Size PCL4P.PAS
4 128 bytes Size128
5 256 bytes Size256
6 512 bytes Size512
7 1024 bytes Size1024 or Size1K
8 2048 bytes Size2048 or Size2K
9 4096 bytes Size4096 or Size4K
10 8192 bytes Size8192 or Size8K
11 16384 bytes Size16384 or Size16K
12 32768 bytes Size32768 or Size32K
Returns -4 : No such port. Expect 0 to MaxPort.
-10 : Bad buffer size code. Expecting 0 to 11.
See Also SioReset and Code Examples.
+------------+-------------------------------------------------------------+
| SioRxClear | Clears the receive buffer. |
+------------+-------------------------------------------------------------+
Syntax function SioRxClear(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioRxClear function will delete any characters in the
receive buffer for the specified port. After execution, the
receive buffer will be empty. Call SioRxClear after resetting a
port in order to delete any spurious characters.
Note that this function was renamed from SioRxFlush in previous
versions.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
See Also SioRxQue.
PCL4P Reference Manual Page 17
+-------------+------------------------------------------------------------+
| SioRxQue | Returns the number of bytes in the receive queue. |
+-------------+------------------------------------------------------------+
Syntax function SioRxQue(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioRxQue function will return the number of characters in
the receive queue at the time of the call. It can be used to
implement XON/XOFF flow control.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
See Also SioRxFlush.
+------------+-------------------------------------------------------------+
| SioTimer | Returns the number of system clock tics since midnight. |
+------------+-------------------------------------------------------------+
Syntax function SioTimer:LongInt;
Remarks The SioTimer function will return the number of system clock
tics since midnight, at 18.2065 tics per second. This function
is usefull for timing various functions.
See Also SioDelay
PCL4P Reference Manual Page 18
+------------+-------------------------------------------------------------+
| SioTxBuf | Sets up transmitter buffer. |
+------------+-------------------------------------------------------------+
Syntax function SioTxBuf(Port,Selector,SizeCode:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* SegPtr: Transmit buffer segment pointer *)
(* SizeCode: Buffer size code *)
int Port; (* Port selected (COM1 thru COM20) *)
char *Buffer; (* Transmit buffer *)
int SizeCode; (* Buffer size code *)
Remarks The SioTxBuf function passes the address selector and size of
the transmit buffer to PCL4P, provided that you will link with a
PCL4P library with transmitter interrupts enabled. PCL4P
requires a transmit buffer for each port in simultaneous
operation if you are using the version of the library with
transmitter interrupts enabled (default). SioTxBuf must be
called before SioReset.
Size Code Buffer Size PCL4P.PAS
4 128 bytes Size128
5 256 bytes Size256
6 512 bytes Size512
7 1024 bytes Size1024 or Size1K
8 2048 bytes Size2048 or Size2K
9 4096 bytes Size4096 or Size4K
10 8192 bytes Size8192 or Size8K
11 16384 bytes Size16384 or Size16K
12 32768 bytes Size32768 or Size32K
This function is not used unless the transmitter interrupts are
enabled (default). Refer to the PCL4P Users Manual for
information on transmitter (TX) interrupts.
Returns -4 : No such port. Expect 0 to MaxPort.
-10 : Bad buffer size code. Expecting 0 to 11.
See Also SioRxBuf, SioReset and Code Examples.
+------------+-------------------------------------------------------------+
| SioTxClear | Clears the transmitter buffer. |
+------------+-------------------------------------------------------------+
Syntax function SioTxClear(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioTxClear function will delete any characters in the
transmit buffer for the specified port, provided that you will
link with a PCL4P library with transmitter interrupts enabled.
After execution, the transmit buffer will be empty.
Once this function is called, any character in the transmit
buffer (put there by SioPutc) will be lost and therefore not
transmitted. This function is not used unless the transmitter
interrupts are enabled Refer to the PCL4P Users Manual for
information on transmitter (TX) interrupts.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : OK.
See Also SioTxQue.
PCL4P Reference Manual Page 19
+------------+-------------------------------------------------------------+
| SioTxFlush | Flushes the transmitter buffer. |
+------------+-------------------------------------------------------------+
Syntax function SioTxFlush(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioTxFlush function will re-enable transmitter interrupts if
they had been disabled by CTS dropping. This has the effect of
forcing the transmission of all data in the transmitter queue.
Note that this function will not return until the transmitter
queue is empty.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
0 : OK.
See Also SioTxQue.
+------------+-------------------------------------------------------------+
| SioTxQue | Returns the number of bytes in the transmit queue. |
+------------+-------------------------------------------------------------+
Syntax function SioTxQue(Port:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *)
Remarks The SioTxQue function will return the number of characters in
the transmit queue at the time of the call, provided that you
will link with a PCL4P library with transmitter interrupts
enabled.
This function is not used unless the transmitter interrupts are
enabled. Refer to the PCL4P Users Manual for information on
transmitter (TX) interrupts.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
>=0: Number bytes in transmit queue.
See Also SioTxFlush.
PCL4P Reference Manual Page 20
+------------+-------------------------------------------------------------+
| SioUART | Sets the UART base address. |
+------------+-------------------------------------------------------------+
Syntax function SioUART(Port,Address:Integer):Integer;
(* Port: Port selected (COM1 thru COM20) *) int Port; (* COM1 to COM4 *)
(* Address: UART address *)
Remarks The SioUART function sets the UART base address for the
specified port. SioUART must be called before SioReset in order
to have effect. Be extremely sure that you know what you are
doing! Note that PCL4P uses the standard PC/XT/AT port
addresses, interrupt request lines, and interrupt service
vectors. Therefore, this function is only needed for
non-standard ports.
Returns >0 : The previous base address for this port.
-4 : No such port. Expect 0 to MaxPort.
-15 : Port already enabled. SioReset has already been called.
See Also SioPorts, SioIRQ, and SioReset.
+------------+-----+-------------------------------------------------------+
| SioUnGetc | "Un|gets" the last character read with SioGetc. |
+------------+-----+-------------------------------------------------------+
Syntax function SioUnGetc(Port:Integer;Ch:Char):Integer;
(* Port: Port selected (COM1 thru COM20) *)
(* Ch: Character to unget *)
Remarks The SioUnGetc function returns ("pushes") the character back
into the serial input buffer. The character pushed will be the
next character returned by SioGetc. Only one character can be
pushed back. This function works just like the "ungetc" function
in the C language.
Returns -2 : Port not enabled. Call SioReset first.
-4 : No such port. Expect 0 to MaxPort.
See Also SioReset.
PCL4P Reference Manual Page 21
Function Sumary
36 functions
+-------------+----------+----------+----------+----------+
| Function | Arg1 | Arg2 | Arg3 | Arg4 |
+-------------+----------+----------+----------+----------+
| SioBaud | Port | BaudCode | | |
| SioBrkKey | | | | |
| SioBrkSig | Port | Cmd | | |
| SioCTS | Port | | | |
| SioDelay | Tics | | | |
| SioDCD | Port | | | |
| SioDone | Port | | | |
| SioDSR | Port | | | |
| SioDTR | Port | Cmd | | |
| SioError | Code | | | |
| SioFIFO | Port | LevelCode| | |
| SioFlow | Port | Tics | | |
| SioGetc | Port | Tics | | |
| SioGetDiv | Port | | | |
| SioInfo | Cmd | | | |
| SioIRQ | Port | IRQcode | | |
| SioLine | Port | | | |
| SioLoopBack | Port | | | |
| SioModem | Port | Mask | | |
| SioParms | Port | Parity | StopBits | DataBits |
| SioPorts | NbrPorts | FirstDBP | StatusReg| Code |
| SioPutc | Port | Ch | | |
| SioRead | Port | Register | | |
| SioReset | Port | BaudCode | | |
| SioRI | Port | | | |
| SioRTS | Port | Cmd | | |
| SioRxBuf | Port | SegPtr | SizeCode | |
| SioRxClear | Port | | | |
| SioRxQue | Port | | | |
| SioTimer | | | | |
| SioTxBuf | Port | SegPtr | SizeCode | |
| SioTxClear | Port | | | |
| SioTxFlush | Port | | | |
| SioTxQue | Port | | | |
| SioUART | Port | Address | | |
| SioUnGetc | Port | Ch | | |
+-------------+----------+----------+----------+----------+
PCL4P Reference Manual Page 22
Error Code Summary
+------+--------------------------------------------------------+
| Code | Description |
+------+--------------------------------------------------------+
| 0 | No error. |
| -1 | Timeout waiting for I/O. |
| |2 | Port not enabled. Call SioReset first. |
| |3 | No buffer available. Call SioRxBuf first. |
| |4 | No such port. Expect 0 to MaxPort. (COM1 = 0) |
| |5 | Expected 'S', 'C', or 'R' as 2nd argument. |
| |6 | Expected 'A', 'C', or 'D' as 2nd argument. |
| |7 | Bad parity code specified. Expected 0 to 7. |
| |8 | Bad stop bits code specified. Expected 0 or 1. |
| -9 | Bad wordlength code specified. Expect 0 to MaxPort. |
| -10 | Bad buffer size code specified. Expected 0 to 11. |
| |11 | Bad baud rate code. Expected 0 to 9. |
| |12 | Loopback test fails. |
| |13 | UART undefined. |
| |14 | Missing or bad UART. (no UART hardware ?) |
| |15 | Port already enabled. |
| |16 | ISR (interrupt) already in use. |
| |17 | No such IRQ. (Should be 2 to 15) |
| |18 | ISR limit (maximum of 4 PC IRQs) exceeded. |
+-+----+--------------------------------------------------------+
Code Examples
DigiBoard Example
(*** Custom Configuration: DigiBoard PC/8 ***)
WriteLn('[ Configuring for DigiBoard PC/8 (IRQ5) ]');
SioPorts(8,COM1,$140,DIGIBOARD);
for Port := COM1 to COM8 do
begin
(* set DigiBoard UART addresses *)
SioUART(Port,$100+8*Port);
(* set DigiBoard IRQ *)
SioIRQ(Port,IRQ5);
end;
BOCA Board Example
(*** Custom Configuration: BOCA BB2016 ***)
WriteLn('[ Configuring for BOCA Board BB2016 (IRQ15) ]');
SioPorts(20,COM5,$107,BOCABOARD);
for Port := COM5 to COM20 do
begin
(* set BOCA Board UART addresses *)
SioUART(Port,$100+8*Port);
(* set BOCA Board IRQ *)
SioIRQ(Port,IRQ15);
end;
PCL4P Reference Manual Page 23