|
|
/*++
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; \ }
|