//***********************************************************************
//
//      eb SOFT q`r@`oh@ckk wb_`t@C
//
//      t@C  FFCSRASAPI.H
//              FckkgpAvP[VŃCN[h
//
//***********************************************************************


#ifdef FCSOFTRAS_EXPORTS
#define FCSOFTRAS_API __declspec(dllexport)
#else
#define FCSOFTRAS_API __declspec(dllimport)
#endif

// ̃NX FcSoftRas.dll GNX|[g܂


//***********************************************************************
// ֐`
//***********************************************************************

#ifdef __cplusplus          // C++CallČ`̊֐Callolɂ
extern  "C" {
#endif

FCSOFTRAS_API DWORD fcsoftrasOpen( VOID );
FCSOFTRAS_API DWORD fcsoftrasClose( VOID );
FCSOFTRAS_API DWORD fcsoftrasGetVersion( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetTemp( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetFan( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetVoltage( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetHDDInf( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetMirrorStatus( BYTE byDriveNum, LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetSMART( BYTE byDriveNum, LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetPciError( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetRevRcn( BYTE byDriveNum, LPBYTE lpbyGetCnt );
FCSOFTRAS_API DWORD fcsoftrasSetRevRcn( BYTE byDriveNum, BYTE bySetCnt );
FCSOFTRAS_API DWORD fcsoftrasGetRTCTime( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasSetRTCTime( LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasReleaseMirrorDrive( BYTE byDriveNum );
FCSOFTRAS_API DWORD fcsoftrasGetMirrorSMARTMode( BYTE byDriveNum, LPBYTE lpModeCode );
FCSOFTRAS_API DWORD fcsoftrasSetMirrorSMARTMode( BYTE byDriveNum, BYTE byModeCode );
FCSOFTRAS_API DWORD fcsoftrasGetHDDErrorLog( BYTE byDriveNum, LPBYTE lpBuff, DWORD nBuffSize );
FCSOFTRAS_API DWORD fcsoftrasGetPowerButton( LPBYTE	lpBuff,	DWORD	nBuffSize);
FCSOFTRAS_API DWORD fcsoftrasClearPowerButton(void);
FCSOFTRAS_API DWORD fcsoftrasGetHDDIdentify (BYTE	byDriveNum,LPBYTE	lpBuff,DWORD	nBuffSize,LPBYTE  lpAtaCmd);
FCSOFTRAS_API DWORD fcsoftrasGetMirrorReconProgress (BYTE	byDriveNum,LPBYTE	lpModeCode);

#ifdef __cplusplus
}
#endif


//***********************************************************************
// 萔`ꗗ
//***********************************************************************


// RETURNXe[^X
#define	FCSRASAPI_SUCCESS	0x00
#define	FCSRASAPI_DRVERR	0x01

// G[ڍ׏
#define FCRASERR			0x10000000
#define FCRASERR_OPEN		(FCRASERR | 1)


// FCRASײ ްޮݏ ް
#define LEN_VAR_MODELNUM	40			// ް      (ASCII 40)
#define LEN_VAR_FIRMREV		8			// ̧ѳ޼ޮ (ASCII  8)
#define LEN_VAR_SELIALNUM	20			// رް      (ASCII 20)

// HDD SMART ް
#define	LEN_SMART			512			// SMARTް = 512byte

// HDD ErrorLog ް
#define PAGE_LEN_ERRLOG		512			// ErrorLog 1߰޻
#define PAGE_NUM_ERRLOG		64			// ErrorLog ߰ސ
										// ErrorLogް = 512x64byte
#define	LEN_ERRLOG			PAGE_LEN_ERRLOG*PAGE_NUM_ERRLOG






// xװðޯď (fcsoftrasGetTemp)
#define TEMP_ERR_CPU	0x01			// CPUx    0: 1:װ
#define TEMP_ERR_SYS	0x02			// щx   0: 1:װ

// xܰݸ޽ðޯď (fcsoftrasGetTemp)
#define TEMP_WAR_CPU	0x01			// CPUx    0: 1:װ
#define TEMP_WAR_SYS	0x02			// щx   0: 1:װ

// ̧݉]װðޯď (fcsoftrasGetFan)
#define FAN_ERR_DATA1	0x01			// ̧1] 0: 1:װ
#define FAN_ERR_DATA2	0x02			// ̧2] 0: 1:װ
#define FAN_ERR_DATA3	0x04			// ̧3] 0: 1:װ
#define FAN_ERR_DATA4	0x08			// ̧4] 0: 1:װ

// dװðޯď (fcsoftrasGetVoltage)
#define VOLT_ERR_DATA1	0x01			// +2.5Vd  0: 1:װ
#define VOLT_ERR_DATA2	0x02			// CPU VRMd0: 1:װ
#define VOLT_ERR_DATA3	0x04			// +3.3Vd  0: 1:װ
#define VOLT_ERR_DATA4	0x08			// +5Vd    0: 1:װ
#define VOLT_ERR_DATA5	0x10			// +12Vd   0: 1:װ
#define VOLT_ERR_DATA6	0x20			// +3.3VSBd0: 1:װ
#define VOLT_ERR_DATA7	0x40			// +1.5Vd  0: 1:װ

// HDD󋵂ޯď (fcsoftrasGetHDDInf)
#define HDDCONN_SMARTERR_BIT	0x01	// SMARTG[0:   1:ُ
#define HDDCONN_CONNECT_BIT		0x40	// HDDڑ    0:ڑ 1:ڑL
#define HDDCONN_MIRROR_BIT		0x80	// װ    0:ڑ 1:ڑL

// ~[ð (fcsoftrasGetMirrorStatus)
#define HDDSTS_NORMAL			0x00	// 
#define	HDDSTS_ERR_DRV1			0x10	// װDrive1̏
#define	HDDSTS_ERR_DRV2			0x11	// װDrive2̏
#define	HDDSTS_RECON_1			0x20	// ްč\z(Drive2Drive1ֺ߰)
#define	HDDSTS_RECON_2			0x21	// ްč\z(Drive1Drive2ֺ߰)
#define	HDDSTS_RECON_SKIP_1		0x30	// غݔ(Drive1Drive2ްč\z)
#define	HDDSTS_RECON_SKIP_2		0x31	// غݔ(Drive2Drive1ްč\z)

// PCIèװޯď (fcsoftrasGetPciError)
#define PCIERR_PARI				0x01	// PCIè  0: 1:װ

// SMARTӰ (fcsoftrasSetSAMRTMode)
#define SMARTMODE_DRVBRK_SMERR	0x01	// ײ1̏᎞ SMARTװ
#define SMARTMODE_ABORT			0x02	// ް (SMARTގt)
#define SMARTMODE_DRVBRK_NOSMERR 0x03	// ײ1̏᎞ SMARTװƂȂ
#define SMARTMODE_DRVBRK_ONESMOK 0x04	// ײ1̏᎞ ̂ݐ


// HDDײގw
#define HDDSTS_PRI_MAS	(0x10)			// vC}}X^w
#define HDDSTS_PRI_SRV	(0x20)			// vC}X[uw
#define HDDSTS_SEC_MAS	(0x30)			// ZJ_}X^w
#define HDDSTS_SEC_SRV	(0x40)			// ZJ_X[uw

#define HDDSTS_DRV1		(0x01)			// ~[DRIVE1w
#define HDDSTS_DRV2		(0x02)			// ~[DRIVE2w

//***********************************************************************
//	f[^\
//***********************************************************************

#pragma pack(1)

// hCoo[W (fcsoftrasGetVersion)
typedef struct _FCSOFTRAS_VAR {
	BYTE ModelNum[LEN_VAR_MODELNUM];	// fio[           (ASCII 40)
	BYTE FirmRev[LEN_VAR_FIRMREV];		// t@[EFArV (ASCII 8)
	BYTE SerialNum[LEN_VAR_SELIALNUM];	// VAio[         (ASCII 20)
} FCSOFTRAS_VAR, *PFCSOFTRAS_VAR;

// x (fcsoftrasGetTemp)
typedef struct _FCSOFTRAS_TEMP {
	BYTE TempError;						// xG[    (Bit)
	BYTE TempWarn;						// x[jO(Bit)
	signed char TempData1;				// xf[^1 (CPUx)
	signed char TempData2;				// xf[^2 (VXex)
} FCSOFTRAS_TEMP, *PFCSOFTRAS_TEMP;

// t@ (fcsoftrasGetFan)
typedef struct _FCSOFTRAS_FAN {
	BYTE FanError;						// t@]G[(Bit)
	WORD FanData1;						// t@]f[^1 (CPUt@)
	WORD FanData2;						// t@]f[^2 (\t@)
	WORD FanData3;						// t@]f[^3 (At@)
	WORD FanData4;						// t@]f[^4 (dt@)
} FCSOFTRAS_FAN, *PFCSOFTRAS_FAN;

// d (fcsoftrasGetVoltage)
typedef struct _FCSOFTRAS_VOLT {
	BYTE VoltError;						// dG[(Bit)
	float VoltData1;					// df[^1 (+2.5V)
	float VoltData2;					// df[^2 (CPU VRM)
	float VoltData3;					// df[^3 (+3.3V)
	float VoltData4;					// df[^4 (+5V)
	float VoltData5;					// df[^5 (+12V)
	float VoltData6;					// df[^6 (+3.3VSB)
	float VoltData7;					// df[^7 (+1.5V)
} FCSOFTRAS_VOLT, *PFCSOFTRAS_VOLT;

// HDD (fcsoftrasGetHDDinf)
typedef struct _FCSOFTRAS_HDDINF {
	BYTE PriMasState;					// ײإϽ    (Bit)
	BYTE PriSrvState;					// ײإڰޏ  (Bit)
	BYTE SecMasState;					// إϽ    (Bit)
	BYTE SecSrvState;					// إڰޏ  (Bit)
} FCSOFTRAS_HDDINF, *PFCSOFTRAS_HDDINF;

// װޏ (fcsoftrasGetMirrorStatus)
typedef struct _FCSOFTRAS_MRRSTS {
	BYTE Status;						// װ ð
	BYTE Drv1;							// Drive1  (Bit)
	BYTE Drv2;							// Drive2  (Bit)
} FCSOFTRAS_MRRSTS, *PFCSOFTRAS_MRRSTS;

// SMART (fcsoftrasGetSMART)
typedef struct _FCSOFTRAS_SMART {
	BYTE SmartData[LEN_SMART];			// SMARTf[^ (512byte)
} FCSOFTRAS_SMART, *PFCSOFTRAS_SMART;

// PCIpeBG[ (fcsoftrasGetPciError)
typedef struct _FCSOFTRAS_PCIERR {
	BYTE PciErr;						// PCIpeBG[(bit)
} FCSOFTRAS_PCIERR, *PFCSOFTRAS_PCIERR;

// oCoR (fcsoftrasGetRevRcn/fcsoftrasSetRevRcn)
typedef struct _FCSOFTRAS_REVRCN {
	BYTE Count;							// oCoR
} FCSOFTRAS_REVRCN, *PFCSOFTRAS_REVRCN;

// RTCf[^ (fcsoftrasGetRTCTime)
typedef struct _FCSOFTRAS_RTCTIME {
	BYTE Year;							// (2)
	BYTE Month;							// 
	BYTE Day;							// 
	BYTE Wday;							// j
	BYTE Hour;							// 
	BYTE Minute;						// 
	BYTE Second;						// b
} FCSOFTRAS_RTCTIME, *PFCSOFTRAS_RTCTIME;

// HDD Error Log  (fcsoftrasGetHDDErrorLog)
typedef struct _FCSOFTRAS_ERRLOG {
	BYTE ErrorLog[LEN_ERRLOG];			// ErrorLogf[^ (512x64byte)
} FCSOFTRAS_ERRLOG, *PFCSOFTRAS_ERRLOG;

#pragma pack( )
