277 lines
6.5 KiB
C
277 lines
6.5 KiB
C
/*++
|
|
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
|