/******************************************************************************/
/* Copyright 1992 MBARI                                                       */
/******************************************************************************/
/* Summary  : Power Manager Module Definitions for Tiburon                    */
/* Filename : power.h                                                         */
/* Author   : Janice Tarrant                                                  */
/* Project  : Tiburon                                                         */
/* Version  : Version 2.0                                                     */
/* Created  : 10/04/95                                                        */
/* Modified : 03/14/96                                                        */
/* Archived :                                                                 */
/******************************************************************************/
/* Modification History :                                                     */
/* $Header$
 * $Log$
 *
 */
/******************************************************************************/

#ifndef POWER_MGR_H
#define POWER_MGR_H

#define VERIFY_POWER_DM   FALSE		/* verify data manager items flag     */
#define NUM_STATIC_POWER  10		/* number of static power requests    */
#define NUM_SWITCH_POWER  200		/* number of switchable power requests*/
#define GROUP_MAX         32        	/* number of items in a dm group      */
					/* number of power data manager groups*/
#define NUM_POWER_GROUPS  (Nat16) (NUM_SWITCH_POWER / GROUP_MAX)
#define NUM_THRUSTERS     6		/* number of thrusters                */
#define DM_ITEM_NAME_LEN  60		/* data manager item name max len     */
#define FILE_LINE_LEN     200		/* max file line length               */

					/* data manager power items file name */
#define POWER_DM_FILENAME        "/usr/tiburon/vw/h/powerDM.h"
					/* verified power items file name     */
#define VERIFY_POWER_DM_FILENAME "/usr/tiburon/vw/powerMgr/verifyDM"
					/* power request keyword              */
#define POWER_REQ_KEYWORD        "PWR_REQ"
					/* power ok keyword                   */
#define POWER_OK_KEYWORD         "PWR_OK"
					/* vme 240 V bus static load keyword  */
#define VME_240V_BUS_KEYWORD     VME_240V_BUS_PWR_REQ_DM
					/* vme 48 V bus static load keyword   */
#define VME_48V_BUS_KEYWORD      VME_48V_BUS_PWR_REQ_DM
					/* power can static load keyword      */
#define POWER_CAN_KEYWORD        POWER_CAN_PWR_REQ_DM
					/* control system thrust load keyword */
#define THRUSTERS_KEYWORD        THRUSTERS_PWR_REQ_DM

					/* data manager items for debugging   */
					/* purposes only                      */
					/* number of sem takes                */
#define NUM_SEMTAKE_DM		 "TIBURON.POWER.NUM_SEMTAKE"
					/* number of thruster power requests  */
#define NUM_THRUST_REQ_DM	 "TIBURON.POWER.NUM_THRUST_REQ"
					/* number of switched power requests  */
#define NUM_SWITCH_REQ_DM	 "TIBURON.POWER.NUM_SWITCH_REQ"
					/* number of requests serviced        */
#define NUM_REQ_DM		 "TIBURON.POWER.NUM_REQ"

#define BUS_240A_EFF 1.0           	/* bus 240A efficiency                */
#define BUS_240B_EFF 1.0           	/* bus 240B efficiency                */
#define BUS_48A_EFF  0.8           	/* bus 48A efficiency                 */
#define BUS_48B_EFF  0.8           	/* bus 48B efficiency                 */

					/* power data manager item names      */
typedef struct
{
					/* thrusters power request name       */
    char thrustersPwrReq[DM_ITEM_NAME_LEN];
					/* thrusters power ok name            */
    char thrustersPwrOk[DM_ITEM_NAME_LEN];
					/* static items power request name    */
    char staticPwrReq[NUM_STATIC_POWER][DM_ITEM_NAME_LEN];
					/* static items power ok name         */
    char staticPwrOk[NUM_STATIC_POWER][DM_ITEM_NAME_LEN];
					/* switched items power request name  */
    char switchPwrReq[NUM_SWITCH_POWER][DM_ITEM_NAME_LEN];
					/* switched items power ok name       */
    char switchPwrOk[NUM_SWITCH_POWER][DM_ITEM_NAME_LEN];
} powerDMNames;

					/* power data manager item handles    */
typedef struct
{
    Int16   numStatic;			/* number of static power items       */
    Int16   numSwitch;			/* number of switched power items     */
    DM_Item maxPwrAvail;		/* max power available                */
    DM_Item hotelPwrAlloc;		/* hotel load power allocated         */
    DM_Item lightsPwrAlloc;		/* lights load power allocated        */
    DM_Item toolsPwrAlloc;		/* tools load power allocated         */
    DM_Item thrustersPwrReq;		/* thrusters power request            */
    DM_Item thrustersPwrAlloc;		/* thrusters power allocated          */
    DM_Item thrustersPwrOk;		/* thrusters power OK		      */
    DM_Item thrustersPwrRed;		/* thrusters power reduced            */
    					/* static power request and ok        */
    DM_Item staticPwrReq[NUM_STATIC_POWER];
    DM_Item staticPwrOk[NUM_STATIC_POWER];
    					/* switchable power request and ok    */
    DM_Item switchPwrReq[NUM_SWITCH_POWER];
    DM_Item switchPwrOk[NUM_SWITCH_POWER];
    DM_Item thrusterPortHorizMtrEnb;    /* port horizontal motor enabled      */
    DM_Item thrusterPortHorizPwrConf;   /* port horiz motor power confirmed   */
    DM_Item thrusterStbdHorizMtrEnb;    /* starboard horiz motor enabled      */
    DM_Item thrusterStbdHorizPwrConf;   /* stbd horiz motor power confirmed   */
    DM_Item thrusterFwdLatMtrEnb;       /* forward lateral motor enabled      */
    DM_Item thrusterFwdLatPwrConf;      /* forward lat motor power confirmed  */
    DM_Item thrusterAftLatMtrEnb;       /* aft lateral motor enabled          */
    DM_Item thrusterAftLatPwrConf;      /* aft lateral motor power confirmed  */
    DM_Item thrusterPortVertMtrEnb;     /* port vertical motor enabled        */
    DM_Item thrusterPortVertPwrConf;    /* port vertical motor power confirmed*/
    DM_Item thrusterStbdVertMtrEnb;     /* starboard vert motor enabled       */
    DM_Item thrusterStbdVertPwrConf;    /* stbd vert motor power confirmed    */
					/* data manager items for debugging   */
					/* purposes only                      */
    DM_Item numSemTake;			/* number of sem takes                */
    DM_Item numThrustReq;		/* number of thruster power requests  */
    DM_Item numSwitchReq;		/* number of switched power requests  */
    DM_Item numReq;			/* number of requests serviced        */
} powerDMItems;

					/* power request groups               */
typedef struct
{
    Int16    numSwitch;			/* number of switched power groups    */
    DM_Group generic;			/* generic power changes group        */
    DM_Group thrusters;			/* thrusters power request group      */
    DM_Group staticLoad;		/* static power request group         */
					/* switched power request groups      */
    DM_Group switchLoad[NUM_POWER_GROUPS];
    DWord    genericBit;		/* generic changes bit                */
    DWord    thrustersBit;		/* thrusters request bit              */
    DWord    staticBit[NUM_STATIC_POWER];/* static power request bits         */
    DWord    switchBit[NUM_SWITCH_POWER];/* switched power request bits       */
} powerDMGroups;

					/* data manager initialization values */
typedef struct
{
    char    *name;			/* data manager array name            */
    DM_Item *item;     	             	/* data manager item handle pointer   */
} dmInit;

				    /* switch load divisions cumulative power */
typedef struct
{
    DM_Item dmiHotelPwr, dmiLightsPwr;	/* hotel, lights and tools power      */
    DM_Item dmiToolsPwr;		/* allocated data manager items       */
    Nat16 hotelPwrAlloc, lightsPwrAlloc;/* hotel, lights and tools power      */
    Nat16 toolsPwrAlloc;		/* allocated                          */
} switchDivisions;
					/* thrusters power variables          */
typedef struct
{
    Nat16    pwrAlloc;			/* power allocated                    */
    DM_Item  dmiPwrReq, dmiPwrAlloc;	/* power request, allocated, Ok and   */
    DM_Item  dmiPwrOk, dmiPwrRed;	/* reduced, and motor enable data     */
    DM_Item  dmiMtrEnb[NUM_THRUSTERS];  /* manager items                      */
    SEM_ID   pwrConfSem[NUM_THRUSTERS];	/* power confirmed semaphores         */
    DM_Group group;                     /* group Id                           */
} thrustersVars;


#endif
