Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// $Header: G:/SwDev/WDM/Video/bt848/rcs/Bti2c.h 1.4 1998/04/29 22:43:27 tomz Exp $
#ifndef __I2C_H
#define __I2C_H
#include "regField.h"
#include "viddefs.h"
#include "retcode.h"
#include "i2cerr.h"
//#define HAUPPAUGEI2CPROVIDER
#ifdef HAUPPAUGEI2CPROVIDER
// #include "hcwWDM.h"
// Need to define for brooktree i2c calls
/* Type: Level
* Purpose: used to define a pin state */ typedef enum { LevelLow, LevelHi } Level;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLASS I2C
//
// Description:
// This class encapsulates the register fields in the I2C register of the
// Bt848. A complete set of functions are developed to manipulate all the
// register fields in the I2C for the Bt848.
//
/////////////////////////////////////////////////////////////////////////////
class I2C { private: // define which mode the I2C is selected
enum I2CMode { I2CMode_None, I2CMode_HW, I2CMode_SW }; bool initOK; // initialization is successful?
DWORD cycle; // software control of frequency
int errNum; // error number
I2CMode mode; // which mode the I2C is running in
//**************************************************************************
// Structures
//**************************************************************************
union shadow { struct _i2c_reg // I2C register structure
{ unsigned int sda:1; unsigned int scl:1; unsigned int w3b:1; unsigned int sync:1; unsigned int div:4; unsigned int byte2:8; unsigned int byte1:8; unsigned int addr_rw:8; } i2cShadow; DWORD Initer; } sh;
protected: RegisterDW decRegINT_STAT; RegField decFieldI2CDONE; RegField decFieldRACK; RegisterDW decRegI2C; RegField decFieldI2CDB0; RegField decFieldI2CDB1; RegField decFieldI2CDB2; RegField decFieldI2CDIV; RegField decFieldSYNC; RegField decFieldW3B; RegField decFieldSCL; RegField decFieldSDA;
public: // constructor and destructor
I2C( void ); ~I2C();
// member functions
bool IsInitOK( void ); #ifdef HARDWAREI2C
ErrorCode I2CInitHWMode( 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 ); ErrorCode I2CSetSync( State ); int I2CReadSync( void ); #endif
void I2CSetFreq( long freq ); int I2CGetLastError( void ); #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
private: void I2CResetShadow( void ); // reset register shadow
ErrorCode I2CHWWaitUntilDone( int ); // wait until I2C completes operation
bool I2CHWIsDone( void ); // check interrupt bit for operation done
bool I2CHWReceivedACK( void ); // check interrupt bit for received ACK
void I2CSWBitDelay( void ); // insert delay to simulate frequency
ErrorCode I2CSWWaitForACK( void ); // wait for ACK from receiver using software
};
#endif // __I2C_H
|