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

📄 bul_usbfn.cpp

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            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 + -