The driver must be started before any applications attempt to connect to it, specifically before the DR_ApInitIPC function is called by a client. The driver must be started after support processes such as the Cascade NameServer (nserve) and Cascade QueueServer (qserve), if applicable, are started. The driver may be started before or after the Cascade DataHub is started.
The Cascade CIF Driver can be started at a shell, using the command drcif_ad and specifying any of its command options. For example:
[sh]$ drcif_ad -d dh3 -f ./c2.cfg -n CifDriver02
The Hilscher CIF interface cards should be configured with the following system parameters:
| Storage Format: | Intel format (Little Endian) |
| Addressing Mode: | Byte addresses |
| Startup Behavior: | Automatic release |
In addition, for most applications we recommend that the card I/O exchange mode be set to:
The following list provides a quick summary of the most necessary and commonly used configuration commands (see the sample.cfg file):
| cardInit | Autodetects and initializes any CIF cards, specify polling vs. interrupt modes. |
| cardProfile | Not required, but very satisfying to confirm expected card(s) were found and are configured correctly. |
| cardPoll | If polling mode is used, specifies the internal data transfer (buffer refresh) period. |
| updateBuffers | If polling mode is used, as an alternative to cardPoll, this command explicitly forces a data transfer with the card (buffer refresh) to occur. It is used by a client application, not in the configuration file. |
| license | At least one valid license (specific to a CIF card) must be given for the driver to function. |
| attachName | Publishes the administrator name to the QNX name server. Required for access through the API if the attachNS command is not used. |
If using the point data model:
| digital | Creates a binary bit or integer-valued data point. |
| analog | Creates a real-valued data point. |
| group | Associates a set of points into a group that can be refreshed on a periodic basis. |
| cardGroup | Associates a group directly with the refresh period of a card, in lieu of using an independent group period. |
If using the Cascade DataHub:
The ISA CIF cards use a bank of jumpers to set the card address and interrupt. Each address bit is set as follows:
No jumper/open/1 is denoted by ':'
Jumper installed/closed/0 is denoted by 'X'
The jumpers allow the shared memory block of the card to be placed anywhere in the lower 1M of memory, on boundaries determined by the size of the memory block. Hence, the 2K cards provide jumpers for address bits A11-A19 (the lower 11 bits, A0-A10, address the 2K within the block and are treated as zero for the base address), and the 8K cards provide jumpers for address bits A13-A19 (the lower 13 bits, A0-A12, address the 8K within the block).
The following provides some examples for some possible base address locations. As above, an X denotes that a jumper is installed, ':' denotes that the jumper is left open. A '0' indicates the base address bit is zero.
2K Card:
| A19 | A18 | A17 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| : | : | X | X | X | X | X | X | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| C | 0 | 0 | 0 | 0 | |||||||||||||||
| : | : | X | X | X | X | X | X | : | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| C | 0 | 8 | 0 | 0 | |||||||||||||||
| : | : | X | X | X | X | X | : | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| C | 1 | 0 | 0 | 0 | |||||||||||||||
| : | : | X | X | X | X | X | : | : | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| C | 1 | 8 | 0 | 0 | |||||||||||||||
| : | : | X | : | X | X | : | X | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D | 2 | 0 | 0 | 0 | |||||||||||||||
| : | : | X | : | X | : | X | X | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D | 4 | 0 | 0 | 0 | |||||||||||||||
8K Card:
| A19 | A18 | A17 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| : | X | : | : | X | : | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D | 4 | 0 | 0 | 0 | |||||||||||||||
| : | X | : | : | X | : | : | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D | 6 | 0 | 0 | 0 | |||||||||||||||
| : | X | : | : | : | X | X | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D | 8 | 0 | 0 | 0 | |||||||||||||||
The remaining jumpers are used to select the interrupt, if any is to be used. Only one interrupt jumper may be used at one time! Selection of an interrupt will not effect operation of the administrator if polled mode is selected.