summaryrefslogtreecommitdiff
path: root/usb/usbview/xmlhelper.cpp
diff options
context:
space:
mode:
authorJ M Rossy <[email protected]>2015-07-29 15:40:09 -0700
committerJ M Rossy <[email protected]>2015-07-29 16:34:40 -0700
commit5d61a4a79a1e96dc5d9af1e5e712c84507307544 (patch)
tree49ed270893578cd18758b74ffcca16dc7ab948d6 /usb/usbview/xmlhelper.cpp
parent5d41613e26e147d2300c786bb2b34cb4b4067a25 (diff)
Samples update for public Windows 10 release
Fix #2 Enabling WPP Recorder in Sensors Samples causes errors Fix #4 Add back fixed KMDOD sample Add new BarcodeScanner sample in pos folder Add new MagneticStripeReader sample in pos folder Add new SynpaticsTouch sample in input folder Add new Power Engine Plugin sample in pofx folder Add new DeviceMft sample in avstream folder Add new AvsCamera sample in root Add new SimBatt sample in root Add other pre-existing samples not yet released for Win10
Diffstat (limited to 'usb/usbview/xmlhelper.cpp')
-rw-r--r--usb/usbview/xmlhelper.cpp176
1 files changed, 171 insertions, 5 deletions
diff --git a/usb/usbview/xmlhelper.cpp b/usb/usbview/xmlhelper.cpp
index 4221aeb0..cf39a87d 100644
--- a/usb/usbview/xmlhelper.cpp
+++ b/usb/usbview/xmlhelper.cpp
@@ -200,7 +200,10 @@ array < UsbDeviceConfigurationType ^> ^ XmlGetConfigDescriptors(
PUSBDEVICEINFO deviceInfo,
PUSB_CONFIGURATION_DESCRIPTOR configDescs,
PSTRING_DESCRIPTOR_NODE stringDesc);
-UsbBosDescriptorType ^ XmlGetBosDescriptor(PUSB_BOS_DESCRIPTOR bosDesc);
+UsbBosDescriptorType ^ XmlGetBosDescriptor(
+ PUSB_BOS_DESCRIPTOR bosDesc,
+ PSTRING_DESCRIPTOR_NODE stringDesc
+ );
UsbDeviceClassType ^ XmlGetDeviceClass(UCHAR deviceClass, UCHAR deviceSubClass, UCHAR deviceProtocol);
UsbDeviceUnknownDescriptorType ^ XmlGetUnknownDescriptor(
PUSB_COMMON_DESCRIPTOR unknownDesc
@@ -214,6 +217,10 @@ UsbSuperSpeedExtensionDescriptorType ^ XmlGetSuperSpeedCapabilityExtensionDescri
UsbDispContIdCapExtDescriptorType ^ XmlGetContainerIdCapabilityExtensionDescriptor(
PUSB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR capDesc
);
+UsbBillboardCapabilityDescriptorType ^ XmlGetBillboardCapabilityDescriptor(
+ PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR capDesc,
+ PSTRING_DESCRIPTOR_NODE stringDesc
+ );
/*****************************************************************************
D E F I N I T I O N S
@@ -1525,7 +1532,18 @@ UsbDeviceClassType ^ XmlGetDeviceClass(UCHAR bInterfaceClass, UCHAR bInterfaceSu
deviceSubclass += bInterfaceSubclass;
}
break;
-
+ case USB_DEVICE_CLASS_BILLBOARD:
+ deviceClass = gcnew String("Billboard Class");
+ switch (bInterfaceSubclass)
+ {
+ case 0:
+ deviceSubclass = gcnew String("Billboard Subclass");
+ break;
+ default:
+ deviceSubclass = gcnew String("CAUTION: This appears to be an invalid bInterfaceSubClass");
+ break;
+ }
+ break;
default:
deviceClass = gcnew String("Interface Class unknown : ");
@@ -2118,6 +2136,10 @@ String ^ XmlGetDeviceClassString(UCHAR deviceClass)
deviceClassStr = gcnew String("Vendor specific device");
break;
+ case USB_DEVICE_CLASS_BILLBOARD:
+ deviceClassStr = gcnew String("Billboard class device");
+ break;
+
default:
deviceClassStr= gcnew String("ERROR: unknown bDeviceClass" + deviceClass);
break;
@@ -2186,6 +2208,13 @@ bool XmlAddDeviceClassDetails(
{
deviceDetails->DeviceType = XmlGetDeviceClassString(connectionInfo->DeviceDescriptor.bDeviceClass);
+ if (connectionInfo->DeviceDescriptor.bDeviceClass == USB_DEVICE_CLASS_BILLBOARD &&
+ (connectionInfo->DeviceDescriptor.bDeviceSubClass != 0x0 ||
+ connectionInfo->DeviceDescriptor.bDeviceProtocol != 0x0))
+ {
+ deviceDetails->DeviceTypeError = gcnew String("ERROR: Billboard device has invalid bDeviceSubclass/bDeviceProtocol");
+ }
+
if (connectionInfo->DeviceDescriptor.bDeviceClass == USB_MISCELLANEOUS_DEVICE)
{
deviceDetails->DeviceTypeError = gcnew String("ERROR: Multi-interface Function code " +
@@ -2443,7 +2472,7 @@ HRESULT XmlAddExternalHub(PSTR ehName, PUSBEXTERNALHUBINFO ehInfo)
// Add BOS descriptor
if (NULL != ehInfo->BosDesc)
{
- exHub->BosDescriptor = XmlGetBosDescriptor((PUSB_BOS_DESCRIPTOR) (ehInfo->BosDesc + 1));
+ exHub->BosDescriptor = XmlGetBosDescriptor((PUSB_BOS_DESCRIPTOR) (ehInfo->BosDesc + 1), ehInfo->StringDescs);
}
gXmlStack->Push(exHub);
@@ -2461,7 +2490,10 @@ HRESULT XmlAddExternalHub(PSTR ehName, PUSBEXTERNALHUBINFO ehInfo)
Gets the Bos descriptor object for given BOS descriptor
*****************************************************************************/
-UsbBosDescriptorType ^ XmlGetBosDescriptor(PUSB_BOS_DESCRIPTOR bosDesc)
+UsbBosDescriptorType ^ XmlGetBosDescriptor(
+ PUSB_BOS_DESCRIPTOR bosDesc,
+ PSTRING_DESCRIPTOR_NODE stringDesc
+ )
{
PUSB_COMMON_DESCRIPTOR commonDesc = NULL;
PUSB_DEVICE_CAPABILITY_DESCRIPTOR capDesc = NULL;
@@ -2470,6 +2502,7 @@ UsbBosDescriptorType ^ XmlGetBosDescriptor(PUSB_BOS_DESCRIPTOR bosDesc)
ArrayList ^usbSuperSpeedExtDescList = gcnew ArrayList();
ArrayList ^usbContIdCapExtDescList = gcnew ArrayList();
ArrayList ^usbUnknownDescList = gcnew ArrayList();
+ ArrayList ^usbBillboardDescList = gcnew ArrayList();
if(NULL == bosDesc)
{
@@ -2517,6 +2550,14 @@ UsbBosDescriptorType ^ XmlGetBosDescriptor(PUSB_BOS_DESCRIPTOR bosDesc)
)
);
break;
+ case USB_DEVICE_CAPABILITY_BILLBOARD:
+ usbBillboardDescList->Add(
+ XmlGetBillboardCapabilityDescriptor(
+ (PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR) capDesc,
+ stringDesc
+ )
+ );
+ break;
default:
usbUnknownDescList->Add(
XmlGetUnknownDescriptor(
@@ -2545,6 +2586,9 @@ UsbBosDescriptorType ^ XmlGetBosDescriptor(PUSB_BOS_DESCRIPTOR bosDesc)
bosXmlDesc->UsbDispContIdCapExtDescriptor = reinterpret_cast<array<UsbDispContIdCapExtDescriptorType ^>^> (
usbContIdCapExtDescList->ToArray(UsbDispContIdCapExtDescriptorType::typeid)
);
+ bosXmlDesc->UsbBillboardCapabilityDescriptor = reinterpret_cast<array<UsbBillboardCapabilityDescriptorType ^>^> (
+ usbBillboardDescList->ToArray(UsbBillboardCapabilityDescriptorType::typeid)
+ );
return bosXmlDesc;
}
@@ -2733,6 +2777,125 @@ UsbDispContIdCapExtDescriptorType ^ XmlGetContainerIdCapabilityExtensionDescript
return capXmlDesc;
}
+
+/*****************************************************************************
+
+XmlGetBillboardCapabilityDescriptor()
+
+Gets a billboard capability descriptor from a given descriptor
+*****************************************************************************/
+UsbBillboardCapabilityDescriptorType ^ XmlGetBillboardCapabilityDescriptor(
+ PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR capDesc,
+ PSTRING_DESCRIPTOR_NODE stringDesc
+ )
+{
+ UCHAR i = 0;
+ UCHAR bNumAlternateModes = 0;
+ UCHAR alternateModeConfiguration = 0;
+ UsbBillboardCapabilityDescriptorType ^ capXmlDesc = nullptr;
+ UsbBillboardSVIDType ^ svidXmlDesc = nullptr;
+ ArrayList ^ usbSVIDDescList = gcnew ArrayList();
+
+
+ if (NULL == capDesc)
+ {
+ return nullptr;
+ }
+
+ capXmlDesc = gcnew UsbBillboardCapabilityDescriptorType();
+
+
+ capXmlDesc->BLength = capDesc->bLength;
+ capXmlDesc->BDescriptorType = capDesc->bDescriptorType;
+ capXmlDesc->BDevCapabilityType = capDesc->bDevCapabilityType;
+ capXmlDesc->IAddtionalInfoURL = capDesc->iAddtionalInfoURL;
+ capXmlDesc->BNumberOfAlternateModes = capDesc->bNumberOfAlternateModes;
+ capXmlDesc->BPreferredAlternateMode = capDesc->bPreferredAlternateMode;
+ capXmlDesc->CalculatedBLength = sizeof(USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR) +
+ sizeof(capDesc->AlternateMode[0]) * (capDesc->bNumberOfAlternateModes - 1);
+ capXmlDesc->BillboardDescriptorErrors = gcnew String("");
+ capXmlDesc->AddtionalInfoURL = XmlGetStringDescriptor(
+ capDesc->iAddtionalInfoURL,
+ stringDesc,
+ false
+ );
+
+ if (capDesc->VconnPower.NoVconnPowerRequired)
+ {
+ capXmlDesc->VConnPower = gcnew String("The adapter does not require Vconn Power. Bits 2..0 ignored");
+ }
+ else
+ {
+ switch (capDesc->VconnPower.VConnPowerNeededForFullFunctionality)
+ {
+ case 0:
+ capXmlDesc->VConnPower = gcnew String("1W needed by adapter for full functionality");
+ break;
+ case 1:
+ capXmlDesc->VConnPower = gcnew String("1.5W needed by adapter for full functionality");
+ break;
+ case 7:
+ capXmlDesc->BillboardDescriptorErrors += "ERROR: VConnPowerNeededForFullFunctionality - Reserved value being used";
+ break;
+ default:
+ capXmlDesc->VConnPower = gcnew String(String::Format("{0} W needed by adapter for full functionality", capDesc->VconnPower.VConnPowerNeededForFullFunctionality));
+ }
+ }
+
+ if (capDesc->bNumberOfAlternateModes > BILLBOARD_MAX_NUM_ALT_MODE)
+ {
+ capXmlDesc->BillboardDescriptorErrors += "ERROR: Invalid bNumberofAlternateModes; ";
+ }
+ if (capDesc->VconnPower.Reserved)
+ {
+ capXmlDesc->BillboardDescriptorErrors += "ERROR: Reserved bits in VCONN Power being used; ";
+ }
+ if (capDesc->bReserved)
+ {
+ capXmlDesc->BillboardDescriptorErrors += "ERROR: bReserved being used; ";
+ }
+
+ bNumAlternateModes = capDesc->bNumberOfAlternateModes;
+ if (bNumAlternateModes > BILLBOARD_MAX_NUM_ALT_MODE)
+ {
+ bNumAlternateModes = BILLBOARD_MAX_NUM_ALT_MODE;
+ }
+ for (i = 0; i < bNumAlternateModes; i++)
+ {
+ svidXmlDesc = gcnew UsbBillboardSVIDType();
+ alternateModeConfiguration = ((capDesc->bmConfigured[i / 4]) >> ((i % 4) * 2)) & 0x3;
+ svidXmlDesc->WSVID = capDesc->AlternateMode[i].wSVID;
+ svidXmlDesc->BAlternateMode = capDesc->AlternateMode[i].bAlternateMode;
+ svidXmlDesc->IAlternateModeString = capDesc->AlternateMode[i].iAlternateModeSetting;
+ svidXmlDesc->AlternateModeString = XmlGetStringDescriptor(
+ capDesc->AlternateMode[i].iAlternateModeSetting,
+ stringDesc,
+ false
+ );
+
+ switch (alternateModeConfiguration)
+ {
+ case 0:
+ svidXmlDesc->Description = gcnew String("Unspecified Error");
+ break;
+ case 1:
+ svidXmlDesc->Description = gcnew String("Alternate Mode configuration not attempted");
+ break;
+ case 2:
+ svidXmlDesc->Description = gcnew String("Alternate Mode configuration attempted but unsuccessful");
+ break;
+ case 3:
+ svidXmlDesc->Description = gcnew String("Alternate Mode configuration successful");
+ break;
+ }
+ usbSVIDDescList->Add(svidXmlDesc);
+ }
+ capXmlDesc->UsbBillboardSVID = reinterpret_cast<array<UsbBillboardSVIDType ^>^> (
+ usbSVIDDescList->ToArray(UsbBillboardSVIDType::typeid));
+
+ return capXmlDesc;
+}
+
/*****************************************************************************
XmlAddUsbDevice()
@@ -2852,7 +3015,10 @@ HRESULT XmlAddUsbDevice(PSTR devName, PUSBDEVICEINFO deviceInfo)
// Add BOS descriptor
if (NULL != deviceInfo->BosDesc)
{
- usbDevice->BosDescriptor = XmlGetBosDescriptor((PUSB_BOS_DESCRIPTOR) (deviceInfo->BosDesc + 1));
+ usbDevice->BosDescriptor = XmlGetBosDescriptor(
+ (PUSB_BOS_DESCRIPTOR) (deviceInfo->BosDesc + 1),
+ deviceInfo->StringDescs
+ );
}
}
else