/************************************************************************/
/* Copyright 1992 MBARI							*/
/************************************************************************/
/* $Header: /usr/tiburon/unix/gui/proto/RCS/ibcData.c,v 1.1 1998/01/28 16:17:12 oreilly Exp oreilly $		*/
/* Summary  : Data File For IBC Module of ROV User Interface		*/
/* Filename : ibcData.c						*/
/* Author   : Bob Herlien (rah)						*/
/* Project  : New ROV							*/
/* $Revision: 1.1 $							*/
/* Created  : 11/13/92							*/
/************************************************************************/
/* Modification History:						*/
/* $Log: ibcData.c,v $
 * Revision 1.1  1998/01/28 16:17:12  oreilly
 * Initial revision
 *
 * Revision 2.2  96/05/15  11:15:36  11:15:36  bobh (Bob Herlien)
 * Still supporting proto during final vehicle build
 * 
 * Revision 2.0  95/09/20  14:23:04  14:23:04  hebo (Bob Herlien)
 * Support for final vehicle integration.  AC, PDU micros.
 * 
 * Revision 1.6  93/12/17  15:05:02  15:05:02  hebo (Bob Herlien)
 * December Wet Test
 * 
 * Revision 1.5  93/07/08  18:10:58  18:10:58  hebo (Bob Herlien)
 * Prior to Prototype Phase I testing
 * 
 * Revision 1.4  93/05/27  15:48:04  15:48:04  hebo (Bob Herlien)
 * Data Manager Interface
 * 
 * Revision 1.2  93/01/21  10:34:20  10:34:20  hebo (Bob Herlien)
 * Changes after Level 0
 * 
 * Revision 1.0  92/11/20  12:03:28  12:03:28  hebo (Bob Herlien)
 * Initial revision
 * 
*/
/************************************************************************/

#include <mbari/types.h>
#include <mbari/const.h>
#include <Xm/Xm.h>
#include <X11/Intrinsic.h>
#include "rdmif.h"
#include "rov.h"
#include "alarm.h"
#include "ibc.h"
#include <moogThrusterDM.h>
#include <powerDM.h>
#include <microDm.h>
#include <vmeIbc.h>
#include <ibcDm.h>
#include <powerIbc.h>
#include <cameraDcon.h>
#include <sensorDcon.h>
#include <sonarDcon.h>
#include <lightingDcon.h>
#include <ersDcon.h>
#include <microcmd.h>
#include <gf_5vDm.h>
#include <sio32Micro.h>
#include <sio32Diag.h>
#include <sio32Server.h>
#include <acMicro.h>
#include <pduMicro.h>
#include <telemDiag.h>
#include <panTilt.h>
#include <camera.h>
#include <vbSystem.h>


/********************************/
/*	External Functions	*/
/********************************/

Extern Void	resetButtonCreate( Widget parent, ibcItem *itm );
Extern Void	pushButtonCreate( Widget parent, ibcItem *itm );
Extern Void	toggleButtonCreate( Widget parent, ibcItem *itm );
Extern Void	labelCreate( Widget parent, ibcItem *itm,
			     Int32 lpos, Int32 rpos );
Extern Void	labelGroupCreate( Widget parent, ibcItem *itm,
				  Int32 lpos, Int32 rpos );
Extern Void	labelVarCreate( Widget parent, ibcItem *itm, 
			        Int32 lpos, Int32 rpos );
Extern Void	xmLabelCreate( Widget parent, ibcItem *itm,
			       Int32 lpos, Int32 rpos );
Extern Void	staticLabelCreate( Widget parent, ibcItem *itm,
				   Int32 lpos, Int32 rpos );
Extern Void	textFieldCreate( Widget parent, ibcItem *itm,
				 Int32 lpos, Int32 rpos );
Extern Void	multHdrCreate( Widget parent, ibcItem *itm );
Extern Void	multFieldCreate( Widget parent, ibcItem *itm,
				 Int32 lpos, Int32 rpos );
Extern Void	optionMenuCreate( Widget parent, ibcItem *itm,
				  Int32 lpos, Int32 rpos );
Extern Void	updateAsciiLabel( ibcItem *itm );
Extern Void	updateIntLabel( ibcItem *itm );
Extern Void	updateGfLabel( ibcItem *itm );
Extern Void	updateEnumLabel( ibcItem *itm );
Extern Void	updateFixPtLabel( ibcItem *itm );
Extern Void	updateFltLabel( ibcItem *itm );
Extern Void	updateAsciiTextField( ibcItem *itm );
Extern Void	updateNumTextField( ibcItem *itm );
Extern Void	updateMultIntTextField( ibcItem *itm );
Extern Void	updateFixPtTextField( ibcItem *itm );
Extern Void	updateMotorToggleButton( ibcItem *itm );
Extern Void	updateMBoolToggleButton( ibcItem *itm );
Extern Void	updateOptionMenu( ibcItem *itm );
Extern Void	updateIbcBoards( ibcItem *itm );
Extern Void	modifyTextField( Widget w, ibcItem *itm, 
			XmTextVerifyCallbackStruct *tvp );
Extern Void	modifyIntTextField( Widget w, ibcItem *itm, 
				    XmTextVerifyCallbackStruct *tvp );
Extern Void	acceptTextField( Widget w, ibcItem *itm, 
				XmAnyCallbackStruct *cbp );
Extern Void	acceptIntTextField( Widget w, ibcItem *itm, 
				    XmAnyCallbackStruct *cbp );
Extern Void	acceptFlt32TextField( Widget w, ibcItem *itm, 
				      XmAnyCallbackStruct *cbp );
Extern Void	acceptMultInt16TextField( Widget w, ibcItem *itm, 
					  XmAnyCallbackStruct *cbp );
Extern Void	acceptFixPtTextField( Widget w, ibcItem *itm, 
				      XmAnyCallbackStruct *cbp );
Extern Void	ibcWriteEvent( Widget w, ibcItem *itm, 
			       XmAnyCallbackStruct *cbp );
Extern Void	activateButton( Widget w, ibcItem *itm, 
			       XmAnyCallbackStruct *cbp );
Extern Void	activateMotorToggleButton( Widget w, ibcItem *itm, 
					   XmAnyCallbackStruct *cbp );
Extern Void	activateMBoolToggleButton( Widget w, ibcItem *itm, 
					   XmAnyCallbackStruct *cbp );
Extern Void	activateOptionMenu( Widget w, ibcItem *itm, 
				    XmAnyCallbackStruct *cbp );
Extern Void	ibcSelect( Select *sp );
Extern Void	ibcUnselect( Select *sp );


/********************************/
/*	External Data		*/
/********************************/

Extern AppData		appdata;	/* Application-wide resources	*/
Extern char		*ibcAlarmStrings[];
Extern char		*gfAlarmStrings[];
Extern char		*gfTestStrings[];
Extern char		*gf5vTestStrings[];
Extern char		*motorStatus[];
Extern Widget		thrustButtonForm, ibcButtonForm, micro3x5ButtonForm;


/********************************/
/*	Global Data		*/
/********************************/

Global SelectStatus	dconSts;
Global SelectStatus	ibcSts;


/********************************/
/*	Module Local Data	*/
/********************************/

MLocal char		*enableDisable[] = { "Disabled", "Enabled" };
MLocal char		*passFail[] = { "Pass", "Fail" };
MLocal char		*onOff[] = { "Off", "On" };
MLocal char		*resetStrings[] = 
{ "Reset\nMicro", "This will reset the\nmicrocontroller.\nAre you sure?" };

MLocal char		*nvRamStrings[] = 
{ "Write to\nNVRAM", "Really write to\nmicro's NVRAM?"};

MLocal char		*rpmCalString = "Calibrate\nVelocity";

MLocal char		*gfSelftestString = "Start\nSelfTest";

MLocal char		*panTiltInitStrings[] = 
{ "Initialize\nController", "Really reinitialize Pan/Tilt Controller?" };

MLocal char		*panTiltCalibrateString = "Calibrate";

MLocal char		*panTiltResetStrings[] = 
{ "Reset\nPan/Tilt\nCtrlr",
 "This will reset the\nPan/Tilt controller.\nAre you sure?" };

MLocal char		separatorString[] = 
"============================================================";

MLocal ibcMenuItem	controlModes[] = 
{ {"Current", 0, NULLW}, {"Torque", 1, NULLW},
  {"Velocity", 2, NULLW}, {"Linearized", 3, NULLW} };

MLocal ibcMenuItem	vmeGfEnable[] = 
{ {"Disabled", 0, NULLW}, {"Enabled", -1, NULLW} };

MLocal ibcMenuItem	pwrAGfEnable[] = 
{ {"Disabled", 0, NULLW}, {"Enabled", -1, NULLW} };

MLocal ibcMenuItem	pwrBGfEnable[] = 
{ {"Disabled", 0, NULLW}, {"Enabled", -1, NULLW} };

MLocal ibcMenuItem	miscGfEnable[] = 
{ {"Disabled", 0, NULLW}, {"Enabled", -1, NULLW} };

MLocal Widget	gfCurrentLabels[] = {NULLW, NULLW, NULLW, NULLW};


/****************************************/
/*	Global IBC Item Structs		*/
/****************************************/

MLocal ibcItem	allMicroItems[] =
{ {"Micro ID String", MICRO_IDENT_DM, DM_CHAR, MICRO_ID_LEN, labelVarCreate,
    updateAsciiLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Software Revision String", SOFTWARE_REV_DM, DM_CHAR, SOFTWARE_REV_LEN,
    labelVarCreate, updateAsciiLabel, NULLF, NULLF, UP_CONSUME, 0, 0,
    NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"RAM Test", RAM_TEST_STATUS_DM, DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(passFail),
    0, passFail, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Micro Serial Number", MICRO_SERIAL_NO_DM, DM_CHAR, MICRO_SERNO_LEN,
    textFieldCreate, updateAsciiTextField, acceptTextField,
    modifyTextField, UP_CONSUME, MICRO_SERNO_LEN, 0, NULL, 0, NULLW,
    NULLW, NULLW, 0, -1}
};

MLocal ibcItem	genericIbcItems[] =
{ {NULL, MICRO_RESET_CMD_DM, DM_EMPTY, 1, resetButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 10, 25, resetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Humidity", HUMIDITY_DM, DM_NAT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
#if FALSE
  {"Humidity Alarm", HUMIDITY_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, XtNumber(onOff), 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
#else
  {"Humidity Alarm", HUMIDITY_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
#endif
  {"Humidity Warning Threshhold", HUMIDITY_WARN_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Humidity Alarm Threshhold", HUMIDITY_ALARM_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Boards", IBC_CARD_CONFIG_DM, DM_NAT16, 13, xmLabelCreate, updateIbcBoards,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0}
};

MLocal ibcItem	gfIbcItems[] =
{ {"Ground Fault", GF_5V_ENABLE_DM, DM_MBOOL, 1, optionMenuCreate,
    updateOptionMenu, activateOptionMenu, NULLF, UP_CONSUME,
    XtNumber(vmeGfEnable), 0, vmeGfEnable, 0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, GF_5V_SELFTEST_CMD_DM, DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_NONE, 5, 20, &gfSelftestString, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Gnd Fault Offset Current", GF_5V_OFFSET_CURRENT_DM, DM_INT16, 1,
    labelCreate, updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Gnd Fault Self Test", GF_5V_SELFTEST_STATUS_DM, DM_ENUM, 1, labelVarCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_5V_TEST_ALARMS,
    0, gf5vTestStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Gnd Fault Temperature", GF_5V_TEMPERATURE_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, 
    NULLW, NULLW, 0, -1},
  {"Gnd Fault Temp Alarm", GF_5V_TEMP_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  { "GF Temp Warning Thresh", GF_5V_TEMP_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  { "GF Temp Alarm Thresh", GF_5V_TEMP_ALARM_THRESH_DM, DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Vicor Voltage", GF_5V_VICOR_VOLTAGE_DM, DM_INT16, 1, labelCreate,
    updateFixPtLabel, NULLF, NULLF, UP_CONSUME, 1, 1000, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"GF Vicor Voltage Alarm", GF_5V_VICOR_VOLTAGE_ALARM_DM, DM_ENUM, 1,
    labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 
    NUM_IBC_ALARMS, 0, ibcAlarmStrings, 0, NULLW, NULLW,
    NULLW, 0, -1},
  { "GF Voltage Warning Thresh", GF_5V_VICOR_VOLT_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1},
  { "GF Voltage Alarm Thresh", GF_5V_VICOR_VOLT_ALARM_THRESH_DM, DM_INT16, 1,
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Chan 0 Alarm", GF_5V_CHAN0_GF_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS, 
    0, gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Channel 0 Fault Current", GF_5V_CHAN0_FAULT_CURRENT_DM, DM_INT16, 1,
    labelGroupCreate, updateGfLabel, NULLF, NULLF, UP_CONSUME, 0, 0,
    (XtPointer)gfCurrentLabels, 0, NULLW, NULLW, NULLW, 0, -1},
  { "Channel 0 Charge Time", GF_5V_CHAN0_CHARGE_TIME_DM, DM_INT32, 1, 
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Chan 1 Alarm", GF_5V_CHAN1_GF_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS, 
    0, gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Channel 1 Fault Current", GF_5V_CHAN1_FAULT_CURRENT_DM, DM_INT16, 1,
    labelGroupCreate, updateGfLabel, NULLF, NULLF, UP_CONSUME, 1, 0,
    (XtPointer)gfCurrentLabels, 0, NULLW, NULLW, NULLW, 0, -1},
  { "Channel 1 Charge Time", GF_5V_CHAN1_CHARGE_TIME_DM, DM_INT32, 1, 
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Chan 2 Alarm", GF_5V_CHAN2_GF_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS, 
    0, gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Channel 2 Fault Current", GF_5V_CHAN2_FAULT_CURRENT_DM, DM_INT16, 1,
    labelGroupCreate, updateGfLabel, NULLF, NULLF, UP_CONSUME, 2, 0,
    (XtPointer)gfCurrentLabels, 0, NULLW, NULLW, NULLW, 0, -1},
  { "Channel 2 Charge Time", GF_5V_CHAN2_CHARGE_TIME_DM, DM_INT32, 1, 
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Chan 3 Alarm", GF_5V_CHAN3_GF_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS, 
    0, gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Channel 3 Fault Current", GF_5V_CHAN3_FAULT_CURRENT_DM, DM_INT16, 1,
    labelGroupCreate, updateGfLabel, NULLF, NULLF, UP_CONSUME, 3, 0,
    (XtPointer)gfCurrentLabels, 0, NULLW, NULLW, NULLW, 0, -1},
  { "Channel 3 Charge Time", GF_5V_CHAN3_CHARGE_TIME_DM, DM_INT32, 1, 
    textFieldCreate, updateFixPtTextField, acceptFixPtTextField, 
    modifyIntTextField, UP_CONSUME, 8, 1, (XtPointer)1000, 0, NULLW, NULLW,
    NULLW, 0, -1}
};

MLocal ibcItem	generic3x5Items[] =
{ {NULL, MICRO_RESET_CMD_DM, DM_EMPTY, 1, resetButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 10, 25, resetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Temperature", MICRO_TEMP_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Temperature Alarm", TEMPERATURE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Temp Warning Threshhold", TEMP_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Temp Alarm Threshhold", TEMP_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Humidity", HUMIDITY_DM, DM_NAT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Humidity Alarm", HUMIDITY_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Humidity Warning Threshhold", HUMIDITY_WARN_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Humidity Alarm Threshhold", HUMIDITY_ALARM_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
};

MLocal ibcItem	micro3x5GfItems[] =
{ {NULL, GND_FLT_TEST_DM, DM_MBOOL, 1, toggleButtonCreate,
    updateMBoolToggleButton, activateMBoolToggleButton, NULLF, UP_CONSUME,
    10, 30, "GF Test", 0, NULLW, NULLW, NULLW, 0, -1},
  {"Ground Fault Alarm", LOCAL_GND_FLT_ALARM_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS,
    0, gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Ground Fault Current", LOCAL_GND_FLT_CURRENT_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Gnd Fault Test Status", GND_FLT_TEST_STATUS_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_TEST_ALARMS,
    0, gfTestStrings, 0, NULLW, NULLW, NULLW, 0, -1},
};

MLocal ibcItem	thrustItems[] =
{ {NULL, MICRO_RESET_CMD_DM, DM_EMPTY, 1, resetButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 10, 25, resetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, MICRO_WRITE_NVRAM_DM, DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 30, 45, nvRamStrings, 0, 
    NULLW, NULLW, NULLW, 0, -1},
  {NULL, MOTOR_ENABLE_STATUS_DM, DM_ENUM, 1, toggleButtonCreate,
    updateMotorToggleButton, activateMotorToggleButton, NULLF, UP_CONSUME,
    50, 70, "Enable", 0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, MOTOR_RPM_CAL_DM, DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_NONE, 75, 90, &rpmCalString, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Motor Velocity (RPM)", MOTOR_VELOCITY_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Commanded Thrust", MOTOR_CMD_THRUST_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Commanded Power", MOTOR_CMD_POWER_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Motor Temperature", TEMPERATURE_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"NV RAM Date/Time", MICRO_NVRAM_DATE_DM, DM_CHAR, 22, labelCreate, 
    updateAsciiLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, 
    NULLW, NULLW, NULLW, 0, -1},
  {"NV RAM Write Cycles", MICRO_NVRAM_CYCLES_DM, DM_NAT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Regen Limit", MOTOR_REGEN_LIMIT_MODE_DM, DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME,  XtNumber(enableDisable), 
    0, enableDisable, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Motor Error Status", MOTOR_STATUS_DM, DM_ENUM, 1, labelVarCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_MOTOR_STATUS,
    0, motorStatus, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Water Alarm", WATER_ALARM_DM, DM_MBOOL, 1, labelCreate, updateEnumLabel,
    NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0, onOff, 0, NULLW, NULLW, 
    NULLW, 0, -1},
  {"Temperature Alarm", TEMPERATURE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Alarm Temperature", TEMP_ALARM_THRESH_DM, DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, 
    UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Motor Serial Number", MOTOR_SERIAL_NO_DM, DM_CHAR, 10, textFieldCreate,
    updateAsciiTextField, acceptTextField, modifyTextField, UP_CONSUME,
    10, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Motor Control Mode", MOTOR_CTRL_MODE_DM, DM_ENUM, 1, optionMenuCreate,
    updateOptionMenu, activateOptionMenu, NULLF, UP_CONSUME,
    XtNumber(controlModes), 0, controlModes, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Current Mode Gain", MOTOR_CURRENT_GAIN_DM, DM_INT16, 1, textFieldCreate, 
    updateNumTextField, acceptIntTextField, modifyIntTextField,
    UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Torque Mode Gain", MOTOR_TORQUE_GAIN_DM, DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField,
    UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Torque Offset", MOTOR_TORQUE_OFFSET_DM, DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField,
    UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Velocity Mode Gains", MOTOR_VELOCITY_GAINS_DM, DM_INT16, 3, multHdrCreate,
    updateMultIntTextField, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Proportional", NULL, DM_INT16, 0, multFieldCreate, NULLF,
    acceptMultInt16TextField, modifyIntTextField, UP_NONE, 6, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Derivative", NULL, DM_INT16, 0, multFieldCreate, NULLF,
    acceptMultInt16TextField, modifyIntTextField, UP_NONE, 6, 1, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Power", NULL, DM_INT16, 0, multFieldCreate, NULLF,
    acceptMultInt16TextField, modifyIntTextField, UP_NONE, 6, 2, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Linear Mode Gains", MOTOR_LINEARIZED_GAINS_DM, DM_INT16, 2, multHdrCreate,
    updateMultIntTextField, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Thrust", NULL, DM_INT16, 2, multFieldCreate, NULLF,
    acceptMultInt16TextField, modifyIntTextField, UP_NONE, 6, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Velocity", NULL, DM_INT16, 2, multFieldCreate, NULLF,
    acceptMultInt16TextField, modifyIntTextField, UP_NONE, 6, 1, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Motor Model Parm K4", MOTOR_MODEL_PARAM_K4_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, 
    NULLW, 0, -1},
  {"Regen Torque Limit", MOTOR_REGEN_LIMIT_DM, DM_NAT16, 1, textFieldCreate, 
    updateNumTextField, acceptIntTextField, modifyIntTextField,
    UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0, -1}
};

MLocal ibcItem	vmeIbcItems[] =
{ {"Water Alarm 0", WATER_ALARM0_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Water Alarm 1", WATER_ALARM1_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Water Alarm Threshhold", WATER_ALARM_THRESH_DM, DM_NAT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW,
    0, -1},
  {"VME PSU Status", "VME_PSU_STATUS", DM_NAT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Nav Sensor PSU Status", "NAV_IF_PSU_STATUS", DM_NAT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1}
};

MLocal ibcItem	pwrAIbcItems[] =
{ {"Water Alarm", HOUSING_WATER_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Water Alarm Threshhold", WATER_ALARM_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Fan Speed", FAN_SPEED_DM, DM_INT16, 1, labelCreate, updateIntLabel, 
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0}
};


MLocal ibcItem	sensorIbcItems[] =
{ {"Housing Water Alarm", HOUSING_WATER_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"JBox Water Alarm", JBOX_WATER_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Water Alarm Threshhold", WATER_ALARM_THRESH_DM, DM_NAT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW,
    0, -1}
};

MLocal ibcItem	acMicroItems[] =
{ {"Pressure", PRESSURE_DM, DM_FLT32, 1, labelCreate, updateFltLabel,
    NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Pressure Alarm", PRESSURE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Pressure Warning Threshhold", PRESSURE_WARN_THRESH_DM, DM_FLT32, 1, 
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Pressure Alarm Threshhold", PRESSURE_ALARM_THRESH_DM, DM_FLT32, 1, 
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"AC Can Water Alarm", AC_CAN_WATER_ALARM_DM, DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0, onOff, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Tether Can Water Alarm", TETHER_CAN_WATER_ALARM_DM, DM_MBOOL, 1,
    labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Outboard Tank Coolant Level", OUTBD_TANK_LEVEL_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0},
  {"Inboard Tank Coolant Level", INBD_TANK_LEVEL_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0},
  {"Outboard Sump Coolant Level", OUTBD_SUMP_LEVEL_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0},
  {"Inboard Sump Coolant Level", INBD_SUMP_LEVEL_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0},
  {"Outboard Tank Coolant Alarm", OUTBD_TANK_LEVEL_ALARM_DM, DM_ENUM, 1,
    labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    NUM_IBC_ALARMS, 0, ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Outboard Tank Alarm Threshhold", OUTBD_TANK_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Inboard Tank Coolant Alarm", INBD_TANK_LEVEL_ALARM_DM, DM_ENUM, 1,
    labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    NUM_IBC_ALARMS, 0, ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Inboard Tank Alarm Threshhold", INBD_TANK_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0}
};

MLocal ibcItem	pduMicroItems[] =
{ {NULL, GND_FLT_TEST_DM, DM_MBOOL, 1, toggleButtonCreate,
    updateMBoolToggleButton, activateMBoolToggleButton, NULLF, UP_CONSUME,
    10, 30, "GF Test", 0, NULLW, NULLW, NULLW, 0, -1},
  {"Ground Fault Current", EXT_GND_FLT_CURRENT_DM, DM_INT16, 1, labelCreate, 
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Ground Fault Alarm", EXT_GND_FLT_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_ALARMS, 0,
    gfAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Gnd Fault Test Status", GND_FLT_TEST_STATUS_DM, DM_ENUM, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_GF_TEST_ALARMS,
    0, gfTestStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Wattage", WATTAGE_DM, DM_FLT32, 1, labelCreate, updateFltLabel,
    NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Wattage Alarm", WATTAGE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Wattage Warning Threshhold", WATTAGE_WARN_THRESH_DM, DM_FLT32, 1, 
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Wattage Alarm Threshhold", WATTAGE_ALARM_THRESH_DM, DM_FLT32, 1, 
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Voltage", VOLTAGE_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Voltage Alarm", VOLTAGE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Voltage Warning Threshhold", VOLTAGE_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Voltage Alarm Threshhold", VOLTAGE_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Low Voltage Alarm", VOLTAGE_MIN_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Low Voltage Warning Threshhold", VOLTAGE_MIN_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Low Voltage Alarm Threshhold", VOLTAGE_MIN_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Transformer Temp", TRANS_TEMP_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Transformer Temp Alarm", TRANS_TEMP_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Transformer Temp Warning Threshhold", TRANS_TEMP_WARN_THRESH_DM, DM_INT16,
    1, textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Transformer Temp Alarm Threshhold", TRANS_TEMP_ALARM_THRESH_DM, DM_INT16,
    1, textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},

  {"Phase 3 Amps", AMPS_PHASE3_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 3 Amperage Alarm", AMPS_PHASE3_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Phase 3 Amp Warning Threshhold", AMPS_PHASE3_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 3 Alarm Threshhold", AMPS_PHASE3_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 2 Amps", AMPS_PHASE2_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 2 Amperage Alarm", AMPS_PHASE2_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Phase 2 Amp Warning Threshhold", AMPS_PHASE2_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 2 Alarm Threshhold", AMPS_PHASE2_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 1 Amps", AMPS_PHASE1_DM, DM_INT16, 1, labelCreate, updateIntLabel,
    NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 1 Amperage Alarm", AMPS_PHASE1_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Phase 1 Amp Warning Threshhold", AMPS_PHASE1_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase 1 Alarm Threshhold", AMPS_PHASE1_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Phase Shift Alarm", OUT_OF_PHASE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1}
};

MLocal ibcItem	telemItems[] =
{ {"PSU Status", TELEM_PSU_STATUS_DM, DM_NAT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Bit Error Rate", BIT_ERROR_RATE_SHORT_DM, DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, -1, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Long Term Bit Error Rate", BIT_ERROR_RATE_LONG_TERM_DM, DM_FLT32, 1,
    labelCreate, updateFltLabel, NULLF, NULLF, UP_CONSUME, -1, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0, -1},
  {"Bit Error Rate Alarm", BIT_ERROR_RATE_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"FDDI Status Alarm", TELEM_FDDI_STATUS_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Laser Status Alarm", TELEM_LASER_STATUS_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Receive Power Alarm", TELEM_RECV_PWR_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Sub Mux Board Alarm", TELEM_SUB_MUX_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Use DM Screen for Serial Statistics", NULL, DM_EMPTY, 0, NULLF, NULLF,
    NULLF, NULLF, UP_NONE, 0, 0, NULL, 0, NULLW, NULLW, NULLW, 0}
};

MLocal ibcItem	panTiltItems[] =
{ {"Stepper Temperature", STEPPER_TEMP_DM, DM_INT16, 1, labelCreate,
    updateIntLabel, NULLF, NULLF, UP_CONSUME, 0, 0, NULL, 0,
    NULLW, NULLW, NULLW, 0},
  {"Stepper Temp Alarm", STEPPER_TEMP_ALARM_DM, DM_ENUM, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, NUM_IBC_ALARMS, 0,
    ibcAlarmStrings, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Stepper Temp Warning Threshhold", STEPPER_TEMP_WARN_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Stepper Temp Alarm Threshhold", STEPPER_TEMP_ALARM_THRESH_DM, DM_INT16, 1, 
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},

  {"Light Pan Controller", NULL, DM_EMPTY, 0, staticLabelCreate, NULLF,
    NULLF, NULLF, UP_NONE, 0, 0, separatorString, 0, NULLW, NULLW, NULLW, 0},
  {NULL, "LIGHT.PAN.INITIALIZE_CTRL", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 5, 20, &panTiltInitStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.PAN.CALIBRATE", DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_CONSUME, 25, 40, &panTiltCalibrateString,
    0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.PAN.WRITE_CTRL_NV_RAM", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 45, 60, &nvRamStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.PAN.RESET_CONTROLLER", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 65, 80, &panTiltResetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Controller Fault", "LIGHT.PAN.CONTROLLER_FAULT", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, XtNumber(onOff), 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Delta Position Alarm", "LIGHT.PAN.DELTA_POSITION_ALARM", DM_MBOOL,
    1, labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    XtNumber(onOff), 0, onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Analog Position", "LIGHT.PAN.ANALOG_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Stepper Position", "LIGHT.PAN.STEPPER_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Delta", "LIGHT.PAN.POSITION_DELTA", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Command", "LIGHT.PAN.POSITION_CMD", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Velocity Command", "LIGHT.PAN.VELOCITY_CMD", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Hold Current", "LIGHT.PAN.HOLD_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Run Current", "LIGHT.PAN.RUN_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Settling Time", "LIGHT.PAN.SETTLING_TIME", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Acceleration Slope", "LIGHT.PAN.ACCEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Deceleration Slope", "LIGHT.PAN.DECEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Initial Velocity", "LIGHT.PAN.INITIAL_VELOCITY", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Slew Velocity", "LIGHT.PAN.SLEW_VELOCITY", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Position", "LIGHT.PAN.CW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CCW Limit Position", "LIGHT.PAN.CCW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Switch", "LIGHT.PAN.CW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"CCW Limit Switch", "LIGHT.PAN.CCW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"Controller String", "LIGHT.PAN.CONTROLLER_STRING", DM_CHAR, MICRO_ID_LEN,
    textFieldCreate, updateAsciiTextField, acceptTextField,
    modifyTextField, UP_CONSUME, CTRL_STRING_LEN, 0, NULL, 0, NULLW,
    NULLW, NULLW, 0, -1},

  {"Light Tilt Controller", NULL, DM_EMPTY, 0, staticLabelCreate, NULLF,
    NULLF, NULLF, UP_NONE, 0, 0, separatorString, 0, NULLW, NULLW, NULLW, 0},
  {NULL, "LIGHT.TILT.INITIALIZE_CTRL", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 5, 20, &panTiltInitStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.TILT.CALIBRATE", DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_CONSUME, 25, 40, &panTiltCalibrateString,
    0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.TILT.WRITE_CTRL_NV_RAM", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 45, 60, &nvRamStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "LIGHT.TILT.RESET_CONTROLLER", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 65, 80, &panTiltResetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Controller Fault", "LIGHT.TILT.CONTROLLER_FAULT", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, XtNumber(onOff), 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Delta Position Alarm", "LIGHT.TILT.DELTA_POSITION_ALARM", DM_MBOOL,
    1, labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    XtNumber(onOff), 0, onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Analog Position", "LIGHT.TILT.ANALOG_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Stepper Position", "LIGHT.TILT.STEPPER_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Delta", "LIGHT.TILT.POSITION_DELTA", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Command", "LIGHT.TILT.POSITION_CMD", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Velocity Command", "LIGHT.TILT.VELOCITY_CMD", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Hold Current", "LIGHT.TILT.HOLD_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Run Current", "LIGHT.TILT.RUN_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Settling Time", "LIGHT.TILT.SETTLING_TIME", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Acceleration Slope", "LIGHT.TILT.ACCEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Deceleration Slope", "LIGHT.TILT.DECEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Initial Velocity", "LIGHT.TILT.INITIAL_VELOCITY", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Slew Velocity", "LIGHT.TILT.SLEW_VELOCITY", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Position", "LIGHT.TILT.CW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CCW Limit Position", "LIGHT.TILT.CCW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Switch", "LIGHT.TILT.CW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"CCW Limit Switch", "LIGHT.TILT.CCW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"Controller String", "LIGHT.TILT.CONTROLLER_STRING", DM_CHAR, MICRO_ID_LEN,
    textFieldCreate, updateAsciiTextField, acceptTextField,
    modifyTextField, UP_CONSUME, CTRL_STRING_LEN, 0, NULL, 0, NULLW,
    NULLW, NULLW, 0, -1},

  {"Camera Pan Controller", NULL, DM_EMPTY, 0, staticLabelCreate, NULLF,
    NULLF, NULLF, UP_NONE, 0, 0, separatorString, 0, NULLW, NULLW, NULLW, 0},
  {NULL, "CAMERA.PAN.INITIALIZE_CTRL", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 5, 20, &panTiltInitStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.PAN.CALIBRATE", DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_CONSUME, 25, 40, &panTiltCalibrateString,
    0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.PAN.WRITE_CTRL_NV_RAM", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 45, 60, &nvRamStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.PAN.RESET_CONTROLLER", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 65, 80, &panTiltResetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Controller Fault", "CAMERA.PAN.CONTROLLER_FAULT", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, XtNumber(onOff), 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Delta Position Alarm", "CAMERA.PAN.DELTA_POSITION_ALARM", DM_MBOOL,
    1, labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    XtNumber(onOff), 0, onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Analog Position", "CAMERA.PAN.ANALOG_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Stepper Position", "CAMERA.PAN.STEPPER_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Delta", "CAMERA.PAN.POSITION_DELTA", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Command", "CAMERA.PAN.POSITION_CMD", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Velocity Command", "CAMERA.PAN.VELOCITY_CMD", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Hold Current", "CAMERA.PAN.HOLD_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Run Current", "CAMERA.PAN.RUN_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Settling Time", "CAMERA.PAN.SETTLING_TIME", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Acceleration Slope", "CAMERA.PAN.ACCEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Deceleration Slope", "CAMERA.PAN.DECEL_SLOPE", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Initial Velocity", "CAMERA.PAN.INITIAL_VELOCITY", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Slew Velocity", "CAMERA.PAN.SLEW_VELOCITY", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Position", "CAMERA.PAN.CW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CCW Limit Position", "CAMERA.PAN.CCW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Switch", "CAMERA.PAN.CW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"CCW Limit Switch", "CAMERA.PAN.CCW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"Controller String", "CAMERA.PAN.CONTROLLER_STRING", DM_CHAR, MICRO_ID_LEN,
    textFieldCreate, updateAsciiTextField, acceptTextField,
    modifyTextField, UP_CONSUME, CTRL_STRING_LEN, 0, NULL, 0, NULLW,
    NULLW, NULLW, 0, -1},

  {"Camera Tilt Controller", NULL, DM_EMPTY, 0, staticLabelCreate, NULLF,
    NULLF, NULLF, UP_NONE, 0, 0, separatorString, 0, NULLW, NULLW, NULLW, 0},
  {NULL, "CAMERA.TILT.INITIALIZE_CTRL", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 5, 20, &panTiltInitStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.TILT.CALIBRATE", DM_EMPTY, 1, pushButtonCreate, NULLF,
    ibcWriteEvent, NULLF, UP_CONSUME, 25, 40, &panTiltCalibrateString,
    0, NULLW, NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.TILT.WRITE_CTRL_NV_RAM", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 45, 60, &nvRamStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {NULL, "CAMERA.TILT.RESET_CONTROLLER", DM_EMPTY, 1, pushButtonCreate, NULLF,
    activateButton, NULLF, UP_NONE, 65, 80, &panTiltResetStrings, 0, NULLW,
    NULLW, NULLW, 0, -1},
  {"Controller Fault", "CAMERA.TILT.CONTROLLER_FAULT", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, XtNumber(onOff), 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Delta Position Alarm", "CAMERA.TILT.DELTA_POSITION_ALARM", DM_MBOOL,
    1, labelCreate, updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME,
    XtNumber(onOff), 0, onOff, 0, NULLW, NULLW, NULLW, 0, -1},
  {"Analog Position", "CAMERA.TILT.ANALOG_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Stepper Position", "CAMERA.TILT.STEPPER_POSITION", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Delta", "CAMERA.TILT.POSITION_DELTA", DM_FLT32, 1, labelCreate,
    updateFltLabel, NULLF, NULLF, UP_CONSUME, 2, 0, NULL, 0, NULLW, NULLW,
    NULLW, 0, -1},
  {"Position Command", "CAMERA.TILT.POSITION_CMD", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Velocity Command", "CAMERA.TILT.VELOCITY_CMD", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Hold Current", "CAMERA.TILT.HOLD_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Run Current", "CAMERA.TILT.RUN_CURRENT", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Settling Time", "CAMERA.TILT.SETTLING_TIME", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Acceleration Slope", "CAMERA.TILT.ACCEL_SLOPE", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME,  6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Deceleration Slope", "CAMERA.TILT.DECEL_SLOPE", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Initial Velocity", "CAMERA.TILT.INITIAL_VELOCITY", DM_INT16, 1,
    textFieldCreate, updateNumTextField, acceptIntTextField,
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"Slew Velocity", "CAMERA.TILT.SLEW_VELOCITY", DM_INT16, 1, textFieldCreate,
    updateNumTextField, acceptIntTextField, modifyIntTextField, UP_CONSUME,
    6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Position", "CAMERA.TILT.CW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CCW Limit Position", "CAMERA.TILT.CCW_LIMIT_POSITION", DM_FLT32, 1,
    textFieldCreate, updateNumTextField, acceptFlt32TextField, 
    modifyIntTextField, UP_CONSUME, 6, 0, NULL, 0, NULLW, NULLW, NULLW, 0},
  {"CW Limit Switch", "CAMERA.TILT.CW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"CCW Limit Switch", "CAMERA.TILT.CCW_LIMIT_SWITCH", DM_MBOOL, 1, labelCreate,
    updateEnumLabel, NULLF, NULLF, UP_CONSUME, XtNumber(onOff), 0, onOff,
    0, NULLW, NULLW, NULLW, 0, -1},
  {"Controller String", "CAMERA.TILT.CONTROLLER_STRING", DM_CHAR, MICRO_ID_LEN,
    textFieldCreate, updateAsciiTextField, acceptTextField,
    modifyTextField, UP_CONSUME, CTRL_STRING_LEN, 0, NULL, 0, NULLW,
    NULLW, NULLW, 0, -1}
};

MLocal ibcItem	camera3x5Items[] =
{ {"Housing Water Alarm", HOUSING_WATER_ALARM_DM, DM_MBOOL, 1, labelCreate, 
    updateEnumLabel, NULLF, NULLF, UP_ALREADY_CONSUME, 2, 0,
    onOff, 0, NULLW, NULLW, NULLW, 0, -1}
};

MLocal ibcItem	unimplIbcItems[] =
{ {"Not Implemented", NULL, DM_EMPTY, 0, NULLF, NULLF, NULLF, NULLF, UP_NONE,
    0, 0, NULL, 0, NULLW, NULLW, NULLW, 0}
};

MLocal ibcItemSet  allMicroItemSet = 
{ allMicroItems, XtNumber(allMicroItems), NULLW };

MLocal ibcItemSet  genericIbcItemSet = 
{ genericIbcItems, XtNumber(genericIbcItems), NULLW };

MLocal ibcItemSet  gfIbcItemSet = 
{ gfIbcItems, XtNumber(gfIbcItems), NULLW };

MLocal ibcItemSet  generic3x5ItemSet = 
{ generic3x5Items, XtNumber(generic3x5Items), NULLW };

MLocal ibcItemSet  micro3x5GfItemSet = 
{ micro3x5GfItems, XtNumber(micro3x5GfItems), NULLW };

MLocal ibcItemSet  thrustItemSet = 
{ thrustItems, XtNumber(thrustItems), NULLW };

MLocal ibcItemSet  vmeIbcItemSet = 
{ vmeIbcItems, XtNumber(vmeIbcItems), NULLW };

MLocal ibcItemSet  pwrAIbcItemSet = 
{ pwrAIbcItems, XtNumber(pwrAIbcItems), NULLW };

MLocal ibcItemSet  sensorIbcItemSet = 
{ sensorIbcItems, XtNumber(sensorIbcItems), NULLW };

MLocal ibcItemSet  acMicroItemSet = 
{ acMicroItems, XtNumber(acMicroItems), NULLW };

MLocal ibcItemSet  pduMicroItemSet = 
{ pduMicroItems, XtNumber(pduMicroItems), NULLW };

MLocal ibcItemSet  telemItemSet = 
{ telemItems, XtNumber(telemItems), NULLW };

MLocal ibcItemSet  panTiltItemSet = 
{ panTiltItems, XtNumber(panTiltItems), NULLW };

MLocal ibcItemSet  camera3x5ItemSet = 
{ camera3x5Items, XtNumber(camera3x5Items), NULLW };

MLocal ibcItemSet  unimplItemSet = 
{ unimplIbcItems, XtNumber(unimplIbcItems), NULLW };

Global ibcItemSet *ibcSets[] =
{ &allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, &generic3x5ItemSet,
  &micro3x5GfItemSet, &thrustItemSet, &vmeIbcItemSet, &pwrAIbcItemSet,
  &sensorIbcItemSet, &acMicroItemSet, &pduMicroItemSet,
  &telemItemSet, &panTiltItemSet, &camera3x5ItemSet, &unimplItemSet, NULLIS
};

MLocal ibcItemDesc  thrustItemDesc = 
{ {&allMicroItemSet, &thrustItemSet, NULLIS, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  vmeIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &vmeIbcItemSet, &gfIbcItemSet},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  pwrAIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &pwrAIbcItemSet, &gfIbcItemSet},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  pwrBIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  sensorIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &sensorIbcItemSet, &gfIbcItemSet},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  lightIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  cameraIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  sonarIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  ersIbcItemDesc = 
{ {&allMicroItemSet, &genericIbcItemSet, &gfIbcItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  acMicroItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &acMicroItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  pduMicroItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &pduMicroItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  sio32ItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &micro3x5GfItemSet, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  telemItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &micro3x5GfItemSet, &telemItemSet },
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  panTiltItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &micro3x5GfItemSet, &panTiltItemSet },
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  camera3x5ItemDesc = 
{ {&allMicroItemSet, &generic3x5ItemSet, &camera3x5ItemSet, NULLIS },
  &appdata.ibc_update, 0, 0, 0 };

MLocal ibcItemDesc  unimplItemDesc = 
{ {&unimplItemSet, NULLIS, NULLIS, NULLIS},
  &appdata.ibc_update, 0, 0, 0 };

Global ibcItemDesc *ibcDescs[] =
{ &thrustItemDesc, &vmeIbcItemDesc, &pwrAIbcItemDesc, &pwrBIbcItemDesc,
  &sensorIbcItemDesc, &lightIbcItemDesc, &cameraIbcItemDesc, &sonarIbcItemDesc,
  &ersIbcItemDesc, &acMicroItemDesc, &pduMicroItemDesc, &sio32ItemDesc,
  &telemItemDesc, &panTiltItemDesc, &camera3x5ItemDesc, &unimplItemDesc, NULLID
 };


/****************************************/
/*	Global IBC Select Structs	*/
/****************************************/

/* First Level, DCon Type selects	*/

Global Select thrustSel   =  { NULLF, NULLF, &thrustButtonForm, &dconSts,
			       &ibcSts, NULL, NULL };

Global Select ibcSel      =  { NULLF, NULLF, &ibcButtonForm, &dconSts,
			       &ibcSts, NULL, NULL };

Global Select micro3x5Sel =  { NULLF, NULLF, &micro3x5ButtonForm, &dconSts,
			       &ibcSts, NULL, NULL };

/* Second Level, Actual DCon selects	*/
/* Thruster Selects		*/

Global Select portHorizSel=  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PORT_HORIZ_THRUSTER_DM, 
			       &thrustItemDesc };
Global Select sbHorizSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, STBD_HORIZ_THRUSTER_DM, 
			       &thrustItemDesc };
Global Select portVertSel =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PORT_VERT_THRUSTER_DM, &thrustItemDesc };
Global Select sbVertSel   =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, STBD_VERT_THRUSTER_DM, &thrustItemDesc };
Global Select fwdLatSel   =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, FWD_LATERAL_THRUSTER_DM, 
			       &thrustItemDesc };
Global Select aftLatSel   =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, AFT_LATERAL_THRUSTER_DM, 
			       &thrustItemDesc };
Global Select vbMotorSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, VB_MOTOR_DM_PREFIX,
			       &thrustItemDesc };

/* IBC Selects			*/

Global Select vmeDCSel    =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, VMEIBC_DM_PREFIX, &vmeIbcItemDesc };
Global Select pwrADCSel   =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PWR_IBC_A_DM_PREFIX, &pwrAIbcItemDesc};
Global Select pwrBDCSel   =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PWR_IBC_B_DM_PREFIX, &pwrBIbcItemDesc};
Global Select sensorDCSel =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, SENSOR_IBC_DM_PREFIX,&sensorIbcItemDesc};
Global Select cameraDCSel =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, CAMERA_IBC_DM_PREFIX,&cameraIbcItemDesc};
Global Select lightDCSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts, NULLSS,
			       LIGHTING_IBC_DM_PREFIX, &lightIbcItemDesc };
Global Select ersDCSel    =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, ERS_DCON_DM_PREFIX, &ersIbcItemDesc };
Global Select sonarDCSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, SONAR_IBC_DM_PREFIX, &sonarIbcItemDesc };

/* 3x5 Micro Selects		*/

Global Select sio32DCSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, SIO32_DM_PREFIX, &sio32ItemDesc };
Global Select pduMicroSel =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PDU_MICRO_DM_PREFIX, &pduMicroItemDesc};
Global Select acMicroSel  =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, AC_MICRO_DM_PREFIX, &acMicroItemDesc};
Global Select telemTopSel =  { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, TOPSIDE_TELEM_DM_PREFIX,
			       &telemItemDesc};
Global Select telemBottomSel = { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, ROV_TELEM_DM_PREFIX, &telemItemDesc};
Global Select stbdPanTiltSel = { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PAN_TILT_STBD_DM_PREFIX,
			       &panTiltItemDesc};
Global Select portPanTiltSel = { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PAN_TILT_PORT_DM_PREFIX,
			       &panTiltItemDesc};
Global Select stbdCamera3x5Sel = { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, STBD_CAMERA_DM_PREFIX,
			       &camera3x5ItemDesc};
Global Select portCamera3x5Sel = { ibcSelect, ibcUnselect, NULLWP, &ibcSts,
			       NULLSS, PORT_CAMERA_DM_PREFIX,
			       &camera3x5ItemDesc};

Global Select *ibcSelects[] = 
{ &portHorizSel, &sbHorizSel, &portVertSel, &sbVertSel, &fwdLatSel, &aftLatSel,
  &vbMotorSel, &cameraDCSel, &lightDCSel, &ersDCSel, &pwrADCSel, &pwrBDCSel,
  &vmeDCSel, &sensorDCSel, &sonarDCSel,
  &pduMicroSel, &acMicroSel, &sio32DCSel, &telemTopSel, &telemBottomSel,
  &stbdPanTiltSel, &portPanTiltSel, &stbdCamera3x5Sel, &portCamera3x5Sel,
  (Select *)NULL
};
