📄 polaris_gpiopin.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 + -