/*++ Copyright (c) 2000,2001 Microsoft Corporation Module Name: tmpinfo.c Abstract: SMBus Temperature Sensor Information Property Sheet module. Environment: User mode Author: Michael Tsang (MikeTs) 25-Jan-2001 Revision History: --*/ #include "pch.h" #ifdef TMPINFO char gszUnitDegreeC[] = "\xb0" "C"; PSZ gapszTmpStatusNames[] = { "Busy", "LocalHiAlarm", "LocalLoAlarm", "RemoteHiAlarm", "RemoteLoAlarm", "RemoteOpen" }; PSZ gapszTmpCfgNames[] = { "Busy", "LocalHiAlarm", "LocalLoAlarm", "RemoteHiAlarm", "RemoteLoAlarm", "RemoteOpen" }; SMBCMD_INFO gTmpCmds[] = { TMPCMD_RD_LOCALTMP, SMB_READ_BYTE, BSN, sizeof(BYTE), " LocalTmp", gszUnitDegreeC, 0, NULL, TMPCMD_RD_REMOTETMP, SMB_READ_BYTE, BSN, sizeof(BYTE), " RemoteTmp", gszUnitDegreeC, 0, NULL, TMPCMD_RD_STATUS, SMB_READ_BYTE, BBT, sizeof(BYTE), " Status", NULL, 0xfc, gapszTmpStatusNames, TMPCMD_RD_CONFIG, SMB_READ_BYTE, BBT, sizeof(BYTE), " Config", NULL, 0xc0, gapszTmpCfgNames, TMPCMD_RD_CONVERSION_RATE, SMB_READ_BYTE, CNV, sizeof(BYTE), " ConversionRate", NULL, 0, NULL, TMPCMD_RD_LOCALTMP_HILIMIT, SMB_READ_BYTE, BSN, sizeof(BYTE), " LocalTmpHiLimit", gszUnitDegreeC, 0, NULL, TMPCMD_RD_LOCALTMP_LOLIMIT, SMB_READ_BYTE, BSN, sizeof(BYTE), " LocalTmpLoLimit", gszUnitDegreeC, 0, NULL, TMPCMD_RD_REMOTETMP_HILIMIT, SMB_READ_BYTE, BSN, sizeof(BYTE), "RemoteTmpHiLimit", gszUnitDegreeC, 0, NULL, TMPCMD_RD_REMOTETMP_LOLIMIT, SMB_READ_BYTE, BSN, sizeof(BYTE), "RemoteTmpLoLimit", gszUnitDegreeC, 0, NULL, TMPCMD_RD_MANUFACTURER_ID, SMB_READ_BYTE, BHX, sizeof(BYTE), " ManufacturerID", NULL, 0, NULL, TMPCMD_RD_DEVICE_ID, SMB_READ_BYTE, BHX, sizeof(BYTE), " DeviceID", NULL, 0, NULL, }; #define NUM_TMP_CMDS (sizeof(gTmpCmds)/sizeof(SMBCMD_INFO)) TMP_INFO gTmpInfo = {0}; /*++ @doc EXTERNAL @func INT_PTR | TemperatureDlgProc | Dialog procedure for the temperature page. @parm IN HWND | hwnd | Window handle. @parm IN UINT | uMsg | Message. @parm IN WPARAM | wParam | Word Parameter. @parm IN LPARAM | lParam | Long Parameter. @rvalue Return value depends on the message. --*/ INT_PTR APIENTRY TemperatureDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { TRACEPROC("TemperatureDlgProc", 2) INT_PTR rc = FALSE; TRACEENTER(("(hwnd=%p,Msg=%s,wParam=%x,lParam=%x)\n", hwnd, LookupName(uMsg, WMMsgNames) , wParam, lParam)); switch (uMsg) { case WM_INITDIALOG: rc = InitTemperaturePage(hwnd); if (!rc) { EnableWindow(hwnd, FALSE); } break; case WM_NOTIFY: { NMHDR FAR *lpnm = (NMHDR FAR *)lParam; switch (lpnm->code) { case PSN_QUERYINITIALFOCUS: { SetWindowLong(hwnd, DWL_MSGRESULT, (LONG)GetDlgItem(hwnd, IDC_TMPINFO_REFRESH)); rc = TRUE; break; } } break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_TMPINFO_REFRESH: RefreshTmpInfo(GetDlgItem(hwnd, IDC_TMPINFO_TEXT)); break; } break; } TRACEEXIT(("=%x\n", rc)); return rc; } //TemperatureDlgProc /*++ @doc INTERNAL @func BOOL | InitTemperaturePage | Initialize the temperature sensor property page. @parm IN HWND | hwnd | Window handle. @rvalue Always returns TRUE. --*/ BOOL InitTemperaturePage( IN HWND hwnd ) { TRACEPROC("InitTemperaturePage", 2) HWND hwndEdit; TRACEENTER(("(hwnd=%x)\n", hwnd)); hwndEdit = GetDlgItem(hwnd, IDC_TMPINFO_TEXT); SendMessage(hwndEdit, WM_SETFONT, (WPARAM)ghFont, MAKELONG(FALSE, 0)); RefreshTmpInfo(hwndEdit); TRACEEXIT(("=1\n")); return TRUE; } //InitTemperaturePage /*++ @doc INTERNAL @func VOID | RefreshTmpInfo | Refresh termperature information. @parm IN HWND | hwndEdit | Handle to edit control. @rvalue None. --*/ VOID RefreshTmpInfo( IN HWND hwndEdit ) { TRACEPROC("RefreshTmpInfo", 3) int i; PBYTE pbBuff; TRACEENTER(("(hwndEdit=%x)\n", hwndEdit)); // // Erase edit control. // SendMessage(hwndEdit, EM_SETSEL, 0, -1); SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM)""); memset(&gTmpInfo, 0, sizeof(gTmpInfo)); for (i = 0, pbBuff = (PBYTE)&gTmpInfo; i < NUM_TMP_CMDS; ++i) { if (GetSMBDevInfo(SMB_TMPSENSOR_ADDRESS, &gTmpCmds[i], pbBuff)) { DisplayTmpInfo(hwndEdit, &gTmpCmds[i], pbBuff); } else { TRACEWARN(("failed to get temperature info. for %s.\n", gTmpCmds[i].pszLabel)); } pbBuff += gTmpCmds[i].iDataSize; } // // Scroll back to the top. // SendMessage(hwndEdit, EM_SETSEL, 0, 0); SendMessage(hwndEdit, EM_SCROLLCARET, 0, 0); TRACEEXIT(("!\n")); return; } //RefreshTmpInfo /*++ @doc INTERNAL @func BOOL | DisplayTmpInfo | Display temperature info. @parm IN HWND | hwndEdit | Edit window handle. @parm IN PSMBCMD_INFO | TmpCmd | Points to the temperature command. @parm IN PBYTE | pbBuff | Temperature data to display. @rvalue SUCCESS | Returns TRUE if it handles it. @rvalue FAILURE | Returns FALSE if it doesn't handle it. --*/ BOOL DisplayTmpInfo( IN HWND hwndEdit, IN PSMBCMD_INFO TmpCmd, IN PBYTE pbBuff ) { TRACEPROC("DisplayTmpInfo", 3) BOOL rc = TRUE; TRACEENTER(("(hwndEdit=%x,TmpCmd=%p,Cmd=%s,pbBuff=%p)\n", hwndEdit, TmpCmd, TmpCmd->pszLabel, pbBuff)); EditPrintf(hwndEdit, "%s=", TmpCmd->pszLabel); switch (TmpCmd->bType) { case TYPEF_CONV_RATE: { static char *RateTable[] = { "0.0625", "0.125", "0.25", "0.5", "1", "2", "4", "8" }; if (*pbBuff <= 7) { EditPrintf(hwndEdit, "%6s Hz\r\n", RateTable[*pbBuff]); } else { EditPrintf(hwndEdit, " 0x02x\r\n", *pbBuff); } break; } default: rc = DisplaySMBDevInfo(hwndEdit, TmpCmd, pbBuff); } TRACEEXIT(("=%x\n", rc)); return rc; } //DisplayTmpInfo #endif //ifdef TMPINFO