289 lines
7.8 KiB
C
289 lines
7.8 KiB
C
|
// $Header: G:/SwDev/WDM/Video/bt848/rcs/Device.h 1.10 1998/05/11 20:27:07 tomz Exp $
|
||
|
|
||
|
#ifndef __DEVICE_H
|
||
|
#define __DEVICE_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
#ifndef _STREAM_H
|
||
|
#include "strmini.h"
|
||
|
#endif
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#ifndef __PISCES_H
|
||
|
#include "pisces.h"
|
||
|
#endif
|
||
|
|
||
|
#ifndef __MYTYPES_H
|
||
|
#include "mytypes.h"
|
||
|
#endif
|
||
|
|
||
|
#ifndef __VIDCH_H
|
||
|
#include "vidch.h"
|
||
|
#endif
|
||
|
|
||
|
#ifndef __I2C_H
|
||
|
#include "bti2c.h"
|
||
|
#endif
|
||
|
|
||
|
#ifndef __GPIO_H
|
||
|
#include "gpio.h"
|
||
|
#endif
|
||
|
|
||
|
#include "xbar.h"
|
||
|
|
||
|
#ifndef __I2C_H__
|
||
|
#include <i2cgpio.h>
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define TUNER_BRAND_TEMIC 1
|
||
|
#define TUNER_BRAND_PHILIPS 2
|
||
|
#define TUNER_BRAND_ALPS 3
|
||
|
|
||
|
typedef struct _TUNER_INFO
|
||
|
{
|
||
|
ULONG TunerBrand; // Brand of tuner
|
||
|
BYTE TunerI2CAddress; // I2C address for Temic tuner
|
||
|
WORD TunerBandCtrlLow; // Ctrl code for VHF low
|
||
|
WORD TunerBandCtrlMid; // Ctrl code for VHF high
|
||
|
WORD TunerBandCtrlHigh; // Ctrl code for UHF
|
||
|
} TUNER_INFO, *PTUNER_INFO;
|
||
|
|
||
|
extern LONG PinTypes_ []; // just allocate maximum possible
|
||
|
extern DWORD xtals_ []; // no more than 2 xtals
|
||
|
extern TUNER_INFO TunerInfo;
|
||
|
|
||
|
void ReadXBarRegistryValues( IN PDEVICE_OBJECT PhysicalDeviceObject );
|
||
|
void ReadXTalRegistryValues( IN PDEVICE_OBJECT PhysicalDeviceObject );
|
||
|
void ReadTunerRegistryValues( IN PDEVICE_OBJECT PhysicalDeviceObject );
|
||
|
|
||
|
VOID AdapterSetCrossbarProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
VOID AdapterGetCrossbarProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void AdapterSetVideoProcAmpProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void AdapterGetVideoProcAmpProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void AdapterSetVideoDecProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void AdapterGetVideoDecProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void AdapterSetTunerProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void AdapterGetTunerProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void AdapterSetTVAudioProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void AdapterGetTVAudioProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void HandleIRP( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
|
||
|
// Forward declarations
|
||
|
|
||
|
class PsDevice;
|
||
|
|
||
|
extern void SetCurrentDevice( PsDevice *dev );
|
||
|
extern BYTE *GetBase();
|
||
|
extern void SetBase(BYTE *base);
|
||
|
|
||
|
/* Class: PsDevice
|
||
|
* Purpose: This is the class that encapsulates the adapter in the WDM model.
|
||
|
*/
|
||
|
class PsDevice
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
|
||
|
PsDevice( DWORD dwBase );
|
||
|
~PsDevice();
|
||
|
|
||
|
void *operator new( size_t, void *buf ) { return buf; }
|
||
|
void operator delete( void *, size_t ) {}
|
||
|
|
||
|
LPBYTE GetBaseAddress() { return BaseAddress_; }
|
||
|
bool InitOK();
|
||
|
|
||
|
PDEVICE_OBJECT PDO; // Physical Device Object
|
||
|
State Interrupt() { return CaptureContrll_.Interrupt(); }
|
||
|
|
||
|
ErrorCode OpenChannel( PVOID pStrmEx, VideoStream st );
|
||
|
void CloseChannel( VideoChannel *ToClose );
|
||
|
|
||
|
ErrorCode OpenInterChannel( PVOID pStrmEx, VideoStream st );
|
||
|
ErrorCode OpenAlterChannel( PVOID pStrmEx, VideoStream st );
|
||
|
ErrorCode OpenVBIChannel( PVOID pStrmEx );
|
||
|
void ClosePairedChannel( VideoChannel *ToClose );
|
||
|
|
||
|
bool IsVideoChannel( VideoChannel &aChan );
|
||
|
bool IsVBIChannel( VideoChannel &aChan );
|
||
|
bool IsOurChannel( VideoChannel &aChan );
|
||
|
|
||
|
|
||
|
ErrorCode DoOpen( VideoStream st );
|
||
|
|
||
|
void AddBuffer( VideoChannel &aChan, PHW_STREAM_REQUEST_BLOCK );
|
||
|
ErrorCode Create( VideoChannel &VidChan );
|
||
|
void Start( VideoChannel &VidChan );
|
||
|
void Stop( VideoChannel &VidChan );
|
||
|
void Pause( VideoChannel &VidChan );
|
||
|
|
||
|
void EnableAudio( State s );
|
||
|
|
||
|
void SetVideoState( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void GetVideoState( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void SetClockMaster( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
// tuner methods
|
||
|
void SetChannel( long lFreq );
|
||
|
int GetPllOffset( PULONG busy, ULONG &lastFreq );
|
||
|
|
||
|
I2C i2c;
|
||
|
GPIO gpio;
|
||
|
BtPisces CaptureContrll_;
|
||
|
CrossBar xBar;
|
||
|
|
||
|
void SetSaturation( LONG Data );
|
||
|
void SetHue( LONG Data );
|
||
|
void SetBrightness( LONG Data );
|
||
|
void SetSVideo( LONG Data );
|
||
|
void SetContrast( LONG Data );
|
||
|
void SetFormat( LONG Data );
|
||
|
void SetConnector( LONG Data );
|
||
|
|
||
|
LONG GetSaturation();
|
||
|
LONG GetHue();
|
||
|
LONG GetBrightness();
|
||
|
LONG GetSVideo();
|
||
|
LONG GetContrast();
|
||
|
LONG GetFormat();
|
||
|
LONG GetConnector();
|
||
|
|
||
|
public:
|
||
|
|
||
|
// this should be before the capture controller, as CapCtrl uses the base address
|
||
|
LPBYTE BaseAddress_;
|
||
|
|
||
|
VideoChannel *videochannels [4];
|
||
|
|
||
|
long LastFreq_;
|
||
|
|
||
|
|
||
|
DWORD dwCurCookie_;
|
||
|
|
||
|
BYTE I2CAddr_;
|
||
|
|
||
|
#ifdef HAUPPAUGEI2CPROVIDER
|
||
|
// new private members of PsDevice for Hauppauge I2C Provider:
|
||
|
LARGE_INTEGER LastI2CAccessTime;
|
||
|
DWORD dwExpiredCookie;
|
||
|
DWORD dwI2CClientTimeout;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
static void STREAMAPI CreateVideo( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
static void STREAMAPI DestroyVideo( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
static void STREAMAPI DestroyVideoNoComplete( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
static void STREAMAPI StartVideo( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
// tuner and video standard notifications are handled here
|
||
|
void ChangeNotifyChannels( IN PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
static NTSTATUS STDMETHODCALLTYPE I2COpen( PDEVICE_OBJECT, ULONG, PI2CControl );
|
||
|
static NTSTATUS STDMETHODCALLTYPE I2CAccess( PDEVICE_OBJECT, PI2CControl );
|
||
|
|
||
|
// callbacks
|
||
|
|
||
|
LONG GetSupportedStandards();
|
||
|
|
||
|
void GetStreamProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void SetStreamProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
void GetStreamConnectionProperty( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
void ProcessSetDataFormat( PHW_STREAM_REQUEST_BLOCK pSrb );
|
||
|
|
||
|
//void *operator new( size_t, void *buf ) { return buf; }
|
||
|
//void operator delete( void *, size_t ) {}
|
||
|
|
||
|
// I2C API
|
||
|
bool I2CIsInitOK( void );
|
||
|
|
||
|
#ifdef HARDWAREI2C
|
||
|
ErrorCode I2CInitHWMode( long freq );
|
||
|
|
||
|
void I2CSetFreq( long freq );
|
||
|
|
||
|
int I2CReadDiv( void );
|
||
|
|
||
|
ErrorCode I2CHWRead( BYTE address, BYTE *value );
|
||
|
ErrorCode I2CHWWrite2( BYTE address, BYTE value1 );
|
||
|
ErrorCode I2CHWWrite3( BYTE address, BYTE value1, BYTE value2 );
|
||
|
int I2CReadSync( void );
|
||
|
#else
|
||
|
// tuner.cpp contains code to fake these using Software I2C just
|
||
|
// to make the older tuner code work until it is seperated out
|
||
|
ErrorCode I2CHWRead( BYTE address, BYTE *value );
|
||
|
ErrorCode I2CHWWrite3( BYTE address, BYTE value1, BYTE value2 );
|
||
|
#endif
|
||
|
|
||
|
int I2CGetLastError( void );
|
||
|
|
||
|
void StoreI2CAddress( BYTE addr );
|
||
|
BYTE GetI2CAddress();
|
||
|
|
||
|
#ifdef HAUPPAUGEI2CPROVIDER
|
||
|
ErrorCode I2CInitSWMode( long freq );
|
||
|
ErrorCode I2CSWStart( void );
|
||
|
ErrorCode I2CSWStop( void );
|
||
|
ErrorCode I2CSWRead( BYTE * value );
|
||
|
ErrorCode I2CSWWrite( BYTE value );
|
||
|
ErrorCode I2CSWSendACK( void );
|
||
|
ErrorCode I2CSWSendNACK( void );
|
||
|
// ErrorCode I2CSWSetSCL( Level );
|
||
|
// int I2CSWReadSCL( void );
|
||
|
// ErrorCode I2CSWSetSDA( Level );
|
||
|
// int I2CSWReadSDA( void );
|
||
|
#endif
|
||
|
|
||
|
// GPIO API
|
||
|
bool GPIOIsInitOK( void );
|
||
|
void SetGPCLKMODE( State s );
|
||
|
int GetGPCLKMODE( void );
|
||
|
void SetGPIOMODE( GPIOMode mode );
|
||
|
int GetGPIOMODE( void );
|
||
|
void SetGPWEC( State s );
|
||
|
int GetGPWEC( void );
|
||
|
void SetGPINTI( State s );
|
||
|
int GetGPINTI( void );
|
||
|
void SetGPINTC( State s );
|
||
|
int GetGPINTC( void );
|
||
|
ErrorCode SetGPOEBit( int bit, State s );
|
||
|
void SetGPOE( DWORD value );
|
||
|
int GetGPOEBit( int bit );
|
||
|
DWORD GetGPOE( void );
|
||
|
ErrorCode SetGPIEBit( int bit , State s );
|
||
|
void SetGPIE( DWORD value );
|
||
|
int GetGPIEBit( int bit );
|
||
|
DWORD GetGPIE( void );
|
||
|
ErrorCode SetGPDATA( GPIOReg *data, int size, int offset );
|
||
|
ErrorCode GetGPDATA( GPIOReg *data, int size, int offset );
|
||
|
ErrorCode SetGPDATABits( int fromBit, int toBit, DWORD value, int offset );
|
||
|
ErrorCode GetGPDATABits( int fromBit, int toBit, DWORD *value, int offset );
|
||
|
};
|
||
|
|
||
|
|
||
|
inline void PsDevice::StoreI2CAddress( BYTE addr )
|
||
|
{
|
||
|
I2CAddr_ = addr;
|
||
|
}
|
||
|
|
||
|
inline BYTE PsDevice::GetI2CAddress()
|
||
|
{
|
||
|
return I2CAddr_;
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|