Host Embedded Controller Interface (HECI ) driver is a software interface that is used to communicate to the AMT subsystem (Management Engine) to access AMT capabilities. Communication between the local host operating system (OS) and the ME is accomplished by means of the HECI driver. HECI is bi-directional, as either the host OS or Intel AMT firmware can initiate transactions.

This project is created for research Intel Desktop Utilities Health monitoring (Fans, ThermalSensor, Voltage Sensors).
I have disassemble AfscComm.dll library - part of Intel Desktop Utilities.
There is result of my work - Win32 console utility for gather health information throuth HECI driver.

// GUID of Health montoring HECI client 
// this GUID was taken by disassemble AfscComm.dll - Intel Desktop Utilities component
//
DEFINE_GUID(HECI_HEALTH_GUID,
			0x6B5205B9,0x8185,0x4519,0xB8, 0x89, 0xD9, 0x87, 0x24, 0xB5, 0x86, 0x07);

For the first connect to HECI health client:
...DeviceIoControl(CreateFile(\\pci\\path to your heci),IOCTL_HECI_CONNECT_CLIENT,HECI_HEALTH_GUID)

There is commands for get health information from HECI driver (HECI.sys):
Use ...WriteFile(CreateFile(\\pci\\path to your heci),command);

// Get thermal sensor values
BYTE chThermCommand[5]=	{0x12,0x00,0x00,0x3d,0x00};
// Get fan tacho values
BYTE chFanCommand[5]=	{0x37,0x00,0x00,0x19,0x00};
// Get voltage values
BYTE chVoltCommand[5]=	{0x58,0x00,0x00,0x29,0x00};

Then return result of command:
...ReadFile()
Output format:

#pragma pack(1)

typedef struct _THERM_SENSOR
{
	BYTE bValid;
	DWORD dwValue;
}THERM_SENSOR,*PTHERM_SENSOR;

typedef struct _VOLT_SENSOR
{
	BYTE bValid;
	DWORD dwValue;
}VOLT_SENSOR,*PVOLT_SENSOR;

typedef struct _FAN_SENSOR
{
	BYTE bValid;
	SHORT dwValue;
}FAN_SENSOR,*PFAN_SENSOR;

typedef struct _HEALTH_INFO
{
	BYTE bReserved;
	union
	{
		THERM_SENSOR	Therms[6];
		VOLT_SENSOR		Volts[5];
		FAN_SENSOR		Fans[4];
	}u;
}HEALTH_INFO_STRUCT,*PHEALTH_INFO_STRUCT;

#pragma pack()



Download Source code

Useful links:
Intel Desktop Utilities
Intel AMT Software Development Kit (SDK)
Intel AMT Open Source Drivers and Tools

Screenshot (tested on Intel Desktop Board DJ965RY):
IDU:


My console test app:




Another example on how to gather health-sensor data from IPMI (test on Intel Server board S3200):

Intel Command Line Interface tool screenshot:


Download My Source Code



assembler4ever@mail.ru
Hosted by uCoz