GreenSpring OctalUart IP Module Support

Introduction

This software drives the GreenSpring OctalUart family of Industry Pack modules to communicate with a number of RS-232, RS-422, and RS-485 devices. Note that this driver is not compatible with GreenSpring's newer IP-OctalPlus modules as they use a different chipset.

The driver uses drvIpac for configuration of the carrier board plus access routines for the SCC2698 octalUart used in the IP modules. The driver is implemented as a standard vxWorks terminal driver making use of the tyLib() system library.

Structure

The software structure used to support EPICS record processing is in three layers:

EPICS device and driver support


EPICS STDIO support


vxWorks device driver

Related Systems

Other present options for EPICS device/driver support that use drvSerial are:

drvSerial is designed to use any vxWorks serial device driver. Other hardware supported includes:

Where to Find It!

EPICS device and driver support.


EPICS STDIO support.


vxWorks device driver

Driver Routines

The following is an example of setting up the device driver from within a vxWorks startup script:

#####################
# Configuration Setup
#####################

# Initialize the IP module tasks
tyGSOctalDrv 4
ipacAddCarrier &vipc610, "0x6000"

# Init module on carrier 0, slot 0
MOD0 = tyGSOctalModuleInit("GSIP_OCTAL232", 0x80, 0, 0)

# Create devices
PORT00 = tyGSOctalDevCreate("/tyGS/0/0", MOD0, 0, 512, 512)
PORT02 = tyGSOctalDevCreate("/tyGS/0/2", MOD0, 2, 512, 512)
PORT04 = tyGSOctalDevCreate("/tyGS/0/4", MOD0, 4, 512, 512)
PORT06 = tyGSOctalDevCreate("/tyGS/0/6", MOD0, 6, 512, 512)

# Config ports
# baud, parity(N/E/O), stop, bits, flow(N/H)
tyGSOctalConfig PORT00, 9600, 'N', 1, 8, 'N'
tyGSOctalConfig PORT02, 9600, 'N', 1, 8, 'N'
tyGSOctalConfig PORT04, 9600, 'N', 1, 8, 'N'
tyGSOctalConfig PORT06, 9600, 'N', 1, 8, 'N'

#
# The following uses the EPICS drvNode/devNode support
#
# Create NODEs - device support uses these names
COMMON = drvNodeInit("/tyGS/0/0")
VILINK = drvNodeInit("/tyGS/0/2")
AOBG   = drvNodeInit("/tyGS/0/4")
OSIS   = drvNodeInit("/tyGS/0/6")

# Configure NODE delimiters
drvNodeSetDelim COMMON, 0, 2, "\015\012", 0x00
drvNodeSetDelim COMMON, 1, 2, "> ", 0x00
drvNodeSetDelim COMMON, 2, 3, ":  ", 0x00
drvNodeSetDelim COMMON, 3, 3, ")? ", 0x00
drvNodeSetDelim COMMON, 4, 3, "): ", 0x00
#
drvNodeSetDelim VILINK, 0, 2, "\015\012", 0x00
#
drvNodeSetDelim AOBG, 0, 1, "\015", 0x00
#
drvNodeSetDelim OSIS, 0, 1, "\015", 0x00