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

📄 trans.h

📁 嵌入式操作系统WINCE5.0下的USB驱动程序
💻 H
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
// 
// Module Name:  
//     Trans.h
// 
// Abstract: Provides interface to UHCI host controller
// 
// Notes: 
//
#ifndef __TRNAS_H_
#define __TRNAS_H_
#include <Cphysmem.hpp>
#include <ctd.h>
class CPipe;
class CIsochronousPipe;
class CEhcd;
typedef struct STRANSFER {
    // These are the IssueTransfer parameters
    IN LPTRANSFER_NOTIFY_ROUTINE lpStartAddress;
    IN LPVOID lpvNotifyParameter;
    IN DWORD dwFlags;
    IN LPCVOID lpvControlHeader;
    IN DWORD dwStartingFrame;
    IN DWORD dwFrames;
    IN LPCDWORD aLengths;
    IN DWORD dwBufferSize;
    IN_OUT LPVOID lpvBuffer;
    IN ULONG paBuffer;
    IN LPCVOID lpvCancelId;
    OUT LPDWORD adwIsochErrors;
    OUT LPDWORD adwIsochLengths;
    OUT LPBOOL lpfComplete;
    OUT LPDWORD lpdwBytesTransferred;
    OUT LPDWORD lpdwError ;
} STransfer ;

class CTransfer ;
class CTransfer {
public:
    CTransfer(IN CPipe * const cPipe, IN CPhysMem * const pCPhysMem,STransfer sTransfer) ;
    virtual ~CTransfer();
    CPipe * const m_pCPipe;
    CPhysMem * const m_pCPhysMem;
    CTransfer * GetNextTransfer(void) { return  m_pNextTransfer; };
    void SetNextTransfer(CTransfer * pNext) {  m_pNextTransfer= pNext; };
    virtual BOOL Init(void);
    virtual BOOL AddTransfer () =0;
    STransfer GetSTransfer () { return m_sTransfer; };
    DWORD GetPermissions() { return m_dwCurrentPermissions;};
    void  DoNotCallBack() {
        m_sTransfer.lpfComplete = NULL;
        m_sTransfer.lpdwError = NULL;
        m_sTransfer.lpdwBytesTransferred = NULL;
        m_sTransfer.lpStartAddress = NULL;
    }
protected:
    CTransfer * m_pNextTransfer;
    PBYTE   m_pAllocatedForControl;
    PBYTE   m_pAllocatedForClient;
    DWORD   m_paControlHeader;
    STransfer m_sTransfer;
    DWORD   m_DataTransferred;
    DWORD   m_dwCurrentPermissions ;
    DWORD   m_dwTransferID;
    static  DWORD m_dwGlobalTransferID;
    
};
class CQTransfer : public CTransfer {
public:
    CQTransfer(IN CPipe *  const pCPipe, IN CPhysMem * const pCPhysMem,STransfer sTransfer) 
        : CTransfer(pCPipe,pCPhysMem,sTransfer)
    {   m_pCQTDList=NULL;   };
    ~CQTransfer();
    BOOL AddTransfer () ;
    BOOL AbortTransfer();
    BOOL IsTransferDone();
    BOOL DoneTransfer();
    CQTD *GetCQTDList() { return m_pCQTDList; };
private:
    CQTD *m_pCQTDList;
};

class CIsochTransfer : public CTransfer {
public:
    CIsochTransfer(IN CIsochronousPipe * const pCPipe, IN CEhcd * const pCEhcd,STransfer sTransfer) ;
    virtual ~CIsochTransfer() {
        ASSERT(m_dwSchedTDIndex<=m_dwArmedTDIndex);
        ASSERT(m_dwDequeuedTDIndex<=m_dwSchedTDIndex);
        ASSERT(m_dwArmedBufferIndex<=m_sTransfer.dwBufferSize);
    };
    virtual BOOL AbortTransfer()=0;
    virtual BOOL IsTransferDone(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex)=0;
    virtual BOOL ScheduleTD(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex)=0;
    virtual BOOL DoneTransfer(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex)=0;
    DWORD GetStartFrame() { return m_dwFrameIndexStart; };
    BOOL SetStartFrame(DWORD dwStartFrame) { 
        if (m_dwDequeuedTDIndex ==0 && m_dwSchedTDIndex==0) {
            m_dwFrameIndexStart= m_sTransfer.dwStartingFrame= dwStartFrame; 
            return TRUE;
        }
        else
            return FALSE;
    }
    CIsochronousPipe * const GetPipe() { return (CIsochronousPipe * const) m_pCPipe; };
protected:
    CEhcd * const m_pCEhcd;
    DWORD   m_dwNumOfTD;
    DWORD   m_dwSchedTDIndex;
    DWORD   m_dwDequeuedTDIndex;
    DWORD   m_dwFrameIndexStart;

    DWORD   m_dwArmedTDIndex;
    DWORD   m_dwArmedBufferIndex;
    DWORD   m_dwFirstError;
	DWORD	m_dwLastFrameIndex;
};
class CITransfer : public  CIsochTransfer {
public:
    CITransfer(IN CIsochronousPipe * const pCPipe, IN CEhcd * const pCEhcd,STransfer sTransfer); 
    ~CITransfer();
    BOOL AddTransfer () ;
    BOOL ArmTD();
    BOOL IsTransferDone(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
    BOOL ScheduleTD(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
    BOOL AbortTransfer();
    BOOL DoneTransfer(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
private:
    CITD **  m_pCITDList;
};
class CSITransfer : public  CIsochTransfer {
public:
    CSITransfer(IN  CIsochronousPipe * const pCPipe,IN CEhcd * const pCEhcd ,STransfer sTransfer); 
    ~CSITransfer();
    BOOL AddTransfer () ;
    BOOL ArmTD();
    BOOL IsTransferDone(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
    BOOL ScheduleTD(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
    BOOL AbortTransfer();
    BOOL DoneTransfer(DWORD dwCurFrameIndex,DWORD dwCurMicroFrameIndex);
private:
    CSITD **  m_pCSITDList;
};

#endif

⌨️ 快捷键说明

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