# The is the ASYN example for communication to a Newport MM4000/5/6.
# "#!" marks lines that can be uncommented.

< envPaths

dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=IOC:")


# The following commands are for a local serial line
# Configure the asyn server code for either sun or linux.
#!Sun Solaris !drvAsynSerialPortConfigure("L0","/dev/ttya" ,0,0,0)
#!Redhat Linux!drvAsynSerialPortConfigure("L0","/dev/ttyS0",0,0,0)

asynSetOption("L0", -1, "baud", "9600")
asynSetOption("L0", -1, "bits", "8")
asynSetOption("L0", -1, "parity", "none")
asynSetOption("L0", -1, "stop", "1")
asynSetOption("L0", -1, "clocal", "Y")
asynSetOption("L0", -1, "crtscts", "N")


# Newport MM3000 and MM4000/5/6 driver setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!MM3000Setup(1, 10)
MM4000Setup(1, 10)

# Newport MM3000 and MM4000/5/6 driver configuration parameters: 
#     (1) controller# being configured
#     (2) ASYN port name
#     (3) address (GPIB only)
#!MM3000Config(0, "a-Serial[0]")
#!drvMM3000debug=4
MM4000Config(0, "L0")
#!var drvMM4000debug 4

# The MM4000 driver does not set end of string (EOS).
#  for RS232 serial,
#!asynOctetSetInputEos( "a-Serial[0]",0,"\r")
#!asynOctetSetOutputEos("a-Serial[0]",0,"\r")
#  for GPIB,
#!asynInterposeEosConfig("L0", 10, 1, 1)
#!asynOctetSetInputEos( "L0",10,"\r")
#!asynOctetSetOutputEos("L0",10,"\r")

# Newport PM500 driver setup parameters:
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!PM500Setup(1, 10)

# Newport PM500 configuration parameters:
#     (1) controller# being configured,
#     (2) ASYN port name
#     (3) address (GPIB only)
#!PM500Config(0, "L0")
#!var drvPM500debug 4

# IMS IM483 driver setup parameters:
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#  SM - single mode     PL - party mode
#!IM483SMSetup(1, 10)
#!IM483PLSetup(1, 10)

# IMS IM483 configuration parameters:
#     (1) controller# (chain#) being configured,
#     (2) ASYN port name
#  SM - single mode     PL - party mode
#!IM483SMConfig(0, "L0")
#!var drvIM483SMdebug 4
#!IM483PLConfig(0, "L0")
#!var drvIM483PLdebug 4

# MCB-4B driver setup parameters:
#     (1) maximum # of controllers,
#     (2) motor task polling rate (min=1Hz, max=60Hz)
#!MCB4BSetup(1, 10)

# MCB-4B driver configuration parameters:
#     (1) controller
#     (2) ASYN port name
#!MCB4BConfig(0, "L0")
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
#!var drvMCB4BDebug 4

# Newport ESP300 driver setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!ESP300Setup(1, 10)

# Newport ESP300 driver configuration parameters: 
#     (1) controller# being configured,
#     (2) ASYN port name
#     (3) address (GPIB only)
#!ESP300Config(0, "L0")
#!var drvESP300debug 4

# MicroMo MVP2001 driver setup parameters: 
#
# NOTE: The 1st controller on each chain should have it's address = 1.
#       The rest of the controllers on a chain should follow sequentially.
#
#
# int MVP2001Setup(int num_cards, /* number of CHAINS of controllers */
#      int scan_rate)             /* polling rate  (Min=1Hz, max=60Hz) */
#!MVP2001Setup(1, 10)

# int MVP2001Config(int card,     /* CHAIN being configured */
#     (2) ASYN port name
#!MVP2001Config(0, "L0")
#!drvMVP2001debug=4

# PI C-844 driver setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC844Setup(1, 10)

# PI C-844 driver configuration parameters: 
#     (1) controller# being configured,
#     (2) ASYN port name
#     (3) address (GPIB only)
#!PIC844Config(0, "L0")
#!var drvPIC844debug 4

# PI C-848 driver setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC848Setup(1, 2)

# PI C-848 driver configuration parameters: 
#     (1) controller# being configured,
#     (2) ASYN port name
#!PIC848Config(0, "L0")
#!drvPIC848debug = 4

# Micos MoCo driver setup parameters:
# Load MicosSetup once.
#     (1) max # of controller groups.  Controller groups are per serial
#         port.
#     (2) max # axes per controller group.  Maximum 16. (addr 0-15)
#     (3) motor task polling rate (min=1Hz, max=60Hz, 10Hz works well)
# Example:
#   MicosSetup(1, 2, 10) 1 group. 2 axes (controllers) in the group.
#                        10Hz poll.
#!MicosSetup(1, 2, 10)

# Micos MoCo driver configuration parameters:
# Load one MicosConfig for each group of Micos drivers.
#     (1) "Controller group" number
#     (2) ASYN port name
#!MicosConfig(0, "L0")
#!var drvMicosDebug 4

# IMS MDrive driver setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!MDriveSetup(1, 10)

# IMS MDrive driver configuration parameters: 
#     (1) controller# being configured,
#     (2) ASYN port name
#!MDriveConfig(0, "L0")
#!var drvMDrivedebug 4

# Kohzu SC-800 motor controller setup parameters: 
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!SC800Setup(1, 5)

# Kohzu SC-800 motor controller configuration parameters: 
#     (1) controller# being configured
#     (2) ASYN port name
#     (3) address (GPIB only)
#!SC800Config(0, "L0", 0)
#!var drvSC800debug 4

# Faulhaber MCDC2805 driver setup parameters:
#     (1)Max. controller count
#     (2)Polling rate
#!MCDC2805Setup(1, 10)

# Faulhaber MCDC2805 driver configuration parameters:
#     (1)Card being configured
#     (2)# modules on this serial port
#     (3)asyn port name
#!MCDC2805Config(0, 1, "L0")
#!var drvMCDC2805debug 4

# The MCDC2805 driver does not set end of string (EOS).
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")


# attocube ANC 150 asyn motor driver setup parameter.
#!ANC150AsynSetup(1)  /* number of ANC150 controllers in system.  */

# attocube ANC 150 asyn motor driver configure parameters.
#     (1) Controller number being configured
#     (2) ASYN port name
#     (3) Number of axes this controller supports
#     (4) Time to poll (msec) when an axis is in motion
#     (5) Time to poll (msec) when an axis is idle. 0 for no polling
#!ANC150AsynConfig(0, "a-Serial[1]", 3, 250, 2000)


# Aerotech Ensemble digital servo controller Setup
#     (1) maximum number of controllers in system
#     (2) motor task polling rate (min=1Hz,max=60Hz)
#!EnsembleSetup(1, 10)

# Aerotech Ensemble digital servo controller Configure
#     (1) controller# being configured, 
#     (2) asyn port name (string)
#!EnsembleConfig(0, "a-Serial[0]")


# Newport MM4000/5/6 asyn motor driver setup parameter.
#!MM4000AsynSetup(1)   /* number of MM4000 controllers in system.  */

# Newport MM4000/5/6 asyn motor driver configure parameters.
#     (1) Controller number being configured
#     (2) ASYN port name
#     (3) ASYN address (GPIB only)
#     (4) Number of axes this controller supports
#     (5) Time to poll (msec) when an axis is in motion
#     (6) Time to poll (msec) when an axis is idle. 0 for no polling
#!MM4000AsynConfig(0, "a-Serial[1]", 0, 1, 100, 250)

# Asyn-based Motor Record support
#   (1) Asyn port
#   (2) Driver name
#   (3) Controller index
#   (4) Max. number of axes
#!drvAsynMotorConfigure("MM4",   "motorMM4000", 0, 4)
#!drvAsynMotorConfigure("ANC150","motorANC150", 0, 1)


iocInit

# motorUtil (allstop & alldone)
motorUtilInit("IOC:")

