/* @(#)libipmi_ChassisDevice.h
 */

#ifndef _LIBIPMI_CHASSISDEVICE_H
#define _LIBIPMI_CHASSISDEVICE_H 1


/* LIIPMI core header files */
#include "libipmi_session.h"
#include "libipmi_errorcodes.h"

/* command specific header files */
#include "com_IPMI_ChassisDevice.h"
#include "com_IPMI_Chassis.h"

#ifdef  __cplusplus
extern "C" {
#endif

#pragma pack(1)


/*---------- LIBIPMI Higher level routines -----------*/


#define CHASSIS_POWEROFF	 0x00
#define CHASSIS_POWERUP		 0x01
#define CHASSIS_POWERCYCLE	 0x02
#define CHASSIS_HARDRESET	 0x03
#define CHASSIS_DIAGINT          0x04
#define CHASSIS_SOFTOFF	         0x05


uint16_t  IPMICMD_ChassisControl( IPMI20_UDS_SESSION_T *pUDSSession, int timeout, char cmd);


// /**
//    \breif	Higher level function for PowerOff Host.
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_PowerOff( IPMI20_UDS_SESSION_T *pUDSSession/*in*/, int timeout/*in*/);



// /**
//    \breif	Higher level function for PowerUP Host
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_PowerUp( IPMI20_UDS_SESSION_T *pUDSSession/*in*/, int timeout/*in*/);



// /**
//    \breif	Higher level function for PowerCycle host.
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_PowerCycle( IPMI20_UDS_SESSION_T *pUDSSession, int timeout );



// /**
//    \breif	Higher level function for HardReset
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_HardReset( IPMI20_UDS_SESSION_T *pUDSSession, int timeout );
    

// /**
//    \breif	Higher level function for DiagInt
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_DiagInt( IPMI20_UDS_SESSION_T *pUDSSession, int timeout );
    

// /**
//    \breif	Higher level function for SoftOff
//    @param	pUDSSession		[in]Session handle
//    @param	timeout			[in]timeout value in seconds.

//    @retval Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
// */
//   uint16_t LIBIPMI_HL_SoftOff( IPMI20_UDS_SESSION_T *pUDSSession, int timeout );
    


typedef enum tag_CHASSIS_ID_STATE
{
	CHASSIS_ID_OFF=0,
	CHASSIS_ID_TIMED_ON=1,
	CHASSIS_ID_INDEFINITE_ON=2
} CHASSIS_ID_STATE;

typedef struct tag_chassis_status_T
{
	unsigned char power_state;
	unsigned char last_power_event;
	unsigned char chassis_indetify_supported;
	CHASSIS_ID_STATE chassis_identify_state;
} chassis_status_T;

/** 
 * 
 * 
 *  @param	pUDSSession		[in]Session handle
 *  @param	timeout			[in]timeout value in seconds.
 *  @param      status			[out]status of the host is returned.
 * 
 * @return  Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
 */
  uint16_t	LIBIPMI_HL_GetChassisStatus( IPMI20_UDS_SESSION_T *pUDSSession, int timeout,  chassis_status_T *status);

/*---------------------Chassis Idnetify defines ---------------------*/
#define CHASSIS_ID_INTERVAL_TURN_OFF		0
#define CHASSIS_ID_INTERVAL_SPEC_DEFAULT   	15

typedef enum tag_FORCE_CHASSIS_ID
{
	USE_INTERVAL=0,
	FORCE=1
} FORCE_CHASSIS_ID;

/** 
 * 
 * 
 *  @param	pUDSSession		[in]Session handle
 *  @param	timeout			[in]timeout value in seconds.
 *  @param      BlinkTimeSecs		[in]BlinkTimeInSecs.0 for Turn off (use #defs above)
 *  @param 	ForceOn			[in] Whether Interval is indefinite (Use enum above)
 * 
 * @return  Returns LIBIPMI_STATUS_SUCCESS on success and error codes on failure
 */
  uint16_t LIBIPMI_HL_ChassisIdentify(IPMI20_UDS_SESSION_T *pUDSSession, int timeout,uint8_t BlinkTimeSecs,FORCE_CHASSIS_ID ForceOn);

uint16_t	LIBIPMI_HL_GetSystemBootOptions_BootFlags( IPMI20_UDS_SESSION_T *pUDSSession, BootFlags_T* pBootFlags,int timeout);
uint16_t	LIBIPMI_HL_SetSystemBootOptions_BootFlags( IPMI20_UDS_SESSION_T *pUDSSession, BootFlags_T* pBootFlags,int timeout);

#pragma pack()

#ifdef  __cplusplus
}
#endif


#endif /* _LIBIPMI_CHASSISDEVICE_H */

