summaryrefslogtreecommitdiffstats
path: root/include/VBox/usb.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/VBox/usb.h')
-rw-r--r--include/VBox/usb.h280
1 files changed, 280 insertions, 0 deletions
diff --git a/include/VBox/usb.h b/include/VBox/usb.h
new file mode 100644
index 00000000..e83b7661
--- /dev/null
+++ b/include/VBox/usb.h
@@ -0,0 +1,280 @@
+/** @file
+ * USB - Universal Serial Bus. (DEV,Main?)
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+#ifndef VBOX_INCLUDED_usb_h
+#define VBOX_INCLUDED_usb_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBox/types.h>
+
+RT_C_DECLS_BEGIN
+
+/** @defgroup grp_usblib_usb USB Device Structures & Types
+ * @ingroup grp_usblib
+ * @{
+ */
+
+/**
+ * The USB host device state.
+ */
+typedef enum USBDEVICESTATE
+{
+ /** The device is unsupported. */
+ USBDEVICESTATE_UNSUPPORTED = 1,
+ /** The device is in use by the host. */
+ USBDEVICESTATE_USED_BY_HOST,
+ /** The device is in use by the host but could perhaps be captured even so. */
+ USBDEVICESTATE_USED_BY_HOST_CAPTURABLE,
+ /** The device is not used by the host or any guest. */
+ USBDEVICESTATE_UNUSED,
+ /** The device is held by the proxy for later guest usage. */
+ USBDEVICESTATE_HELD_BY_PROXY,
+ /** The device in use by a guest. */
+ USBDEVICESTATE_USED_BY_GUEST,
+ /** The usual 32-bit hack. */
+ USBDEVICESTATE_32BIT_HACK = 0x7fffffff
+} USBDEVICESTATE;
+
+
+/**
+ * The USB device speed.
+ */
+typedef enum USBDEVICESPEED
+{
+ /** Unknown. */
+ USBDEVICESPEED_UNKNOWN = 0,
+ /** Low speed (1.5 Mbit/s). */
+ USBDEVICESPEED_LOW,
+ /** Full speed (12 Mbit/s). */
+ USBDEVICESPEED_FULL,
+ /** High speed (480 Mbit/s). */
+ USBDEVICESPEED_HIGH,
+ /** Variable speed - USB 2.5 / wireless. */
+ USBDEVICESPEED_VARIABLE,
+ /** Super speed - USB 3.0 (5Gbit/s). */
+ USBDEVICESPEED_SUPER,
+ /** The usual 32-bit hack. */
+ USBDEVICESPEED_32BIT_HACK = 0x7fffffff
+} USBDEVICESPEED;
+
+
+/**
+ * USB host device description.
+ * Used for enumeration of USB devices.
+ */
+typedef struct USBDEVICE
+{
+ /** If linked, this is the pointer to the next device in the list. */
+ struct USBDEVICE *pNext;
+ /** If linked doubly, this is the pointer to the prev device in the list. */
+ struct USBDEVICE *pPrev;
+ /** Manufacturer string. */
+ const char *pszManufacturer;
+ /** Product string. */
+ const char *pszProduct;
+ /** Serial number string. */
+ const char *pszSerialNumber;
+ /** The address of the device. */
+ const char *pszAddress;
+ /** The backend to use for this device. */
+ const char *pszBackend;
+
+ /** Vendor ID. */
+ uint16_t idVendor;
+ /** Product ID. */
+ uint16_t idProduct;
+ /** Revision, integer part. */
+ uint16_t bcdDevice;
+ /** USB version number. */
+ uint16_t bcdUSB;
+ /** Device class. */
+ uint8_t bDeviceClass;
+ /** Device subclass. */
+ uint8_t bDeviceSubClass;
+ /** Device protocol */
+ uint8_t bDeviceProtocol;
+ /** Number of configurations. */
+ uint8_t bNumConfigurations;
+ /** The device state. */
+ USBDEVICESTATE enmState;
+ /** The device speed. */
+ USBDEVICESPEED enmSpeed;
+ /** Serial hash. */
+ uint64_t u64SerialHash;
+ /** The USB Bus number. */
+ uint8_t bBus;
+ /** The port number. */
+ uint8_t bPort;
+ /** The hub+port path. */
+ char *pszPortPath;
+#if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)
+ /** Device number. */
+ uint8_t bDevNum;
+#endif
+#ifdef RT_OS_WINDOWS
+ /** Alternate address. Can be NULL. */
+ char *pszAltAddress;
+ /** The hub name. */
+ char *pszHubName;
+#endif
+#ifdef RT_OS_SOLARIS
+ /** The /devices path of the device. */
+ char *pszDevicePath;
+ /** Do we have a partial or full device descriptor here. */
+ bool fPartialDescriptor;
+#endif
+} USBDEVICE;
+/** Pointer to a USB device. */
+typedef USBDEVICE *PUSBDEVICE;
+/** Pointer to a const USB device. */
+typedef USBDEVICE *PCUSBDEVICE;
+
+
+#ifdef VBOX_USB_H_INCL_DESCRIPTORS /* for the time being, since this may easily conflict with system headers */
+
+/**
+ * USB device descriptor.
+ */
+#pragma pack(1)
+typedef struct USBDESCHDR
+{
+ /** The descriptor length. */
+ uint8_t bLength;
+ /** The descriptor type. */
+ uint8_t bDescriptorType;
+} USBDESCHDR;
+#pragma pack()
+/** Pointer to an USB descriptor header. */
+typedef USBDESCHDR *PUSBDESCHDR;
+
+/** @name Descriptor Type values (bDescriptorType)
+ * {@ */
+#if !defined(USB_DT_DEVICE) && !defined(USB_DT_ENDPOINT)
+# define USB_DT_DEVICE 0x01
+# define USB_DT_CONFIG 0x02
+# define USB_DT_STRING 0x03
+# define USB_DT_INTERFACE 0x04
+# define USB_DT_ENDPOINT 0x05
+
+# define USB_DT_HID 0x21
+# define USB_DT_REPORT 0x22
+# define USB_DT_PHYSICAL 0x23
+# define USB_DT_HUB 0x29
+#endif
+/** @} */
+
+
+/**
+ * USB device descriptor.
+ */
+#pragma pack(1)
+typedef struct USBDEVICEDESC
+{
+ /** The descriptor length. (Usually sizeof(USBDEVICEDESC).) */
+ uint8_t bLength;
+ /** The descriptor type. (USB_DT_DEVICE) */
+ uint8_t bDescriptorType;
+ /** USB version number. */
+ uint16_t bcdUSB;
+ /** Device class. */
+ uint8_t bDeviceClass;
+ /** Device subclass. */
+ uint8_t bDeviceSubClass;
+ /** Device protocol */
+ uint8_t bDeviceProtocol;
+ /** The max packet size of the default control pipe. */
+ uint8_t bMaxPacketSize0;
+ /** Vendor ID. */
+ uint16_t idVendor;
+ /** Product ID. */
+ uint16_t idProduct;
+ /** Revision, integer part. */
+ uint16_t bcdDevice;
+ /** Manufacturer string index. */
+ uint8_t iManufacturer;
+ /** Product string index. */
+ uint8_t iProduct;
+ /** Serial number string index. */
+ uint8_t iSerialNumber;
+ /** Number of configurations. */
+ uint8_t bNumConfigurations;
+} USBDEVICEDESC;
+#pragma pack()
+/** Pointer to an USB device descriptor. */
+typedef USBDEVICEDESC *PUSBDEVICEDESC;
+
+/** @name Class codes (bDeviceClass)
+ * @{ */
+#ifndef USB_HUB_CLASSCODE
+# define USB_HUB_CLASSCODE 0x09
+#endif
+/** @} */
+
+/**
+ * USB configuration descriptor.
+ */
+#pragma pack(1)
+typedef struct USBCONFIGDESC
+{
+ /** The descriptor length. (Usually sizeof(USBCONFIGDESC).) */
+ uint8_t bLength;
+ /** The descriptor type. (USB_DT_CONFIG) */
+ uint8_t bDescriptorType;
+ /** The length of the configuration descriptor plus all associated descriptors. */
+ uint16_t wTotalLength;
+ /** Number of interfaces. */
+ uint8_t bNumInterfaces;
+ /** Configuration number. (For SetConfiguration().) */
+ uint8_t bConfigurationValue;
+ /** Configuration description string. */
+ uint8_t iConfiguration;
+ /** Configuration characteristics. */
+ uint8_t bmAttributes;
+ /** Maximum power consumption of the USB device in this config. */
+ uint8_t MaxPower;
+} USBCONFIGDESC;
+#pragma pack()
+/** Pointer to an USB configuration descriptor. */
+typedef USBCONFIGDESC *PUSBCONFIGDESC;
+
+#endif /* VBOX_USB_H_INCL_DESCRIPTORS */
+
+/** @} */
+RT_C_DECLS_END
+
+#endif /* !VBOX_INCLUDED_usb_h */
+