//==========================================================================;
//
//  Gpio.H
//  Gpio Class declaration
//  Based on code from ATI Technologies Inc.  Copyright (c) 1996 - 1998
//
//
//==========================================================================;

#ifndef _GPIO_H_

#define _GPIO_H_

#include "i2cgpio.h"

#define GPIO_TIMELIMIT_OPENPROVIDER     50000000    // 5 seconds in 100 nsec.
#define GPIO_TUNER_MODE_SELECT_PIN      0x8
#define GPIO_VSB_RESET_PIN              0x1
#define GPIO_TUNER_PINS                 (GPIO_TUNER_MODE_SELECT_PIN | GPIO_VSB_RESET_PIN)

#define GPIO_TUNER_MODE_ATSC            GPIO_TUNER_MODE_SELECT_PIN
#define GPIO_TUNER_MODE_NTSC            0
#define GPIO_VSB_ON                     GPIO_VSB_RESET_PIN
#define GPIO_VSB_OFF                    0


#define	GPIO_VSB_RESET						0x0
#define	GPIO_VSB_SET						0x1

// GPIO class object .	
// Provides functionality to obtain a GPIO interface, Lock GPIO for
// exclusive use, querying the GPIO provider, write/read GPIO and
// general access to GPIO
class CGpio
{
public:
    // constructor
    CGpio       ( PDEVICE_OBJECT pDeviceObject, NTSTATUS * pStatus);
//  PVOID operator new      ( UINT size_t, PVOID pAllocation);

// Attributes
private:

    // GPIO Provider related
    GPIOINTERFACE   m_gpioProviderInterface;
    PDEVICE_OBJECT  m_pdoDriver;
    DWORD           m_dwGPIOAccessKey;

// Implementation
public:

    BOOL            InitializeAttachGPIOProvider( GPIOINTERFACE * pGPIOInterface, PDEVICE_OBJECT pDeviceObject);
    BOOL            LocateAttachGPIOProvider    ( GPIOINTERFACE * pGPIOInterface, PDEVICE_OBJECT pDeviceObject, int nIrpMajorFunction);

    BOOL            QueryGPIOProvider           ( PGPIOControl pgpioAccessBlock);
    BOOL            LockGPIOProviderEx          ( PGPIOControl pgpioAccessBlock);
    BOOL            ReleaseGPIOProvider         ( PGPIOControl pgpioAccessBlock);
    BOOL            AccessGPIOProvider          ( PGPIOControl pgpioAccessBlock);
    BOOL            WriteGPIO                   ( PGPIOControl pgpioAccessBlock);
    BOOL            ReadGPIO                    ( PGPIOControl pgpioAccessBlock);
    //BOOL          AccessGPIOProvider          ( PDEVICE_OBJECT pdoClient, PGPIOControl pgpioAccessBlock);
    //BOOL          WriteGPIO                   ( PDEVICE_OBJECT pdoClient, PGPIOControl pgpioAccessBlock);
    //BOOL          ReadGPIO                    ( PDEVICE_OBJECT pdoClient, PGPIOControl pgpioAccessBlock);
	BOOL			WriteGPIO					( UCHAR *p_uchPin, UCHAR *p_uchValue);
	BOOL			ReadGPIO					( UCHAR *p_uchPin, UCHAR *p_uchValue);

};


#endif  // _GPIO_H_