/****************************************************************************/
/* Copyright 1992 to 1993, MBARI                                            */
/****************************************************************************/
/* Summary  : IBC Regen Controller Board Data Manager Function Prototypes   */
/* Filename : regenDm.h                                                     */
/* Author   : Andrew Pearce                                                 */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 04/08/93                                                      */
/* Modified : 06/08/93                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: regenDm.h,v 1.1 93/07/01 14:38:17 pean Exp $
 * $Log:        regenDm.h,v $
 * Revision 1.1  93/07/01  14:38:17  14:38:17  pean (Andrew Pearce)
 * Initial revision
 *
 *
 */
/***************** IBC Regen Controller Data Manager Item Names *************/

#define REGEN_BUS_VOLTAGE_DM                   "REGEN.BUS_VOLTAGE"
#define REGEN_DUTY_CYCLE1_DM                   "REGEN.DUTY_CYCLE1"
#define REGEN_DUTY_CYCLE2_DM                   "REGEN.DUTY_CYCLE2"

#define REGEN_HEATSINK_TEMP_DM                 "REGEN.HEATSINK_TEMP"
#define REGEN_TEMP_WARN_THRESH_DM              "REGEN.TEMP_WARN_THRESH"
#define REGEN_TEMP_ALARM_THRESH_DM             "REGEN.TEMP_ALARM_THRESH"
#define REGEN_HEATSINK_TEMP_ALARM_DM           "REGEN.HEATSINK_TEMP_ALARM"

#define REGEN_HEATER1_TEMP_DM                  "REGEN.HEATER1_TEMP"
#define REGEN_HEATER1_TEMP_WARN_THRESH_DM      "REGEN.HEATER1_TEMP_WARN_THRESH"
#define REGEN_HEATER1_TEMP_ALARM_THRESH_DM     "REGEN.HEATER1_TEMP_ALARM_THRESH"
#define REGEN_HEATER1_TEMP_ALARM_DM            "REGEN.HEATER1_TEMP_ALARM"

#define REGEN_HEATER2_TEMP_DM                  "REGEN.HEATER2_TEMP"
#define REGEN_HEATER2_TEMP_WARN_THRESH_DM      "REGEN.HEATER2_TEMP_WARN_THRESH"
#define REGEN_HEATER2_TEMP_ALARM_THRESH_DM     "REGEN.HEATER2_TEMP_ALARM_THRESH"
#define REGEN_HEATER2_TEMP_ALARM_DM            "REGEN.HEATER2_TEMP_ALARM"

#define REGEN_MIN_BUS_VOLTAGE_DM               "REGEN.MIN_BUS_VOLTAGE"
#define REGEN_MIN_VOLT_WARN_THRESH_DM          "REGEN.MIN_VOLT_WARN_THRESH"
#define REGEN_MIN_VOLT_ALARM_THRESH_DM         "REGEN.MIN_VOLT_ALARM_THRESH"
#define REGEN_MIN_VOLTAGE_ALARM_DM             "REGEN.MIN_VOLTAGE_ALARM"

#define REGEN_MAX_BUS_VOLTAGE_DM               "REGEN.MAX_BUS_VOLTAGE"
#define REGEN_MAX_VOLT_WARN_THRESH_DM          "REGEN.MAX_VOLT_WARN_THRESH"
#define REGEN_MAX_VOLT_ALARM_THRESH_DM         "REGEN.MAX_VOLT_ALARM_THRESH"
#define REGEN_MAX_VOLT_ALARM_DM                "REGEN.MAX_VOLT_ALARM"

#define REGEN_RESET_MIN_MAX_DM                 "REGEN.RESET_MIN_MAX"

#define REGEN_OPEN_HEATER_ALARM_DM             "REGEN.OPEN_HEATER_ALARM"
#define REGEN_DUTY_CYCLE_ALARM_DM              "REGEN.DUTY_CYCLE_ALARM"

#define REGEN_DIGITAL_SCOPE_CHAN_DM            "REGEN.DIGITAL_SCOPE_CHAN"
#define REGEN_DIGITAL_SCOPE_DATA_DM            "REGEN.DIGITAL_SCOPE_DATA"

#define REGEN_HEATER_WARN_THRESH         30
#define REGEN_HEATER_ALARM_THRESH        60

#ifdef INCLUDE_PROTOTYPES

typedef struct                      /* IBC Regen Controller Board Items     */
{
    DM_Item busVoltage;             /* Measured Input Bus Voltage           */
    DM_Item dutyCycle1;             /* Regen Controller Chan 1 Duty Cycle   */
    DM_Item dutyCycle2;             /* Regen Controller Chan 2 Duty Cycle   */

    DM_Item heatsinkTemp;           /* Heatsink Temperature                 */
    DM_Item heatsinkWarnThresh;     /* Heatsink Temp Warning Threshold      */
    DM_Item heatsinkAlarmThresh;    /* Heatsink Temp Alarm Threshold        */
    DM_Item heatsinkTempAlarm;      /* Heatsink Temp Alarm                  */

    DM_Item heater1Temp;            /* Heater 1 Temperature                 */
    DM_Item heater1WarnThresh;      /* Heater 1 Temp Warning Threshold      */
    DM_Item heater1AlarmThresh;     /* Heater 1 Temp Alarm Threshold        */
    DM_Item heater1TempAlarm;       /* Heater 1 Temp Alarm                  */

    DM_Item heater2Temp;            /* Heater 2 Temperature                 */
    DM_Item heater2WarnThresh;      /* Heater 2 Temp Warning Threshold      */
    DM_Item heater2AlarmThresh;     /* Heater 2 Temp Alarm Threshold        */
    DM_Item heater2TempAlarm;       /* Heater 2 Temp Alarm                  */

    DM_Item minBusVoltage;          /* Minimum Bus Voltage                  */
    DM_Item minBusVoltWarnThresh;   /* Minimum Bus Voltage Warning Threshold*/
    DM_Item minBusVoltAlarmThresh;  /* Minimum Bus Voltage Alarm Threshold  */
    DM_Item minBusVoltageAlarm;     /* Minimum Bus Voltage Alarm            */

    DM_Item maxBusVoltage;          /* Maximum Bus Voltage                  */
    DM_Item maxBusVoltWarnThresh;   /* Maximum Bus Voltage Warning Threshold*/
    DM_Item maxBusVoltAlarmThresh;  /* Maximum Bus Voltage Alarm Threshold  */
    DM_Item maxBusVoltageAlarm;     /* Maximum Bus Voltage Alarm            */

    DM_Item resetMinMaxVoltCmd;     /* Reset Min/Max Voltage Measurements   */

    DM_Item openHeaterAlarm;        /* Open Heater Alarm Status             */
    DM_Item dutyCycleAlarm;         /* Duty Cycle Alarm Status              */

    DM_Item digitalScopeChan;       /* Digital Scope Mode Channel Number    */
    DM_Item digitalScopeData;       /* Digital Scope Mode Array of readings */
} ibcRegenDmItems;

typedef struct                      /* IBC Regen Board Item Update Bits     */
{
    DWord heatsinkWarnBit;
    DWord heatsinkAlarmBit;

    DWord heater1WarnBit;
    DWord heater1AlarmBit;
    DWord heater2WarnBit;
    DWord heater2AlarmBit;

    DWord minBusVoltWarnBit;
    DWord minBusVoltAlarmBit;
    DWord maxBusVoltWarnBit;
    DWord maxBusVoltAlarmBit;

    DWord resetMinMaxBit;
    DWord digitalScopeChanBit;
} regenUpdateBits;


#ifdef __STDC__

STATUS createIbcRegenDmItems( ibcRegenDmItems *regenDmItems,
    const char* ibcDmPrefix, const char* ibcDataCon );

Void initIbcRegenProvider( ibcRegenDmItems* regenItems, Period period );

Void initIbcRegenAlarmProvider( ibcRegenDmItems* RegenItems );

DWord initIbcRegenConsumer( ibcRegenDmItems* regenItems,
    regenUpdateBits *regenBits, SEM_ID updateSem );

STATUS updateIbcRegenDm( sio32Chan *sio32DataChan, Word boardAddr,
    ibcRegenDmItems *regenItems );

STATUS updateIbcRegenAlarmsDm( sio32Chan *sio32DataChan, Word boardAddr,
    ibcRegenDmItems *regenItems );

Void initIbcRegenDmItems( sio32Chan* sio32DataChan, Word boardAddr,
    ibcRegenDmItems* regenItems, const char* ibcDataCon );

STATUS ibcRegenSetBusVoltageAlarmThresh(sio32Chan* sio32DataChan,
    Word boardAddr, ibcRegenDmItems *regenItems,
    Int16 voltMinWarn, Int16 voltMinAlarm,
    Int16 voltMaxWarn, Int16 voltMaxAlarm);

Void ibcRegenUpdateCheck( sio32Chan* sio32DataChan, Word boardAddr,
    ibcRegenDmItems* regenItems, regenUpdateBits* regenBits,
    DM_Group regenGroup );

MBool processIbcRegenSRQ( Word srqRequest, Byte* buffer, Word regenBoardAddr,
    ibcRegenDmItems* regenItems );

#endif /* __STDC__ */

#endif /* INCLUDE_PROTOTYPES */



