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

📄 datatransfer.h

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 H
字号:
/*+++ *******************************************************************\ 
* 
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or 
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*   
*     Copyright (c) 2008 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/ 
#ifndef _DATA_TRANSFER_H_
#define _DATA_TRANSFER_H_

extern "C"
{
    #include <wdm.h>
    #include <usb.h>
    #include <usbdlib.h>
    #include <usbdrivr.h>
}

#include <windef.h>

#include "Parse656Data.h"
#include "BufferQueue.h"
#include "IDataTransfer.h"
#include "transportStream.h"


class CUsbInterface;
class BasePin;
class PcbConfig;


class DataTransfer : public IDataTransfer
{
   
public:
    DataTransfer(
        CUsbInterface* p_usb, 
        PolarisUsbInterface* p_usb_firmware,
        PDEVICE_OBJECT pdo,
        PcbConfig* p_current_config,
        BYTE type);
    ~DataTransfer();

    VOID setPin(BasePin* p_pin);
    VOID releasePin(BasePin* p_pin);

    NTSTATUS start();
    VOID stop();

    VOID notifyPinFormatChange(BasePin* p_pin);

	VOID powerUp();
	BYTE getType();

protected:
    PBUFFER_ENTRY allocateBuffer();
    VOID freeBuffer(PBUFFER_ENTRY p_buffer);
    VOID getUrbAndBufferSizes();
    NTSTATUS sendBuffer(PBUFFER_ENTRY p_buffer);

    static VOID static_BufferComplete(
        PBUFFER_ENTRY            p_context,
        NTSTATUS                 status, 
        ULONG                    transfer_size,
        PVOID                    p_read_context);


    NTSTATUS startThread();
    static VOID static_ThreadFunction(DataTransfer* p_this);
    VOID parseBufferThread();

    VOID initializeTransfer();
    VOID sleep(LONG time);
    VOID startStream();
    VOID stopStream();
    VOID PolarisModeRegister(WORD address, DWORD mode);
	NTSTATUS setInterface(UCHAR usb_interface_index);


private:
    CUsbInterface*  _p_usb;
    PolarisUsbInterface*    _p_usb_firmware;
	PcbConfig*		_p_current_config;

    DWORD           _pipe;
    BYTE            _interface;

    DWORD           _urb_size;
    DWORD           _buffer_size;

    BOOLEAN         _stop_thread;

    PVOID           _p_thread_object;    

    PDEVICE_OBJECT  _pdo;

    Parse656Data    _data_parser;

    LONG            _buffer_count;

    BufferQueue     _buffer_complete_queue;

	TransportStream _ts_Data;
	DWORD 			_buffers_need;

    BOOLEAN         _digital_stream;
	BYTE 			_media_type;

	DWORD			_ep_mask; //for polaris sc used

	BYTE            _is_bulk;
	BYTE            _enable_HANC_Audio;
    
    ULONG           _polaris_engine_fail_count;
};


inline VOID DataTransfer::notifyPinFormatChange(BasePin* p_pin)
{
    
    _data_parser.notifyPinFormatChange(p_pin);
    
}


#endif

⌨️ 快捷键说明

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