mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
4.8 KiB
111 lines
4.8 KiB
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
usbd_api.h
|
|
|
|
Abstract:
|
|
Function prototype and definition used to build USB request.
|
|
|
|
Environment:
|
|
|
|
kernel mode only
|
|
|
|
Notes:
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "usbdi.h"
|
|
#include "usbdlib.h"
|
|
|
|
|
|
#define OPCODE_SEQ_TRANSFER 0x00 // 00000000b
|
|
#define OPCODE_SINGLE_ADDR_TRANSFER 0x08 // 00001000b
|
|
#define REGISTER_AREA 0x04
|
|
#define BLOCK TRUE
|
|
#define DONT_BLOCK FALSE
|
|
|
|
//
|
|
// Macros for building URB requests
|
|
//
|
|
|
|
#define UsbBuildSetFeatureDeviceRequest( \
|
|
urb, \
|
|
length, \
|
|
link, \
|
|
featureSelector, \
|
|
index) { \
|
|
(urb)->UrbHeader.Function = URB_FUNCTION_SET_FEATURE_TO_DEVICE; \
|
|
(urb)->UrbHeader.Length = (length); \
|
|
(urb)->UrbControlFeatureRequest.UrbLink = (link); \
|
|
(urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \
|
|
(urb)->UrbControlFeatureRequest.Index = (index); \
|
|
}
|
|
|
|
#define UsbBuildAbortPipeRequest( \
|
|
urb, \
|
|
length, \
|
|
handle) { \
|
|
(urb)->UrbHeader.Function = URB_FUNCTION_ABORT_PIPE; \
|
|
(urb)->UrbHeader.Length = (USHORT)length; \
|
|
(urb)->UrbPipeRequest.PipeHandle = handle; \
|
|
}
|
|
|
|
#define UsbBuildResetPipeRequest( \
|
|
urb, \
|
|
length, \
|
|
handle) { \
|
|
(urb)->UrbHeader.Function = URB_FUNCTION_RESET_PIPE; \
|
|
(urb)->UrbHeader.Length = (USHORT)length; \
|
|
(urb)->UrbPipeRequest.PipeHandle = handle; \
|
|
}
|
|
|
|
#define UsbBuildVendorClassSpecificCommand( \
|
|
urb, \
|
|
transferFlags, \
|
|
bufLength, \
|
|
transferBuf, \
|
|
transferMdl, \
|
|
requestType, \
|
|
request, \
|
|
value, \
|
|
index ) { \
|
|
(urb)->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; \
|
|
(urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); \
|
|
(urb)->UrbControlVendorClassRequest.TransferFlags = transferFlags; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBufferLength = bufLength; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBuffer = transferBuf; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBufferMDL = transferMdl; \
|
|
(urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = requestType; \
|
|
(urb)->UrbControlVendorClassRequest.Request = request; \
|
|
(urb)->UrbControlVendorClassRequest.Value = value; \
|
|
(urb)->UrbControlVendorClassRequest.Index = index; \
|
|
}
|
|
|
|
#define UsbBuildVendorClassSpecificCommandPTP( \
|
|
command, \
|
|
urb, \
|
|
transferFlags, \
|
|
bufLength, \
|
|
transferBuf, \
|
|
transferMdl, \
|
|
requestType, \
|
|
request, \
|
|
value, \
|
|
index ) { \
|
|
(urb)->UrbHeader.Function = command; \
|
|
(urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); \
|
|
(urb)->UrbControlVendorClassRequest.TransferFlags = transferFlags; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBufferLength = bufLength; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBuffer = transferBuf; \
|
|
(urb)->UrbControlVendorClassRequest.TransferBufferMDL = transferMdl; \
|
|
(urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = requestType; \
|
|
(urb)->UrbControlVendorClassRequest.Request = request; \
|
|
(urb)->UrbControlVendorClassRequest.Value = value; \
|
|
(urb)->UrbControlVendorClassRequest.Index = index; \
|
|
}
|
|
|