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
131enum device_speed WINPR_C23_ENUM_TYPE(uint32_t)
133 DEVICE_SPEED_UNKNOWN = 0,
138 DEVICE_SPEED_SUPER_PLUS
144#define IOCTL_INTERNAL_USB_SUBMIT_URB 0x00220003
145#define IOCTL_INTERNAL_USB_RESET_PORT 0x00220007
146#define IOCTL_INTERNAL_USB_GET_PORT_STATUS 0x00220013
147#define IOCTL_INTERNAL_USB_CYCLE_PORT 0x0022001F
148#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION 0x00220027
150#define TS_URB_SELECT_CONFIGURATION 0x0000
151#define TS_URB_SELECT_INTERFACE 0x0001
152#define TS_URB_PIPE_REQUEST 0x0002
153#define TS_URB_TAKE_FRAME_LENGTH_CONTROL 0x0003
154#define TS_URB_RELEASE_FRAME_LENGTH_CONTROL 0x0004
155#define TS_URB_GET_FRAME_LENGTH 0x0005
156#define TS_URB_SET_FRAME_LENGTH 0x0006
157#define TS_URB_GET_CURRENT_FRAME_NUMBER 0x0007
158#define TS_URB_CONTROL_TRANSFER 0x0008
159#define TS_URB_BULK_OR_INTERRUPT_TRANSFER 0x0009
160#define TS_URB_ISOCH_TRANSFER 0x000A
161#define TS_URB_GET_DESCRIPTOR_FROM_DEVICE 0x000B
162#define TS_URB_SET_DESCRIPTOR_TO_DEVICE 0x000C
163#define TS_URB_SET_FEATURE_TO_DEVICE 0x000D
164#define TS_URB_SET_FEATURE_TO_INTERFACE 0x000E
165#define TS_URB_SET_FEATURE_TO_ENDPOINT 0x000F
166#define TS_URB_CLEAR_FEATURE_TO_DEVICE 0x0010
167#define TS_URB_CLEAR_FEATURE_TO_INTERFACE 0x0011
168#define TS_URB_CLEAR_FEATURE_TO_ENDPOINT 0x0012
169#define TS_URB_GET_STATUS_FROM_DEVICE 0x0013
170#define TS_URB_GET_STATUS_FROM_INTERFACE 0x0014
171#define TS_URB_GET_STATUS_FROM_ENDPOINT 0x0015
172#define TS_URB_RESERVED_0X0016 0x0016
173#define TS_URB_VENDOR_DEVICE 0x0017
174#define TS_URB_VENDOR_INTERFACE 0x0018
175#define TS_URB_VENDOR_ENDPOINT 0x0019
176#define TS_URB_CLASS_DEVICE 0x001A
177#define TS_URB_CLASS_INTERFACE 0x001B
178#define TS_URB_CLASS_ENDPOINT 0x001C
179#define TS_URB_RESERVE_0X001D 0x001D
180#define TS_URB_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
181#define TS_URB_CLASS_OTHER 0x001F
182#define TS_URB_VENDOR_OTHER 0x0020
183#define TS_URB_GET_STATUS_FROM_OTHER 0x0021
184#define TS_URB_CLEAR_FEATURE_TO_OTHER 0x0022
185#define TS_URB_SET_FEATURE_TO_OTHER 0x0023
186#define TS_URB_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
187#define TS_URB_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
188#define TS_URB_CONTROL_GET_CONFIGURATION_REQUEST 0x0026
189#define TS_URB_CONTROL_GET_INTERFACE_REQUEST 0x0027
190#define TS_URB_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
191#define TS_URB_SET_DESCRIPTOR_TO_INTERFACE 0x0029
192#define TS_URB_GET_OS_FEATURE_DESCRIPTOR_REQUEST 0x002A
193#define TS_URB_RESERVE_0X002B 0x002B
194#define TS_URB_RESERVE_0X002C 0x002C
195#define TS_URB_RESERVE_0X002D 0x002D
196#define TS_URB_RESERVE_0X002E 0x002E
197#define TS_URB_RESERVE_0X002F 0x002F
199#define TS_URB_SYNC_RESET_PIPE 0x0030
200#define TS_URB_SYNC_CLEAR_STALL 0x0031
201#define TS_URB_CONTROL_TRANSFER_EX 0x0032
203#define USBD_STATUS_SUCCESS 0x0
204#define USBD_STATUS_PENDING 0x40000000
205#define USBD_STATUS_CANCELED 0xC0010000
207#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200
208#define USBD_STATUS_CRC 0xC0000001
209#define USBD_STATUS_BTSTUFF 0xC0000002
210#define USBD_STATUS_DATA_TOGGLE_MISMATCH 0xC0000003
211#define USBD_STATUS_STALL_PID 0xC0000004
212#define USBD_STATUS_DEV_NOT_RESPONDING 0xC0000005
213#define USBD_STATUS_PID_CHECK_FAILURE 0xC0000006
214#define USBD_STATUS_UNEXPECTED_PID 0xC0000007
215#define USBD_STATUS_DATA_OVERRUN 0xC0000008
216#define USBD_STATUS_DATA_UNDERRUN 0xC0000009
217#define USBD_STATUS_RESERVED1 0xC000000A
218#define USBD_STATUS_RESERVED2 0xC000000B
219#define USBD_STATUS_BUFFER_OVERRUN 0xC000000C
220#define USBD_STATUS_BUFFER_UNDERRUN 0xC000000D
223#define USBD_STATUS_NO_DATA 0xC000000E
225#define USBD_STATUS_NOT_ACCESSED 0xC000000F
226#define USBD_STATUS_FIFO 0xC0000010
227#define USBD_STATUS_XACT_ERROR 0xC0000011
228#define USBD_STATUS_BABBLE_DETECTED 0xC0000012
229#define USBD_STATUS_DATA_BUFFER_ERROR 0xC0000013
231#define USBD_STATUS_NOT_SUPPORTED 0xC0000E00
232#define USBD_STATUS_BUFFER_TOO_SMALL 0xC0003000
233#define USBD_STATUS_TIMEOUT 0xC0006000
234#define USBD_STATUS_DEVICE_GONE 0xC0007000
236#define USBD_STATUS_NO_MEMORY 0x80000100
237#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200
238#define USBD_STATUS_INVALID_PARAMETER 0x80000300
239#define USBD_STATUS_REQUEST_FAILED 0x80000500
240#define USBD_STATUS_INVALID_PIPE_HANDLE 0x80000600
241#define USBD_STATUS_ERROR_SHORT_TRANSFER 0x80000900
249#define USBD_TRANSFER_DIRECTION 0x00000001
254#define USBD_SHORT_TRANSFER_OK 0x00000002
258#define USBD_START_ISO_TRANSFER_ASAP 0x00000004
259#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008
261#define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags)&USBD_TRANSFER_DIRECTION)
263#define USBD_TRANSFER_DIRECTION_OUT 0
264#define USBD_TRANSFER_DIRECTION_IN 1
266#define VALID_TRANSFER_FLAGS_MASK USBD_SHORT_TRANSFER_OK | \
267 USBD_TRANSFER_DIRECTION | \
268 USBD_START_ISO_TRANSFER_ASAP | \
269 USBD_DEFAULT_PIPE_TRANSFER)
271#define ENDPOINT_HALT 0x00
272#define DEVICE_REMOTE_WAKEUP 0x01
275#define CONTROL_TRANSFER 0x00
276#define ISOCHRONOUS_TRANSFER 0x01
277#define BULK_TRANSFER 0x02
278#define INTERRUPT_TRANSFER 0x03
280#define ClearHubFeature (0x2000 | LIBUSB_REQUEST_CLEAR_FEATURE)
281#define ClearPortFeature (0x2300 | LIBUSB_REQUEST_CLEAR_FEATURE)
282#define GetHubDescriptor (0xa000 | LIBUSB_REQUEST_GET_DESCRIPTOR)
283#define GetHubStatus (0xa000 | LIBUSB_REQUEST_GET_STATUS)
284#define GetPortStatus (0xa300 | LIBUSB_REQUEST_GET_STATUS)
285#define SetHubFeature (0x2000 | LIBUSB_REQUEST_SET_FEATURE)
286#define SetPortFeature (0x2300 | LIBUSB_REQUEST_SET_FEATURE)
288#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
289#define USBD_PF_SHORT_PACKET_OPT 0x00000002
290#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
291#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
294#define URB_SET_FEATURE 0x00
295#define URB_CLEAR_FEATURE 0x01
297#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
298#define USBD_PF_SHORT_PACKET_OPT 0x00000002
299#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
300#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
302#define URB_CONTROL_TRANSFER_EXTERNAL 0x1
303#define URB_CONTROL_TRANSFER_NONEXTERNAL 0x0
305#define USBFS_URB_SHORT_NOT_OK 0x01
306#define USBFS_URB_ISO_ASAP 0x02
307#define USBFS_URB_BULK_CONTINUATION 0x04
308#define USBFS_URB_QUEUE_BULK 0x10
310#define URBDRC_DEVICE_INITIALIZED 0x01
311#define URBDRC_DEVICE_NOT_FOUND 0x02
312#define URBDRC_DEVICE_CHANNEL_CLOSED 0x08
313#define URBDRC_DEVICE_ALREADY_SEND 0x10
314#define URBDRC_DEVICE_DETACH_KERNEL 0x20
316#define UDEVMAN_FLAG_ADD_BY_VID_PID 0x01
317#define UDEVMAN_FLAG_ADD_BY_ADDR 0x02
318#define UDEVMAN_FLAG_ADD_BY_AUTO 0x04
319#define UDEVMAN_FLAG_DEBUG 0x08