I think I have located the 1.6 temperature sensor (inside the xcalibur) and would like it if some one with a 1.6 xbox could try it out. I have tested it but the temperature read out is a bit "jumpy", it jumps with in 2C when idle. I just tested unplugging the fan and the temp whent up from 40C to 60C, I then plugged it in again and it whent back down again. Would like to see some more people testing it though.
Replace "void CFanController::GetCPUTempInternal()" (xbmc/xbmc/utils/FanController.cpp) with this one:
void CFanController::GetCPUTempInternal()
{
unsigned short cpu, cpudec;
//HalReadSMBusValue(PIC_ADDRESS, CPU_TEMP, 0, (LPBYTE)&cpuTemp);
if (!bIs16Box)
{
_outp(0xc004, (0x4c << 1) | 0x01);
_outp(0xc008, 0x01);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (0) ? 0x0b : 0x0a);
while ((_inp(0xc000) &
);
cpu = _inpw(0xc006);
_outp(0xc004, (0x4c << 1) | 0x01);
_outp(0xc008, 0x10);
_outpw(0xc000, _inpw(0xc000));
_outp(0xc002, (0) ? 0x0b : 0x0a);
while ((_inp(0xc000) &
);
cpudec = _inpw(0xc006);
cpuTemp = (float)cpu + (float)cpudec / 256.0f;
}
else
{
_outp(0xc004, (0x70 << 1) | 0x01); // address
_outp(0xc008, 0xC1); // command
_outpw(0xc000, _inpw(0xc000)); // clear possible old errors
_outp(0xc002, 0x0d); // start block transfer
while ((_inp(0xc000) &
); // wait for response
_inp(0xc004); // read out the data reg (no. bytes in block, will be 4)
cpudec = _inp(0xc009); // first byte
cpu = _inp(0xc009); // second byte
_inp(0xc009);
_inp(0xc009); // read out the two last bytes, dont' think its neccesary
cpuTemp = (float)cpu + (float)cpudec / 256.0f;
cpuTemp *= 0.8f; // adjust the "too high" cpu temp
}
}
I would be happy if someone could try it and report back.