📄 bul_usbfn.cpp
字号:
break;
}
return 0;
}
DWORD
WINAPI
UfnPdd_Deinit(
PVOID pvPddContext
)
{
if (pvPddContext) {
delete ((BulUsbDevice *)pvPddContext);
return ERROR_SUCCESS ;
}
else
return ERROR_INVALID_PARAMETER;;
}
DWORD
WINAPI
UfnPdd_IsConfigurationSupportable(
PVOID pvPddContext,
UFN_BUS_SPEED Speed,
PUFN_CONFIGURATION pConfiguration
)
{
// TODO: Need to do anything?
return ERROR_SUCCESS;
}
DWORD
WINAPI
UfnPdd_IsEndpointSupportable(
PVOID pvPddContext,
DWORD dwEndpoint,
UFN_BUS_SPEED Speed,
PUSB_ENDPOINT_DESCRIPTOR pEndpointDesc,
BYTE bConfigurationValue,
BYTE bInterfaceNumber,
BYTE bAlternateSetting
)
{
// TODO: Use extra parameters
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->IsEndpointSupportable( dwEndpoint, Speed, pEndpointDesc ,bConfigurationValue,bInterfaceNumber,bAlternateSetting );
};
return dwError;
}
DWORD
WINAPI
UfnPdd_InitEndpoint(
PVOID pvPddContext,
DWORD dwEndpoint,
UFN_BUS_SPEED Speed,
PUSB_ENDPOINT_DESCRIPTOR pEndpointDesc,
PVOID pvReserved,
BYTE bConfigurationValue,
BYTE bInterfaceNumber,
BYTE bAlternateSetting
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->InitEndpoint( dwEndpoint, Speed, pEndpointDesc, bConfigurationValue,bInterfaceNumber,bAlternateSetting );
};
return dwError;
}
DWORD
WINAPI
UfnPdd_RegisterDevice(
PVOID pvPddContext,
PCUSB_DEVICE_DESCRIPTOR pHighSpeedDeviceDesc,
PCUFN_CONFIGURATION pHighSpeedConfig,
PCUSB_CONFIGURATION_DESCRIPTOR pHighSpeedConfigDesc,
PCUSB_DEVICE_DESCRIPTOR pFullSpeedDeviceDesc,
PCUFN_CONFIGURATION pFullSpeedConfig,
PCUSB_CONFIGURATION_DESCRIPTOR pFullSpeedConfigDesc,
PCUFN_STRING_SET pStringSets,
DWORD cStringSets
)
{
return ERROR_SUCCESS;
}
DWORD
WINAPI
UfnPdd_DeregisterDevice(
PVOID pvPddContext
)
{
if (pvPddContext) {
((BulUsbDevice *)pvPddContext)->DeleteAllEndpoint();
};
return ERROR_SUCCESS;
}
DWORD
WINAPI
UfnPdd_Start(
PVOID pvPddContext
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->Start();
};
return dwError;
}
DWORD
WINAPI
UfnPdd_Stop(
PVOID pvPddContext
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->Stop();
};
return dwError;
}
DWORD
WINAPI
UfnPdd_IssueTransfer(
PVOID pvPddContext,
DWORD dwEndpoint,
PSTransfer pTransfer
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->IssueTransfer(dwEndpoint,pTransfer);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_AbortTransfer(
PVOID pvPddContext,
DWORD dwEndpoint,
PSTransfer pTransfer
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->AbortTransfer(dwEndpoint, pTransfer);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_DeinitEndpoint(
PVOID pvPddContext,
DWORD dwEndpoint
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->DeinitEndpoint(dwEndpoint);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_StallEndpoint(
PVOID pvPddContext,
DWORD dwEndpoint
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->StallEndpoint(dwEndpoint);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_ClearEndpointStall(
PVOID pvPddContext,
DWORD dwEndpoint
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->ClearEndpointStall(dwEndpoint);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_SendControlStatusHandshake(
PVOID pvPddContext,
DWORD dwEndpoint
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->SendControlStatusHandshake(dwEndpoint);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_SetAddress(
PVOID pvPddContext,
BYTE bAddress
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->SetAddress(bAddress);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_IsEndpointHalted(
PVOID pvPddContext,
DWORD dwEndpoint,
PBOOL pfHalted
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->IsEndpointHalted(dwEndpoint,pfHalted);
};
return dwError;
}
DWORD
WINAPI
UfnPdd_InitiateRemoteWakeup(
PVOID pvPddContext
)
{
// TODO: Fill in
return ERROR_SUCCESS;
}
void
WINAPI
UfnPdd_PowerDown(
PVOID pvPddContext
)
{
if (pvPddContext) {
((BulUsbDevice *)pvPddContext)->PowerDown();
};
}
void
WINAPI
UfnPdd_PowerUp(
PVOID pvPddContext
)
{
if (pvPddContext) {
((BulUsbDevice *)pvPddContext)->PowerUp();
};
}
// IOCTLs with a Function value between 0x200 and 0x2FF are reserved
// for the OEM.
DWORD
WINAPI
UfnPdd_IOControl(
PVOID pvPddContext,
IOCTL_SOURCE source,
DWORD dwCode,
PBYTE pbInBuf,
DWORD cbInBuf,
PBYTE pbOutBuf,
DWORD cbOutBuf,
PDWORD pcbActualOutBuf
)
{
DWORD dwError = ERROR_INVALID_PARAMETER;
if (pvPddContext) {
dwError =((BulUsbDevice *)pvPddContext)->IOControl(source, dwCode, pbInBuf, cbInBuf, pbOutBuf, cbOutBuf, pcbActualOutBuf);
};
return dwError;
}
// C- Converter.
extern "C"
DWORD
WINAPI
UfnPdd_Init(
LPCTSTR pszActiveKey,
PVOID pvMddContext,
PUFN_MDD_INTERFACE_INFO pMddInterfaceInfo,
PUFN_PDD_INTERFACE_INFO pPddInterfaceInfo
)
{
static const UFN_PDD_INTERFACE_INFO sc_PddInterfaceInfo = {
UFN_PDD_INTERFACE_VERSION,
UFN_PDD_CAPS_SUPPORTS_FULL_SPEED,
MAX_ENDPOINT_NUMBER,
NULL,
&UfnPdd_Deinit,
&UfnPdd_IsConfigurationSupportable,
&UfnPdd_IsEndpointSupportable,
&UfnPdd_InitEndpoint,
&UfnPdd_RegisterDevice,
&UfnPdd_DeregisterDevice,
&UfnPdd_Start,
&UfnPdd_Stop,
&UfnPdd_IssueTransfer,
&UfnPdd_AbortTransfer,
&UfnPdd_DeinitEndpoint,
&UfnPdd_StallEndpoint,
&UfnPdd_ClearEndpointStall,
&UfnPdd_SendControlStatusHandshake,
&UfnPdd_SetAddress,
&UfnPdd_IsEndpointHalted,
&UfnPdd_InitiateRemoteWakeup,
&UfnPdd_PowerDown,
&UfnPdd_PowerUp,
&UfnPdd_IOControl,
};
memcpy(pPddInterfaceInfo, &sc_PddInterfaceInfo, sizeof(sc_PddInterfaceInfo));
BulUsbDevice * pDevice = CreateBulUsbDevice(pszActiveKey );
if (pDevice && pDevice->Init( pvMddContext, pMddInterfaceInfo, pPddInterfaceInfo)==ERROR_SUCCESS) {
return ERROR_SUCCESS;
}
if (pDevice!=NULL)
delete pDevice;
return ERROR_INVALID_PARAMETER;
}
extern "C"
BOOL
UfnPdd_DllEntry(
HANDLE hDllHandle,
DWORD dwReason,
LPVOID lpReserved
)
{
return TRUE; // Nothing to do.
}
#ifdef DEBUG
UFN_GENERATE_DPCURSETTINGS(UFN_DEFAULT_DPCURSETTINGS_NAME,
_T(""), _T(""), _T(""), _T(""),
DBG_ERROR | DBG_WARNING | DBG_INIT);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -