亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbdlib.h

?? 完成uc/os-ii下usb固件驅動
?? H
字號:
/*++

Copyright (c) 1996	Microsoft Corporation

Module Name:

	USBDLIB.H

Abstract:

   Services exported by USBD.

Environment:

    Kernel & user mode

Revision History:

    06-10-96 : created

--*/

#ifndef   __USBDLIB_H__
#define   __USBDLIB_H__

typedef struct _USBD_INTERFACE_LIST_ENTRY {
    PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
    PUSBD_INTERFACE_INFORMATION Interface;
} USBD_INTERFACE_LIST_ENTRY, *PUSBD_INTERFACE_LIST_ENTRY;


//
// Macros for building URB requests
//

#define UsbBuildInterruptOrBulkTransferRequest(urb, \
                                               length, \
                                               pipeHandle, \
                                               transferBuffer, \
                                               transferBufferMDL, \
                                               transferBufferLength, \
                                               transferFlags, \
                                               link) { \
            (urb)->UrbHeader.Function = URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER; \
            (urb)->UrbHeader.Length = (length); \
            (urb)->UrbBulkOrInterruptTransfer.PipeHandle = (pipeHandle); \
            (urb)->UrbBulkOrInterruptTransfer.TransferBufferLength = (transferBufferLength); \
            (urb)->UrbBulkOrInterruptTransfer.TransferBufferMDL = (transferBufferMDL); \
            (urb)->UrbBulkOrInterruptTransfer.TransferBuffer = (transferBuffer); \
            (urb)->UrbBulkOrInterruptTransfer.TransferFlags = (transferFlags); \
            (urb)->UrbBulkOrInterruptTransfer.UrbLink = (link); }
            

#define UsbBuildGetDescriptorRequest(urb, \
                                     length, \
                                     descriptorType, \
                                     descriptorIndex, \
                                     languageId, \
                                     transferBuffer, \
                                     transferBufferMDL, \
                                     transferBufferLength, \
                                     link) { \
            (urb)->UrbHeader.Function =  URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE; \
            (urb)->UrbHeader.Length = (length); \
            (urb)->UrbControlDescriptorRequest.TransferBufferLength = (transferBufferLength); \
            (urb)->UrbControlDescriptorRequest.TransferBufferMDL = (transferBufferMDL); \
            (urb)->UrbControlDescriptorRequest.TransferBuffer = (transferBuffer); \
            (urb)->UrbControlDescriptorRequest.DescriptorType = (descriptorType); \
            (urb)->UrbControlDescriptorRequest.Index = (descriptorIndex); \
            (urb)->UrbControlDescriptorRequest.LanguageId = (languageId); \
            (urb)->UrbControlDescriptorRequest.UrbLink = (link); }



#define UsbBuildGetStatusRequest(urb, \
                                 op, \
                                 index, \
                                 transferBuffer, \
                                 transferBufferMDL, \
                                 link) { \
            (urb)->UrbHeader.Function =  (op); \
            (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_STATUS_REQUEST); \
            (urb)->UrbControlGetStatusRequest.TransferBufferLength = sizeof(USHORT); \
            (urb)->UrbControlGetStatusRequest.TransferBufferMDL = (transferBufferMDL); \
            (urb)->UrbControlGetStatusRequest.TransferBuffer = (transferBuffer); \
            (urb)->UrbControlGetStatusRequest.Index = (index); \
            (urb)->UrbControlGetStatusRequest.UrbLink = (link); }


#define UsbBuildFeatureRequest(urb, \
                               op, \
                               featureSelector, \
                               index, \
                               link) { \
            (urb)->UrbHeader.Function =  (op); \
            (urb)->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); \
            (urb)->UrbControlFeatureRequest.FeatureSelector = (featureSelector); \
            (urb)->UrbControlFeatureRequest.Index = (index); \
            (urb)->UrbControlGetStatusRequest.UrbLink = (link); }


                
#define UsbBuildSelectConfigurationRequest(urb, \
                                         length, \
                                         configurationDescriptor) { \
            (urb)->UrbHeader.Function =  URB_FUNCTION_SELECT_CONFIGURATION; \
            (urb)->UrbHeader.Length = (length); \
            (urb)->UrbSelectConfiguration.ConfigurationDescriptor = (configurationDescriptor);    }
                
#define UsbBuildSelectInterfaceRequest(urb, \
                                      length, \
                                      configurationHandle, \
                                      interfaceNumber, \
                                      alternateSetting) { \
            (urb)->UrbHeader.Function =  URB_FUNCTION_SELECT_INTERFACE; \
            (urb)->UrbHeader.Length = (length); \
            (urb)->UrbSelectInterface.Interface.AlternateSetting = (alternateSetting); \
            (urb)->UrbSelectInterface.Interface.InterfaceNumber = (interfaceNumber); \
            (urb)->UrbSelectInterface.ConfigurationHandle = (configurationHandle);    }


#define UsbBuildVendorRequest(urb, \
                              cmd, \
                              length, \
                              transferFlags, \
                              reservedbits, \
                              request, \
                              value, \
                              index, \
                              transferBuffer, \
                              transferBufferMDL, \
                              transferBufferLength, \
                              link) { \
            (urb)->UrbHeader.Function =  cmd; \
            (urb)->UrbHeader.Length = (length); \
            (urb)->UrbControlVendorClassRequest.TransferBufferLength = (transferBufferLength); \
            (urb)->UrbControlVendorClassRequest.TransferBufferMDL = (transferBufferMDL); \
            (urb)->UrbControlVendorClassRequest.TransferBuffer = (transferBuffer); \
            (urb)->UrbControlVendorClassRequest.RequestTypeReservedBits = (reservedbits); \
            (urb)->UrbControlVendorClassRequest.Request = (request); \
            (urb)->UrbControlVendorClassRequest.Value = (value); \
            (urb)->UrbControlVendorClassRequest.Index = (index); \
            (urb)->UrbControlVendorClassRequest.TransferFlags = (transferFlags); \
            (urb)->UrbControlVendorClassRequest.UrbLink = (link); }

//
// Get the USB status code
//

#define URB_STATUS(urb) ((urb)->UrbHeader.Status)
                
//
// Macros used for select interface and select configuration requests
//

//
// Calculates the size needed for a SELECT_CONFIGURATION URB request given
// the number of interfaces and the total number of pipes in all interfaces
// selected.
//

#ifdef OSR21_COMPAT
#define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \
            (sizeof(struct _URB_SELECT_CONFIGURATION) + \
                ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \
                ((totalPipes)*sizeof(USBD_PIPE_INFORMATION)))
#else
#define GET_SELECT_CONFIGURATION_REQUEST_SIZE(totalInterfaces, totalPipes) \
            (sizeof(struct _URB_SELECT_CONFIGURATION) + \
                ((totalInterfaces-1) * sizeof(USBD_INTERFACE_INFORMATION)) + \
                ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION)))
#endif

//
// Calculates the size needed for a SELECT_INTERFACE URB request given
// the number of pipes in the alternate interface selected.
//

#ifdef OSR21_COMPAT
#define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \
            (sizeof(struct _URB_SELECT_INTERFACE) + \
             ((totalPipes)*sizeof(USBD_PIPE_INFORMATION)))
#else 
#define GET_SELECT_INTERFACE_REQUEST_SIZE(totalPipes) \
            (sizeof(struct _URB_SELECT_INTERFACE) + \
             ((totalPipes-1)*sizeof(USBD_PIPE_INFORMATION)))
#endif
//
// Calculates the size of the interface information structure needed to describe
// a give interface based on the number of endpoints.
//

#ifdef OSR21_COMPAT
#define GET_USBD_INTERFACE_SIZE(numEndpoints) (sizeof(USBD_INTERFACE_INFORMATION) + \
                        sizeof(USBD_PIPE_INFORMATION)*(numEndpoints))
#else
#define GET_USBD_INTERFACE_SIZE(numEndpoints) (sizeof(USBD_INTERFACE_INFORMATION) + \
                        (sizeof(USBD_PIPE_INFORMATION)*(numEndpoints)) \
                         - sizeof(USBD_PIPE_INFORMATION))
#endif

//
// Calculates the size of an iso urb request given the number of packets
//

#define  GET_ISO_URB_SIZE(n) (sizeof(struct _URB_ISOCH_TRANSFER)+\
        sizeof(USBD_ISO_PACKET_DESCRIPTOR)*n)                          


#ifndef _USBD_

DECLSPEC_IMPORT
VOID 
USBD_Debug_LogEntry(
	IN CHAR *Name, 
	IN ULONG Info1, 
	IN ULONG Info2, 
	IN ULONG Info3
	);


DECLSPEC_IMPORT
VOID
USBD_GetUSBDIVersion(
    PUSBD_VERSION_INFORMATION VersionInformation
    );


DECLSPEC_IMPORT
PUSB_INTERFACE_DESCRIPTOR
USBD_ParseConfigurationDescriptor(
    IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, 
    IN UCHAR InterfaceNumber, 
    IN UCHAR AlternateSetting
    );    
/*++

Routine Description:

    This function is replaced by USBD_ParseConfigurationDescriptorEx

Arguments:

Return Value:


--*/        


DECLSPEC_IMPORT
PURB
USBD_CreateConfigurationRequest(
    IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
    IN OUT PUSHORT Siz
    );    
/*++

Routine Description:

    This function is replaced by USBD_CreateConfigurationRequestEx    

Arguments:


Return Value:


--*/       


//
// These APIS replace USBD_CreateConfigurationRequest,
//                    USBD_ParseConfigurationDescriptor  
//
    
DECLSPEC_IMPORT
PUSB_COMMON_DESCRIPTOR
USBD_ParseDescriptors(
    IN PVOID DescriptorBuffer,
    IN ULONG TotalLength,
    IN PVOID StartPosition,
    IN LONG DescriptorType
    );
/*++

Routine Description:

    Parses a group of standard USB configuration descriptors (returned from a device) for
    a specific descriptor type.

Arguments:

    DescriptorBuffer - pointer to a block of contiguous USB desscriptors
    TotalLength - size in bytes of the Descriptor buffer
    StartPosition - starting position in the buffer to begin parsing,
                    this must point to the begining of a USB descriptor.
    DescriptorType - USB descritor type to locate.                            
    

Return Value:

    pointer to a usb descriptor with a DescriptorType field matching the 
            input parameter or NULL if not found.

--*/    


DECLSPEC_IMPORT
PUSB_INTERFACE_DESCRIPTOR
USBD_ParseConfigurationDescriptorEx(
    IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
    IN PVOID StartPosition,
    IN LONG InterfaceNumber,
    IN LONG AlternateSetting,
    IN LONG InterfaceClass,
    IN LONG InterfaceSubClass,
    IN LONG InterfaceProtocol
    );
/*++

Routine Description:

    Parses a standard USB configuration descriptor (returned from a device) for
    a specific interface, alternate setting class subclass or protocol codes

Arguments:

    ConfigurationDescriptor - pointer to USB configuration descriptor, returned
                            from a device (includes all interface and endpoint 
                            descriptors).
    StartPosition - pointer to starting position within the configuration 
                    descrptor to begin parsing -- this must be a valid usb 
                    descriptor.
    InterfaceNumber - interface number to find, (-1) match any
    AlternateSetting - alt setting number to find, (-1) match any
    InterfaceClass - class to find, (-1) match any
    InterfaceSubClass - subclass to find, (-1) match any
    InterfaceProtocol - protocol to find, (-1) match any
    
Return Value:

    returns a pointer to the first interface descriptor matching the parameters 
    passed in (starting from startposition) or NULL if no match is found.

--*/

DECLSPEC_IMPORT
PURB
USBD_CreateConfigurationRequestEx(
    IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
    IN PUSBD_INTERFACE_LIST_ENTRY InterfaceList
    );
/*++

Routine Description:

    Allocates and initilaizes a urb of sufficient size to configure a device
    based on the list of interfaces passed in.

    The interface list is a contiguous array of USBD_INTERFACE_LIST_ENTRIES
    each pointing to a specific interface descriptor to be incorporated in
    the request, the list is terminated by a list entry with an 
    InterfaceDescriptor pointer of NULL.  

    On return the interface field of each list entry is filled in with a pointer
    to the USBD_INTERFACE_INFORMATION structure within the URB corrisponding to 
    the same interface descriptor.

Arguments:

    ConfigurationDescriptor - pointer to USB configuration descriptor, returned
                            from a device (includes all interface and endpoint 
                            descriptors).

    InterfaceList - list of interfaces we are interested in.

Return Value:

    Pointer to initailized select_configuration urb.

--*/

__declspec(dllexport)
ULONG
USBD_GetInterfaceLength(
    IN PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor, 
    IN PUCHAR BufferEnd
    );
/*++

Routine Description:

    Returns the length (in bytes) of a given interface descriptor 
    including all endpoint and class descriptors
    

Arguments:

    InterfaceDescriptor    

    BufferEnd - Pointer to the end of the buffer containing the descriptors
    
Return Value:

    length of descriptors

--*/


__declspec(dllexport)
VOID
USBD_RegisterHcFilter(
    PDEVICE_OBJECT DeviceObject, 
    PDEVICE_OBJECT FilterDeviceObject
    );

/*++

Routine Description:

    Called by an HC filter driver after it attaches to the top
    of the host controller driver stack.

Arguments:

    DeviceObject - current top of stack

    FilterDeviceObject - device object for the filter driver
    
Return Value:

    none

--*/

__declspec(dllexport)
NTSTATUS 
USBD_GetPdoRegistryParameter(
    IN PDEVICE_OBJECT PhysicalDeviceObject,
    IN OUT PVOID Parameter,
    IN ULONG ParameterLength,
    IN PWCHAR KeyName,
    IN ULONG KeyNameLength
    );
/*++

Routine Description:
    
Arguments:

Return Value:

--*/
    

#endif /* _USBD_ */

#endif /* __USBDLIB_H__ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人手机在线视频| 三级一区在线视频先锋| 国产大片一区二区| 国产蜜臀av在线一区二区三区| 国产乱人伦精品一区二区在线观看 | 欧美日韩精品电影| 日韩电影免费在线看| 精品久久久久久亚洲综合网 | 国产精品久久夜| 91在线无精精品入口| 亚洲综合免费观看高清完整版在线| 欧美午夜一区二区| 捆绑调教美女网站视频一区| 国产欧美日韩亚州综合| 91理论电影在线观看| 日韩主播视频在线| 国产欧美日韩在线视频| 欧美在线啊v一区| 久久狠狠亚洲综合| 最新日韩在线视频| 69久久夜色精品国产69蝌蚪网| 久久国产精品免费| 一区二区三区91| 欧美精品一区视频| 在线观看中文字幕不卡| 久久精品国产在热久久| 国产精品久久精品日日| 欧美精品tushy高清| 国产福利一区二区三区视频| 亚洲综合在线电影| 久久久亚洲精华液精华液精华液| 91极品美女在线| 国产成人啪午夜精品网站男同| 亚洲永久免费av| 国产精品免费视频一区| 91麻豆精品国产91久久久久久久久| 成人av影院在线| 美女高潮久久久| 一区二区三区资源| 亚洲国产精品99久久久久久久久| 欧美性xxxxxx少妇| 国产不卡免费视频| 毛片av中文字幕一区二区| 亚洲男人的天堂av| 国产欧美日韩在线视频| 欧美tk—视频vk| 欧美男同性恋视频网站| 91一区在线观看| 国产精品一区二区三区网站| 婷婷开心激情综合| 亚洲精品久久久蜜桃| 中文字幕乱码一区二区免费| 精品奇米国产一区二区三区| 欧美精品高清视频| 一本大道久久a久久精品综合| 国产成人综合在线观看| 久久99精品网久久| 三级久久三级久久久| 亚洲国产sm捆绑调教视频 | 在线免费观看不卡av| 国产成人精品一区二区三区四区 | 亚洲制服欧美中文字幕中文字幕| 国产免费久久精品| 国产午夜精品一区二区| 欧美大胆一级视频| 欧美一区二区视频观看视频| 91久久精品一区二区三区| 成人91在线观看| a4yy欧美一区二区三区| 成人av电影在线| 91天堂素人约啪| 色综合夜色一区| 色综合天天综合狠狠| 91浏览器在线视频| 在线观看日韩av先锋影音电影院| 97久久超碰精品国产| 91视频国产观看| 色婷婷av久久久久久久| 欧美在线一二三四区| 欧美日韩精品一区二区三区 | 91精品国产日韩91久久久久久| 欧美人与z0zoxxxx视频| 欧美一区二区视频在线观看2020| 欧美一区午夜视频在线观看 | 国产欧美日韩精品在线| 国产日产欧美精品一区二区三区| 国产视频一区在线播放| 国产精品国产三级国产有无不卡 | 久久综合一区二区| 国产欧美视频在线观看| 亚洲男女一区二区三区| 亚洲成人中文在线| 久久99久久99| 成人性生交大片免费看视频在线| zzijzzij亚洲日本少妇熟睡| 在线精品国精品国产尤物884a| 欧美日韩美少妇| 久久综合色婷婷| 亚洲人成网站影音先锋播放| 日韩精品一二三四| 国产电影一区在线| 91啪九色porn原创视频在线观看| 欧美亚洲综合网| 久久一夜天堂av一区二区三区| 国产精品久久久久久久久免费相片 | 国产福利电影一区二区三区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美猛男男办公室激情| 久久九九久久九九| 亚洲午夜影视影院在线观看| 麻豆精品在线播放| jizz一区二区| 日韩亚洲欧美高清| 亚洲欧洲精品成人久久奇米网| 亚瑟在线精品视频| 国产成+人+日韩+欧美+亚洲| 欧美亚洲国产一区二区三区| 精品人伦一区二区色婷婷| 亚洲人成伊人成综合网小说| 久久99久久99小草精品免视看| 99久久综合精品| 亚洲精品一区二区三区蜜桃下载| 亚洲天堂精品在线观看| 久久精品免费看| 91久久人澡人人添人人爽欧美| 日韩欧美专区在线| 一区二区三区日韩在线观看| 激情亚洲综合在线| 欧美综合一区二区| 国产精品乱码一区二三区小蝌蚪| 三级欧美韩日大片在线看| 91在线观看地址| 久久久久99精品国产片| 青娱乐精品在线视频| 色一情一乱一乱一91av| 国产三级一区二区三区| 裸体一区二区三区| 欧美视频在线观看一区| 亚洲欧美日韩在线不卡| 国产传媒日韩欧美成人| 精品区一区二区| 青青草国产成人99久久| 欧美色视频一区| 一级日本不卡的影视| 91蜜桃在线免费视频| 久久精品一区二区三区不卡牛牛| 免费久久99精品国产| 9191精品国产综合久久久久久 | 国产欧美日韩综合精品一区二区| 久久99精品国产麻豆不卡| 日韩一区二区视频| 天天操天天综合网| 欧美喷水一区二区| 天堂久久一区二区三区| 在线成人免费观看| 婷婷成人激情在线网| 欧美色国产精品| 亚洲bt欧美bt精品| 91精品国产色综合久久不卡电影| 亚洲一级片在线观看| 欧美无砖砖区免费| 亚洲一区电影777| 欧美精品一二三四| 麻豆精品在线看| 亚洲精品在线网站| 国产麻豆午夜三级精品| 国产免费成人在线视频| 成人av网站在线观看免费| 国产精品美女久久久久久久久| 成人免费电影视频| 亚洲三级免费电影| 色婷婷综合久久久中文一区二区| 亚洲精品久久嫩草网站秘色| 欧美日韩一区二区三区四区| 视频一区视频二区中文字幕| 欧美一区二区精品在线| 国内精品第一页| 国产精品久久久久婷婷| 欧美最猛性xxxxx直播| 天天影视色香欲综合网老头| 日韩欧美成人午夜| 国产精品91xxx| 亚洲少妇中出一区| 欧美日本一区二区| 久久99精品久久久| 国产精品嫩草久久久久| 欧美日韩综合一区| 美女一区二区久久| 中文一区在线播放| 欧美日韩午夜在线| 狠狠色综合色综合网络| 国产精品麻豆网站| 在线观看91av| 成人午夜精品一区二区三区| 亚洲裸体xxx| 欧美xxxxxxxxx| 91福利在线播放| 麻豆91在线播放| 亚洲免费av网站| 欧美刺激午夜性久久久久久久|