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

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

?? sc2440pdd.cpp

?? 三星2440 cpu WINCE 5.00板級支持包
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    )
{
    PREFAST_DEBUGCHK(pContext);
    DEBUGCHK(!pContext->hevInterrupt);
    DEBUGCHK(!pContext->hIST);
    DEBUGCHK(!pContext->fRunning);

    pContext->dwSig = GARBAGE_DWORD;

    UnmapRegisterSet(pContext);

    if (pContext->hBusAccess) CloseBusAccessHandle(pContext->hBusAccess);
    
    if (pContext->dwSysIntr) {
        KernelIoControl(IOCTL_HAL_DISABLE_WAKE, &pContext->dwSysIntr,  
    	    sizeof(pContext->dwSysIntr), NULL, 0, NULL);
    }

    if (pContext->dwIrq != IRQ_UNSPECIFIED) {
        KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR, &pContext->dwIrq, 
            sizeof(DWORD), NULL, 0, NULL);
    }
    
    DeleteCriticalSection(&pContext->csIndexedRegisterAccess);

    LocalFree(pContext);
}


DWORD
WINAPI
UfnPdd_Deinit(
    PVOID pvPddContext
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    FUNCTION_ENTER_MSG();

    FreeCtrlrContext(pContext);

    FUNCTION_LEAVE_MSG();

    return ERROR_SUCCESS;
}


DWORD
WINAPI
UfnPdd_Start(
    PVOID        pvPddContext
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    DWORD dwRet;
    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    FUNCTION_ENTER_MSG();

    DEBUGCHK(!pContext->fRunning);

    BOOL fIntInitialized = FALSE;

    // Create the interrupt event
    pContext->hevInterrupt = CreateEvent(0, FALSE, FALSE, NULL);
    if (pContext->hevInterrupt == NULL) {
        dwRet = GetLastError();
        DEBUGMSG(ZONE_ERROR, (_T("%s Error creating  interrupt event. Error = %d\r\n"), 
            pszFname, dwRet));
        goto EXIT;
    }

    fIntInitialized = InterruptInitialize(pContext->dwSysIntr, 
        pContext->hevInterrupt, NULL, 0);
    if (fIntInitialized == FALSE) {
        dwRet = ERROR_GEN_FAILURE;
        DEBUGMSG(ZONE_ERROR, (_T("%s  interrupt initialization failed\r\n"),
            pszFname));
        goto EXIT;
    }
    InterruptDone(pContext->dwSysIntr);

    pContext->fExitIST = FALSE;
    pContext->hIST = CreateThread(NULL, 0, ISTMain, pContext, 0, NULL);    
    if (pContext->hIST == NULL) {
        DEBUGMSG(ZONE_ERROR, (_T("%s IST creation failed\r\n"), pszFname));
        dwRet = GetLastError();
        goto EXIT;
    }

    pContext->fRunning = TRUE;
    dwRet = ERROR_SUCCESS;

EXIT:
    if (pContext->fRunning == FALSE) {
        DEBUGCHK(dwRet != ERROR_SUCCESS);
        if (fIntInitialized) InterruptDisable(pContext->dwSysIntr);
        if (pContext->hevInterrupt) CloseHandle(pContext->hevInterrupt);
        pContext->hevInterrupt = NULL;
    }

    FUNCTION_LEAVE_MSG();

    return dwRet;
}


// Stop the device.
DWORD
WINAPI
UfnPdd_Stop(
            PVOID pvPddContext
            )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    DEBUGCHK(pContext->fRunning);

    // Stop the IST
    pContext->fExitIST = TRUE;
    InterruptDisable(pContext->dwSysIntr);
    SetEvent(pContext->hevInterrupt);
    WaitForSingleObject(pContext->hIST, INFINITE);
    CloseHandle(pContext->hevInterrupt);
    CloseHandle(pContext->hIST);
    pContext->hIST = NULL;
    pContext->hevInterrupt = NULL;

    ResetDevice(pContext);

    pContext->fRunning = FALSE;

    DEBUGMSG(ZONE_FUNCTION, (_T("%s Device has been stopped\r\n"), 
        pszFname));

    FUNCTION_LEAVE_MSG();

    return ERROR_SUCCESS;
}


DWORD 
WINAPI 
UfnPdd_IsConfigurationSupportable(
    PVOID                       pvPddContext,
    UFN_BUS_SPEED               Speed,
    PUFN_CONFIGURATION          pConfiguration
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    DEBUGCHK(Speed == BS_FULL_SPEED);

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    // This PDD does not have any special requirements that cannot be 
    // handled through IsEndpointSupportable.
    DWORD dwRet = ERROR_SUCCESS;

    FUNCTION_LEAVE_MSG();

    return dwRet;
}


// 
// Is this endpoint supportable.
DWORD
WINAPI
UfnPdd_IsEndpointSupportable(
    PVOID                       pvPddContext,
    DWORD                       dwEndpoint,
    UFN_BUS_SPEED               Speed,
    PUSB_ENDPOINT_DESCRIPTOR    pEndpointDesc,
    BYTE                        bConfigurationValue,
    BYTE                        bInterfaceNumber,
    BYTE                        bAlternateSetting
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    DEBUGCHK(EP_VALID(dwEndpoint));
    DEBUGCHK(Speed == BS_FULL_SPEED);

    DWORD dwRet = ERROR_SUCCESS;
    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    PEP_STATUS peps = GetEpStatus(pContext, dwEndpoint);

    // Special case for endpoint 0
    if (dwEndpoint == 0) {
        DEBUGCHK(pEndpointDesc->bmAttributes == USB_ENDPOINT_TYPE_CONTROL);
        
        // Endpoint 0 only supports 8 or 16 byte packet size
        if (pEndpointDesc->wMaxPacketSize < EP_0_PACKET_SIZE) {
            DEBUGMSG(ZONE_ERROR, (_T("%s Endpoint 0 only supports %u byte packets\r\n"),
                pszFname, EP_0_PACKET_SIZE));
            dwRet = ERROR_INVALID_PARAMETER;
        }
        else{  
            // Larger than EP 0 Max Packet Size - reduce to Max
            pEndpointDesc->wMaxPacketSize = EP_0_PACKET_SIZE;
        }
    }
    else if (dwEndpoint < ENDPOINT_COUNT) {
        BYTE bTransferType = pEndpointDesc->bmAttributes & USB_ENDPOINT_TYPE_MASK;
        DEBUGCHK(bTransferType != USB_ENDPOINT_TYPE_CONTROL);

        // Validate and adjust packet size
        WORD wPacketSize = 
            (pEndpointDesc->wMaxPacketSize & USB_ENDPOINT_MAX_PACKET_SIZE_MASK);

        switch(bTransferType) {

        // Isoch not currently supported by Samsung HW
        case USB_ENDPOINT_TYPE_ISOCHRONOUS:
            DEBUGMSG(ZONE_ERROR, (_T("%s Isochronous endpoints are not supported\r\n"),
                pszFname));
            dwRet = ERROR_INVALID_PARAMETER;
            break;

        case USB_ENDPOINT_TYPE_BULK:
        case USB_ENDPOINT_TYPE_INTERRUPT:
            // HW Can only Support 8, 16, 32, 64 byte packets
            if((wPacketSize >= 8) && (wPacketSize < 16)){
                wPacketSize = 8;
            }
            else if ((wPacketSize >= 16) && (wPacketSize < 64)){
                // Note that 32 => Dual Packet mode - Do NOT allow
                wPacketSize = 16;
            }
            else if (wPacketSize >= 64 ){
                wPacketSize = 64;                
            }
            else{ // wPacketSize < 8
                dwRet = ERROR_INVALID_PARAMETER;
            }
            break;

        default:
            dwRet = ERROR_INVALID_PARAMETER;
            break;
        }  
        
        // If Requested Size is larger than what is supported ... change it.
        // Note only try and change it if no errors so far... meaning Ep is
        // Supportable.
        if ( (wPacketSize != (pEndpointDesc->wMaxPacketSize & USB_ENDPOINT_MAX_PACKET_SIZE_MASK)) && 
             (dwRet == ERROR_SUCCESS) ) {
            pEndpointDesc->wMaxPacketSize &= ~USB_ENDPOINT_MAX_PACKET_SIZE_MASK;
            pEndpointDesc->wMaxPacketSize |= wPacketSize;
        }
    }

    FUNCTION_LEAVE_MSG();

    return dwRet;
}


// Clear an endpoint stall.
DWORD
WINAPI
UfnPdd_ClearEndpointStall(
                          PVOID pvPddContext,
                          DWORD dwEndpoint
                          )
{
    DWORD dwRet = ERROR_SUCCESS;

    SETFNAME();
    FUNCTION_ENTER_MSG();

    DEBUGCHK(EP_VALID(dwEndpoint));

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);

    PEP_STATUS peps = GetEpStatus(pContext, dwEndpoint);
    LOCK_ENDPOINT(peps);

    if (dwEndpoint == 0){
        // Must Clear both Send and Sent Stall
        WriteIndexedReg(pContext, 0, EP0_CSR_REG_OFFSET, 0);
    }
    else if (peps->dwDirectionAssigned == USB_IN_TRANSFER){
        SetClearIndexedReg(pContext, dwEndpoint, IN_CSR1_REG_OFFSET,
            (IN_SEND_STALL | IN_CLR_DATA_TOGGLE ), SET);

        // Must Clear both Send and Sent Stall
        SetClearIndexedReg(pContext, dwEndpoint, IN_CSR1_REG_OFFSET,
            (IN_SEND_STALL  | IN_SENT_STALL), CLEAR);               
    }
    else{ // Out Endpoint
        // Must Clear both Send and Sent Stall
        SetClearIndexedReg(pContext, dwEndpoint, OUT_CSR1_REG_OFFSET,
            ( OUT_SEND_STALL | OUT_CLR_DATA_TOGGLE ), SET);
        SetClearIndexedReg(pContext ,dwEndpoint, OUT_CSR1_REG_OFFSET,
            ( OUT_SEND_STALL  | OUT_SENT_STALL), CLEAR);
    }
    
    UNLOCK_ENDPOINT(peps);
    FUNCTION_LEAVE_MSG();

    return ERROR_SUCCESS;
}


// Initialize an endpoint.
DWORD
WINAPI
UfnPdd_InitEndpoint(
    PVOID                       pvPddContext,
    DWORD                       dwEndpoint,
    UFN_BUS_SPEED               Speed,
    PUSB_ENDPOINT_DESCRIPTOR    pEndpointDesc,
    PVOID                       pvReserved,
    BYTE                        bConfigurationValue,
    BYTE                        bInterfaceNumber,
    BYTE                        bAlternateSetting
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    DEBUGCHK(EP_VALID(dwEndpoint));
    PREFAST_DEBUGCHK(pEndpointDesc);

#ifdef DEBUG
    {
        USB_ENDPOINT_DESCRIPTOR EndpointDesc;
        memcpy(&EndpointDesc, pEndpointDesc, sizeof(EndpointDesc));
        DEBUGCHK(UfnPdd_IsEndpointSupportable(pvPddContext, dwEndpoint, Speed,
            &EndpointDesc, bConfigurationValue, bInterfaceNumber, 
            bAlternateSetting) == ERROR_SUCCESS);
        DEBUGCHK(memcmp(&EndpointDesc, pEndpointDesc, sizeof(EndpointDesc)) == 0);
    }
#endif

    PCTRLR_PDD_CONTEXT pContext = (PCTRLR_PDD_CONTEXT) pvPddContext;
    ValidateContext(pContext);
    BYTE bEndpointAddress = 0;

    PEP_STATUS peps = GetEpStatus(pContext, dwEndpoint);
    DEBUGCHK(!peps->fInitialized);

    InitializeCriticalSection(&peps->cs);

    WORD wMaxPacketSize = 
        pEndpointDesc->wMaxPacketSize & USB_ENDPOINT_MAX_PACKET_SIZE_MASK;
    DEBUGCHK(wMaxPacketSize);
    
    // If the target is endpoint 0, then only allow the function driver 
    // to register a notification function.
    if (dwEndpoint == 0) {
       peps->dwPacketSizeAssigned = wMaxPacketSize;
       // Interrupts for endpoint 0 are enabled in ISTMain
    }
    else if (dwEndpoint < ENDPOINT_COUNT) {
        // Clear all Status bits and leave the Endpoint interrupt disabled
        // Clear Fifos, and all register bits
        ResetEndpoint(pContext,peps);

        // Clear all bits in CSR2 - Disable DMA for now...
        WriteIndexedReg(pContext, dwEndpoint, IN_CSR2_REG_OFFSET, 0); 

        // Setup Direction (mode_in bit) 
        bEndpointAddress = pEndpointDesc->bEndpointAddress;
        BOOL fModeOut = USB_ENDPOINT_DIRECTION_OUT(bEndpointAddress);
        if (fModeOut) {
            SetClearIndexedReg(pContext, dwEndpoint,IN_CSR2_REG_OFFSET, 
                SET_MODE_IN, CLEAR);              
            peps->dwDirectionAssigned = USB_OUT_TRANSFER;
        }
        else {
            SetClearIndexedReg(pContext, dwEndpoint, IN_CSR2_REG_OFFSET, 
                SET_MODE_IN, SET);
            peps->dwDirectionAssigned = USB_IN_TRANSFER;
        }

        // Set Transfer Type
        BYTE bTransferType = pEndpointDesc->bmAttributes & USB_ENDPOINT_TYPE_MASK;
        DEBUGCHK(bTransferType != USB_ENDPOINT_TYPE_CONTROL);
        switch(bTransferType) {
            case USB_ENDPOINT_TYPE_ISOCHRONOUS:
                // Set the ISO bit
                SetClearIndexedReg(pContext, dwEndpoint,IN_CSR2_REG_OFFSET, 
                    SET_TYPE_ISO, SET);
                break;

            case USB_ENDPOINT_TYPE_BULK:
            case USB_ENDPOINT_TYPE_INTERRUPT:
            default:
                // Clear ISO bit - Set type to Bulk
                SetClearIndexedReg(pContext, dwEndpoint,IN_CSR2_REG_OFFSET, 
                    SET_TYPE_ISO, CLEAR);
        }

        peps->dwEndpointType = bTransferType;
        peps->dwPacketSizeAssigned = wMaxPacketSize;
        
        // Set the Max Packet Size Register
        BYTE maxPacketBits = (BYTE) (peps->dwPacketSizeAssigned >> 3);
        WriteIndexed

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利在线观看| 成人免费三级在线| 久久久精品免费免费| 欧美日韩高清一区| 色先锋aa成人| a美女胸又www黄视频久久| 亚洲国产毛片aaaaa无费看| 国产精品日产欧美久久久久| 欧美本精品男人aⅴ天堂| 欧美系列日韩一区| 色菇凉天天综合网| 96av麻豆蜜桃一区二区| 国产乱码精品一品二品| 寂寞少妇一区二区三区| 激情五月播播久久久精品| 三级欧美在线一区| 麻豆国产一区二区| 国产一区二区免费视频| 国产精品99久久久久久久vr| 精品一二三四区| 国产精品亚洲人在线观看| 激情亚洲综合在线| 成人午夜电影网站| 色综合天天狠狠| 欧美三级视频在线| 欧美一级理论性理论a| 精品人伦一区二区色婷婷| 国产日韩av一区| 一区二区激情小说| 国产在线精品一区在线观看麻豆| 从欧美一区二区三区| 色综合色综合色综合| 欧美一二三区在线| 欧美韩日一区二区三区| 亚洲国产毛片aaaaa无费看| 久久国产麻豆精品| 一本色道久久综合精品竹菊| 欧美一二三区精品| 亚洲欧美韩国综合色| 韩国三级中文字幕hd久久精品| 91麻豆视频网站| 精品国产露脸精彩对白| 一区二区三区国产精华| 国内精品写真在线观看| 色呦呦日韩精品| 久久精品一区二区三区av| 亚洲国产精品一区二区www | 91美女福利视频| 日韩免费看网站| 亚洲成在人线在线播放| 成人精品国产福利| 久久免费国产精品| 精品一区二区三区免费| 欧美日韩激情一区| 亚洲精品综合在线| 成人av在线看| 久久久国产一区二区三区四区小说 | 亚洲国产一区二区a毛片| 成人涩涩免费视频| 国产欧美视频一区二区三区| 美女网站色91| 制服丝袜av成人在线看| 一区二区三区 在线观看视频| 成人精品一区二区三区四区| 亚洲国产精品ⅴa在线观看| 国产精品1区二区.| 久久久不卡影院| 粉嫩在线一区二区三区视频| 国产欧美日韩在线看| 国产成人av一区| 综合色中文字幕| 欧美影院午夜播放| 亚洲一级在线观看| 91精品国产福利在线观看| 美女视频一区在线观看| 精品国产91乱码一区二区三区| 激情av综合网| 亚洲人成7777| 制服视频三区第一页精品| 九色|91porny| 亚洲色图视频免费播放| 777xxx欧美| 国产精品一二三| 亚洲一区二区三区四区中文字幕| 欧美日韩国产欧美日美国产精品| 久久国产成人午夜av影院| 中文字幕一区二区三区在线不卡 | 色婷婷综合视频在线观看| 三级不卡在线观看| 国产精品麻豆久久久| 欧美高清精品3d| www.爱久久.com| 久久99精品网久久| 亚洲日本乱码在线观看| 日韩久久久久久| 91免费版pro下载短视频| 久久av资源网| 偷拍一区二区三区四区| 亚洲欧洲性图库| 精品国产露脸精彩对白| 色妞www精品视频| 91精品国产色综合久久不卡电影| 懂色av一区二区三区免费观看| 日韩二区三区四区| 一区二区三区免费看视频| 国产精品久久影院| 欧美成人女星排名| 在线电影院国产精品| 在线精品视频一区二区三四| 99久久婷婷国产综合精品电影 | 亚洲成人一区在线| 亚洲一区二区欧美激情| 一区二区三区四区国产精品| 国产精品久久久久久久裸模| 国产亚洲精品7777| 国产午夜亚洲精品羞羞网站| 久久综合色8888| 国产亚洲精品免费| 欧美国产综合一区二区| 国产欧美精品一区二区色综合| 国产精品午夜在线| 中文字幕日韩一区| 亚洲品质自拍视频网站| 亚洲欧洲成人av每日更新| 亚洲乱码国产乱码精品精的特点| 亚洲三级在线免费| 亚洲成人免费电影| 另类小说视频一区二区| 国产乱码精品一区二区三| 一本色道久久综合亚洲91 | 国产福利一区二区三区在线视频| 国产成人在线影院| 在线日韩国产精品| 欧美刺激午夜性久久久久久久| 国产日韩欧美精品电影三级在线| 国产精品久久久一区麻豆最新章节| 国产精品高清亚洲| 亚洲1区2区3区4区| 极品少妇xxxx精品少妇偷拍| 成人免费看的视频| 欧美一区二区三区四区在线观看| 欧美一区二区三区成人| 国产精品久久毛片av大全日韩| 亚洲va国产天堂va久久en| 久久99久久99小草精品免视看| 99精品黄色片免费大全| 欧美一区二区三区白人| 中文字幕一区在线| 久久精品国内一区二区三区| 色女孩综合影院| 国产日韩欧美一区二区三区综合| 日韩国产欧美视频| 欧洲一区在线电影| 自拍偷拍亚洲综合| 国产一区二区三区国产| 欧美丰满少妇xxxxx高潮对白| 国产日韩欧美激情| 国产精品一区二区三区99| 欧洲人成人精品| 亚洲黄网站在线观看| 91免费视频网| 亚洲欧美在线aaa| 国产乱码精品一区二区三区av| 欧美一区二区三区视频在线| 亚洲成av人片在www色猫咪| 一本色道久久综合亚洲精品按摩| 国产精品国产三级国产a | 成人综合婷婷国产精品久久蜜臀 | 亚洲品质自拍视频网站| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美激情艳妇裸体舞| 国产成人av电影| 国产精品美女久久久久av爽李琼| 成人精品小蝌蚪| 亚洲乱码中文字幕| 色偷偷久久人人79超碰人人澡| 一区二区三区免费在线观看| 欧美无人高清视频在线观看| 天天色图综合网| 日韩精品一区二区三区在线播放| 激情六月婷婷综合| 国产婷婷色一区二区三区 | 精品国产一区二区三区久久久蜜月 | 床上的激情91.| 亚洲国产日韩一区二区| 日韩欧美色综合| 成人性生交大片免费看在线播放| 久久久久久久久久久久久久久99| 国产成人精品免费一区二区| 亚洲少妇最新在线视频| 制服丝袜成人动漫| 欧美福利电影网| 精品在线观看视频| 亚洲色大成网站www久久九九| 欧美精品乱码久久久久久按摩 | 婷婷六月综合亚洲| 亚洲色大成网站www久久九九| 日韩色视频在线观看| 99re免费视频精品全部| 美女一区二区视频|