/************************************************************************/
/* Copyright 1993 MBARI							*/
/************************************************************************/
/* $Header: /usr/tiburon/unix/gui/proto/RCS/power.h,v 1.1 1998/01/28 16:17:59 oreilly Exp $			*/
/* Summary  : Include file for Power Switch screens of New ROV GUI	*/
/* Filename : power.h							*/
/* Author   : Bob Herlien (rah)						*/
/* Project  : New ROV							*/
/* $Revision: 1.1 $							*/
/* Created  : 10/29/92							*/
/************************************************************************/

#ifndef INCpowerh
#define INCpowerh		1

#define MAX_SWITCHES		 5
#define LABEL_HEIGHT		22
#define SW_HEIGHT		60
#define TOGGLE_HEIGHT		40
#define SW_WIDTH		80
#define SW_SPACING		 8
#define QLPSW_SPACING		25
#define BUS_HEIGHT		12

/* Stuff for the Power Setpoint Dialog	*/
#define PWR_DIALOG_WIDTH	400
#define PWR_INFO_LEFT_POS	45
#define PWR_INFO_RT_POS		75

#define SWITCH_REQ_DMTYPE	DM_ENUM
#define SWITCH_STS_DMTYPE	DM_ENUM
#define TOGGLE_DMTYPE		DM_ENUM

#define SA_NULL		((pwrSwitchAux *)0)
#define SWITCH_NULL	((pwrSwitch *)0)
#define BOARD_NULL	((pwrBoard *)0)
#define BUS_NULL	((pwrBus *)0)


typedef enum				/********************************/
{					/* Enumerated type for switch	*/
    SW_HP,				/* High power switch		*/
    SW_LP,				/* One of quad low-power switches*/
    SW_LPVICOR,				/* The Vicor supply for Quad LPSW*/
    SW_VICOR,				/* One of Dual Vicor switches	*/
    SW_LPSWITCH3,			/* Dummy to display sw3 temps	*/
    SW_TOGGLE,				/* XcToggleButton		*/
    SW_MOTOR_TOGGLE,			/* Motor enable toggle		*/
    SW_DISABLED				/* Switch insensitive to GUI	*/
} switchType;				/********************************/

typedef struct				/********************************/
{					/* pwrSwitch struct for one switch*/
    switchType	sw_type;		/* Switch type as above		*/
    char	*sw_name;		/* Name of switch		*/
    char	*sw_dmname;		/* "Base" name of DM Items	*/
    Widget	sw_widget;		/* PushButton widget		*/
    DM_Item	sw_req;			/* DM Item for switch request	*/
    DM_Item	sw_sts;			/* DM Item for switch status	*/
    DWord	sw_grpbit;		/* Group ID bit for group changes*/
    struct pwr_bus *sw_bus;		/* Power Bus that switch controls*/
    struct pwr_board *sw_board;		/* Board that switch is on	*/
} pwrSwitch;				/********************************/

typedef struct pwr_board		/********************************/
{					/* Struct for one DC Board	*/
    Widget	bd_widget;		/* Form widget for board	*/
    char	*bd_dmname;		/* DM Name for board related items*/
    pwrSwitch	*bd_sw[MAX_SWITCHES];	/* Ptrs to switch structs	*/
} pwrBoard;				/********************************/

typedef struct				/********************************/
{					/* Struct for one DC Can	*/
    char	*can_name;		/* Name				*/
    Int32	can_nsw;		/* Number of switches width	*/
    Widget	can_frame;		/* Frame Widget			*/
    pwrBoard	*can_bd[IBC_MAX_CARDS];	/* Ptrs to board structs	*/
} pwrCan;				/********************************/

typedef enum {BUS_HORIZ, BUS_VERT} pwrBusOrient;

typedef struct pwr_bus			/********************************/
{					/* Struct for standalone switch	*/
    pwrBusOrient pb_orient;		/* Orientation			*/
    Int32	pb_x2;			/* X (or Y) position of 2nd end	*/
    Widget	pb_widget;		/* Widget			*/
    pwrSwitch	*pb_sw;			/* Switch that powers it	*/
} pwrBus;				/********************************/

typedef enum				/********************************/
{					/* Enumerated type for Power objs*/
    PO_CAN,				/* pwrCan			*/
    PO_BOARD,				/* pwrBoard			*/
    PO_SW,				/* pwrSwitch			*/
    PO_BUS,				/* pwrBus			*/
    PO_LABEL				/* Label			*/
} pwrObjType;				/********************************/

typedef struct				/********************************/
{					/* Power Object Structure	*/
    Int32	po_xpos;		/* X position on screen		*/
    Int32	po_ypos;		/* Y position on screen		*/
    pwrObjType	po_type;		/* Type of object		*/
    XtPointer	po_ptr;			/* Ptr to {can, switch, bus}	*/
} pwrObj;				/********************************/

typedef struct				/********************************/
{					/* Power Object Descriptor struct*/
    pwrObj	*pd_obj;		/* Ptr to Array of pwrObj's	*/
    Nat32	pd_nobjs;		/* Number of pwrObj's in array	*/
    DM_Group	pd_group;		/* Group for objects		*/
    char	*pd_errs;		/* Error string			*/
} pwrObjDesc;				/********************************/

#endif /* INCpowerh */
