6.3. Configuration File

The configuration file contains a number of commands that are used at startup. These commands give the driver its initial, static configuration.

A configuration file can also be invoked at run time, either programmatically or during an interactive session. The special command include is used for this purpose. This command lets you send a predetermined block of commands to the driver on the fly.

Below is a sample configuration file. This file, cif_sample.cfg, is included in the distribution. Because this is Lisp syntax, comment lines start with one or more semicolon (;) characters.

;;;
;;; Sample Driver Configuration File for the DRCIF Driver
;;;	Modify to suit requirements of specific system

;;;
;;; Set driver debug/error reporting level:
;;;	(debug level)
;;; where
;;;	0 for no output (only terminal errors produce output)
;;;	1 or 2, normal setting, reports errors and other significant events
;;;	3... reports increasing levels of debug information
(debug 2)

;;;
;;; Initialize card(s)
;;; ------------------
;;; (cardInit [id [addr [size [irq]]]])
;;;
;;; id	 is 0-3, the id for the interface card (default is 0)
;;; addr is the address of the dual port memory, based on jumpers on card,
;;;      in HEX.  Both a 4 digit segment or full 5-digit address is accepted.
;;;	 If not specified, then system is probed for the next CIF card.
;;; size	 is the size of the card dual port memory in Kbytes (2, 8, or 16).
;;;	 If not specified, then the system is probed to determine card size.
;;; irq  is 0-7, based on card jumpers, where 0 is polling mode (default)
;;;
; probe for all cards available, polling
(cardInit)
; probe for card 0 on interrupt 7
;(cardInit 0 0 0 7)
; init card 0 at D0000, probe for size, on interrupt 7
;(cardInit 0 0xD0000 0 7)
; init 8K card as card 0, interrupt 7
;(cardInit 0 0 8 7)

;;; profile the cards
;(cardProfile)

;;;
;;; polled cards must have a specific polling period (ms) assigned
;;;
(cardPoll 0 10)

;;; Publish alternate driver name to Cogent nameserver (see nserve and nsnames)
(attachNS myName)

;;;
;;;  Enable the card-specific license (license device key)
(license 0 0000-0000-0000-0000-0000-0000)
;;;  Alternative is to process file of licenses
;(licenseFile filename)

;;;
;;; read the standard cif card definitions
;;;
(include /usr/cogent/src/cif/cif.cfg)

;;;
;;; read the protocol-specific definitions
;;;
;(include /usr/cogent/src/cif/dnm.cfg)
;(include /usr/cogent/src/cif/ibm.cfg)
;(include /usr/cogent/src/cif/prf.cfg)
;(include /usr/cogent/src/cif/cns.cfg)

;;;
;;; Connect to the DataHub
;;; ----------------------
;;;  Enable connection to Cascade real-time datahub
(datahub y)

;;;  Publish status driver status
;(statusPointDefine)

;;;
;;; Analog and digital points are created through the generic commands below,
;;; where address = 
;;;		[[card:]buffer:]word[;flags]
;;;			for 16-bit analog values
;;;		[[card:]buffer:]word.bit_ofs[;flags]
;;;			for digital bit values
;;;		[[card:]buffer:]word.bit_ofs[.bit_width[;flags]]
;;;			for digital fields
;;;		   
;;; card	0..3 card id
;;; word 	16 bit word offset into buffer memory
;;; buffer	0 write, 1 read
;;; bit_ofs	1..16 bit offset into word
;;; bif_width	1..32 width of field in bits.
;;; flags 	-e0 | -eN (endian swap), -s (signed value)
;;;
;;; NOTE: To be updated automatically, a point MUST be collected into a group (see below)
;;; -----
;;;
;;; Cogent-specific testbed configuration (ref for point definitions examples) is in
;;; (include /usr/cogent/src/cif/testbed.cfg)

;;;
;;; Define analog points
;;; (analog enable-flag name address R|W|RW cycle-millisecs exception-flag
;;;  raw-min raw-max eng-unit-min eng-unit-max)
;;;
;(analog t <name> <address> r 0 t 0 32767 0 <max>)

;;;
;;; Define digital points
;;; (digital enable-flag name address R|W|RW cycle-millisecs exception-flag)
;;;
;(digital t <name> <address> r 0 t)

;;;
;;; Define groups.
;;;	Groups collect together a set of points to be automatically updated.
;;;	The update can occur on the group's specified cycle interval,
;;;	or can be linked to the card's update cycle, using the cardGroup command below.
;;; (group enable-flag name address R|W|RW cycle-millisecs point...)
;;;
;(group t <name> 0 R <ms> inpnt1 inpnt2 inpnt3)
;(group t <name> 0 RW <ms> outpnt1 outpnt2 outpnt3)

;;; 
;;; Associate a group with the cycle of the card (group's cycle-millisecs must be 0)
;;; (cardGroup 0 groupName)
;;;
;(cardGroup 0 <name>)