#ifndef _gf_5vDm_H
#define _gf_5vDm_H
/****************************************************************************/
/* Copyright 1992 to 1993, MBARI                                            */
/****************************************************************************/
/* Summary  : IBC GF_5V Board Data Manager Function Prototypes for VxWorks  */
/* Filename : gf_5vDm.h                                                     */
/* Author   : Andrew Pearce                                                 */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 06/10/93                                                      */
/* Modified : 06/10/93                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: /usr/tiburon/.cvsroot/vw/h/gf_5vDm.h,v 1.1.1.1 1997/05/16 22:33:03 pean Exp $
 * $Log: gf_5vDm.h,v $
 * Revision 1.1.1.1  1997/05/16 22:33:03  pean
 * Initial check in after software freeze.
 *
 * Revision 1.1  93/07/01  14:38:13  14:38:13  pean (Andrew Pearce)
 * Initial revision
 *
 *
 */
/********************** IBC GF_5V Data Manager Item Names *******************/

#define GF_5V_ENABLE_DM                         "GF_5V.ENABLE"
#define GF_5V_OFFSET_CURRENT_DM                 "GF_5V.OFFSET_CURRENT"
#define GF_5V_SELFTEST_STATUS_DM                "GF_5V.SELFTEST_STATUS"
#define GF_5V_SELFTEST_CMD_DM                   "GF_5V.SELFTEST_COMMAND"
#define GF_5V_CHAN_UPDATE_STATUS_DM             "GF_5V.CHAN_UPDATE_STATUS"

#define GF_5V_TEMPERATURE_DM                    "GF_5V.TEMPERATURE"
#define GF_5V_TEMP_WARN_THRESH_DM               "GF_5V.TEMP_WARN_THRESH"
#define GF_5V_TEMP_ALARM_THRESH_DM              "GF_5V.TEMP_ALARM_THRESH"
#define GF_5V_TEMP_ALARM_DM                     "GF_5V.TEMP_ALARM"

#define GF_5V_VICOR_VOLTAGE_DM                  "GF_5V.VICOR_VOLTAGE"
#define GF_5V_VICOR_VOLT_WARN_THRESH_DM         "GF_5V.VICOR_VOLT_WARN_THRESH"
#define GF_5V_VICOR_VOLT_ALARM_THRESH_DM        "GF_5V.VICOR_VOLT_ALARM_THRESH"
#define GF_5V_VICOR_VOLTAGE_ALARM_DM            "GF_5V.VICOR_VOLTAGE_ALARM"

#define GF_5V_BUS_CAPACITANCE_DM                "GF_5V.BUS_CAPACITANCE"
#define GF_5V_BUS_CAPACITOR_CURRENT_DM          "GF_5V.CAPACITOR_CURRENT"

#define GF_5V_CHAN0_CHARGE_TIME_DM              "GF_5V.CHAN0.CHARGE_TIME"
#define GF_5V_CHAN0_FAULT_CURRENT_DM            "GF_5V.CHAN0.FAULT_CURRENT"
#define GF_5V_CHAN0_GF_ALARM_DM                 "GF_5V.CHAN0.GF_ALARM"

#define GF_5V_CHAN1_CHARGE_TIME_DM              "GF_5V.CHAN1.CHARGE_TIME"
#define GF_5V_CHAN1_FAULT_CURRENT_DM            "GF_5V.CHAN1.FAULT_CURRENT"
#define GF_5V_CHAN1_GF_ALARM_DM                 "GF_5V.CHAN1.GF_ALARM"

#define GF_5V_CHAN2_CHARGE_TIME_DM              "GF_5V.CHAN2.CHARGE_TIME"
#define GF_5V_CHAN2_FAULT_CURRENT_DM            "GF_5V.CHAN2.FAULT_CURRENT"
#define GF_5V_CHAN2_GF_ALARM_DM                 "GF_5V.CHAN2.GF_ALARM"

#define GF_5V_CHAN3_CHARGE_TIME_DM              "GF_5V.CHAN3.CHARGE_TIME"
#define GF_5V_CHAN3_FAULT_CURRENT_DM            "GF_5V.CHAN3.FAULT_CURRENT"
#define GF_5V_CHAN3_GF_ALARM_DM                 "GF_5V.CHAN3.GF_ALARM"

#ifdef INCLUDE_PROTOTYPES

typedef struct
{
    DM_Item chargeTime;             /* Channel Charge Up Time               */
    DM_Item faultCurrent;           /* Ground Fault Current                 */
    DM_Item alarmStatus;            /* Ground Fault Alarm Status            */
} gfChanItems;

typedef struct                      /* IBC GF_5V Board Data Manager Items   */
{
    DM_Item gf_enable;              /* Enable Ground Fault Monitoring       */
    DM_Item offsetCurrent;          /* A/D Offset Current Reading           */
    DM_Item selftestCmd;            /* Selftest Command                     */
    DM_Item selftestStatus;         /* Selftest Status                      */
    DM_Item chanUpdate;             /* Channel Update Status                */

    DM_Item temperature;            /* Vicor Temperature                    */
    DM_Item tempWarnThresh;         /* Temperature Warning Threshold        */
    DM_Item tempAlarmThresh;        /* Temperature Alarm Threshold          */
    DM_Item tempAlarm;              /* Temperature Alarm Status             */

    DM_Item vicorVoltage;           /* Vicor Voltage                        */
    DM_Item voltageWarnThresh;      /* Voltage Warning Threshold            */
    DM_Item voltageAlarmThresh;     /* Voltage Alarm Threshold              */
    DM_Item voltageAlarm;           /* Voltage Alarm Status                 */

    DM_Item busCapacitance;         /* Bus Capacitance                      */
    DM_Item capacitorCurrent;       /* Bus Capacitor Current (uA)           */

    gfChanItems gfChan[GF_MAX_CHANS];    /* Channel specific items          */
} ibcGf5vDmItems;

typedef struct                      /* IBC GF_5V Board Item Update Bits     */
{
    DWord gfEnableBit;
    DWord selftestBit;

    DWord tempWarnBit;
    DWord tempAlarmBit;

    DWord voltageWarnBit;
    DWord voltageAlarmBit;

    DWord busCapBit;

    DWord chan0ChargeBit;
    DWord chan1ChargeBit;
    DWord chan2ChargeBit;
    DWord chan3ChargeBit;
} gf5vUpdateBits;

typedef struct
{
    DWord chargeTimeBit;
    DWord alarmStatusBit;
} ibcGfUpdateBits;

#ifdef __STDC__

STATUS createIbcGf5vDmItems( ibcGf5vDmItems *gf5vDmItems,
        const char* ibcDmPrefix, const char* ibcDataCon );

Void initIbcGf5vProvider( ibcGf5vDmItems* gf5vItems, Period period );

Void initIbcGf5vAlarmProvider( ibcGf5vDmItems* gf5vItems );

DWord initIbcGf5vConsumer( ibcGf5vDmItems* gf5vItems, gf5vUpdateBits *gf5vBits,
    SEM_ID updateSem );

STATUS updateIbcGf5vDm( sio32Chan *sio32DataChan, Word boardAddr,
    ibcGf5vDmItems *gf5v );

STATUS updateNewIbcGf5vDm( sio32Chan *sio32DataChan, Word boardAddr,
    ibcGf5vDmItems *gf5vDmItems );

STATUS updateIbcGf5vAlarmsDm( sio32Chan *sio32DataChan, Word boardAddr,
    ibcGf5vDmItems *gf5v );

Void updateIbcGf5vDmItems( sio32Chan* sio32DataChan, Word boardAddr,
    ibcGf5vDmItems* gf5v, const char* ibcDataCon );

STATUS ibcConnectGf5vDmItems( ibcGf5vDmItems *gf5vDmItems, gfChanItems *device,
    Nat16 chan, char *gfChargeTime, char *gfCurrent, char *gfAlarmStatus);

STATUS ibcGf5vSetChargeTimes( sio32Chan *sio32SerialChan, Word boardAddr,
    ibcGf5vDmItems* gf5vDmItems,
    Int32 charge0, Int32 charge1, Int32 charge2, Int32 charge3 );

STATUS enableGf5vMonitoring( sio32Chan *sio32SerialChan, Word boardAddr,
    ibcGf5vDmItems* gf5vDmItems, MBool gfEnable );

STATUS runGf5vBoardSelftest( sio32Chan *sio32SerialChan, Word boardAddr,
    ibcGf5vDmItems *gf5vDmItems );

Void ibcGf5vUpdateCheck( sio32Chan* sio32DataChan, Word boardAddr,
    ibcGf5vDmItems* gf5vItems, gf5vUpdateBits* gf5vBits, DM_Group gf5vGroup );

MBool processIbcGf5vSRQ( Word srqRequest, Byte* buffer, Word gf5vBoardAddr,
    ibcGf5vDmItems* gf5v );

Void setGf5vChargeTimes( ibcGf5vDmItems* gf5vDmItems,
                        Int32 charge0, Int32 charge1,
                        Int32 charge2, Int32 charge3 );


#endif /* __STDC__ */

#endif /* INCLUDE_PROTOTYPES */
#endif /* _gf_5vDm_H */
