added some hub ports information to listusb

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41157 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2011-03-31 21:58:06 +00:00
parent 12d7d464bc
commit 0e76cf0b69
5 changed files with 47 additions and 6 deletions
+3 -3
View File
@@ -128,10 +128,10 @@ Hub::UpdatePortStatus(uint8 index)
// get the current port status // get the current port status
size_t actualLength = 0; size_t actualLength = 0;
status_t result = DefaultPipe()->SendRequest(USB_REQTYPE_CLASS | USB_REQTYPE_OTHER_IN, status_t result = DefaultPipe()->SendRequest(USB_REQTYPE_CLASS | USB_REQTYPE_OTHER_IN,
USB_REQUEST_GET_STATUS, 0, index + 1, 4, (void *)&fPortStatus[index], USB_REQUEST_GET_STATUS, 0, index + 1, sizeof(usb_port_status),
4, &actualLength); (void *)&fPortStatus[index], sizeof(usb_port_status), &actualLength);
if (result < B_OK || actualLength < 4) { if (result < B_OK || actualLength < sizeof(usb_port_status)) {
TRACE_ERROR("error updating port status\n"); TRACE_ERROR("error updating port status\n");
return B_ERROR; return B_ERROR;
} }
@@ -12,6 +12,7 @@
#include "BeOSCompatibility.h" #include "BeOSCompatibility.h"
#include "usbspec_private.h" #include "usbspec_private.h"
#include <lock.h> #include <lock.h>
#include <util/Vector.h>
#define TRACE_OUTPUT(x, y, z...) \ #define TRACE_OUTPUT(x, y, z...) \
@@ -6,14 +6,13 @@
* Michael Lotz <[email protected]> * Michael Lotz <[email protected]>
* Niels S. Reedijk * Niels S. Reedijk
*/ */
#ifndef _USBSPEC_PRIVATE_H #ifndef _USBSPEC_PRIVATE_H
#define _USBSPEC_PRIVATE_H #define _USBSPEC_PRIVATE_H
#include <KernelExport.h> #include <KernelExport.h>
#include <util/Vector.h>
#include <USB3.h> #include <USB3.h>
#include <util/kernel_cpp.h>
#define USB_MAX_AREAS 8 #define USB_MAX_AREAS 8
#define USB_MAX_FRAGMENT_SIZE B_PAGE_SIZE * 96 #define USB_MAX_FRAGMENT_SIZE B_PAGE_SIZE * 96
@@ -96,6 +95,8 @@ struct usb_port_status
#define PORT_STATUS_POWER 0x0100 #define PORT_STATUS_POWER 0x0100
#define PORT_STATUS_LOW_SPEED 0x0200 #define PORT_STATUS_LOW_SPEED 0x0200
#define PORT_STATUS_HIGH_SPEED 0x0400 #define PORT_STATUS_HIGH_SPEED 0x0400
#define PORT_STATUS_TEST 0x0800
#define PORT_STATUS_INDICATOR 0x1000
//The feature requests with ports //The feature requests with ports
+3
View File
@@ -195,6 +195,9 @@ StdBinCommands
setusbconfig.cpp setusbconfig.cpp
: be libdevice.so : $(haiku-utils_rsrc) ; : be libdevice.so : $(haiku-utils_rsrc) ;
ObjectHdrs [ FGristFiles listusb$(SUFOBJ) ]
: [ FDirName $(SUBDIR) $(DOTDOT) add-ons kernel bus_managers usb ] ;
# standard commands that need libbluetooth.so, due the Bluetooth Kit # standard commands that need libbluetooth.so, due the Bluetooth Kit
StdBinCommands StdBinCommands
bt_dev_info.cpp bt_dev_info.cpp
+36
View File
@@ -13,6 +13,8 @@
#include <USBKit.h> #include <USBKit.h>
#include <stdio.h> #include <stdio.h>
#include "usbspec_private.h"
const char* const char*
ClassName(int classNumber) { ClassName(int classNumber) {
@@ -168,6 +170,40 @@ DumpInfo(BUSBDevice &device, bool verbose)
printf(" [Configuration %lu]\n", i); printf(" [Configuration %lu]\n", i);
DumpConfiguration(device.ConfigurationAt(i)); DumpConfiguration(device.ConfigurationAt(i));
} }
if (device.Class() != 0x09)
return;
usb_hub_descriptor hubDescriptor;
size_t size = device.GetDescriptor(USB_DESCRIPTOR_HUB, 0, 0,
(void *)&hubDescriptor, sizeof(usb_hub_descriptor));
if (size == sizeof(usb_hub_descriptor)) {
printf(" Hub ports count......... %d\n", hubDescriptor.num_ports);
printf(" Hub Controller Current.. %dmA\n", hubDescriptor.max_power);
for (int index = 1; index <= hubDescriptor.num_ports; index++) {
usb_port_status portStatus;
size_t actualLength = device.ControlTransfer(USB_REQTYPE_CLASS
| USB_REQTYPE_OTHER_IN, USB_REQUEST_GET_STATUS, 0,
index, sizeof(portStatus), (void *)&portStatus);
if (actualLength != sizeof(portStatus))
continue;
printf(" Port %d status....... %04x.%04x%s%s%s%s%s%s%s%s%s\n",
index, portStatus.status, portStatus.change,
portStatus.status & PORT_STATUS_CONNECTION ? " Connect": "",
portStatus.status & PORT_STATUS_ENABLE ? " Enable": "",
portStatus.status & PORT_STATUS_SUSPEND ? " Suspend": "",
portStatus.status & PORT_STATUS_OVER_CURRENT ? " Overcurrent": "",
portStatus.status & PORT_STATUS_RESET ? " Reset": "",
portStatus.status & PORT_STATUS_POWER ? " Power": "",
portStatus.status & PORT_STATUS_CONNECTION ?
(portStatus.status & PORT_STATUS_LOW_SPEED ? " Lowspeed"
: (portStatus.status & PORT_STATUS_HIGH_SPEED ? " Highspeed"
: " Fullspeed")) : "",
portStatus.status & PORT_STATUS_TEST ? " Test": "",
portStatus.status & PORT_STATUS_INDICATOR ? " Indicator": "");
}
}
} }