124 lines
4.2 KiB
C++
124 lines
4.2 KiB
C++
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORP., 1993-1995
|
|
* TITLE: ENUMFAIL.CPP
|
|
* VERSION: 1.0
|
|
* AUTHOR: jsenior
|
|
* DATE: 10/28/1998
|
|
*
|
|
********************************************************************************
|
|
*
|
|
* CHANGE LOG:
|
|
*
|
|
* DATE REV DESCRIPTION
|
|
* ---------- ------- ----------------------------------------------------------
|
|
* 10/28/1998 jsenior Original implementation.
|
|
*
|
|
*******************************************************************************/
|
|
#include "usbpopup.h"
|
|
#include "itemfind.h"
|
|
#include "debug.h"
|
|
#include "usbutil.h"
|
|
|
|
//
|
|
// Refresh the contents of the treeview control.
|
|
// Find all hubs with unused ports on them. If there are none, find some which
|
|
// have devices requiring less than 100 mA.
|
|
//
|
|
BOOL UsbEnumFailPopup::Refresh()
|
|
{
|
|
TV_INSERTSTRUCT item;
|
|
int i=0; //, size;
|
|
PUSB_ACQUIRE_INFO acquireInfoController = 0;
|
|
BOOL result = FALSE;
|
|
TCHAR buf[MAX_PATH];
|
|
String hubName = HubAcquireInfo->Buffer;
|
|
|
|
//
|
|
// Set the window's title bar and the rest of the messages
|
|
//
|
|
LoadString(gHInst, IDS_ENUMERATION_FAILURE, buf, MAX_PATH);
|
|
SetWindowText(hWnd, buf);
|
|
|
|
if (!SetTextItem(hWnd, IDC_POWER_NOTIFICATION, IDS_ENUMFAIL_NOTIFICATION) ||
|
|
!SetTextItem(hWnd, IDC_POWER_EXPLANATION, IDS_ENUMFAIL_COURSE) ||
|
|
!SetTextItem(hWnd, IDC_POWER_RECOMMENDATION, IDS_ENUMFAIL_RECOMMENDATION)) {
|
|
goto OvercurrentRefreshError;
|
|
}
|
|
|
|
//
|
|
// Clear all UI components, and then recreate the rootItem
|
|
//
|
|
UsbTreeView_DeleteAllItems(hTreeDevices);
|
|
if (rootItem) {
|
|
DeleteChunk(rootItem);
|
|
delete rootItem;
|
|
}
|
|
rootItem = new UsbItem;
|
|
AddChunk(rootItem);
|
|
|
|
//
|
|
// Get the controller name and enumerate the tree
|
|
//
|
|
acquireInfoController = GetControllerName(WmiHandle,
|
|
InstanceName);
|
|
if (!acquireInfoController) {
|
|
goto OvercurrentRefreshError;
|
|
}
|
|
|
|
if (!rootItem->EnumerateController(0,
|
|
acquireInfoController->Buffer,
|
|
&ImageList,
|
|
0)) {
|
|
goto OvercurrentRefreshError;
|
|
}
|
|
acquireInfoController =
|
|
(PUSB_ACQUIRE_INFO) LocalFree(acquireInfoController);
|
|
|
|
if (rootItem->child) {
|
|
if (!deviceItem.configInfo->devInst) {
|
|
//
|
|
// Device has been removed by either the hub or the user. Find the
|
|
// hub that the device was attached to and highlight the port.
|
|
//
|
|
UsbItemActionFindOvercurrentHubPort f2(hubName, deviceItem.cxnAttributes.ConnectionIndex);
|
|
rootItem->Walk(f2);
|
|
if (f2.GetDevice()) {
|
|
result=InsertTreeItem (hTreeDevices,
|
|
rootItem->child,
|
|
TreeView_GetRoot(hTreeDevices),
|
|
&item,
|
|
TrueAlways,
|
|
UsbItemActionFindOvercurrentHubPort::IsValid,
|
|
UsbItemActionFindOvercurrentHubPort::IsExpanded);
|
|
}
|
|
} else {
|
|
//
|
|
// The device hasn't been removed by either the hub or the user yet
|
|
// Find the overcurrent device
|
|
//
|
|
UsbItemActionFindOvercurrentDevice f1(deviceItem.configInfo->devInst);
|
|
rootItem->Walk(f1);
|
|
if (f1.GetDevice()) {
|
|
//
|
|
// Device is still attached
|
|
//
|
|
result=InsertTreeItem (hTreeDevices,
|
|
rootItem->child,
|
|
TreeView_GetRoot(hTreeDevices),
|
|
&item,
|
|
TrueAlways,
|
|
UsbItemActionFindOvercurrentDevice::IsValid,
|
|
UsbItemActionFindOvercurrentDevice::IsExpanded);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
OvercurrentRefreshError:
|
|
if (acquireInfoController) {
|
|
LocalFree(acquireInfoController);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|