Ciprico Rimfire 3880 Manuel D’Utilisation

Page de 230
User’s Guide
21020285 D
Chapter 4   Command Operation
 
Example ‘C’ Routines for Command List
 Page 4 - 23
Example ‘C’ 
Routines for 
Command List
The following ‘C’ listing is included here as an example of how you may set-
up the Parameter Block, Status Block and Command List structures and 
manipulate the Command List Indexes.
/* Global Defines: */
#define EMPTY  0
#define NPB 
100  /* NPB - Num of Parameter Blocks in Command List. */
#define NSB
200 /* NSB - Num of Status Blocks in Command List. */
#define BYTE
unsigned char
/* an 8 bit value */
#define WORD
unsigned int
/* a 16 bit value */
#define DWORD unsigned long
/* a 32 bit value */
/* parameter_block - a structure used to pass a command to the RF3880 VME to
* SCSI adapter. The fields are:
*/
typedef struct
{
DWORD
identifier;
/* identifier - command identifier. */
BYTE
flags-2;
/* command flags. */
BYTE
flags-1;
/* command flags. */
BYTE
modifier;
/* modifier - address modifier. */
BYTE
target;
/* target - target ID or adpater ID. */
/* possible values for flags-1 */
#defineCF_VALID
0x80 /* dat and dir bits valid. */
#defineCF_FREE
0x40 /* reserved bit, not used. */
#defineCF_INHIBIT_CMD_COMPLETE0x20 /* command list, synch control. */
#defineCF_FREE1
0x10 /* reserved bit, not used.*/
#defineCF_IRS
0x08 /* inhibit request-sense. */
#defineCF_DATA
0x04 /* data for this opration. */
#defineCF_DIR
0x02 /* direction; 1 = (writes). */
/* possible values for flags-2 */
#defineCF_JUST_SEND_MSG
0x08 /* message-only operation. */
#defineCF_INHIBIT_DISCONNECT
0x04 /* inhibit disconnect. */
#defineCF_TAG_MESSAGE_TYPE
0x02 /* tag message type. */
union
{
WORD
w[2];
DWORD
d;
} sdp;
/* sdp - source/dest. memory address */
union
{
WORD
w[2];
DWORD
d;
} bytes;
/* bytes - data transfer count */