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

📄 polaris_gpiopin.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 _POLARIS_GPIOPIN_H_
#define _POLARIS_GPIOPIN_H_

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

#include <windef.h>


#include "GPIO_IF.h"

class Device;
class PolarisUsbInterface;


// This will create a mask value that needs to be ored with the old
// value to set the relevant bit.
#define Set_GPIO_Bit(Bit)                       (1 << Bit)

// This will create a mask value that needs to be anded with the old
// value to clear the relevant bit.
#define Clear_GPIO_Bit(Bit)                     (~(1 << Bit))

////////////////////////////////////////////////////////////////////////////////////////
// PolarisGPIOPin class
// This class is defined to control any GPIO pin in the Corona chip.
////////////////////////////////////////////////////////////////////////////////////////
class PolarisGPIOPin: public GpioIF
{
public:
    PolarisGPIOPin(PolarisUsbInterface* p_firmware,
                  BYTE p_base,
                  BYTE demod_reset_gpio_bit,
                  BYTE demod_sleep_gpio_bit) ;

    PolarisGPIOPin(PolarisUsbInterface* p_firmware,
                  BYTE p_base,
                  BYTE demod_reset_gpio_bit,
                  BYTE if_select_gpio_bit,
                  BYTE tuner_enable_i2c_bit);

    virtual VOID SetGpioPinDirection(
                  INT    pinNumber,
                  INT    pinLogicValue);
    virtual VOID SetGpioPinLogicValue(
                  INT    pinNumber,
                  INT    pinLogicValue);

    virtual BYTE getDemodSleepGPIOBit() { return _demod_sleep_gpio_bit; }
    virtual BYTE getDemodResetGPIOBit() { return _demod_reset_gpio_bit; }
    virtual BYTE getIFSelectGPIOBit()   { return _if_select_gpio_bit; }
    virtual BYTE getTunerI2CEnableGPIOBit() { return _tuner_enable_i2c_bit; }
    virtual BYTE getAGCAnalogDigitalMuxSelectGPIOBit() { return _agc_analog_digital_mux_select_gpio_bit; }
    virtual void setAGCAnalogDigitalMuxSelectGPIOBit(BYTE value) { _agc_analog_digital_mux_select_gpio_bit = value; }
    virtual BYTE get416DVBTMuxSelectGPIOBit() {return _demod_reset_gpio_bit;}
    virtual void set416DVBTMuxSelectGPIOBit(BYTE value) {_demod_reset_gpio_bit=value;}
    
    VOID setGpioDirectionStatus(DWORD status);
    DWORD getGpioDirectionStatus();
    
    VOID lock();
    VOID unlock();


private:
    PolarisUsbInterface* _p_firmware;
    BYTE _p_base;
    BYTE _demod_sleep_gpio_bit;
    BYTE _demod_reset_gpio_bit;
    BYTE _if_select_gpio_bit;
    BYTE _tuner_enable_i2c_bit;
    BYTE _agc_analog_digital_mux_select_gpio_bit;
    DWORD _gpio_direction;
    DWORD _gpio_logic_value;
    KMUTEX          _mutex;
    DWORD _gpio_direction_status; //for IC's default in T0 

    virtual ULONG GetGpioPinDirection(
                  INT    pinNumber);
};


inline VOID PolarisGPIOPin::lock()
{
    KeWaitForSingleObject(&_mutex, Executive, KernelMode, FALSE, NULL );
}


/////////////////////////////////////////////////////////////////////////////////////////
inline VOID PolarisGPIOPin::unlock()
{
    KeReleaseMutex(&_mutex, FALSE);
}
inline VOID PolarisGPIOPin::setGpioDirectionStatus(DWORD status)
{
    _gpio_direction_status = status;
}
inline DWORD PolarisGPIOPin::getGpioDirectionStatus()
{
    return _gpio_direction_status;
}

#endif //_POLARIS_GPIOPIN_H_

⌨️ 快捷键说明

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