/////////////////////////////////////////////////////////////////////////////
//
// This header file defines hardware monitoring data source descriptor 
// stucture, used by hardware monitoring plugin modules to describe the
// sources, exported by the plugin
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _MONITORING_SOURCE_DESC_INCLUDED_
#define _MONITORING_SOURCE_DESC_INCLUDED_
/////////////////////////////////////////////////////////////////////////////
// v1.0 descriptor
/////////////////////////////////////////////////////////////////////////////
typedef struct MONITORING_SOURCE_DESC_V_1_0
{
	char	szName[32];
		//data source name (e.g. "Core temperature")
	char	szDim[32];
		//data source dimension (e.g. "°C")

	//the following fields define default graph's limits and grid dimension
	//(these values are used by default during graph rendering, but user can
	//redefine them via the source's properties).

	FLOAT	fltMaxLimit;
		//default maximum graph limit (e.g. 100°C)
	FLOAT	fltMinLimit;
		//default minimum graph limit (e.g. 0°C)
	FLOAT	fltGridDim;
		//default grid dimension (amount of grid lines between min and max limits)
} MONITORING_SOURCE_DESC_V_1_0, *LPMONITORING_SOURCE_DESC_V_1_0;
/////////////////////////////////////////////////////////////////////////////
// v1.1+ descriptor
/////////////////////////////////////////////////////////////////////////////
typedef struct MONITORING_SOURCE_DESC
{
	DWORD	dwVersion;
		//descriptor version ((major<<16) + minor)
		//must be set to 0x00010001 or greater to use this structure

		//Don't change this field when filling the descriptor!

	char	szName[32];
		//data source name (e.g. "Core temperature")
	char	szDim[32];
		//data source dimension (e.g. "°C")

	//the following fields define default graph's limits and grid dimension
	//(these values are used by default during graph rendering, but user can
	//redefine them via the source's properties).

	FLOAT	fltMaxLimit;
		//default maximum graph limit (e.g. 100°C)
	FLOAT	fltMinLimit;
		//default minimum graph limit (e.g. 0°C)
	FLOAT	fltGridDim;
		//default grid dimension (amount of grid lines between min and max limits)

	char	szDesc[64];
		//data source description (e.g. "Remote temperature reported by MAX6648-compatible sensor")

//v1.2+ specific fields, DON'T try to access them if version is below 1.2

	char	szGroup[16];
		//data source group name used for grouping data by it in OSD, tooltip etc

		//try to use as short group name as possible, group name can be optionally rendered in OSD 
		//and each extra rendered character brings performance penalties, so it's recommended to 
		//use up to 4 characters for name (e.g. "GPU")

//v1.3+ specific fields, DON'T try to access them if version is below 1.3

	char	szFormat[16];
		//output format (may be empty to specify default %.2f format)
} MONITORING_SOURCE_DESC, *LPMONITORING_SOURCE_DESC;
/////////////////////////////////////////////////////////////////////////////
#define MONITORING_SOURCE_CAPS_MULTIGPU_SUPPORT								0
	//the sources supporting multiGPU monitoring must report this capability
	//NOTE: the sources supporting multiGPU monitoring are not recreated on
    // current device change
#define MONITORING_SOURCE_CAPS_SYSTEM_WIDE								1
	//the sources providing system wide data (e.g. memory usage) must report
	//this capability
	//NOTE: system wide sources are not recreated on current device change

/////////////////////////////////////////////////////////////////////////////
#endif