/************************************************************************/
/* Copyright 1992 MBARI							*/
/************************************************************************/
/* $Header: /usr/tiburon/unix/gui/proto/RCS/alarmData.c,v 1.1 1998/01/28 16:17:12 oreilly Exp $		*/
/* Summary  : Routines to Manage Alarms for ROV User Interface		*/
/* Filename : alarm.c							*/
/* Author   : Bob Herlien (rah)						*/
/* Project  : New ROV							*/
/* $Revision: 1.1 $							*/
/* Created  : 11/07/92							*/
/************************************************************************/
/* Modification History:						*/
/* $Log: alarmData.c,v $
 * Revision 1.1  1998/01/28 16:17:12  oreilly
 * Initial revision
 *
 * Revision 2.2  96/05/15  11:15:40  11:15:40  bobh (Bob Herlien)
 * Still supporting proto during final vehicle build
 * 
 * Revision 2.0  95/09/20  14:23:08  14:23:08  hebo (Bob Herlien)
 * Support for final vehicle integration.  AC, PDU micros.
 * 
 * Revision 1.8  94/08/19  17:20:29  17:20:29  hebo (Bob Herlien)
 * Interface to Unix version of Data Manager
 * 
 * Revision 1.7  94/03/21  14:15:23  14:15:23  hebo (Bob Herlien)
 * Misc bug fixes and enhancements
 * 
 * Revision 1.6  93/12/17  15:05:07  15:05:07  hebo (Bob Herlien)
 * December Wet Test
 * 
 * Revision 1.5  93/07/08  18:11:02  18:11:02  hebo (Bob Herlien)
 * Prior to Prototype Phase I testing
 * 
 * Revision 1.4  93/05/27  15:48:07  15:48:07  hebo (Bob Herlien)
 * Data Manager Interface
 * 
 * Revision 1.2  93/01/21  10:34:22  10:34:22  hebo (Bob Herlien)
 * Changes after Level 0
 * 
 * Revision 1.0  92/11/20  12:03:30  12:03:30  hebo (Bob Herlien)
 * Initial revision
 * 
*/
/************************************************************************/

#include <mbari/types.h>
#include <mbari/const.h>
#include <Xm/Xm.h>
#include <X11/Intrinsic.h>
#include "rov.h"
#include "tiburon.h"
#include "alarm.h"
#include <microDm.h>
#include <moogThrusterDM.h>
#include <vmeIbc.h>
#include <powerIbc.h>
#include <powerDM.h>
#include <sensorDcon.h>
#include <lightingDcon.h>
#include <cameraDcon.h>
#include <sonarDcon.h>
#include <ersDcon.h>
#include <ibcDm.h>
#include <lpsDm.h>
#include <hpsDm.h>
#include <regenDm.h>
#include <gf_5vDm.h>
#include <controlDM.h>
#include <sio32Diag.h>
#include <sio32Micro.h>
#include <acMicro.h>
#include <pduMicro.h>
#include <telemDiag.h>
#include <panTilt.h>
#include <camera.h>
#include <vbSystem.h>


/********************************/
/*	External Functions	*/
/********************************/

Extern MBool	getEventAlarm();
Extern MBool	getMBoolAlarm();
Extern MBool	getNat16Alarm();
Extern MBool	getMotorStatus();
Extern MBool	getMicroAlarm();
Extern MBool	getGfAlarm();
Extern MBool	getGfTestAlarm();
Extern MBool	getGf5vTestAlarm();
Extern MBool	getDmPeerAlarm();


/************************************************/
/*	alarmCan and alarmItem Arrays		*/
/************************************************/

MLocal alarmCan	thrusterCans0[] =
{ {PORT_HORIZ_THRUSTER_DM, "Port Horiz Thruster"},
  {STBD_HORIZ_THRUSTER_DM, "Stbd Horiz Thruster"},
  {PORT_VERT_THRUSTER_DM, "Port Vertical Thruster"}
};

MLocal alarmCan	thrusterCans1[] =
{ {STBD_VERT_THRUSTER_DM, "Stbd Vertical Thruster"},
  {FWD_LATERAL_THRUSTER_DM, "Fwd Lateral Thruster"},
  {AFT_LATERAL_THRUSTER_DM, "Aft Lateral Thruster"},
  {VB_MOTOR_DM_PREFIX, "VB Motor"}
};

MLocal alarmItem thrusterItems[] = 
{ {MICRO_RESET_EVENT_DM, "Micro Reset", DM_EMPTY, getEventAlarm, 0},
  {MOTOR_STATUS_DM, "", DM_ENUM, getMotorStatus, 0},
  {WATER_ALARM_DM, "Water Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TEMPERATURE_ALARM_DM, "Temp", DM_ENUM, getMicroAlarm, 0},
  {MOTOR_DISABLE_ALARM_DM, "Motor Disabled", DM_EMPTY, getEventAlarm, 0},
  {MOTOR_STALL_ALARM_DM, "Motor Stalled", DM_EMPTY, getEventAlarm, 0}
};

MLocal alarmCan	ibcCans[] =
{ {VMEIBC_DM_PREFIX, "VME IBC"},
  {PWR_IBC_A_DM_PREFIX, "Power IBC A"},
  {PWR_IBC_B_DM_PREFIX, "Power IBC B"},
  {LIGHTING_IBC_DM_PREFIX, "Lighting IBC"},
  {CAMERA_IBC_DM_PREFIX, "Camera IBC"},
  {SENSOR_IBC_DM_PREFIX, "Sensor IBC"},
  {SONAR_IBC_DM_PREFIX, "Sonar IBC"},
  {ERS_DCON_DM_PREFIX, "ERS IBC"}
};

MLocal alarmItem ibcAlarmItems[] = 
{ {MICRO_RESET_EVENT_DM, "Micro Reset", DM_EMPTY, getEventAlarm, 0},
  {HUMIDITY_ALARM_DM, "Humidity", DM_ENUM, getMicroAlarm, 0},
  {HOUSING_WATER_ALARM_DM, "Housing Water Alarm", DM_MBOOL,  getMBoolAlarm, 0},
  {IBC_CARD_ERROR_DM, "Card Config Error ", DM_NAT16, getNat16Alarm, 0}
};

MLocal alarmItem ibcGfAlarmItems1[] = 
{ {GF_5V_SELFTEST_STATUS_DM, "Gnd Fault", DM_ENUM, getGf5vTestAlarm, 0},
  {GF_5V_TEMP_ALARM_DM, "GF Temp", DM_ENUM, getMicroAlarm, 0},
  {GF_5V_VICOR_VOLTAGE_ALARM_DM, "GF Vicor Voltage", DM_ENUM, getMicroAlarm, 0}
};

MLocal alarmItem ibcGfAlarmItems2[] = 
{ {GF_5V_CHAN0_GF_ALARM_DM, "Gnd Fault Chan 0", DM_ENUM, getGfAlarm, 0},
  {GF_5V_CHAN1_GF_ALARM_DM, "Gnd Fault Chan 1", DM_ENUM, getGfAlarm, 0},
  {GF_5V_CHAN2_GF_ALARM_DM, "Gnd Fault Chan 2", DM_ENUM, getGfAlarm, 0},
  {GF_5V_CHAN3_GF_ALARM_DM, "Gnd Fault Chan 3", DM_ENUM, getGfAlarm, 0}
};

MLocal alarmCan	micro3x5Cans[] =
{ {SIO32_DM_PREFIX,         "SIO32 Micro"},
  {PDU_MICRO_DM_PREFIX,     "PDU Micro"},
  {AC_MICRO_DM_PREFIX,      "AC Micro"},
  {TOPSIDE_TELEM_DM_PREFIX, "Topside Telemetry Micro"},
  {ROV_TELEM_DM_PREFIX,     "ROV Telemetry Micro"},
  {PAN_TILT_STBD_DM_PREFIX, "Stbd Pan/Tilt Micro"},
  {PAN_TILT_PORT_DM_PREFIX, "Port Pan/Tilt Micro"},
  {STBD_CAMERA_DM_PREFIX,   "Stbd Camera Micro"},
  {PORT_CAMERA_DM_PREFIX,   "Port Camera Micro"}
};

MLocal alarmItem micro3x5AlarmItems[] = 
{ {MICRO_RESET_EVENT_DM, "Micro Reset", DM_EMPTY, getEventAlarm, 0},
  {TEMPERATURE_ALARM_DM, "Temperature", DM_ENUM, getMicroAlarm, 0},
  {HUMIDITY_ALARM_DM, "Humidity", DM_ENUM, getMicroAlarm, 0}
};

MLocal alarmCan	micro3x5GfCans[] =
{ {SIO32_DM_PREFIX,         "SIO32 Micro"},
  {TOPSIDE_TELEM_DM_PREFIX, "Topside Telemetry Micro"},
  {ROV_TELEM_DM_PREFIX,     "ROV Telemetry Micro"},
  {PAN_TILT_STBD_DM_PREFIX, "Stbd Pan/Tilt Micro"},
  {PAN_TILT_PORT_DM_PREFIX, "Port Pan/Tilt Micro"}
};

MLocal alarmItem micro3x5GfAlarmItems[] = 
{ {LOCAL_GND_FLT_ALARM_DM, "Gnd Fault", DM_ENUM, getMicroAlarm, 0},
  {GND_FLT_TEST_STATUS_DM, "Gnd Fault", DM_ENUM, getGfTestAlarm, 0}
};

MLocal alarmCan	pwrIbcCans[] =
{ {PWR_IBC_A_DM_PREFIX, "Power IBC A"},
  {PWR_IBC_B_DM_PREFIX, "Power IBC B"}
};

MLocal alarmItem pwrIbcAlarmItems[] = 
{ {REGEN_HEATSINK_TEMP_ALARM_DM, "Regen Heatsink Temp", DM_ENUM, 
   getMicroAlarm, 0},
  {REGEN_HEATER1_TEMP_ALARM_DM, "Regen Heater 1 Temp", DM_ENUM,
   getMicroAlarm, 0},
  {REGEN_HEATER2_TEMP_ALARM_DM, "Regen Heater 2 Temp", DM_ENUM,
   getMicroAlarm, 0},
  {REGEN_MIN_VOLTAGE_ALARM_DM, "Regen Undervoltage", DM_ENUM, getMicroAlarm, 0},
  {REGEN_MAX_VOLT_ALARM_DM, "Regen Overvoltage", DM_ENUM, getMicroAlarm, 0},
  {REGEN_OPEN_HEATER_ALARM_DM, "Regen Open Heater Alarm", DM_MBOOL, 
   getMBoolAlarm, 0},
  {REGEN_DUTY_CYCLE_ALARM_DM, "Regen Duty Cycle Alarm", DM_MBOOL, 
   getMBoolAlarm, 0}
};

MLocal alarmCan	telemCans[] =
{ {TOPSIDE_TELEM_DM_PREFIX, "Topside Telem"},
  {ROV_TELEM_DM_PREFIX,     "ROV Telem"}
};

MLocal alarmItem telemAlarmItems[] = 
{ {TELEM_PSU_STATUS_DM, " Power Supply Status = ", DM_NAT16,
   getNat16Alarm, 0x7},
  {BIT_ERROR_RATE_ALARM_DM, "Bit Error Rate", DM_ENUM,  getMicroAlarm, 0},
  {TELEM_FDDI_STATUS_ALARM_DM, "FDDI Status Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TELEM_LASER_STATUS_ALARM_DM, "Laser Status Alarm", DM_MBOOL,
    getMBoolAlarm, 0},
  {TELEM_RECV_PWR_ALARM_DM, "Received Power Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TELEM_SUB_MUX_ALARM_DM, "Sub Mux Board Alarm", DM_MBOOL, getMBoolAlarm, 0}
};

MLocal alarmCan hpSwitch0[] =
{ {THRUSTER_STBD_HORIZ_DM, "Stbd Horiz Thruster"},
  {THRUSTER_PORT_HORIZ_DM, "Port Horiz Thruster"},
  {THRUSTER_STBD_VERT_DM,  "Stbd Vert Thruster"},
  {THRUSTER_PORT_VERT_DM,  "Port Vert Thruster"},
  {THRUSTER_FWD_LAT_DM,    "Fwd Lat Thruster"},
  {THRUSTER_AFT_LAT_DM,    "Aft Lat Thruster"}
};

MLocal alarmCan hpSwitch1[] =
{ {PORT_PAN_TILT_DCON_DM,  "Port Pan/Tilt"},
  {STBD_PAN_TILT_DCON_DM,  "Stbd Pan/Tilt"},
  {LIGHTING_DCON_240V_DM,  "240V Light"},
  {LIGHTING_DCON_48V_DM,   "48V Light"},
  {BACKUP_LIGHT_DM,        "Backup Light"},
  {TOOLSLED_240V_DM,       "240V Toolsled"},
  {VB_MOTOR_DM,            "VB Motor"},
  {MANIP_240V_DM,          "240V Manip"},
  {LIGHT_BALLAST_0_DM,	   "Light Ballast 0"},
  {LIGHT_BALLAST_1_DM,	   "Light Ballast 1"},
  {LIGHT_BALLAST_2_DM,	   "Light Ballast 2"}
};

MLocal alarmItem hpsAlarmItems[] =
{ {HPS_CURRENT_ALARM_DM, "Current", DM_ENUM, getMicroAlarm, 0},
  {HPS_SWITCH_TRIP_ALARM_DM, "Switch Tripped", DM_EMPTY, getEventAlarm, 0}
};

MLocal alarmCan lpsVicor[] =
{ {TIBURON_DM_PREFIX "PWR_IBC_A.LPS0.",  "Power IBC A LPS"},
  {TIBURON_DM_PREFIX "PWR_IBC_B.LPS0.",  "Power IBC B LPS"},
  {TIBURON_DM_PREFIX "VME_IBC.LPS0.",    "VME IBC LPS"},
  {TIBURON_DM_PREFIX "CAMERA_IBC.LPS0.", "Camera IBC LPS 0"},
  {TIBURON_DM_PREFIX "CAMERA_IBC.LPS1.", "Camera IBC LPS 1"},
  {TIBURON_DM_PREFIX "CAMERA_IBC.LPS2.", "Camera IBC LPS 2"},
  {TIBURON_DM_PREFIX "SENSOR_IBC.LPS0.", "Sensor IBC LPS 0"},
  {TIBURON_DM_PREFIX "SENSOR_IBC.LPS1.", "Sensor IBC LPS 1"},
};

MLocal alarmItem lpsVicorAlarmItems[] =
{ {LPS_VICOR_VOLTAGE_ALARM_DM, "Voltage", DM_ENUM, getMicroAlarm, 0},
  {LPS_VICOR_TEMP_ALARM_DM, "Vicor Temp", DM_ENUM, getMicroAlarm, 0},
  {LPS_SWITCH_TEMP_ALARM_DM, "Switch Temp", DM_ENUM, getMicroAlarm, 0}
};

MLocal alarmCan lpSwitch0[] =
{ {CAMERA_DCON_DM,   "Camera DCon"},
  {ERS_DCON_DM,      "ERS DCon"},
  {TOOLSLED_48V_DM,  "48V Toolsled"},
  {GYRO_DM,          "Gyro"},
  {RESPONDER_DM,     "TrkPt Responder"},
  {PILOT_SIT_CAMERA_DM, "Pilot SIT Camera"},
  {BIO_LUME_CAMERA_DM, "Biolum Camera"},
  {GEN_COLOR_CAMERA_DM, "Generic Color Camera"},
  {GEN_BW_CAMERA1_DM, "Generic B/W Camera 1"},
  {GEN_BW_CAMERA2_DM, "Generic B/W Camera 2"},
  {PORT_COLOR_CAMERA_DM, "Port Color Camera"},
  {STBD_COLOR_CAMERA_DM, "Stbd Color Camera"},
  {SENSOR_DCON_DM,   "Sensor DCon"},
  {SONAR_DCON_DM,    "Sonar DCon"},
  {CONDUCTIVITY_SENSOR_DM,  "Conductivity Sensor"},
  {CTD_TEMPERATURE_DM, "CTD Temp Sensor"},
  {PRESSURE_SENSOR_DM, "Pressure Sensor"},
  {OXYGEN_SENSOR_DM,   "Oxygen Sensor"},
  {TRANSMISSOMETER_DM, "Transmissometer"},
  {SAMPLING_PUMP_DM,   "Sampling Pump"},
  {INJECTION_PUMP_DM,  "Injection Pump"},
  {ALTIMETER_DM,     "Altimeter"},
  {PORT_PAN_TILT_DCON_DM, "Port Light Pan/Tilt"},
  {STBD_PAN_TILT_DCON_DM, "Stbd Light Pan/Tilt"},
  {LIGHT_0_DM,             "Light Ckt 0"},
  {LIGHT_1_DM,             "Light Ckt 1"},
  {LIGHT_2_DM,             "Light Ckt 2"},
  {LIGHT_3_DM,             "Light Ckt 3"},
  {LIGHT_4_DM,             "Light Ckt 4"},
  {LIGHT_5_DM,             "Light Ckt 5"},
  {MANIP_48V_DM,	   "48V Manip"}
};

MLocal alarmCan lpSwitch1[] =
{ {ERS_PRESSURE_SENSOR_DM,  "ERS Pressure Sensor"},
  {VB_LEVEL_SENSOR_DM, "VB Level Sensor"},
  {COMP_LEVEL_SENSOR_DM, "Comp Level Sensor"},
  {TOOLSLED_LATCH_SENSOR_DM, "Toolsled Latch Sensor"},
  {VB_SELECT_DM, "VB Select"},
  {HYD_SELECT_DM, "Hydraulic Select"},
  {HYD_ARM_SELECT_DM, "Hydraulic Arm Select"},
  {HYD_TOOLSLED_SELECT_DM, "Hydraulic Toolsled Select"},
  {VB_FILL_DM, "VB Fill"},
  {ACOUSTIC_MODEM_DM, "ERS Acoustic Modem"}
};

MLocal alarmItem lpsAlarmItems[] =
{ {"CURRENT_ALARM", "Current", DM_ENUM, getMicroAlarm, 0}
};

MLocal alarmCan vicor[] =
{ {HYDROPHONE_DM,    "Hydrophone"},
  {IMAG_SONAR_DM,    "Imaging Sonar"},
  {DOPPLER_SONAR_DM, "Doppler Sonar"}
};

MLocal alarmItem vicorAlarmItems[] =
{ {"TEMP_ALARM", "Vicor Temp", DM_ENUM, getMicroAlarm, 0}
};

MLocal alarmCan panTilt[] =
{ {PAN_TILT_PORT_LIGHT_PAN_DM_PREFIX,   "Port Light Pan"},
  {PAN_TILT_PORT_LIGHT_TILT_DM_PREFIX,  "Port Light Tilt"},
  {PAN_TILT_PORT_CAMERA_PAN_DM_PREFIX,  "Port Camera Pan"},
  {PAN_TILT_PORT_CAMERA_TILT_DM_PREFIX, "Port Camera Tilt"},
  {PAN_TILT_STBD_LIGHT_PAN_DM_PREFIX,   "Stbd Light Pan"},
  {PAN_TILT_STBD_LIGHT_TILT_DM_PREFIX,  "Stbd Light Tilt"},
  {PAN_TILT_STBD_CAMERA_PAN_DM_PREFIX,  "Stbd Camera Pan"},
  {PAN_TILT_STBD_CAMERA_TILT_DM_PREFIX, "Stbd Camera Tilt"},
};

MLocal alarmItem panTiltAlarmItems[] =
{ {PT_CTRL_FAULT_DM, "Controller Fault", DM_MBOOL, getMBoolAlarm, 0},
  {PT_MOVE_ERROR_DM, "Move Error", DM_EMPTY, getEventAlarm, 0},
  {PT_ZERO_POS_ERROR_DM, "Zero Position Error", DM_EMPTY, getEventAlarm, 0},
  {PT_DELTA_POS_ALARM_DM, "Delta Postion Alarm", DM_MBOOL, getMBoolAlarm, 0}
};

MLocal alarmCan pduMicroCan[] =
{ {PDU_MICRO_DM_PREFIX,   "PDU Micro"}
};

MLocal alarmItem pduMicroItems[] =
{ { WATTAGE_ALARM_DM, "Wattage", DM_ENUM, getMicroAlarm, 0},
  { AMPS_PHASE1_ALARM_DM, "Phase 1 Amps", DM_ENUM, getMicroAlarm, 0},
  { AMPS_PHASE2_ALARM_DM, "Phase 2 Amps", DM_ENUM, getMicroAlarm, 0},
  { AMPS_PHASE3_ALARM_DM, "Phase 3 Amps", DM_ENUM, getMicroAlarm, 0},
  { OUT_OF_PHASE_ALARM_DM, "Out of Phase", DM_ENUM, getMicroAlarm, 0},
  { VOLTAGE_ALARM_DM, "Voltage", DM_ENUM, getMicroAlarm, 0},
  { VOLTAGE_MIN_ALARM_DM, "Low Voltage", DM_ENUM, getMicroAlarm, 0},
  { TRANS_TEMP_ALARM_DM, "Transformer Temp", DM_ENUM, getMicroAlarm, 0},
  { EXT_GND_FLT_ALARM_DM, "Gnd Fault", DM_ENUM, getGfAlarm, 0}
};

MLocal alarmCan	nullCan[] =
{ NULL, NULL
};

MLocal alarmItem miscItems[] =
{ {TIBURON_DM_PREFIX "VME_IBC.WATER_ALARM0", "VME IBC Water Alarm 0",
   DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "VME_IBC.WATER_ALARM1", "VME IBC Water Alarm 1",
   DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "VME_IBC.VME_PSU_STATUS", "VME Power Supply Status = ",
   DM_NAT16, getNat16Alarm, 0xff},
  {TIBURON_DM_PREFIX "VME_IBC.NAV_IF_PSU_STATUS", "Nav Sensor PSU Status = ",
   DM_NAT16, getNat16Alarm, 0x1f},
  {TIBURON_DM_PREFIX "SIO32.LOCAL_GROUND_FAULT_ALARM", "SIO32 Gnd Fault",
   DM_ENUM, getGfAlarm, 0},
  {TIBURON_DM_PREFIX "SIO32.GROUND_FAULT_TEST_STATUS", "SIO32 Gnd Fault Test",
   DM_ENUM, getGfTestAlarm, 0},
  {TIBURON_DM_PREFIX "LIGHTING_IBC.JBOX_WATER_ALARM",
   "Lighting JBox Water Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "LIGHTING_IBC.BALLAST0.LAMP_CURRENT_ALARM",
   "Ballast0 Current Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "LIGHTING_IBC.BALLAST1.LAMP_CURRENT_ALARM",
   "Ballast1 Current Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "LIGHTING_IBC.BALLAST2.LAMP_CURRENT_ALARM",
   "Ballast2 Current Alarm", DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "SENSOR_IBC.JBOX_WATER_ALARM", "Sensor JBox Water Alarm",
   DM_MBOOL, getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "SENSOR.ALTIMETER_RESET_EVENT", "Altimeter Reset",
   DM_EMPTY, getEventAlarm, 0},
  {TIBURON_DM_PREFIX COMP_SYSTEM_LEVEL_ALARM_DM, "Compensation Level",
   DM_ENUM, getMicroAlarm, 0},
  {AUTO_HEADING_ERROR_DM, "Auto Heading Error - Disabled", DM_MBOOL, 
   getMBoolAlarm, 0},
  {AUTO_DEPTH_ERROR_DM, "Auto Depth Error - Disabled", DM_MBOOL,
   getMBoolAlarm, 0},
  {AUTO_ALTITUDE_ERROR_DM, "Auto Altitude Error - Disabled", DM_MBOOL,
   getMBoolAlarm, 0},
  {AUTO_POSITION_ERROR_DM, "Auto Position Error - Disabled", DM_MBOOL,
   getMBoolAlarm, 0},
  {TIBURON_DM_PREFIX "PAN_TILT.PORT.STEPPER_TEMP_ALARM",
   "Port Pan/Tilt Stepper Temp", DM_ENUM, getMicroAlarm, 0},
  {TIBURON_DM_PREFIX "PAN_TILT.STBD.STEPPER_TEMP_ALARM",
   "Stbd Pan/Tilt Stepper Temp", DM_ENUM,  getMicroAlarm, 0},
  {TIBURON_DM_PREFIX "VME_IBC.QUAD_SER0.PSU_STATUS",
   "VME DCon Quad Serial PSU Fault",    DM_NAT16, getNat16Alarm,    1},
  {TIBURON_DM_PREFIX "SENSOR_IBC.QUAD_SER0.PSU_STATUS",
   "Sensor DCon Quad Serial PSU Fault", DM_NAT16, getNat16Alarm, 1},
  {TIBURON_DM_PREFIX "SONAR_IBC.QUAD_SER0.PSU_STATUS",
   "Sonar DCon Quad Serial PSU Fault",  DM_NAT16, getNat16Alarm,  1},
  {CAMERA_IBC_DM_PREFIX "QUAD_SER0.PSU_STATUS",
   "Camera DCon Quad Serial PSU Fault", DM_NAT16, getNat16Alarm, 1},
  {STBD_CAMERA_DM_PREFIX HOUSING_WATER_ALARM_DM,
   "Stbd Camera Housing Water Alarm", DM_MBOOL,  getMBoolAlarm, 0},
  {PORT_CAMERA_DM_PREFIX HOUSING_WATER_ALARM_DM,
   "Port Camera Housing Water Alarm", DM_MBOOL,  getMBoolAlarm, 0},
  {AC_MICRO_DM_PREFIX AC_CAN_WATER_ALARM_DM,
   "AC Can Water Alarm", DM_MBOOL,  getMBoolAlarm, 0},
  {AC_MICRO_DM_PREFIX TETHER_CAN_WATER_ALARM_DM,
   "Tether Can Water Alarm", DM_MBOOL,  getMBoolAlarm, 0},
  {AC_MICRO_DM_PREFIX PRESSURE_ALARM_DM,
   "AC Micro Pressure", DM_ENUM,  getMicroAlarm, 0},
  {AC_MICRO_DM_PREFIX OUTBD_TANK_LEVEL_ALARM_DM,
   "Outboard Tank Coolant Level", DM_ENUM,  getMicroAlarm, 0},
  {AC_MICRO_DM_PREFIX INBD_TANK_LEVEL_ALARM_DM,
   "Inboard Tank Coolant Level", DM_ENUM,  getMicroAlarm, 0}
};


/************************************************************************/
/*		Alarm Descriptors					*/
/************************************************************************/
/* Note that each alarmDesc creates a DM_Group, which can contain a max	*/
/* of 32 DM_Item's.  Therefore, nCanNames * nAlarmItems must be <= 32	*/
/************************************************************************/

Global alarmDesc	thrustAlarms0 =
{ NULLA, thrusterCans0, XtNumber(thrusterCans0), thrusterItems, 
  XtNumber(thrusterItems), 0, 0, FALSE
};

Global alarmDesc	thrustAlarms1 =
{ NULLA, thrusterCans1, XtNumber(thrusterCans1), thrusterItems, 
  XtNumber(thrusterItems), 0, 0, FALSE
};

MLocal alarmDesc	ibcAlarms =
{ NULLA, ibcCans, XtNumber(ibcCans), ibcAlarmItems, XtNumber(ibcAlarmItems),
  0, 0, FALSE
};

MLocal alarmDesc	ibcGfAlarms1 =
{ NULLA, ibcCans, XtNumber(ibcCans), ibcGfAlarmItems1,
  XtNumber(ibcGfAlarmItems1), 0, 0, FALSE
};

MLocal alarmDesc	ibcGfAlarms2 =
{ NULLA, ibcCans, XtNumber(ibcCans), ibcGfAlarmItems2,
  XtNumber(ibcGfAlarmItems2), 0, 0, FALSE
};

MLocal alarmDesc	micro3x5Alarms =
{ NULLA, micro3x5Cans, XtNumber(micro3x5Cans), micro3x5AlarmItems,
  XtNumber(micro3x5AlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	micro3x5GfAlarms =
{ NULLA, micro3x5GfCans, XtNumber(micro3x5GfCans), micro3x5GfAlarmItems,
  XtNumber(micro3x5GfAlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	pwrIbcAlarms =
{ NULLA, pwrIbcCans, XtNumber(pwrIbcCans), pwrIbcAlarmItems,
  XtNumber(pwrIbcAlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	telemAlarms =
{ NULLA, telemCans, XtNumber(telemCans), telemAlarmItems,
  XtNumber(telemAlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	hpsAlarms0 =
{ NULLA, hpSwitch0, XtNumber(hpSwitch0), hpsAlarmItems, XtNumber(hpsAlarmItems),
  0, 0, TRUE
};

MLocal alarmDesc	hpsAlarms1 =
{ NULLA, hpSwitch1, XtNumber(hpSwitch1), hpsAlarmItems, XtNumber(hpsAlarmItems),
  0, 0, TRUE
};

MLocal alarmDesc	lpsVicorAlarms =
{ NULLA, lpsVicor, XtNumber(lpsVicor), lpsVicorAlarmItems, 
  XtNumber(lpsVicorAlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	lps0Alarms =
{ NULLA, lpSwitch0, XtNumber(lpSwitch0), lpsAlarmItems, XtNumber(lpsAlarmItems),
  0, 0, TRUE
};

MLocal alarmDesc	lps1Alarms =
{ NULLA, lpSwitch1, XtNumber(lpSwitch1), lpsAlarmItems, XtNumber(lpsAlarmItems),
  0, 0, TRUE
};

MLocal alarmDesc	panTiltAlarms =
{ NULLA, panTilt, XtNumber(panTilt), panTiltAlarmItems, 
  XtNumber(panTiltAlarmItems), 0, 0, FALSE
};

MLocal alarmDesc	vicorAlarms =
{ NULLA, vicor, XtNumber(vicor), vicorAlarmItems, XtNumber(vicorAlarmItems),
  0, 0, TRUE
};

MLocal alarmDesc	pduMicroAlarms =
{ NULLA, pduMicroCan, XtNumber(pduMicroCan), pduMicroItems,
  XtNumber(pduMicroItems), 0, 0, FALSE
};

MLocal alarmDesc	miscAlarms =
{ NULLA, nullCan, XtNumber(nullCan), miscItems, XtNumber(miscItems), 0, 0, 
  FALSE
};

Global alarmDesc	*alarms[] = 
{ &thrustAlarms0, &thrustAlarms1, &ibcAlarms, &ibcGfAlarms1, &ibcGfAlarms2,
  &micro3x5Alarms, &micro3x5GfAlarms, &pwrIbcAlarms, &telemAlarms, &hpsAlarms0,
  &hpsAlarms1, &lpsVicorAlarms, &lps0Alarms, &lps1Alarms, &panTiltAlarms,
  &vicorAlarms, &pduMicroAlarms, &miscAlarms };

Global Nat32		nalarmDesc = XtNumber(alarms);
