mstitst.h



/* --------------------------------------------------------------------
FILE MSTITST.H
Header file to be included for routines interfacing to the
MSTI DR-11 board mstiintf interface program.
Include as #include "/home/erickson/mstitst.h"
LRE 2-15-95 
------------------------------------------------------------------ */

#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/msg.h>

  /* FRAME_SIZE is half the MSTI payload frame size.  Necessitated by 
     the optimum buffer size for the DR-11. */
#define FRAME_SIZE 32768

#define NUM_BUFS 6

   /* ikonbuf type is the shared memory setup for the frames read in
      from the DR-11. */
typedef struct { 
       char buf[FRAME_SIZE] ;
} ikonbuf_t ;

#define BUFF_SIZE sizeof(ikonbuf_t)

  /* Use these key files to get the keys using ftok. */
  /* Use shm.key.n with n 0 thru 5 for shared memory buffers 0 thru 5 */
#define SHM_KEY_FILE "/ikkey/shm.key.\0"
#define MSG_KEY_FILE "/ikkey/msg.key\0"

#ifndef _IDR_REG_H
 /* IDR_FCN1 and IDR_FCN2 must be the same as defined in idr_reg.h
    included by idr_io.h as used in the interface program. */
#define IDR_FCN1 0x02
#define IDR_FCN2 0x04
#else
#define _MSTI_INTF
#endif

 /* Able to collect "Real Time" or "Stored Data" as defined by the
    MSTI ICD.  */
#define ST_DAT  IDR_FCN1
#define RT_DAT  IDR_FCN2

  /* Message types in the message queue. */
#define MSG_TO_IKON 100
#define MSG_FROM_IKON 200

  /* Commands to send to the interface program. */
#define QUIT_CMD 100
#define RD_DATA_TO_FILE_CMD 200 
#define RD_TO_BUF_CMD 300
#define QUIT_RD_TO_BUF_CMD 400
#define SET_UP_SNAPSHOTS_CMD 500
#define TAKE_SNAPSHOT_CMD 600
#define QUIT_SNAP_SHOTS_CMD 700
#define FILL_BUFS_CMD 800

  /* Max size of string to be sent to the interface program. */
#define MAX_MSG_SIZE 1024 

  /* Structure used to send a message to the interface program. */
typedef struct { 
       long msg_type ;
       int  msg_len ;
       int  cmd ;
       int  num_frames ; /* MSTI frames. Intf prog fugures buffers */
       int  data_type ;  /* Stored or real time */
       char msg[MAX_MSG_SIZE] ;
} to_ikonmsg_t ;

  /* Size used to send a message to the interface program */
#define TO_IKON_MSG_LEN (sizeof(to_ikonmsg_t) - sizeof(long))

  /* Max size of string returned by the interface program */
#define STATUS_MSG_SIZE 256 

  /* Structure used to receive a message from the interface program. */
typedef struct { 
       long msg_type ;
       int  msg_len ;
       int  cmd ;
       int  status ;
       char msg[STATUS_MSG_SIZE] ;
} from_ikonmsg_t ;

  /* Size used to receive a message from the interface program */
#define FROM_IKON_MSG_LEN (sizeof(from_ikonmsg_t) - sizeof(long))

  /* Status returned by the interface program. */
#define MSTI_OK 0
#define MSTI_FOPEN_ERR 1
#define MSTI_RD_ERR 2
#define MSTI_WR_ERR 3
#define MSTI_FWR_ERR 4
#define MSTI_FORK_ERR 5
#define MSTI_CONT_RD_ERR 6
#define MSTI_UNK_CMD_ERR 7
#define MSTI_BUSY_ERR 8

/* -------------------------------------------------------------------
  Additional stuff for the mstiintf program.
-------------------------------------------------------------------- */

#ifdef _MSTI_INTF

#define IKON_DEV_NAME "/dev/idr0\0"
#define SEM_KEY_FILE "/ikkey/sem.key\0"
#define PERMS 0666
#define NUM_SEMS 2
#define TLM_DAT IDR_FCN3

#endif