home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-07-31 | 58.9 KB | 1,429 lines |
-
-
- Personal Communications Library
-
- For Windows
-
-
- (PCL4W)
-
-
-
- REFERENCE MANUAL
-
-
-
-
-
- Version 1.1
-
- August 1, 1994
-
-
-
-
- This software is provided as-is.
- There are no warranties, expressed or implied.
-
-
-
-
- Copyright (C) 1994
- All rights reserved
-
-
-
- MarshallSoft Computing, Inc.
- Post Office Box 4543
- Huntsville AL 35815
-
- Voice 205-881-4630
- FAX 205|881|4630
- BBS 205-880-9748
-
-
- _______
- ____|__ | (R)
- --+ | +-------------------
- | ____|__ | Association of
- | | |_| Shareware
- |__| o | Professionals
- --+--+ | +---------------------
- |___|___| MEMBER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 1
- T A B L E
-
- O F
-
- C O N T E N T S
-
-
-
-
- Chapter Page
-
- Table of Contents..................................2
- Introduction.......................................3
- SioBaud.........................................4
- SioBrkSig.......................................4
- SioCTS..........................................5
- SioDCD..........................................5
- SioDone.........................................6
- SioDSR..........................................6
- SioDTR..........................................7
- SioFIFO.........................................7
- SioFlow.........................................8
- SioGetc.........................................8
- SioGetDiv.......................................9
- SioInfo.........................................9
- SioIRQ.........................................10
- SioLine........................................10
- SioLoopBack....................................11
- SioModem.......................................11
- SioParms.......................................12
- SioPorts.......................................12
- SioPutc........................................13
- SioRead........................................13
- SioReset.......................................14
- SioRI..........................................14
- SioRTS.........................................15
- SioRxBuf.......................................15
- SioRxFlush.....................................16
- SioRxQue.......................................16
- SioTxBuf.......................................17
- SioTxFlush.....................................17
- SioTxQue.......................................18
- SioUART........................................18
- SioUnGetc......................................19
- Function Summary..................................20
- Error Code Summary................................21
- Code Examples.....................................21
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 2
- Introduction
-
-
-
- This manual lists all of the PCL4W 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() (see file SIOERROR.C) to print the associated text for errors.
-
- Example Code Segment
-
-
- +---------------------------------------------------------------+
- | int Code; /* MUST be 'int', not 'char' */ |
- | |
- | Code = SioFunction( ); /* any PCL4W function */ |
- | if(Code<0) |
- | {/* error returned */ |
- | SioError(Code); /* SioError prints error text */ |
- | SioDone(Port); /* always call SioDone last */ |
- | exit(1); |
- | } |
- | /* no errors */ |
- | ...your application code... |
- | |
- +---------------------------------------------------------------+
-
-
- The program SIMPLE is provided as a stright forward and simple example of
- the use of the PCL4W library - at least as straight forward as any Windows
- programming can be.
-
- Also look at the TERM program, which is distributed separately from PCL4W as
- WTERM11.ZIP. Many PCL4W functions are used somewhere in TERM. Other example
- programs will be provided. Look for them on our User Support BBS.
-
- Also note that there are two versions of the library. One version is with
- transmitter interrupts disabled and one with transmitter interrupts enabled.
-
- Refer to the User's Manual (PCL4W.USR) for additional information.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 3
- +-------------+------------------------------------------------------------+
- | SioBaud | Sets the baud rate of the selected port. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioBaud(int Port,int BaudCode)
- /* Port: Port selected (COM1 - COM4) */
- /* 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.
-
- See Also SioReset
-
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioBrkSig | Asserts, cancels, or detects BREAK signal. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioBrkSig(int Port,char Cmd)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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
- PCL4W.H. See TERM.C 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
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 4
- +-------------+------------------------------------------------------------+
- | SioCTS | Reads the Clear to Send (CTS) modem status bit. |
- +-------------+------------------------------------------------------------+
-
- Syntax int SioCTS(int Port)
- /* int Port: Port selected (COM1 thru COM16) */
-
- 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.
-
-
-
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioDCD | Reads the Data Carrier Detect (DCD) modem staus bit. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioDCD(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 5
- +-------------+------------------------------------------------------------+
- | SioDone | Terminates further serial processing. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioDone(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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.
-
- See Also SioReset.
-
-
-
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioDSR | Reads the Data Set Ready (DSR) modem status bit. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioDSR(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 6
- +-------------+------------------------------------------------------------+
- | SioDTR | Set, clear, or read Data Terminal Ready (DTR) status bit. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioDTR(int Port,char Cmd)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 PCL4W.H) 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.
-
-
-
-
-
- +-------------+------------------------------------------------------------*
- | SioFIFO | Sets the FIFO trigger level (16550 UART only). *
- +-------------+------------------------------------------------------------*
-
-
- Syntax int SioFIFO(int Port,int LevelCode)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 and allows
- faster processing with slower machines or when running
- simultaneous ports.
-
- In order to take advantage of the TX FIFO, use the PCL4C library
- with TX interrupts enabled.
-
- 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 PCL4W.H Name 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 16550).
-
- PCL4W Reference Manual Page 7
- +------------+-------------------------------------------------------------+
- | SioFlow | Sets hardware (RTS/CTS) flow control. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioFlow(int Port,int Flag)
- /* Port: Port selected (COM1 thru COM16) */
- /* Flag: TRUE to enable flow control */
-
- 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 Flag=TRUE.
-
- 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) unless you know
- exactly what you are doing.
-
- Flow control is disabled after resetting a port. To explicitly
- disable hardware flow control, call SioFlow with Flag=FALSE.
-
- 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
-
-
-
-
-
- +------------+-------------------------------------------------------------+
- | SioGetc | Reads the next character from the serial line. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioGetc(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- Remarks The SioGetc function reads a byte from the selected serial port.
- The function will return immediately if no serial byte is ready.
-
- 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 8
- +---------------+----------------------------------------------------------+
- | SioGetDiv | Reads the baud rate divisor. |
- +---------------+----------------------------------------------------------+
-
-
- Syntax int SioGetDiv(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
-
- 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.
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioInfo | Returns PCL4W library information. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioInfo(char Cmd)
- /* Cmd: Command ('V' or 'I') */
-
- Remarks The SioInfo function returns an integer code corresponding to
- either the (1) library version number or (2) whether or not
- transmitter interrupts are enabled.
-
-
- Returns Version ('V')
-
- hex byte XY where version is denoted as X.Y
-
- TX Interrupts ('I')
-
- TRUE if transmitter interrupts are enabled in the library,
- otherwise FALSE.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 9
- +-------------+------------------------------------------------------------+
- | SioIRQ | Assigns an IRQ line to a port. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioIRQ(int Port,intIRQcode)
- /* Port: Port selected (COM1 thru COM16) */
- /* IRQcode: IRQ number [IRQ2..IRQ7] */
-
- 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 ports if you have them. Refer to the PCL4W
- 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.
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioLine | Reads the line status register. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioLine(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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 PCL4W.H.
-
- 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.
-
-
-
- PCL4W Reference Manual Page 10
- +-------------+------------------------------------------------------------+
- | SioLoopBack | Does a UART loopback test. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioLoopBack(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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.
-
-
-
-
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioModem | Reads the modem status register. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioModem(int Port, int Mask)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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.
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 11
- +-------------+------------------------------------------------------------+
- | SioParms | Sets parity, stop bits, and word length. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioParms(int Port,int Parity,int StopBits, int DataBits)
- /* Port: Port selected (COM1 - COM4) */
- /* 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 PCL4W.H. (8 = default)
-
- Value Description PCL4W.H Name
- 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.
-
-
- +-------------+------------------------------------------------------------+
- | SioPorts | Sets number of PC & Digiboard / BOCA Board ports. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioPorts(int NbrPorts,int FirstPort,int StatusReg,
- int Code)
- /* NbrPorts: Total number of ports */
- /* FirstPort: First DigiBoard 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 PCL4W 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.
-
-
- PCL4W Reference Manual Page 12
- +-------------+------------------------------------------------------------+
- | SioPutc | Transmit a character over a serial line. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioPutc(int Port,char Ch)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 PCL4W 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.
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioRead | Reads any UART register. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioRead(int Port,int Reg)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 PCL4W 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 PCL4W 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.
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 13
- +-------------+------------------------------------------------------------+
- | SioReset | Initialize a serial port for processing. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioReset(int Port,int BaudCode)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 PCL4W. 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 "PCL4W.H".
-
- 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.
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioRI | Reads the Ring Indicator (RI) modem status bit. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioRI(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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.
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 14
- +-------------+------------------------------------------------------------+
- | SioRTS | Sets, clears, or reads the Request to Send (RTS) line. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioRTS(Port, char Cmd)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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 PCL4W.H) 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.
-
-
- +------------+-------------------------------------------------------------+
- | SioRxBuf | Sets up receive buffers. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioRxBuf(int Port,int Selector,SizeCode)
- /* Port: Port selected (COM1 thru COM16) */
- /* Selector: Receive buffer selector */
- /* SizeCode: Buffer size code */
-
- Remarks The SioRxBuf function passes the address selector and size of
- the receive buffer to PCL4W. Recall that PCL4W 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 "PCL4W.H".
-
- Size Code Buffer Size PCL4W.H Name
- 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.
-
- PCL4W Reference Manual Page 15
- +------------+-------------------------------------------------------------+
- | SioRxFlush | Flushes (clears) the receive buffer. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioRxFlush(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- Remarks The SioRxFlush function will delete any characters in the
- receive buffer for the specified port. After execution, the
- receive buffer will be empty. Call SioRxBuf after resetting a
- port in order to delete any spurious characters.
-
- Returns -2 : Port not enabled. Call SioReset first.
- -4 : No such port. Expect 0 to MaxPort.
-
- See Also SioRxQue.
-
-
-
-
-
-
-
-
-
-
-
-
- +-------------+------------------------------------------------------------+
- | SioRxQue | Returns the number of bytes in the receive queue. |
- +-------------+------------------------------------------------------------+
-
-
- Syntax int SioRxQue(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 16
- +------------+-------------------------------------------------------------+
- | SioTxBuf | Sets up transmitter buffer. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioTxBuf(int Port,int Selector,int SizeCode)
- /* Port: Port selected (COM1 thru COM16) */
- /* Selector: Receive buffer selector */
- /* SizeCode: Buffer size code */
-
- int Port; /* Port selected (COM1 thru COM16) */
- char *Buffer; /* Transmit buffer */
- int SizeCode; /* Buffer size code */
-
- Remarks The SioTxBuf function passes the address selector and size of
- the transmit buffer to PCL4W, provided that you will link with a
- PCL4W library with transmitter interrupts enabled. PCL4W
- requires a transmit buffer for each port in simultaneous
- operation if you are using the version of the library with
- transmitter interrupts enabled (PCL4W2.LIB). SioTxBuf() must be
- called before SioReset.
-
- Size Code Buffer Size PCL4W.H Name
- 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 (PCL4W2.LIB). Refer to the PCL4W 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.
-
-
- +------------+-------------------------------------------------------------+
- | SioTxFlush | Flushes (clears) the transmitter buffer. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioTxFlush(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- Remarks The SioTxFlush function will delete any characters in the
- transmit buffer for the specified port, provided that you will
- link with a PCL4W 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 PCL4W Users Manual for
- information on transmitter (TX) interrupts.
-
- Returns -2 : Port not enabled. Call SioReset first.
- -4 : No such port. Expect 0 to MaxPort.
-
- See Also SioTxQue.
-
- PCL4W Reference Manual Page 17
- +------------+-------------------------------------------------------------+
- | SioTxQue | Returns the number of bytes in the transmit queue. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioTxQue(int Port)
- /* Port: Port selected (COM1 thru COM16) */
-
- 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 PCL4W library with transmitter interrupts
- enabled.
-
- This function is not used unless the transmitter interrupts are
- enabled. Refer to the PCL4W Users Manual for information on
- transmitter (TX) interrupts.
-
- Returns -2 : Port not enabled. Call SioReset first.
- -4 : No such port. Expect 0 to MaxPort.
-
- See Also SioTxFlush.
-
-
-
-
-
-
-
- +------------+-------------------------------------------------------------+
- | SioUART | Sets the UART base address. |
- +------------+-------------------------------------------------------------+
-
-
- Syntax int SioUART(int Port,int Address)
- /* Port: Port selected (COM1 thru COM16) */ 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 PCL4W 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 18
- +------------+-----+-------------------------------------------------------+
- | SioUnGetc | "Un|gets" the last character read with SioGetc(). |
- +------------+-----+-------------------------------------------------------+
-
-
- Syntax int SioUnGetc(int Port,char Ch)
- /* Port: Port selected (COM1 thru COM16) */
- /* 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.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 19
- Function Sumary
-
-
-
- +-------------+----------+----------+----------+----------+
- | Function | Arg1 | Arg2 | Arg3 | Arg4 |
- +-------------+----------+----------+----------+----------+
- | SioBaud | Port | BaudCode | | |
- | SioBrkSig | Port | Cmd | | |
- | SioCTS | Port | | | |
- | SioDCD | Port | | | |
- | SioDone | Port | | | |
- | SioDSR | Port | | | |
- | SioDTR | Port | Cmd | | |
- | SioError | Code | | | |
- | SioFIFO | Port | FIFOcode | | |
- | SioFlow | Port | | | |
- | SioGetDiv | Port | | | |
- | SioGetc | Port | | | |
- | SioInfo | Cmd | | | |
- | SioIRQ | Port | IRQcode | ISRcode | |
- | SioLine | Port | | | |
- | SioLoopBack | Port | | | |
- | SioModem | Port | Mask | | |
- | SioParms | Port | Parity | StopBits |WordLength|
- | SioPorts | NbrPorts | FirstDBP |StatusReg | Code |
- | SioPutc | Port | Ch | | |
- | SioRead | Port | Register | | |
- | SioReset | Port | BaudCode | | |
- | SioRI | Port | | | |
- | SioRTS | Port | Cmd | | |
- | SioRxBuf | Port | Buffer | SizeCode | |
- | SioRxFlush | Port | | | |
- | SioRxQue | Port | | | |
- | SioTxBuf | Port | Buffer | SizeCode | |
- | SioTxFlush | Port | | | |
- | SioTxQue | Port | | | |
- | SioUART | Port | Address | | |
- | SioUnGetc | Port | Ch | | |
- +-------------+----------+----------+----------+----------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4W Reference Manual Page 20
- 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 7) |
- | |18 | ISR limit (maximum of 4 PC IRQs) exceeded. |
- +-+----+--------------------------------------------------------+
-
-
- Code Examples
-
-
- SioRxBuf() Example
-
- dwValue = GlobalDosAlloc(1024));
- if(dwValue)
- {/* get selector & lock */
- RxSelector = LOWORD(dwValue);
- GlobalPageLock(RxSelector);
- /* pass selector to PCL4W */
- SioRxBuf(Port,RxSelector,Size1024);
- }
-
- DigiBoard Example
-
- /* use 0x140 for odd IRQs & 0x141 for even IRQs */
- SioPorts(8,COM1,0x140,DIGIBOARD);
- for(i=COM1;i<=COM16;i++)
- {/* set DigiBoard UART addresses */
- SioUART(i,0x100+8*i);
- /* set DigiBoard for IRQ5 */
- SioIRQ(i,IRQ5);
- }
-
- BOCA Board Example
-
- /* use base port + 7 */
- SioPorts(16,COM1,0x100+7,BOCABOARD);
- for(i=COM1;i<=COM16;i++)
- {/* set BOCA Board UART addresses */
- SioUART(i,0x100+8*i);
- /* set DigiBoard for IRQ5 */
- SioIRQ(i,IRQ5);
- }
-
-
-
- PCL4W Reference Manual Page 21
-