static int EcInit()
{
if (ioperm(EC_DATA_PORT, 1, 1) != 0)
{
return EXIT_FAILURE;
}
if (ioperm(EC_COMMAND_PORT, 1, 1) != 0)
{
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
1)
1.1 Прерываем цикл, когда на EC_COMMAND_PORT будет что-то отличное от 2, либо отсчет времени превысит
30000
1.2 Посылаем 0x99 в EC_COMMAND_PORT
2)
2.1 Прерываем цикл, когда на EC_COMMAND_PORT будет что-то отличное от 2
2.2 Посылаем 0x01 в EC_DATA_PORT
3)
3.1 Прерываем цикл, когда на EC_COMMAND_PORT будет что-то отличное от 2
3.2 Посылаем fanDuty в EC_DATA_PORT
static void SendCommand(int command)
{
int tt = 0;
while((inb(EC_COMMAND_PORT) & 2))
{
tt++;
if(tt>30000)
{
break;
}
}
outb(command, EC_COMMAND_PORT);
}
static void WriteData(int data)
{
while((inb(EC_COMMAND_PORT) & 2));
outb(data, EC_DATA_PORT);
}
static void WriteData(int data)
{
while((inb(EC_COMMAND_PORT) & 2));
outb(data, EC_DATA_PORT);
}