⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdu_lib.h

📁 采用windriver提供的API开发的D12应用程序源码
💻 H
字号:
/* Copyright (C) Jungo 2002 - 2006 */

#ifndef _WD_USB_H_
#define _WD_USB_H_

#include "windrvr.h"

#if defined(__cplusplus)
    extern "C" {
#endif

typedef PVOID WDU_DEVICE_HANDLE;
typedef PVOID WDU_DRIVER_HANDLE; 

typedef WORD WDU_LANGID;

// User Callbacks

// Function typedef: WDU_ATTACH_CALLBACK()
//   WinDriver calls this function with any new device that is attached, 
//   matches the given criteria, and if WD_ACKNOWLEDGE was passed to WDU_Init()
//   in dwOptions - not controlled yet by another driver.
//   This callback is called once for each matching interface.
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] pDeviceInfo: ptr to device configuration details, this ptr is valid 
//   until the end of the function
//   [in] pUserData: ptr that was passed to WDU_Init
// Return Value:
//   if WD_ACKNOWLEDGE was passed to WDU_Init(), the implementor should check & 
//   return if he wants to control the device
typedef BOOL (DLLCALLCONV *WDU_ATTACH_CALLBACK)(WDU_DEVICE_HANDLE hDevice, 
    WDU_DEVICE *pDeviceInfo, PVOID pUserData);

// Function typedef: WDU_DETACH_CALLBACK()
//   WinDriver calls this function when a controlled device has been detached 
//   from the system.
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] pUserData: ptr that was passed to WDU_Init (in the event table)
// Return Value:
//   None.
typedef void (DLLCALLCONV *WDU_DETACH_CALLBACK)(WDU_DEVICE_HANDLE hDevice, PVOID pUserData);

// Function typedef: WDU_POWER_CHANGE_CALLBACK()
//   (currently (CE.Net 4.10) pRegisterNotificationRoutine will pass only 
//   USB_CLOSE_DEVICE event (see microsoft documentation))
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwPowerState: number of the power state selected
//   [in] pUserData: ptr that was passed to WDU_Init (in the event table)
// Return Value:
//   TRUE/FALSE; Currently there is no significance to the return value.
typedef BOOL (DLLCALLCONV *WDU_POWER_CHANGE_CALLBACK)(WDU_DEVICE_HANDLE hDevice, DWORD dwPowerState, PVOID pUserData);

// struct definitions
typedef struct
{
    WDU_ATTACH_CALLBACK pfDeviceAttach;
    WDU_DETACH_CALLBACK pfDeviceDetach;
    WDU_POWER_CHANGE_CALLBACK pfPowerChange;
    PVOID pUserData; // pointer to pass in each callback
} WDU_EVENT_TABLE;

// API Functions  

// Function: WDU_Init()
//   Starts listening to devices matching a criteria, and registers
//   notification callbacks for those devices
// Parameters:
//   [out] phDriver: handle to this registration of events & criteria
//   [in] pMatchTables: array of match tables defining the devices-criteria
//   [in] dwNumMatchTables: number of elements in pMatchTables
//   [in] pEventTable: notification callbackss when the device's status changes
//   [in] sLicense: WinDriver's license string
//   [in] dwOptions: can be 0 or:
//          WD_ACKNOWLEDGE - The user can seize control over the device in 
//                           WDU_ATTACH_CALLBACK return value
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_Init(WDU_DRIVER_HANDLE *phDriver,
    WDU_MATCH_TABLE *pMatchTables, DWORD dwNumMatchTables,
    WDU_EVENT_TABLE *pEventTable, const char *sLicense, DWORD dwOptions);

// Function: WDU_Uninit()
//   Stops listening to devices matching the criteria, and unregisters the 
//   notification callbacks for those devices
// Parameters:
//   [in] hDriver: handle to the registration, received from WDU_Init
// Return Value:
//   None.
void DLLCALLCONV WDU_Uninit(WDU_DRIVER_HANDLE hDriver);

// Function: WDU_GetDeviceAddr()
//   Gets USB address that the device uses. The address number is written to
//   the caller supplied pAddress.
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [out] pAddress: ptr to ULONG, in which result will be returned.
// Return Value:
//   WinDriver Error Code         
// NOTE: this function is supported on Windows only
DWORD DLLCALLCONV WDU_GetDeviceAddr(WDU_DEVICE_HANDLE hDevice, ULONG *pAddress);

// Function: WDU_GetDeviceInfo()
//   Gets configuration information from the device including all the 
//   descriptors in a WDU_DEVICE struct. The caller should free *ppDeviceInfo 
//   after using it by calling WDU_PutDeviceInfo().
// Parameters:
//   [in]  hDevice: a unique identifier for the device/interface
//   [out] ppDeviceInfo: ptr to ptr to a buffer containing the device information
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_GetDeviceInfo(WDU_DEVICE_HANDLE hDevice, WDU_DEVICE **ppDeviceInfo);

// Function: WDU_PutDeviceInfo()
//   Receives a device information pointer, allocated with a previous 
//   WDU_GetDeviceInfo() call, in order to perform the necessary cleanup
// Parameters:
//   [in] pDeviceInfo: ptr to a buffer containing the device 
//   information, as returned by a previous call to WDU_GetDeviceInfo()
// Return Value:
//   None.
void DLLCALLCONV WDU_PutDeviceInfo(WDU_DEVICE *pDeviceInfo);

// Function: WDU_SetInterface()
//   Sets the alternate setting for the specified interface
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwInterfaceNum: the interface's number
//   [in] dwAlternateSetting: the desired alternate setting value
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_SetInterface(WDU_DEVICE_HANDLE hDevice, DWORD dwInterfaceNum, DWORD dwAlternateSetting);

// NOT IMPLEMENTED YET
DWORD DLLCALLCONV WDU_SetConfig(WDU_DEVICE_HANDLE hDevice, DWORD dwConfigNum);
// NOT IMPLEMENTED YET

// Function: WDU_ResetPipe()
//   Resets a pipe
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwPipeNum: pipe number
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_ResetPipe(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum);

// Function: WDU_ResetDevice()
//   Resets a device (supported only on Windows)
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwOptions: can be 0 or:
//          WD_USB_HARD_RESET - will reset the device
//              even if it is not disabled.
//              After using this option it is advised to set the
//              interface of the device (WDU_SetInterface())
// Return Value:
//   WinDriver Error Code
// NOTE: this function is supported on Windows only
DWORD DLLCALLCONV WDU_ResetDevice(WDU_DEVICE_HANDLE hDevice, DWORD dwOptions);

// Function: WDU_Wakeup()
//   Enables/Disables wakeup feature
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwOptions: can be:
//          WDU_WAKEUP_ENABLE - will enable wakeup
//          or:
//          WDU_WAKEUP_DISABLE - will disbale wakeup
// Return Value:
//   WinDriver Error Code
// NOTE: this function is supported on Windows only
DWORD DLLCALLCONV WDU_Wakeup(WDU_DEVICE_HANDLE hDevice, DWORD dwOptions);

// Function: WDU_Transfer()
//   Transfers data to/from a device
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwPipeNum: number of the pipe through which the data is transferred
//   [in] fRead: TRUE for read, FALSE for write
//   [in] dwOptions: can be:
//              USB_ISOCH_NOASAP - For isochronous data transfers. Setting this option   
//                      instructs the lower driver (usbd.sys) to use a preset frame number 
//                      (instead of the next available frame) while performing the data transfer. 
//                      Use this flag if you notice unused frames during the transfer, on low-speed
//                      or full-speed devices (USB 1.1 only) and on Windows only (excluding CE).
//              USB_ISOCH_RESET - Resets the isochronous pipe before the data transfer. It 
//                      also resets the pipe after minor errors (consequently allowing to continue 
//                      with the transfer).
//              USB_ISOCH_FULL_PACKETS_ONLY - When set, do not transfer less than packet size 
//                      on isochronous pipes.                                   
//   [in] pBuffer: location of the data buffer
//   [in] dwBufferSize: number of the bytes to transfer
//   [out] pdwBytesTransferred: number of bytes actually transferred
//   [in] pSetupPacket: 8-bytes packet to transfer to control pipes
//   [in] dwTimeout: time in miliseconds to complete the transfer
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_Transfer(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum, DWORD fRead, 
    DWORD dwOptions, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesTransferred, 
    PBYTE pSetupPacket, DWORD dwTimeout);

// Function: WDU_HaltTransfer()
//   Halts the transfer on the specified pipe (only one simultaneous transfer
//   per-pipe is allowed by WinDriver)
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] dwPipeNum: pipe number
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_HaltTransfer(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum);

//
// simplified transfers
//

DWORD DLLCALLCONV WDU_TransferDefaultPipe(WDU_DEVICE_HANDLE hDevice, DWORD fRead, 
    DWORD dwOptions, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesTransferred, 
    PBYTE pSetupPacket, DWORD dwTimeout);

DWORD DLLCALLCONV WDU_TransferBulk(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum, DWORD fRead, 
    DWORD dwOptions, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesTransferred, 
    DWORD dwTimeout);

DWORD DLLCALLCONV WDU_TransferIsoch(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum, DWORD fRead, 
    DWORD dwOptions, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesTransferred, 
    DWORD dwTimeout);

DWORD DLLCALLCONV WDU_TransferInterrupt(WDU_DEVICE_HANDLE hDevice, DWORD dwPipeNum, DWORD fRead, 
    DWORD dwOptions, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesTransferred, 
    DWORD dwTimeout);

// Function: WDU_GetLangIDs()
//   Reads a list of supported language IDs and/or the number of supported 
//   language IDs from a device
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [out] pbNumSupportedLangIDs: paramater to receive number of 
//           supported language IDs. Can be NULL if bNumLangIDs is 
//           not 0 and pLangIDs is not NULL. If NULL, the function 
//           will not return the number of supported language IDs 
//           for the device.
//   [out] pLangIDs: array of language IDs. If bNumLangIDs is not 
//           0 the function will fill this array with the supported 
//           language IDs for the device. If bNumLangIDs < the number 
//           of supported language IDs for the device, only the first 
//           bNumLangIDs supported language IDs will be read from the 
//           device and returned in the pLangIDs array   
//   [in] bNumLangIDs: number of IDs in pLangIDs array. If 0, the 
//          function will only return the number of supported language 
//          IDs    
// Return Value:
//   WinDriver Error Code
// NOTE: If no language IDs are supported for the device 
//       (*pbNumSupportedLangIDs == 0) the function returns 
//       WD_STATUS_SUCCESS   
DWORD DLLCALLCONV WDU_GetLangIDs(WDU_DEVICE_HANDLE hDevice, 
    PBYTE pbNumSupportedLangIDs, WDU_LANGID *pLangIDs, BYTE bNumLangIDs);

// Function: WDU_GetStringDesc()
//   Reads a string descriptor from a device by string index
//   (the descriptor is returned as a bytes stream)
// Parameters:
//   [in] hDevice: a unique identifier for the device/interface
//   [in] bStrIndex: string index 
//   [out] pbBuf: bytes array to hold the string descriptor that is read from 
//           the device. If dwBufSize < the size of the string descriptor, 
//           the returned descriptor will be truncated to dwBufSize bytes.
//   [in] dwBufSize: size of the pbBuf array
//   [in] langID: the language ID to be used in the get string descriptor 
//          request that is sent to the device. If langID is 0, the function 
//          will use the first supported language ID returned from the device 
//          (if exists)
//   [out] pdwDescSize: if this parameter is not NULL, in case of a successful 
//           read the function will update this parameter with the size of the 
//           string descriptor that was read from the device.
// Return Value:
//   WinDriver Error Code
DWORD DLLCALLCONV WDU_GetStringDesc(WDU_DEVICE_HANDLE hDevice, BYTE bStrIndex, 
    PBYTE pbBuf, DWORD dwBufSize, WDU_LANGID langID, PDWORD pdwDescSize);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -