21#ifndef FREERDP_CHANNEL_URBDRC_CLIENT_TYPES_H 
   22#define FREERDP_CHANNEL_URBDRC_CLIENT_TYPES_H 
   24#include <freerdp/config.h> 
   26#include <freerdp/dvc.h> 
   27#include <freerdp/types.h> 
   31#include <winpr/stream.h> 
   33#define RIM_CAPABILITY_VERSION_01 0x00000001 
   35#define CAPABILITIES_NEGOTIATOR 0x00000000 
   36#define CLIENT_DEVICE_SINK 0x00000001 
   37#define SERVER_CHANNEL_NOTIFICATION 0x00000002 
   38#define CLIENT_CHANNEL_NOTIFICATION 0x00000003 
   39#define BASE_USBDEVICE_NUM 0x00000005 
   41#define RIMCALL_RELEASE 0x00000001 
   42#define RIMCALL_QUERYINTERFACE 0x00000002 
   43#define RIM_EXCHANGE_CAPABILITY_REQUEST 0x00000100 
   44#define CHANNEL_CREATED 0x00000100 
   45#define ADD_VIRTUAL_CHANNEL 0x00000100 
   46#define ADD_DEVICE 0x00000101 
   48#define INIT_CHANNEL_IN 1 
   49#define INIT_CHANNEL_OUT 0 
   52#define CLASS_RESERVE 0x00 
   53#define CLASS_AUDIO 0x01 
   54#define CLASS_COMMUNICATION_IF 0x02 
   56#define CLASS_PHYSICAL 0x05 
   57#define CLASS_IMAGE 0x06 
   58#define CLASS_PRINTER 0x07 
   59#define CLASS_MASS_STORAGE 0x08 
   61#define CLASS_COMMUNICATION_DATA_IF 0x0a 
   62#define CLASS_SMART_CARD 0x0b 
   63#define CLASS_CONTENT_SECURITY 0x0d 
   64#define CLASS_VIDEO 0x0e 
   65#define CLASS_PERSONAL_HEALTHCARE 0x0f 
   66#define CLASS_DIAGNOSTIC 0xdc 
   67#define CLASS_WIRELESS_CONTROLLER 0xe0 
   68#define CLASS_ELSE_DEVICE 0xef 
   69#define CLASS_DEPENDENCE 0xfe 
   70#define CLASS_VENDOR_DEPENDENCE 0xff 
   78#define STREAM_ID_NONE 0x0UL 
   79#define STREAM_ID_PROXY 0x1UL 
   80#define STREAM_ID_STUB 0x2UL 
   81#define STREAM_ID_MASK 0xC0000000 
   82#define INTERFACE_ID_MASK 0x3FFFFFFF 
   84#define CANCEL_REQUEST 0x00000100 
   85#define REGISTER_REQUEST_CALLBACK 0x00000101 
   86#define IO_CONTROL 0x00000102 
   87#define INTERNAL_IO_CONTROL 0x00000103 
   88#define QUERY_DEVICE_TEXT 0x00000104 
   90#define TRANSFER_IN_REQUEST 0x00000105 
   91#define TRANSFER_OUT_REQUEST 0x00000106 
   92#define RETRACT_DEVICE 0x00000107 
   94#define IOCONTROL_COMPLETION 0x00000100 
   95#define URB_COMPLETION 0x00000101 
   96#define URB_COMPLETION_NO_DATA 0x00000102 
  100#define UsbRetractReason_BlockedByPolicy 0x00000001 
  102#define IOCTL_TSUSBGD_IOCTL_USBDI_QUERY_BUS_TIME 0x00224000 
  106  DeviceTextDescription = 0,
 
  107  DeviceTextLocationInformation = 1,
 
  110enum device_descriptor_table
 
  113  B_DESCRIPTOR_TYPE = 1,
 
  116  B_DEVICE_SUBCLASS = 5,
 
  117  B_DEVICE_PROTOCOL = 6,
 
  118  B_MAX_PACKET_SIZE0 = 7,
 
  124  I_SERIAL_NUMBER = 16,
 
  125  B_NUM_CONFIGURATIONS = 17
 
  131#define IOCTL_INTERNAL_USB_SUBMIT_URB 0x00220003 
  132#define IOCTL_INTERNAL_USB_RESET_PORT 0x00220007 
  133#define IOCTL_INTERNAL_USB_GET_PORT_STATUS 0x00220013 
  134#define IOCTL_INTERNAL_USB_CYCLE_PORT 0x0022001F 
  135#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION 0x00220027 
  137#define TS_URB_SELECT_CONFIGURATION 0x0000 
  138#define TS_URB_SELECT_INTERFACE 0x0001 
  139#define TS_URB_PIPE_REQUEST 0x0002 
  140#define TS_URB_TAKE_FRAME_LENGTH_CONTROL 0x0003 
  141#define TS_URB_RELEASE_FRAME_LENGTH_CONTROL 0x0004 
  142#define TS_URB_GET_FRAME_LENGTH 0x0005 
  143#define TS_URB_SET_FRAME_LENGTH 0x0006 
  144#define TS_URB_GET_CURRENT_FRAME_NUMBER 0x0007 
  145#define TS_URB_CONTROL_TRANSFER 0x0008 
  146#define TS_URB_BULK_OR_INTERRUPT_TRANSFER 0x0009 
  147#define TS_URB_ISOCH_TRANSFER 0x000A 
  148#define TS_URB_GET_DESCRIPTOR_FROM_DEVICE 0x000B 
  149#define TS_URB_SET_DESCRIPTOR_TO_DEVICE 0x000C 
  150#define TS_URB_SET_FEATURE_TO_DEVICE 0x000D 
  151#define TS_URB_SET_FEATURE_TO_INTERFACE 0x000E 
  152#define TS_URB_SET_FEATURE_TO_ENDPOINT 0x000F 
  153#define TS_URB_CLEAR_FEATURE_TO_DEVICE 0x0010 
  154#define TS_URB_CLEAR_FEATURE_TO_INTERFACE 0x0011 
  155#define TS_URB_CLEAR_FEATURE_TO_ENDPOINT 0x0012 
  156#define TS_URB_GET_STATUS_FROM_DEVICE 0x0013 
  157#define TS_URB_GET_STATUS_FROM_INTERFACE 0x0014 
  158#define TS_URB_GET_STATUS_FROM_ENDPOINT 0x0015 
  159#define TS_URB_RESERVED_0X0016 0x0016 
  160#define TS_URB_VENDOR_DEVICE 0x0017 
  161#define TS_URB_VENDOR_INTERFACE 0x0018 
  162#define TS_URB_VENDOR_ENDPOINT 0x0019 
  163#define TS_URB_CLASS_DEVICE 0x001A 
  164#define TS_URB_CLASS_INTERFACE 0x001B 
  165#define TS_URB_CLASS_ENDPOINT 0x001C 
  166#define TS_URB_RESERVE_0X001D 0x001D 
  167#define TS_URB_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E 
  168#define TS_URB_CLASS_OTHER 0x001F 
  169#define TS_URB_VENDOR_OTHER 0x0020 
  170#define TS_URB_GET_STATUS_FROM_OTHER 0x0021 
  171#define TS_URB_CLEAR_FEATURE_TO_OTHER 0x0022 
  172#define TS_URB_SET_FEATURE_TO_OTHER 0x0023 
  173#define TS_URB_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024 
  174#define TS_URB_SET_DESCRIPTOR_TO_ENDPOINT 0x0025 
  175#define TS_URB_CONTROL_GET_CONFIGURATION_REQUEST 0x0026 
  176#define TS_URB_CONTROL_GET_INTERFACE_REQUEST 0x0027 
  177#define TS_URB_GET_DESCRIPTOR_FROM_INTERFACE 0x0028 
  178#define TS_URB_SET_DESCRIPTOR_TO_INTERFACE 0x0029 
  179#define TS_URB_GET_OS_FEATURE_DESCRIPTOR_REQUEST 0x002A 
  180#define TS_URB_RESERVE_0X002B 0x002B 
  181#define TS_URB_RESERVE_0X002C 0x002C 
  182#define TS_URB_RESERVE_0X002D 0x002D 
  183#define TS_URB_RESERVE_0X002E 0x002E 
  184#define TS_URB_RESERVE_0X002F 0x002F 
  186#define TS_URB_SYNC_RESET_PIPE 0x0030 
  187#define TS_URB_SYNC_CLEAR_STALL 0x0031 
  188#define TS_URB_CONTROL_TRANSFER_EX 0x0032 
  190#define USBD_STATUS_SUCCESS 0x0 
  191#define USBD_STATUS_PENDING 0x40000000 
  192#define USBD_STATUS_CANCELED 0xC0010000 
  194#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200 
  195#define USBD_STATUS_CRC 0xC0000001 
  196#define USBD_STATUS_BTSTUFF 0xC0000002 
  197#define USBD_STATUS_DATA_TOGGLE_MISMATCH 0xC0000003 
  198#define USBD_STATUS_STALL_PID 0xC0000004 
  199#define USBD_STATUS_DEV_NOT_RESPONDING 0xC0000005 
  200#define USBD_STATUS_PID_CHECK_FAILURE 0xC0000006 
  201#define USBD_STATUS_UNEXPECTED_PID 0xC0000007 
  202#define USBD_STATUS_DATA_OVERRUN 0xC0000008 
  203#define USBD_STATUS_DATA_UNDERRUN 0xC0000009 
  204#define USBD_STATUS_RESERVED1 0xC000000A 
  205#define USBD_STATUS_RESERVED2 0xC000000B 
  206#define USBD_STATUS_BUFFER_OVERRUN 0xC000000C 
  207#define USBD_STATUS_BUFFER_UNDERRUN 0xC000000D 
  210#define USBD_STATUS_NO_DATA 0xC000000E 
  212#define USBD_STATUS_NOT_ACCESSED 0xC000000F 
  213#define USBD_STATUS_FIFO 0xC0000010 
  214#define USBD_STATUS_XACT_ERROR 0xC0000011 
  215#define USBD_STATUS_BABBLE_DETECTED 0xC0000012 
  216#define USBD_STATUS_DATA_BUFFER_ERROR 0xC0000013 
  218#define USBD_STATUS_NOT_SUPPORTED 0xC0000E00 
  219#define USBD_STATUS_BUFFER_TOO_SMALL 0xC0003000 
  220#define USBD_STATUS_TIMEOUT 0xC0006000 
  221#define USBD_STATUS_DEVICE_GONE 0xC0007000 
  223#define USBD_STATUS_NO_MEMORY 0x80000100 
  224#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200 
  225#define USBD_STATUS_INVALID_PARAMETER 0x80000300 
  226#define USBD_STATUS_REQUEST_FAILED 0x80000500 
  227#define USBD_STATUS_INVALID_PIPE_HANDLE 0x80000600 
  228#define USBD_STATUS_ERROR_SHORT_TRANSFER 0x80000900 
  236#define USBD_TRANSFER_DIRECTION 0x00000001 
  241#define USBD_SHORT_TRANSFER_OK 0x00000002 
  245#define USBD_START_ISO_TRANSFER_ASAP 0x00000004 
  246#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008 
  248#define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags)&USBD_TRANSFER_DIRECTION) 
  250#define USBD_TRANSFER_DIRECTION_OUT 0 
  251#define USBD_TRANSFER_DIRECTION_IN 1 
  253#define VALID_TRANSFER_FLAGS_MASK       USBD_SHORT_TRANSFER_OK | \ 
  254  USBD_TRANSFER_DIRECTION | \ 
  255  USBD_START_ISO_TRANSFER_ASAP | \ 
  256  USBD_DEFAULT_PIPE_TRANSFER) 
  258#define ENDPOINT_HALT 0x00 
  259#define DEVICE_REMOTE_WAKEUP 0x01 
  262#define CONTROL_TRANSFER 0x00 
  263#define ISOCHRONOUS_TRANSFER 0x01 
  264#define BULK_TRANSFER 0x02 
  265#define INTERRUPT_TRANSFER 0x03 
  267#define ClearHubFeature (0x2000 | LIBUSB_REQUEST_CLEAR_FEATURE) 
  268#define ClearPortFeature (0x2300 | LIBUSB_REQUEST_CLEAR_FEATURE) 
  269#define GetHubDescriptor (0xa000 | LIBUSB_REQUEST_GET_DESCRIPTOR) 
  270#define GetHubStatus (0xa000 | LIBUSB_REQUEST_GET_STATUS) 
  271#define GetPortStatus (0xa300 | LIBUSB_REQUEST_GET_STATUS) 
  272#define SetHubFeature (0x2000 | LIBUSB_REQUEST_SET_FEATURE) 
  273#define SetPortFeature (0x2300 | LIBUSB_REQUEST_SET_FEATURE) 
  275#define USBD_PF_CHANGE_MAX_PACKET 0x00000001 
  276#define USBD_PF_SHORT_PACKET_OPT 0x00000002 
  277#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004 
  278#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008 
  281#define URB_SET_FEATURE 0x00 
  282#define URB_CLEAR_FEATURE 0x01 
  284#define USBD_PF_CHANGE_MAX_PACKET 0x00000001 
  285#define USBD_PF_SHORT_PACKET_OPT 0x00000002 
  286#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004 
  287#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008 
  289#define URB_CONTROL_TRANSFER_EXTERNAL 0x1 
  290#define URB_CONTROL_TRANSFER_NONEXTERNAL 0x0 
  292#define USBFS_URB_SHORT_NOT_OK 0x01 
  293#define USBFS_URB_ISO_ASAP 0x02 
  294#define USBFS_URB_BULK_CONTINUATION 0x04 
  295#define USBFS_URB_QUEUE_BULK 0x10 
  297#define URBDRC_DEVICE_INITIALIZED 0x01 
  298#define URBDRC_DEVICE_NOT_FOUND 0x02 
  299#define URBDRC_DEVICE_CHANNEL_CLOSED 0x08 
  300#define URBDRC_DEVICE_ALREADY_SEND 0x10 
  301#define URBDRC_DEVICE_DETACH_KERNEL 0x20 
  303#define UDEVMAN_FLAG_ADD_BY_VID_PID 0x01 
  304#define UDEVMAN_FLAG_ADD_BY_ADDR 0x02 
  305#define UDEVMAN_FLAG_ADD_BY_AUTO 0x04 
  306#define UDEVMAN_FLAG_DEBUG 0x08