Blame channels/urbdrc/common/urbdrc_types.h

Packit Service 5a9772
/**
Packit Service 5a9772
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit Service 5a9772
 * RemoteFX USB Redirection
Packit Service 5a9772
 *
Packit Service 5a9772
 * Copyright 2012 Atrust corp.
Packit Service 5a9772
 * Copyright 2012 Alfred Liu <alfred.liu@atruscorp.com>
Packit Service 5a9772
 *
Packit Service 5a9772
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service 5a9772
 * you may not use this file except in compliance with the License.
Packit Service 5a9772
 * You may obtain a copy of the License at
Packit Service 5a9772
 *
Packit Service 5a9772
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service 5a9772
 *
Packit Service 5a9772
 * Unless required by applicable law or agreed to in writing, software
Packit Service 5a9772
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service 5a9772
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service 5a9772
 * See the License for the specific language governing permissions and
Packit Service 5a9772
 * limitations under the License.
Packit Service 5a9772
 */
Packit Service 5a9772
Packit Service 5a9772
#ifndef FREERDP_CHANNEL_URBDRC_CLIENT_TYPES_H
Packit Service 5a9772
#define FREERDP_CHANNEL_URBDRC_CLIENT_TYPES_H
Packit Service 5a9772
Packit Service 5a9772
#ifdef HAVE_CONFIG_H
Packit Service 5a9772
#include "config.h"
Packit Service 5a9772
#endif
Packit Service 5a9772
Packit Service 5a9772
#include <freerdp/dvc.h>
Packit Service 5a9772
#include <freerdp/types.h>
Packit Service 5a9772
Packit Service 5a9772
#include <msusb.h>
Packit Service 5a9772
Packit Service 5a9772
#include <winpr/stream.h>
Packit Service 5a9772
Packit Service 5a9772
#define RIM_CAPABILITY_VERSION_01 0x00000001
Packit Service 5a9772
Packit Service 5a9772
#define CAPABILITIES_NEGOTIATOR 0x00000000
Packit Service 5a9772
#define CLIENT_DEVICE_SINK 0x00000001
Packit Service 5a9772
#define SERVER_CHANNEL_NOTIFICATION 0x00000002
Packit Service 5a9772
#define CLIENT_CHANNEL_NOTIFICATION 0x00000003
Packit Service 5a9772
#define BASE_USBDEVICE_NUM 0x00000005
Packit Service 5a9772
Packit Service 5a9772
#define RIMCALL_RELEASE 0x00000001
Packit Service 5a9772
#define RIMCALL_QUERYINTERFACE 0x00000002
Packit Service 5a9772
#define RIM_EXCHANGE_CAPABILITY_REQUEST 0x00000100
Packit Service 5a9772
#define CHANNEL_CREATED 0x00000100
Packit Service 5a9772
#define ADD_VIRTUAL_CHANNEL 0x00000100
Packit Service 5a9772
#define ADD_DEVICE 0x00000101
Packit Service 5a9772
Packit Service 5a9772
#define INIT_CHANNEL_IN 1
Packit Service 5a9772
#define INIT_CHANNEL_OUT 0
Packit Service 5a9772
Packit Service 5a9772
/* InterfaceClass */
Packit Service 5a9772
#define CLASS_RESERVE 0x00
Packit Service 5a9772
#define CLASS_AUDIO 0x01
Packit Service 5a9772
#define CLASS_COMMUNICATION_IF 0x02
Packit Service 5a9772
#define CLASS_HID 0x03
Packit Service 5a9772
#define CLASS_PHYSICAL 0x05
Packit Service 5a9772
#define CLASS_IMAGE 0x06
Packit Service 5a9772
#define CLASS_PRINTER 0x07
Packit Service 5a9772
#define CLASS_MASS_STORAGE 0x08
Packit Service 5a9772
#define CLASS_HUB 0x09
Packit Service 5a9772
#define CLASS_COMMUNICATION_DATA_IF 0x0a
Packit Service 5a9772
#define CLASS_SMART_CARD 0x0b
Packit Service 5a9772
#define CLASS_CONTENT_SECURITY 0x0d
Packit Service 5a9772
#define CLASS_VIDEO 0x0e
Packit Service 5a9772
#define CLASS_PERSONAL_HEALTHCARE 0x0f
Packit Service 5a9772
#define CLASS_DIAGNOSTIC 0xdc
Packit Service 5a9772
#define CLASS_WIRELESS_CONTROLLER 0xe0
Packit Service 5a9772
#define CLASS_ELSE_DEVICE 0xef
Packit Service 5a9772
#define CLASS_DEPENDENCE 0xfe
Packit Service 5a9772
#define CLASS_VENDOR_DEPENDENCE 0xff
Packit Service 5a9772
Packit Service 5a9772
/* usb version */
Packit Service 5a9772
#define USB_v1_0 0x100
Packit Service 5a9772
#define USB_v1_1 0x110
Packit Service 5a9772
#define USB_v2_0 0x200
Packit Service 5a9772
#define USB_v3_0 0x300
Packit Service 5a9772
Packit Service 5a9772
#define STREAM_ID_NONE 0x0UL
Packit Service 5a9772
#define STREAM_ID_PROXY 0x1UL
Packit Service 5a9772
#define STREAM_ID_STUB 0x2UL
Packit Service 5a9772
#define STREAM_ID_MASK 0xC0000000
Packit Service 5a9772
#define INTERFACE_ID_MASK 0x3FFFFFFF
Packit Service 5a9772
Packit Service 5a9772
#define CANCEL_REQUEST 0x00000100
Packit Service 5a9772
#define REGISTER_REQUEST_CALLBACK 0x00000101
Packit Service 5a9772
#define IO_CONTROL 0x00000102
Packit Service 5a9772
#define INTERNAL_IO_CONTROL 0x00000103
Packit Service 5a9772
#define QUERY_DEVICE_TEXT 0x00000104
Packit Service 5a9772
Packit Service 5a9772
#define TRANSFER_IN_REQUEST 0x00000105
Packit Service 5a9772
#define TRANSFER_OUT_REQUEST 0x00000106
Packit Service 5a9772
#define RETRACT_DEVICE 0x00000107
Packit Service 5a9772
Packit Service 5a9772
#define IOCONTROL_COMPLETION 0x00000100
Packit Service 5a9772
#define URB_COMPLETION 0x00000101
Packit Service 5a9772
#define URB_COMPLETION_NO_DATA 0x00000102
Packit Service 5a9772
Packit Service 5a9772
/* The USB device is to be stopped from being redirected because the
Packit Service 5a9772
 * device is blocked by the server's policy. */
Packit Service 5a9772
#define UsbRetractReason_BlockedByPolicy 0x00000001
Packit Service 5a9772
Packit Service 5a9772
enum device_text_type
Packit Service 5a9772
{
Packit Service 5a9772
	DeviceTextDescription = 0,
Packit Service 5a9772
	DeviceTextLocationInformation = 1,
Packit Service 5a9772
};
Packit Service 5a9772
Packit Service 5a9772
enum device_descriptor_table
Packit Service 5a9772
{
Packit Service 5a9772
	B_LENGTH = 0,
Packit Service 5a9772
	B_DESCRIPTOR_TYPE = 1,
Packit Service 5a9772
	BCD_USB = 2,
Packit Service 5a9772
	B_DEVICE_CLASS = 4,
Packit Service 5a9772
	B_DEVICE_SUBCLASS = 5,
Packit Service 5a9772
	B_DEVICE_PROTOCOL = 6,
Packit Service 5a9772
	B_MAX_PACKET_SIZE0 = 7,
Packit Service 5a9772
	ID_VENDOR = 8,
Packit Service 5a9772
	ID_PRODUCT = 10,
Packit Service 5a9772
	BCD_DEVICE = 12,
Packit Service 5a9772
	I_MANUFACTURER = 14,
Packit Service 5a9772
	I_PRODUCT = 15,
Packit Service 5a9772
	I_SERIAL_NUMBER = 16,
Packit Service 5a9772
	B_NUM_CONFIGURATIONS = 17
Packit Service 5a9772
};
Packit Service 5a9772
Packit Service 5a9772
#define PIPE_CANCEL 0
Packit Service 5a9772
#define PIPE_RESET 1
Packit Service 5a9772
Packit Service 5a9772
#define IOCTL_INTERNAL_USB_SUBMIT_URB 0x00220003
Packit Service 5a9772
#define IOCTL_INTERNAL_USB_RESET_PORT 0x00220007
Packit Service 5a9772
#define IOCTL_INTERNAL_USB_GET_PORT_STATUS 0x00220013
Packit Service 5a9772
#define IOCTL_INTERNAL_USB_CYCLE_PORT 0x0022001F
Packit Service 5a9772
#define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION 0x00220027
Packit Service 5a9772
Packit Service 5a9772
#define TS_URB_SELECT_CONFIGURATION 0x0000
Packit Service 5a9772
#define TS_URB_SELECT_INTERFACE 0x0001
Packit Service 5a9772
#define TS_URB_PIPE_REQUEST 0x0002
Packit Service 5a9772
#define TS_URB_TAKE_FRAME_LENGTH_CONTROL 0x0003
Packit Service 5a9772
#define TS_URB_RELEASE_FRAME_LENGTH_CONTROL 0x0004
Packit Service 5a9772
#define TS_URB_GET_FRAME_LENGTH 0x0005
Packit Service 5a9772
#define TS_URB_SET_FRAME_LENGTH 0x0006
Packit Service 5a9772
#define TS_URB_GET_CURRENT_FRAME_NUMBER 0x0007
Packit Service 5a9772
#define TS_URB_CONTROL_TRANSFER 0x0008
Packit Service 5a9772
#define TS_URB_BULK_OR_INTERRUPT_TRANSFER 0x0009
Packit Service 5a9772
#define TS_URB_ISOCH_TRANSFER 0x000A
Packit Service 5a9772
#define TS_URB_GET_DESCRIPTOR_FROM_DEVICE 0x000B
Packit Service 5a9772
#define TS_URB_SET_DESCRIPTOR_TO_DEVICE 0x000C
Packit Service 5a9772
#define TS_URB_SET_FEATURE_TO_DEVICE 0x000D
Packit Service 5a9772
#define TS_URB_SET_FEATURE_TO_INTERFACE 0x000E
Packit Service 5a9772
#define TS_URB_SET_FEATURE_TO_ENDPOINT 0x000F
Packit Service 5a9772
#define TS_URB_CLEAR_FEATURE_TO_DEVICE 0x0010
Packit Service 5a9772
#define TS_URB_CLEAR_FEATURE_TO_INTERFACE 0x0011
Packit Service 5a9772
#define TS_URB_CLEAR_FEATURE_TO_ENDPOINT 0x0012
Packit Service 5a9772
#define TS_URB_GET_STATUS_FROM_DEVICE 0x0013
Packit Service 5a9772
#define TS_URB_GET_STATUS_FROM_INTERFACE 0x0014
Packit Service 5a9772
#define TS_URB_GET_STATUS_FROM_ENDPOINT 0x0015
Packit Service 5a9772
#define TS_URB_RESERVED_0X0016 0x0016
Packit Service 5a9772
#define TS_URB_VENDOR_DEVICE 0x0017
Packit Service 5a9772
#define TS_URB_VENDOR_INTERFACE 0x0018
Packit Service 5a9772
#define TS_URB_VENDOR_ENDPOINT 0x0019
Packit Service 5a9772
#define TS_URB_CLASS_DEVICE 0x001A
Packit Service 5a9772
#define TS_URB_CLASS_INTERFACE 0x001B
Packit Service 5a9772
#define TS_URB_CLASS_ENDPOINT 0x001C
Packit Service 5a9772
#define TS_URB_RESERVE_0X001D 0x001D
Packit Service 5a9772
#define TS_URB_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
Packit Service 5a9772
#define TS_URB_CLASS_OTHER 0x001F
Packit Service 5a9772
#define TS_URB_VENDOR_OTHER 0x0020
Packit Service 5a9772
#define TS_URB_GET_STATUS_FROM_OTHER 0x0021
Packit Service 5a9772
#define TS_URB_CLEAR_FEATURE_TO_OTHER 0x0022
Packit Service 5a9772
#define TS_URB_SET_FEATURE_TO_OTHER 0x0023
Packit Service 5a9772
#define TS_URB_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
Packit Service 5a9772
#define TS_URB_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
Packit Service 5a9772
#define TS_URB_CONTROL_GET_CONFIGURATION_REQUEST 0x0026
Packit Service 5a9772
#define TS_URB_CONTROL_GET_INTERFACE_REQUEST 0x0027
Packit Service 5a9772
#define TS_URB_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
Packit Service 5a9772
#define TS_URB_SET_DESCRIPTOR_TO_INTERFACE 0x0029
Packit Service 5a9772
#define TS_URB_GET_OS_FEATURE_DESCRIPTOR_REQUEST 0x002A
Packit Service 5a9772
#define TS_URB_RESERVE_0X002B 0x002B
Packit Service 5a9772
#define TS_URB_RESERVE_0X002C 0x002C
Packit Service 5a9772
#define TS_URB_RESERVE_0X002D 0x002D
Packit Service 5a9772
#define TS_URB_RESERVE_0X002E 0x002E
Packit Service 5a9772
#define TS_URB_RESERVE_0X002F 0x002F
Packit Service 5a9772
// USB 2.0 calls start at 0x0030
Packit Service 5a9772
#define TS_URB_SYNC_RESET_PIPE 0x0030
Packit Service 5a9772
#define TS_URB_SYNC_CLEAR_STALL 0x0031
Packit Service 5a9772
#define TS_URB_CONTROL_TRANSFER_EX 0x0032
Packit Service 5a9772
Packit Service 5a9772
#define USBD_STATUS_SUCCESS 0x0
Packit Service 5a9772
#define USBD_STATUS_PENDING 0x40000000
Packit Service 5a9772
#define USBD_STATUS_CANCELED 0xC0010000
Packit Service 5a9772
Packit Service 5a9772
#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200
Packit Service 5a9772
#define USBD_STATUS_CRC 0xC0000001
Packit Service 5a9772
#define USBD_STATUS_BTSTUFF 0xC0000002
Packit Service 5a9772
#define USBD_STATUS_DATA_TOGGLE_MISMATCH 0xC0000003
Packit Service 5a9772
#define USBD_STATUS_STALL_PID 0xC0000004
Packit Service 5a9772
#define USBD_STATUS_DEV_NOT_RESPONDING 0xC0000005
Packit Service 5a9772
#define USBD_STATUS_PID_CHECK_FAILURE 0xC0000006
Packit Service 5a9772
#define USBD_STATUS_UNEXPECTED_PID 0xC0000007
Packit Service 5a9772
#define USBD_STATUS_DATA_OVERRUN 0xC0000008
Packit Service 5a9772
#define USBD_STATUS_DATA_UNDERRUN 0xC0000009
Packit Service 5a9772
#define USBD_STATUS_RESERVED1 0xC000000A
Packit Service 5a9772
#define USBD_STATUS_RESERVED2 0xC000000B
Packit Service 5a9772
#define USBD_STATUS_BUFFER_OVERRUN 0xC000000C
Packit Service 5a9772
#define USBD_STATUS_BUFFER_UNDERRUN 0xC000000D
Packit Service 5a9772
Packit Service 5a9772
/* unknown */
Packit Service 5a9772
#define USBD_STATUS_NO_DATA 0xC000000E
Packit Service 5a9772
Packit Service 5a9772
#define USBD_STATUS_NOT_ACCESSED 0xC000000F
Packit Service 5a9772
#define USBD_STATUS_FIFO 0xC0000010
Packit Service 5a9772
#define USBD_STATUS_XACT_ERROR 0xC0000011
Packit Service 5a9772
#define USBD_STATUS_BABBLE_DETECTED 0xC0000012
Packit Service 5a9772
#define USBD_STATUS_DATA_BUFFER_ERROR 0xC0000013
Packit Service 5a9772
Packit Service 5a9772
#define USBD_STATUS_NOT_SUPPORTED 0xC0000E00
Packit Service 5a9772
#define USBD_STATUS_BUFFER_TOO_SMALL 0xC0003000
Packit Service 5a9772
#define USBD_STATUS_TIMEOUT 0xC0006000
Packit Service 5a9772
#define USBD_STATUS_DEVICE_GONE 0xC0007000
Packit Service 5a9772
Packit Service 5a9772
#define USBD_STATUS_NO_MEMORY 0x80000100
Packit Service 5a9772
#define USBD_STATUS_INVALID_URB_FUNCTION 0x80000200
Packit Service 5a9772
#define USBD_STATUS_INVALID_PARAMETER 0x80000300
Packit Service 5a9772
#define USBD_STATUS_REQUEST_FAILED 0x80000500
Packit Service 5a9772
#define USBD_STATUS_INVALID_PIPE_HANDLE 0x80000600
Packit Service 5a9772
#define USBD_STATUS_ERROR_SHORT_TRANSFER 0x80000900
Packit Service 5a9772
Packit Service 5a9772
// Values for URB TransferFlags Field
Packit Service 5a9772
//
Packit Service 5a9772
Packit Service 5a9772
/*
Packit Service 5a9772
    Set if data moves device->host
Packit Service 5a9772
*/
Packit Service 5a9772
#define USBD_TRANSFER_DIRECTION 0x00000001
Packit Service 5a9772
/*
Packit Service 5a9772
    This bit if not set indicates that a short packet, and hence,
Packit Service 5a9772
    a short transfer is an error condition
Packit Service 5a9772
*/
Packit Service 5a9772
#define USBD_SHORT_TRANSFER_OK 0x00000002
Packit Service 5a9772
/*
Packit Service 5a9772
    Subit the iso transfer on the next frame
Packit Service 5a9772
*/
Packit Service 5a9772
#define USBD_START_ISO_TRANSFER_ASAP 0x00000004
Packit Service 5a9772
#define USBD_DEFAULT_PIPE_TRANSFER 0x00000008
Packit Service 5a9772
Packit Service 5a9772
#define USBD_TRANSFER_DIRECTION_FLAG(flags) ((flags)&USBD_TRANSFER_DIRECTION)
Packit Service 5a9772
Packit Service 5a9772
#define USBD_TRANSFER_DIRECTION_OUT 0
Packit Service 5a9772
#define USBD_TRANSFER_DIRECTION_IN 1
Packit Service 5a9772
Packit Service 5a9772
#define VALID_TRANSFER_FLAGS_MASK				USBD_SHORT_TRANSFER_OK | \
Packit Service 5a9772
	USBD_TRANSFER_DIRECTION | \
Packit Service 5a9772
	USBD_START_ISO_TRANSFER_ASAP | \
Packit Service 5a9772
	USBD_DEFAULT_PIPE_TRANSFER)
Packit Service 5a9772
Packit Service 5a9772
#define ENDPOINT_HALT 0x00
Packit Service 5a9772
#define DEVICE_REMOTE_WAKEUP 0x01
Packit Service 5a9772
Packit Service 5a9772
/* transfer type */
Packit Service 5a9772
#define CONTROL_TRANSFER 0x00
Packit Service 5a9772
#define ISOCHRONOUS_TRANSFER 0x01
Packit Service 5a9772
#define BULK_TRANSFER 0x02
Packit Service 5a9772
#define INTERRUPT_TRANSFER 0x03
Packit Service 5a9772
Packit Service 5a9772
#define ClearHubFeature (0x2000 | LIBUSB_REQUEST_CLEAR_FEATURE)
Packit Service 5a9772
#define ClearPortFeature (0x2300 | LIBUSB_REQUEST_CLEAR_FEATURE)
Packit Service 5a9772
#define GetHubDescriptor (0xa000 | LIBUSB_REQUEST_GET_DESCRIPTOR)
Packit Service 5a9772
#define GetHubStatus (0xa000 | LIBUSB_REQUEST_GET_STATUS)
Packit Service 5a9772
#define GetPortStatus (0xa300 | LIBUSB_REQUEST_GET_STATUS)
Packit Service 5a9772
#define SetHubFeature (0x2000 | LIBUSB_REQUEST_SET_FEATURE)
Packit Service 5a9772
#define SetPortFeature (0x2300 | LIBUSB_REQUEST_SET_FEATURE)
Packit Service 5a9772
Packit Service 5a9772
#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
Packit Service 5a9772
#define USBD_PF_SHORT_PACKET_OPT 0x00000002
Packit Service 5a9772
#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
Packit Service 5a9772
#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
Packit Service 5a9772
Packit Service 5a9772
/* feature request */
Packit Service 5a9772
#define URB_SET_FEATURE 0x00
Packit Service 5a9772
#define URB_CLEAR_FEATURE 0x01
Packit Service 5a9772
Packit Service 5a9772
#define USBD_PF_CHANGE_MAX_PACKET 0x00000001
Packit Service 5a9772
#define USBD_PF_SHORT_PACKET_OPT 0x00000002
Packit Service 5a9772
#define USBD_PF_ENABLE_RT_THREAD_ACCESS 0x00000004
Packit Service 5a9772
#define USBD_PF_MAP_ADD_TRANSFERS 0x00000008
Packit Service 5a9772
Packit Service 5a9772
#define URB_CONTROL_TRANSFER_EXTERNAL 0x1
Packit Service 5a9772
#define URB_CONTROL_TRANSFER_NONEXTERNAL 0x0
Packit Service 5a9772
Packit Service 5a9772
#define USBFS_URB_SHORT_NOT_OK 0x01
Packit Service 5a9772
#define USBFS_URB_ISO_ASAP 0x02
Packit Service 5a9772
#define USBFS_URB_BULK_CONTINUATION 0x04
Packit Service 5a9772
#define USBFS_URB_QUEUE_BULK 0x10
Packit Service 5a9772
Packit Service 5a9772
#define URBDRC_DEVICE_INITIALIZED 0x01
Packit Service 5a9772
#define URBDRC_DEVICE_NOT_FOUND 0x02
Packit Service 5a9772
#define URBDRC_DEVICE_CHANNEL_CLOSED 0x08
Packit Service 5a9772
#define URBDRC_DEVICE_ALREADY_SEND 0x10
Packit Service 5a9772
#define URBDRC_DEVICE_DETACH_KERNEL 0x20
Packit Service 5a9772
Packit Service 5a9772
#define UDEVMAN_FLAG_ADD_BY_VID_PID 0x01
Packit Service 5a9772
#define UDEVMAN_FLAG_ADD_BY_ADDR 0x02
Packit Service 5a9772
#define UDEVMAN_FLAG_ADD_BY_AUTO 0x04
Packit Service 5a9772
#define UDEVMAN_FLAG_DEBUG 0x08
Packit Service 5a9772
Packit Service 5a9772
#endif /* FREERDP_CHANNEL_URBDRC_CLIENT_TYPES_H */