#ifndef _vicroDm_H
#define _vicroDm_H

/****************************************************************************/
/* Copyright 1992 to 1993, MBARI                                            */
/****************************************************************************/
/* Summary  : IBC Dual Vicor Board Data Manager Function Prototypes         */
/* Filename : vicorDm.h                                                     */
/* Author   : Andrew Pearce                                                 */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 04/08/93                                                      */
/* Modified : 06/08/93                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: vicorDm.h,v 1.1 93/07/01 14:38:18 pean Exp $
 * $Log:        vicorDm.h,v $
 * Revision 1.1  93/07/01  14:38:18  14:38:18  pean (Andrew Pearce)
 * Initial revision
 *
 *
 */
/******************** IBC Dual Vicor Data Manager Item Names ****************/

#define VICOR_PSU0_TEMP_DM                     "VICOR.PSU0.TEMPERATURE"
#define VICOR_PSU0_TEMP_ALARM_THRESH_DM        "VICOR.PSU0.TEMP_ALARM_THRESH"
#define VICOR_PSU0_TEMP_WARN_THRESH_DM         "VICOR.PSU0.TEMP_WARN_THRESH"
#define VICOR_PSU0_TEMP_ALARM_DM               "VICOR.PSU0.TEMP_ALARM"

#define VICOR_PSU0_ERROR_ALARM_DM              "VICOR.PSU0_ERROR_ALARM"

#define VICOR_PSU1_TEMP_DM                     "VICOR.PSU1.TEMPERATURE"
#define VICOR_PSU1_TEMP_ALARM_THRESH_DM        "VICOR.PSU1.TEMP_ALARM_THRESH"
#define VICOR_PSU1_TEMP_WARN_THRESH_DM         "VICOR.PSU1.TEMP_WARN_THRESH"
#define VICOR_PSU1_TEMP_ALARM_DM               "VICOR.PSU1.TEMP_ALARM"

#define VICOR_PSU1_ERROR_ALARM_DM              "VICOR.PSU1_ERROR_ALARM"

#ifdef INCLUDE_PROTOTYPES

typedef struct                      /* IBC Dual Vicor Board Items           */
{
    DM_Item vicorTemperature;       /* Vicor Temperature                    */
    DM_Item tempWarnThresh;         /* Vicor Temp Warning Threshold         */
    DM_Item tempAlarmThresh;        /* Vicor Temp Alarm Threshold           */
    DM_Item tempAlarm;              /* Vicor Temp Alarm                     */

    DM_Item psuErrorAlarm;          /* Vicor PSU Output Alarm Status        */

    switchEntry *deviceSwitch;      /* Pointer to switchEntry structure     */
} vicorDmItems;

typedef vicorDmItems ibcVicorDmItems[2];

typedef struct                      /* IBC Dual Vicor Board Item Update Bits*/
{
    DWord psu0TempWarnBit;
    DWord psu0TempAlarmBit;
    DWord psu1TempWarnBit;
    DWord psu1TempAlarmBit;
} vicorUpdateBits;


#ifdef __STDC__

STATUS createIbcVicorDmItems( vicorDmItems *vicorItems,
         const char *ibcDmPrefix, const char *ibcDataCon );

STATUS ibcConnectVicorDmItems( vicorDmItems *vicorItem, switchEntry *device,
         const char *dataConName,    const char *itemName,   Nat16 vicorPsu,
         char *temperature,          char *temperatureAlarm,
         char *tempWarnThresh,       char *tempAlarmThresh );

Void initIbcVicorProvider( vicorDmItems *vicorItems, Period period );

Void initIbcVicorAlarmProvider( vicorDmItems *vicorItems );

DWord initIbcVicorConsumer( vicorDmItems *vicorItems,
             vicorUpdateBits *vicorBits, SEM_ID updateSem );

STATUS updateIbcVicorDm( sio32Chan *sio32DataChan, Word boardAddr,
        vicorDmItems *vicorItems );

STATUS updateIbcVicorAlarmsDm( sio32Chan *sio32DataChan, Word boardAddr,
         vicorDmItems *vicorItems );

Void updateIbcVicorDmItems( sio32Chan *sio32DataChan, Word boardAddr,
         vicorDmItems *vicorItems, const char *ibcDataCon );

Void ibcVicorUpdateCheck( sio32Chan *sio32DataChan, Word boardAddr,
         vicorDmItems *vicorItems, vicorUpdateBits *vicorBits,
         DM_Group vicorGroup );

MBool processIbcVicorSRQ( Word srqRequest, Byte *buffer, Word vicorBoardAddr,
                 vicorDmItems *vicorItems );

#endif /* __STDC__ */

#endif /* INCLUDE_PROTOTYPES */

#endif
