|
|
/*++
Copyright (c) 2000,2001 Microsoft Corporation
Module Name: chgrinfo.c
Abstract: SMBus Battery Charger Information Property Sheet module.
Environment: User mode
Author: Michael Tsang (MikeTs) 26-Jan-2001
Revision History: --*/
#include "pch.h"
#ifdef CHGRINFO
PSZ gapszChgrStatus1Names[] = { "ACPresent", "BattPresent", "PwrFail", "AlarmDisabled", "ThermUR", "ThermHot", "ThermCold", "ThermOR", "InvalidVoltage", "InvalidCurrent" }; PSZ gapszChgrStatus2Names[] = { "CurrentNotInReg", "VoltageNotInReg", "MasterMode", "Disabled" };
SMBCMD_INFO gChgrCmds[] = { CHGRCMD_SPECINFO, SMB_READ_WORD, CSI, sizeof(WORD), "ChargerSpecInfo", NULL, 0, NULL, CHGRCMD_STATUS, SMB_READ_WORD, CST, sizeof(WORD), " ChargerStatus", NULL, 0xffc0, gapszChgrStatus1Names, CHGRCMD_LTC_VERSION, SMB_READ_WORD, WHX, sizeof(WORD), " LTCVersion", NULL, 0, NULL, }; #define NUM_CHGR_CMDS (sizeof(gChgrCmds)/sizeof(SMBCMD_INFO))
CHGR_INFO gChgrInfo = {0};
/*++
@doc EXTERNAL
@func INT_PTR | ChargerDlgProc | Dialog procedure for the battery charger 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 ChargerDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { TRACEPROC("ChargerDlgProc", 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 = InitChargerPage(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_CHGRINFO_REFRESH)); rc = TRUE; break; } } break; }
case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHGRINFO_REFRESH: RefreshChgrInfo(GetDlgItem(hwnd, IDC_CHGRINFO_TEXT)); break; } break; }
TRACEEXIT(("=%x\n", rc)); return rc; } //ChargerDlgProc
/*++
@doc INTERNAL
@func BOOL | InitChargerPage | Initialize the battery charger property page.
@parm IN HWND | hwnd | Window handle.
@rvalue Always returns TRUE. --*/
BOOL InitChargerPage( IN HWND hwnd ) { TRACEPROC("InitChargerPage", 2) HWND hwndEdit;
TRACEENTER(("(hwnd=%x)\n", hwnd));
hwndEdit = GetDlgItem(hwnd, IDC_CHGRINFO_TEXT); SendMessage(hwndEdit, WM_SETFONT, (WPARAM)ghFont, MAKELONG(FALSE, 0));
RefreshChgrInfo(hwndEdit);
TRACEEXIT(("=1\n")); return TRUE; } //InitChargerPage
/*++
@doc INTERNAL
@func VOID | RefreshChgrInfo | Refresh charger information.
@parm IN HWND | hwndEdit | Handle to edit control.
@rvalue None. --*/
VOID RefreshChgrInfo( IN HWND hwndEdit ) { TRACEPROC("RefreshChgrInfo", 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(&gChgrInfo, 0, sizeof(gChgrInfo)); for (i = 0, pbBuff = (PBYTE)&gChgrInfo; i < NUM_CHGR_CMDS; ++i) { if (GetSMBDevInfo(SMB_CHARGER_ADDRESS, &gChgrCmds[i], pbBuff)) { DisplayChgrInfo(hwndEdit, &gChgrCmds[i], pbBuff); } else { TRACEWARN(("failed to get charger info. for %s.\n", gChgrCmds[i].pszLabel)); } pbBuff += gChgrCmds[i].iDataSize; }
//
// Scroll back to the top.
//
SendMessage(hwndEdit, EM_SETSEL, 0, 0); SendMessage(hwndEdit, EM_SCROLLCARET, 0, 0);
TRACEEXIT(("!\n")); return; } //RefreshChgrInfo
/*++
@doc INTERNAL
@func BOOL | DisplayChgrInfo | Display charger info.
@parm IN HWND | hwndEdit | Edit window handle. @parm IN PSMBCMD_INFO | ChgrCmd | Points to the charger command. @parm IN PBYTE | pbBuff | Charger data to display.
@rvalue SUCCESS | Returns TRUE if it handles it. @rvalue FAILURE | Returns FALSE if it doesn't handle it. --*/
BOOL DisplayChgrInfo( IN HWND hwndEdit, IN PSMBCMD_INFO ChgrCmd, IN PBYTE pbBuff ) { TRACEPROC("DisplayChgrInfo", 3) BOOL rc = TRUE; WORD wData = *((PWORD)pbBuff);
TRACEENTER(("(hwndEdit=%x,ChgrCmd=%p,Cmd=%s,pbBuff=%p)\n", hwndEdit, ChgrCmd, ChgrCmd->pszLabel, pbBuff));
EditPrintf(hwndEdit, "%s=", ChgrCmd->pszLabel); switch (ChgrCmd->bType) { case TYPEF_CHGR_SPECINFO: EditPrintf(hwndEdit, "0x%04x", wData); if (wData & CHGRSI_SELECTOR_SUPPORT) { EditPrintf(hwndEdit, ",SelectorSupport"); } EditPrintf(hwndEdit, ",Spec:%x\r\n", wData & CHGRSI_SPEC_MASK); break;
case TYPEF_CHGR_STATUS: EditPrintf(hwndEdit, "0x%04x", wData); DisplayDevBits(hwndEdit, ChgrCmd->dwData, (PSZ *)ChgrCmd->pvData, (DWORD)wData); if ((wData & CHGRSTATUS_CTRL_MASK) == CHGRSTATUS_CTRL_BATT) { EditPrintf(hwndEdit, ",BattCtrl'd"); } else if ((wData & CHGRSTATUS_CTRL_MASK) == CHGRSTATUS_CTRL_HOST) { EditPrintf(hwndEdit, ",HostCtrl'd"); } DisplayDevBits(hwndEdit, 0xf, gapszChgrStatus2Names, (DWORD)wData); EditPrintf(hwndEdit, "\r\n"); break;
default: rc = DisplaySMBDevInfo(hwndEdit, ChgrCmd, pbBuff); }
TRACEEXIT(("=%x\n", rc)); return rc; } //DisplayChgrInfo
#endif //ifdef CHGRINFO
|