#ifndef _IBCDM_H
#define _IBCDM_H

/****************************************************************************/
/* Copyright 1992 to 1993, MBARI                                            */
/****************************************************************************/
/* Summary  : IBC Data Concentrator Data Manager Functions for VxWorks      */
/* Filename : ibcDm.h                                                       */
/* Author   : Andrew Pearce                                                 */
/* Project  : New ROV                                                       */
/* Version  : Version 1.0                                                   */
/* Created  : 04/08/93                                                      */
/* Modified : 04/09/93                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header: ibcDm.h,v 1.1 93/07/01 14:38:15 pean Exp $
 * $Log:        ibcDm.h,v $
 * Revision 1.1  93/07/01  14:38:15  14:38:15  pean (Andrew Pearce)
 * Initial revision
 *
 *
 */
/********************** IBC CPU Data Manager Item Names *********************/

#define IBC_CARD_CONFIG_DM                      "IBC_CARD_CONFIG"
#define IBC_CARD_ERROR_DM                       "IBC_CARD_ERROR"

#define HUMIDITY_DM                             "MICRO_HUMIDITY"
#define HUMIDITY_WARN_THRESH_DM                 "HUMIDITY_WARN_THRESHOLD"
#define HUMIDITY_ALARM_THRESH_DM                "HUMIDITY_ALARM_THRESHOLD"
#define HUMIDITY_ALARM_DM                       "HUMIDITY_ALARM"

#ifdef INCLUDE_PROTOTYPES

typedef struct                      /* IBC CPU Data Manager Item Handles    */
{
    microDmItems microDm;           /* Microcontroller Data Manager Items   */

    DM_Item ibcCardConfig;          /* IBC Card Configuration               */
    DM_Item ibcCardConfigError;     /* IBC Card Configuration Error         */

    DM_Item microHumidity;          /* Humidity Sensor Value % RH           */
    DM_Item humidityAlarm;          /* Humidity Alarm Status                */
    DM_Item humidityWarnThresh;     /* Humidity Warn Threshold              */
    DM_Item humidityAlarmThresh;    /* Humidity Alarm Threshold             */
} ibcCpuDmItems;

typedef struct                      /* IBC CPU Board Item Update Bits       */
{
    DWord resetEventBit;
    DWord resetCmdBit;
    DWord humidityWarnThreshBit;
    DWord humidityAlarmThreshBit;
} cpuUpdateBits;

#ifdef __STDC__

STATUS createIbcCpuDmItems( ibcCpuDmItems *cpuItems,
   const char* ibcDmPrefix, const char* ibcDataCon );

Void initIbcCpuProvider( ibcCpuDmItems* cpuItems, Period period );

DWord initIbcCpuConsumer( ibcCpuDmItems* cpuItems, cpuUpdateBits *cpuBits,
          SEM_ID updateSem );

STATUS initIbcCpuDmItems( ibcCpuDmItems* cpuItems, sio32Chan* ibcCpuDataChan,
          const char *ibcDataCon, ibcCardConfig ibcCardConfiguration );

STATUS initIbcHumidityThreshDm( sio32Chan *sio32DataChan,
          DM_Item humidityWarnDm, DM_Item humidityAlarmDm );

STATUS writeIbcHumidityThresh( sio32Chan *sio32DataChan,
          DM_Item humidityWarnDm, DM_Item humidityAlarmDm );

STATUS updateIbcHumidityDm( sio32Chan *sio32DataChan, DM_Item microHumidityDm );

STATUS updateIbcHumidityAlarmDm( sio32Chan *sio32DataChan,
          DM_Item microHumidityAlarmDm );

MBool processIbcCpuSRQ(Word srqRequest, Byte* buffer, ibcCpuDmItems* cpuItems);

STATUS updateIbcCardConfigDm( sio32Chan *sio32DataChan,
                             DM_Item ibcCardConfigDm,
                             DM_Item ibcCardConfigErrorDm,
                             ibcCardConfig ibcCardConfiguration );

#endif /* __STDC__ */

#endif /* INCLUDE_PROTOTYPES */

#endif /* _IBCDM_H */

