#ifndef _console_H
#define _console_H
/****************************************************************************/
/* Copyright 1992 to 1996 MBARI                                             */
/****************************************************************************/
/* Summary  : ROV Pilot Console Interface module for vxWorks                */
/* Filename : new_console.h                                                 */
/* Author   : Douglas Au                                                    */
/* Project  : Tiburon ROV                                                   */
/* Version  : Version 1.0                                                   */
/* Created  : 10/16/96                                                      */
/* Modified : 10/16/96                                                      */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/* $Header:  $
 * $Log:     $
 *
 */
/****************************************************************************/

#define CONSOLE_IN_STACKSIZE   10000 /* Console Input  Task Stack Size+TCB  */
#define CONSOLE_OUT_STACKSIZE   9000 /* Console Output Task Stack Size+TCB  */
#define CONSOLE_FLASH_STACKSIZE 9000 /* Console Output Task Stack Size+TCB  */
#define JOYSTICK_STACKSIZE     10000 /* Joystick Input Task Stack Size+TCB  */

#define SWITCH_DM_PERIOD       50000 /* Switches update period 20 Hz in usec*/
#define JOYSTICK_DM_PERIOD     50000 /* Joystick update period 20 Hz in usec*/
#define PT_JOYSTICK_DM_PERIOD 100000 /* Pan/Tilt Joystick update at 6.67Hz  */
#define LAMP_FLASH_PERIOD     250000 /* Flash lamps at 2 Hz in usec         */

#define DEFAULT_JOYSTICK_GAIN     50 /* Default reduced joystick gain = 50% */

#define PT_JOYSTICK_FSV       1024.0 /* Pan/Tilt joystick Full Scale Value  */

#define MAX_GROUP_NUM 3
/* Daves Hack */
DM_Item joystickGainSwitchDm;

typedef struct
{
    DM_Item     joystickX;          /* Joystick X value                     */
    DM_Item     joystickY;          /* Joystick Y value                     */
    DM_Item     joystickZ;          /* Joystick Z value                     */
    DM_Item     joystickYaw;        /* Joystick rotation                    */

    DM_Item     zoomPedal;
    DM_Item     focusPedal;

    DM_Item     autoDepth;          /* Auto depth mode flag                 */
    DM_Item     autoHeading;        /* Auto heading mode flag               */
} ctrlFunctionDmItems;

typedef struct
{
    DM_Item     pilotPanAxis;
    DM_Item     pilotTiltAxis;
    DM_Item     portPanAxis;
    DM_Item     portTiltAxis;
    DM_Item     stbdPanAxis;
    DM_Item     stbdTiltAxis;
} panTiltDmItems;

typedef enum
{
    LOCAL_PVDR,
    REMOTE_PVDR
} pvdrMode;

typedef struct
{
  const char  *name;
  DM_Item     item;
  DM_Type     type;
}dmObjStruct;

typedef struct buttonObjStruct buttonObject;

struct buttonObjStruct
{
  dmObjStruct  requestDm;
  dmObjStruct  statusDm;
  pvdrMode     providerMode;
  Nat16        switchBit;
  Nat16        lampBit;
  Int32        onValue;
  Int32        offValue;
  MBool        switchWasPressed;
  STATUS       (*buttonHandler) (buttonObject *button);
  STATUS       (*buttonFlashHandler) (buttonObject *button, MBool toggle);
  STATUS       (*buttonSwitchHandler) (buttonObject *button);
};

typedef struct
{
  dmObjStruct  requestDm;
  dmObjStruct  statusDm;
  dmObjStruct  request1Dm;
  dmObjStruct  status1Dm;
  dmObjStruct  request2Dm;
  dmObjStruct  status2Dm;
  dmObjStruct  request3Dm;
  dmObjStruct  status3Dm;
  dmObjStruct  request4Dm;
  dmObjStruct  status4Dm;
  dmObjStruct  request5Dm;
  dmObjStruct  status5Dm;
  dmObjStruct  request6Dm;
  dmObjStruct  status6Dm;
  Nat16        switchBit;
  Nat16        lampBit;
  Int32        onValue;
  Int32        offValue;
  MBool        switchWasPressed;
}thrusterSetObject;

typedef struct
{
  dmObjStruct  requestDm;
  dmObjStruct  statusDm;
  dmObjStruct  request1Dm;
  dmObjStruct  status1Dm;
  dmObjStruct  request2Dm;
  dmObjStruct  status2Dm;
  Nat16        switchBit;
  Nat16        lampBit;
  Int32        onValue;
  Int32        offValue;
  MBool        switchWasPressed;
}lightSetObject;

typedef struct
{
  dmObjStruct  statusDm;
  dmObjStruct  joystickLockDm;
  dmObjStruct  joystickRangeDm;
}bellyPackObject;

typedef struct
{
  dmObjStruct  bellyPackStatusDm;
  dmObjStruct  autoHeadingRequestDm;
  dmObjStruct  autoHeadingStatusDm;
  Nat16        switchBit;
  Nat16        lampBit;
  Int32        onValue;
  Int32        offValue;
  MBool        switchWasPressed;
}autoHeadingObject;

typedef struct
{
  dmObjStruct  bellyPackStatusDm;
  dmObjStruct  autoDepthDm;
  dmObjStruct  autoDepthStatusDm;
  dmObjStruct  autoAltitudeDm;
  dmObjStruct  autoAltitudeStatusDm;
}autoZObject;

autoZObject autoZFuncItem =
{
  { "TIBURON.BELLY_PACK.ENABLED",    NO_ITEM, DM_MBOOL },
  { "TIBURON.CONSOLE.AUTO_DEPTH",           NO_ITEM, DM_MBOOL },
  { "TIBURON.CONTROL.AUTO_DEPTH",     NO_ITEM, DM_MBOOL },
  { AUTO_ALTITUDE_DM,               NO_ITEM, DM_MBOOL },
  { CONSOLE_AUTO_ALTITUDE_STATE_DM, NO_ITEM, DM_MBOOL }
};

autoHeadingObject autoHeadingItem =
{
  { "TIBURON.BELLY_PACK.ENABLED",    NO_ITEM, DM_MBOOL },
  { "TIBURON.CONSOLE.AUTO_HEADING",  NO_ITEM, DM_MBOOL },
  { "TIBURON.CONTROL.AUTO_HEADING",  NO_ITEM, DM_MBOOL },
  AUTO_HEADING_SWITCH,    AUTO_HEADING_LAMP,
  ON, OFF, FALSE
};

bellyPackObject  bellyPackItem =
{
   { "TIBURON.BELLY_PACK.ENABLED",    NO_ITEM, DM_MBOOL },
   { CONSOLE_JOYSTICK_LOCK_STATE_DM,  NO_ITEM, DM_MBOOL },
   { CONSOLE_JOYSTICK_GAIN_STATE_DM,  NO_ITEM, DM_MBOOL },
};

thrusterSetObject  thrusterMasterPowerObject =
{
   { "TIBURON.CONSOLE.MASTER_MOTOR_SWITCH",    NO_ITEM, DM_MBOOL },
   { "TIBURON.CONSOLE.MASTER_MOTOR_SWITCH_STATUS", NO_ITEM, DM_MBOOL },
   { THRUSTER_PORT_HORIZ_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_PORT_HORIZ_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   { THRUSTER_STBD_HORIZ_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_STBD_HORIZ_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   { THRUSTER_PORT_VERT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_PORT_VERT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   { THRUSTER_STBD_VERT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_STBD_VERT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   { THRUSTER_FWD_LAT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_FWD_LAT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   { THRUSTER_AFT_LAT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
   { THRUSTER_AFT_LAT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
   THRUSTER_MASTER_POWER_SWITCH,    THRUSTER_MASTER_POWER_LAMP,
   ON, OFF, FALSE,
};

thrusterSetObject  thrusterMasterEnableObject =
{
   { "TIBURON.CONSOLE.MASTER_MOTOR_ENABLE",       NO_ITEM, DM_MBOOL },
   { "TIBURON.CONSOLE.MASTER_MOTOR_ENABLE_STATUS", NO_ITEM, DM_MBOOL },
   { "TIBURON.THRUSTER.PORT_HORIZ.ENABLE",        NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.PORT_HORIZ.ENABLE_STATUS", NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.STBD_HORIZ.ENABLE",        NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.STBD_HORIZ.ENABLE_STATUS", NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.PORT_VERT.ENABLE",         NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.PORT_VERT.ENABLE_STATUS",  NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.STBD_VERT.ENABLE",         NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.STBD_VERT.ENABLE_STATUS",  NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.FWD_LATERAL.ENABLE",       NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.FWD_LATERAL.ENABLE_STATUS",NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.AFT_LATERAL.ENABLE",       NO_ITEM, DM_ENUM },
   { "TIBURON.THRUSTER.AFT_LATERAL.ENABLE_STATUS",NO_ITEM, DM_ENUM },
   THRUSTER_MASTER_ENABLE_SWITCH,    THRUSTER_MASTER_ENABLE_LAMP,
   ON, OFF, FALSE,
};

LOCAL STATUS motorEnableButtonLampCtrl(buttonObject *button);
LOCAL STATUS motorEnableButtonLampFlashCtrl(buttonObject *button, MBool togle);
LOCAL STATUS motorEnableButtonSwitchCtrl(buttonObject *button);

LOCAL STATUS powerButtonLampCtrl(buttonObject *button);
LOCAL STATUS buttonLampFlashCtrl(buttonObject *button, MBool togle);
LOCAL STATUS powerButtonSwitchCtrl(buttonObject *button);

LOCAL STATUS boolButtonLampCtrl(buttonObject *button);
LOCAL STATUS boolButtonSwitchCtrl(buttonObject *button);
LOCAL STATUS boolButtonMSwitchCtrl(buttonObject *button);
LOCAL STATUS boolButtonThrustLevel(buttonObject *button);

LOCAL STATUS bellyPackButtonLampCtrl(buttonObject *button);
LOCAL STATUS bellyPackButtonSwitchCtrl(buttonObject *button);
LOCAL STATUS bellyPackEnableSwitchCtrl(buttonObject *button);

LOCAL STATUS deploymentLatchArmLampCtrl(buttonObject *button);
LOCAL STATUS toolsledLatchArmLampCtrl(buttonObject *button);
LOCAL STATUS latchReleaseLampCtrl(buttonObject *button);
LOCAL STATUS toolsledLatchArmSwitchCtrl(buttonObject *button);
LOCAL STATUS deploymentLatchArmSwitchCtrl(buttonObject *button);
LOCAL STATUS latchReleaseSwitchCtrl(buttonObject *button);
LOCAL STATUS toolsledLatchReleaseSwitchCtrl(buttonObject *button);


#define MAX_LIGHT_SETS 3
lightSetObject lightSetObjects[MAX_LIGHT_SETS] =
{

  { { AUX_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { AUX_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    { LIGHT_0_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_0_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    { LIGHT_1_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_1_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    AUX_HMI_LIGHT_POWER_SWITCH, AUX_HMI_LIGHT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE
  },

  { { STBD_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { STBD_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    { LIGHT_2_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_2_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    { LIGHT_3_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_3_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    STBD_HMI_LIGHT_POWER_SWITCH, STBD_HMI_LIGHT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE
  },

  { { PORT_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { PORT_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    { LIGHT_4_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_4_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    { LIGHT_5_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_5_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    PORT_HMI_LIGHT_POWER_SWITCH, PORT_HMI_LIGHT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE
  }
};

#define MAX_BUTTONS 67
buttonObject buttonObjects[MAX_BUTTONS] =
{
  /******************** Left Button Row 1 *********************************/

  { { LIGHTING_DCON_48V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHTING_DCON_48V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    LIGHTING_DCON_POWER_SWITCH,     LIGHTING_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { CAMERA_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { CAMERA_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    CAMERA_DCON_POWER_SWITCH,    CAMERA_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { SONAR_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { SONAR_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    SONAR_DCON_POWER_SWITCH,    SONAR_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { SENSOR_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { SENSOR_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    SENSOR_DCON_POWER_LAMP,     SENSOR_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { ERS_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { ERS_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    EMERGENCY_DCON_POWER_SWITCH, EMERGENCY_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },


  /****************** Left Button Row 2  ******************************/

  { { LIGHTING_DCON_240V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHTING_DCON_240V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    LIGHTING_240V_POWER_SWITCH,       LIGHTING_240V_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { LIGHT_BALLAST_0_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_BALLAST_0_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    AUX_BALLAST_SWITCH,   AUX_BALLAST_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { LIGHT_BALLAST_1_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_BALLAST_1_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_BALLAST_SWITCH,   STBD_BALLAST_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { LIGHT_BALLAST_2_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { LIGHT_BALLAST_2_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_BALLAST_SWITCH,   PORT_BALLAST_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { PORT_PAN_TILT_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { PORT_PAN_TILT_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_PAN_TILT_DCON_POWER_SWITCH,       PORT_PAN_TILT_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { STBD_PAN_TILT_DCON_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { STBD_PAN_TILT_DCON_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_PAN_TILT_DCON_POWER_SWITCH,       STBD_PAN_TILT_DCON_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  /******************* Left Button Row 3 *********************************/
  { { PORT_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { PORT_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    PORT_HMI_LIGHT_POWER_SWITCH,       PORT_HMI_LIGHT_POWER_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,   NULL,
    NULL
  },

  { { AUX_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { AUX_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    AUX_HMI_LIGHT_POWER_SWITCH,       AUX_HMI_LIGHT_POWER_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,   NULL,
    NULL
  },

  { { STBD_HMI_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_MBOOL },
    { STBD_HMI_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    STBD_HMI_LIGHT_POWER_SWITCH,       STBD_HMI_LIGHT_POWER_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,   NULL,
    NULL
  },

  { { BACKUP_LIGHT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { BACKUP_LIGHT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    INCAND_LIGHT_POWER_SWITCH,       INCAND_LIGHT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { RESPONDER_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { RESPONDER_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    RESPONDER_POWER_SWITCH,       RESPONDER_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  /******************* Left Button Row 4 *********************************/
  { { TOOLSLED_48V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { TOOLSLED_48V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    TOOLSLED_48V_POWER_SWITCH,       TOOLSLED_48V_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { TOOLSLED_240V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { TOOLSLED_240V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    TOOLSLED_240V_POWER_SWITCH,       TOOLSLED_240V_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { MANIP_48V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { MANIP_48V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    MANIP_48V_POWER_SWITCH,       MANIP_48V_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { MANIP_240V_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { MANIP_240V_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    MANIP_240V_POWER_SWITCH,       MANIP_240V_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { VB_FILL_SWITCH_REQ_DM,       NO_ITEM, DM_ENUM },
    { VB_FILL_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    VB_FILL_POWER_SWITCH,        VB_FILL_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,  buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },


  { { SPARE_SWITCH_3_DM,       NO_ITEM, DM_MBOOL },
    { SPARE_SWITCH_3_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    SPARE_SWITCH_3,     SPARE_CONSOLE_LAMP_3,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  /******************* Thrusters *****************************************/
  { { THRUSTER_PORT_HORIZ_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_PORT_HORIZ_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_HORIZ_POWER_SWITCH,    PORT_HORIZ_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { THRUSTER_STBD_HORIZ_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_STBD_HORIZ_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_HORIZ_POWER_SWITCH,    STBD_HORIZ_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { THRUSTER_PORT_VERT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_PORT_VERT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_VERT_POWER_SWITCH,    PORT_VERT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { THRUSTER_STBD_VERT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_STBD_VERT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_VERT_POWER_SWITCH,    STBD_VERT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { THRUSTER_FWD_LAT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_FWD_LAT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    FWD_LAT_POWER_SWITCH,    FWD_LAT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { THRUSTER_AFT_LAT_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { THRUSTER_AFT_LAT_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    AFT_LAT_POWER_SWITCH,    AFT_LAT_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

  { { VB_MOTOR_SWITCH_REQ_DM,    NO_ITEM, DM_ENUM },
    { VB_MOTOR_SWITCH_STATUS_DM, NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    VB_MOTOR_POWER_SWITCH,    VB_MOTOR_POWER_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    powerButtonLampCtrl,   buttonLampFlashCtrl,
    powerButtonSwitchCtrl
  },

/************* Enables ***********/

  { { "TIBURON.THRUSTER.PORT_HORIZ.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.PORT_HORIZ.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_HORIZ_ENABLE_SWITCH,    PORT_HORIZ_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.THRUSTER.STBD_HORIZ.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.STBD_HORIZ.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_HORIZ_ENABLE_SWITCH,    STBD_HORIZ_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.THRUSTER.PORT_VERT.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.PORT_VERT.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    PORT_VERT_ENABLE_SWITCH,    PORT_VERT_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.THRUSTER.STBD_VERT.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.STBD_VERT.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    STBD_VERT_ENABLE_SWITCH,    STBD_VERT_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.THRUSTER.FWD_LATERAL.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.FWD_LATERAL.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    FWD_LAT_ENABLE_SWITCH,    FWD_LAT_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.THRUSTER.AFT_LATERAL.ENABLE",    NO_ITEM, DM_ENUM },
    { "TIBURON.THRUSTER.AFT_LATERAL.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    AFT_LAT_ENABLE_SWITCH,    AFT_LAT_ENABLE_LAMP,
    MOTOR_ENABLE, MOTOR_DISABLE, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

  { { "TIBURON.VB_MOTOR.ENABLE",        NO_ITEM, DM_ENUM },
    { "TIBURON.VB_MOTOR.ENABLE_STATUS", NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    VB_MOTOR_ENABLE_SWITCH,    VB_MOTOR_ENABLE_LAMP,
    SWITCH_ON, SWITCH_OFF, FALSE,
    motorEnableButtonLampCtrl,   motorEnableButtonLampFlashCtrl,
    motorEnableButtonSwitchCtrl
  },

/********* Master Thruster Power and Enable *********************************/
  { { "TIBURON.CONSOLE.MASTER_MOTOR_SWITCH",    NO_ITEM, DM_MBOOL },
    { "TIBURON.CONSOLE.MASTER_MOTOR_SWITCH_STATUS", NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    THRUSTER_MASTER_POWER_SWITCH,    THRUSTER_MASTER_POWER_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,   NULL,  NULL
  },

  { { "TIBURON.CONSOLE.MASTER_MOTOR_ENABLE",    NO_ITEM, DM_MBOOL },
    { "TIBURON.CONSOLE.MASTER_MOTOR_ENABLE_STATUS", NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    THRUSTER_MASTER_ENABLE_SWITCH,    THRUSTER_MASTER_ENABLE_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  NULL
  },

  { { "TIBURON.CONSOLE.BELLY_PACK_SWITCH",        NO_ITEM, DM_MBOOL },
    { "TIBURON.CONSOLE.BELLY_PACK_SWITCH_STATUS", NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    BELLY_PACK_POWER_SWITCH,    BELLY_PACK_POWER_LAMP,
    ON, OFF, FALSE,
    bellyPackButtonLampCtrl,  NULL,  bellyPackButtonSwitchCtrl
  },
  { { "TIBURON.BELLY_PACK.ENABLE_REQUEST",    NO_ITEM, DM_MBOOL },
    { "TIBURON.BELLY_PACK.ENABLED",           NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    BELLY_PACK_ENABLE_SWITCH,    BELLY_PACK_ENABLE_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  bellyPackEnableSwitchCtrl},

/********************* Pilot Tray ******************************************/
  { { "TIBURON.CONSOLE.AUTO_HEADING",       NO_ITEM, DM_MBOOL },
    { "TIBURON.CONTROL.AUTO_HEADING",       NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    AUTO_HEADING_SWITCH,    AUTO_HEADING_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  NULL
  },

  { { "TIBURON.CONSOLE.AUTO_DEPTH",       NO_ITEM, DM_MBOOL },
    { "TIBURON.CONTROL.AUTO_DEPTH",       NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    AUTO_DEPTH_SWITCH,    AUTO_DEPTH_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  NULL
  },

  { { AUTO_ALTITUDE_DM,               NO_ITEM, DM_MBOOL },
    { CONSOLE_AUTO_ALTITUDE_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    AUTO_ALTITUDE_SWITCH,    AUTO_ALTITUDE_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  NULL
  },

  { { AUTO_POSITION_DM,               NO_ITEM, DM_MBOOL },
    { AUTO_POSITION_DM,               NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    AUTO_POSITION_SWITCH,    AUTO_POSITION_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { SPARE_TRAY_SWITCH_1_DM,       NO_ITEM, DM_MBOOL },
    { SPARE_TRAY_SWITCH_1_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    SPARE_TRAY_SWITCH_1,     SPARE_TRAY_LAMP_1,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { CONSOLE_JOYSTICK_LOCK_DM,       NO_ITEM, DM_MBOOL },
    { CONSOLE_JOYSTICK_LOCK_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    JOYSTICK_LOCK_SWITCH,     JOYSTICK_LOCK_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { JOYSTICK_GAIN_DM,       NO_ITEM, DM_MBOOL },
    { JOYSTICK_GAIN_DM,       NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    JOYSTICK_RANGE_SWITCH,     JOYSTICK_RANGE_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { SCIENCE_CONTROLS_SWITCH_DM,       NO_ITEM, DM_MBOOL },
    { SCIENCE_CONTROLS_SWITCH_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    SCIENCE_CONTROLS_SWITCH,     SCIENCE_CONTROLS_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { SPARE_TRAY_SWITCH_2_DM,       NO_ITEM, DM_MBOOL },
    { SPARE_TRAY_SWITCH_2_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    SPARE_TRAY_SWITCH_2,     SPARE_TRAY_LAMP_2,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { SPARE_TRAY_SWITCH_3_DM,       NO_ITEM, DM_MBOOL },
    { SPARE_TRAY_SWITCH_3_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    SPARE_TRAY_SWITCH_3,     SPARE_TRAY_LAMP_3,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

  { { CONSOLE_VERT_JOYSTICK_LOCK_DM,       NO_ITEM, DM_MBOOL },
    { CONSOLE_VERT_JOYSTICK_LOCK_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    VERT_JOYSTICK_LOCK_SWITCH,     VERT_JOYSTICK_LOCK_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  boolButtonSwitchCtrl
  },

/*  Joystick Switches */
  { { LEFT_T_SWITCH_UP_LEFT_DM,       NO_ITEM, DM_MBOOL },
    { LEFT_T_SWITCH_UP_LEFT_STATE_DM, NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    LEFT_THUMBSWITCH_UP_LEFT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { LEFT_T_SWITCH_DOWN_RIGHT_DM,       NO_ITEM, DM_MBOOL },
    { LEFT_T_SWITCH_DOWN_RIGHT_STATE_DM, NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    LEFT_THUMBSWITCH_DOWN_RIGHT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { LEFT_T_SWITCH_DOWN_LEFT_DM,       NO_ITEM, DM_MBOOL },
    { LEFT_T_SWITCH_DOWN_LEFT_STATE_DM, NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    LEFT_THUMBSWITCH_DOWN_LEFT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { LEFT_T_SWITCH_UP_RIGHT_DM,       NO_ITEM, DM_MBOOL },
    { LEFT_T_SWITCH_UP_RIGHT_STATE_DM, NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    LEFT_THUMBSWITCH_UP_RIGHT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { RIGHT_T_SWITCH_UP_DM,       NO_ITEM, DM_MBOOL },
    { RIGHT_T_SWITCH_UP_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    RIGHT_THUMBSWITCH_UP,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonMSwitchCtrl
  },

  { { RIGHT_T_SWITCH_DOWN_DM,       NO_ITEM, DM_MBOOL },
    { RIGHT_T_SWITCH_DOWN_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    RIGHT_THUMBSWITCH_DOWN,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonMSwitchCtrl
  },

  { { RIGHT_T_SWITCH_LEFT_DM,       NO_ITEM, DM_MBOOL },
    { RIGHT_T_SWITCH_LEFT_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    RIGHT_THUMBSWITCH_LEFT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { RIGHT_T_SWITCH_RIGHT_DM,       NO_ITEM, DM_MBOOL },
    { RIGHT_T_SWITCH_RIGHT_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    RIGHT_THUMBSWITCH_RIGHT,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { TRIGGER_SWITCH_1_DM,       NO_ITEM, DM_MBOOL },
    { TRIGGER_SWITCH_1_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    TRIGGER_SWITCH_1,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { TRIGGER_SWITCH_2_DM,       NO_ITEM, DM_MBOOL },
    { TRIGGER_SWITCH_2_STATE_DM, NO_ITEM, DM_MBOOL },
    LOCAL_PVDR,
    TRIGGER_SWITCH_2,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL, boolButtonThrustLevel
  },

  { { BAR_SWITCH_DM,       NO_ITEM, DM_MBOOL },
    { BAR_SWITCH_STATE_DM, NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    BAR_SWITCH,     NULL,
    ON, OFF, FALSE,
    NULL,  NULL,  boolButtonSwitchCtrl
  },

  { { "TIBURON.VEHICLE.ALIVE",  NO_ITEM, DM_MBOOL },
    { "TIBURON.VEHICLE.ALIVE",  NO_ITEM, DM_MBOOL },
    REMOTE_PVDR,
    NULL,    VEHICLE_ALIVE_LAMP,
    ON, OFF, FALSE,
    boolButtonLampCtrl,  NULL,  NULL
  },

  { { "TIBURON.DEPLOYMENT_LATCH_ARM_CMD",     NO_ITEM, DM_NAT16 },
    { "TIBURON.DEPLOYMENT_LATCH_ARM_CMD",     NO_ITEM, DM_NAT16 },
    REMOTE_PVDR,
    VEHICLE_RELEASE_ARM_SWITCH, VEHICLE_RELEASE_ARM_LAMP,
    LATCH_ARMED, LATCH_DISARMED, FALSE,
    deploymentLatchArmLampCtrl, NULL, deploymentLatchArmSwitchCtrl
  },

  { { "TIBURON.DEPLOYMENT_LATCH_RELEASE_CMD", NO_ITEM, DM_EMPTY },
    { "TIBURON.DEPLOYMENT_LATCH_STATUS",  NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    VEHICLE_RELEASE_SWITCH, VEHICLE_RELEASE_LAMP,
    LATCH_RUNNING, LATCH_DISARMED, FALSE,
    latchReleaseLampCtrl, NULL, latchReleaseSwitchCtrl
  },

  { { "TIBURON.TOOLSLED_LATCH_ARM_CMD",     NO_ITEM, DM_NAT16 },
    { "TIBURON.TOOLSLED_LATCH_ARM_CMD",     NO_ITEM, DM_NAT16 },
    REMOTE_PVDR,
    TOOLSLED_RELEASE_ARM_SWITCH, TOOLSLED_RELEASE_ARM_LAMP,
    LATCH_ARMED, LATCH_DISARMED, FALSE,
    toolsledLatchArmLampCtrl, NULL, toolsledLatchArmSwitchCtrl
  },

  { { "TIBURON.TOOLSLED_LATCH_RELEASE_CMD", NO_ITEM, DM_MBOOL },
    { "TIBURON.TOOLSLED_LATCH_STATUS",  NO_ITEM, DM_ENUM },
    REMOTE_PVDR,
    TOOLSLED_RELEASE_SWITCH, TOOLSLED_RELEASE_LAMP,
    LATCH_RUNNING, LATCH_DISARMED, FALSE,
    latchReleaseLampCtrl, NULL, toolsledLatchReleaseSwitchCtrl
  }
};
#ifdef __STDC__

STATUS consoleTask( Void );

#endif



#endif /* _console_H */









