📄 csii168.c
字号:
/********************************************************************************************//* Csii168.c : Implementation of DVI transmitter interface* REALmagic Quasar Hardware Library* Created by Aurelia Popa-Radu* Copyright Sigma Designs Inc* Sigma Designs Proprietary and confidential* Created on 5/14/01* Description:/********************************************************************************************//****h* HwLib/IDviTransmitter_implementation * NAME * IDviTransmitter_implementation * DESCRIPTION * Csii168 implementation of the IDviTransmitter interface. * COPYRIGHT * Copyright Sigma Designs Inc * Sigma Designs Proprietary and confidential/********************************************************************************************/#include "pch.h"#if defined SII168_OBJECT#include "ci2c.h"#include "csii168.h"////////////////////////////////////////////////////////////////////////////****f* HwLib/Csii168__CreateInstance * USAGE * NOT PRESENT in IDviTransmitter interface * void Csii168__CreateInstance(void **pv, DWORD dwInstance) * DESCRIPTION * Csii168__CreateInstance allocates memory for DviTransmitter object, specific in * this code SiImage 168 * PARAMETERS * IN DWORD dwInstance - instance passed down by CreateInstance. * OUT void** pv - Points to a 32-bit variable that receives the pointer to object *SEE ALSO * Csii168__CreateInstance/********************************************************************************************/void Csii168__CreateInstance(void **pv, DWORD dwInstance){ Csii168__New((Csii168 **)pv, TEXT("Sii168"), TRUE, dwInstance);}/****f* HwLib/Csii168__New * USAGE * NOT PRESENT in IDviTransmitter interface * void Csii168__New(Csii168** ppCsii168, TCHAR *pName, BOOL bAllocate, DWORD dwInstance) * DESCRIPTION * Csii168__New - allocates memory for a new DviTransmitter object and plays the role of * the constructor in C++. * PARAMETERS * OUT Csii168** ppCsii168 - Points to a 32-bit variable that receives the pointer to object * IN TCHAR *pName - pointer to string containing the name of the object - debug purposes. * BOOL bAllocate - usually called with TRUE to allocate memory for object. * - if FALSE ppCsii168 should point to an object already created. * IN DWORD dwInstance - instance passed down by CreateInstance. * SEE ALSO * IDviTransmitter_Delete/********************************************************************************************/void Csii168__New (Csii168** ppCsii168, TCHAR *pName, BOOL bAllocate, DWORD dwInstance){ Csii168* this = *ppCsii168; if (bAllocate) { // Allocate Csii168 *ppCsii168 = OSmalloc(sizeof(Csii168)); this = (Csii168*) *ppCsii168; if(this == NULL) return; OSmemset(this, 0, sizeof(Csii168)); } // Call CObject constructor with bAllocate = FALSE CObject__New ((CObject**)ppCsii168, pName, FALSE, dwInstance); // Call CI2C constructor CI2C__New ( (CI2C**)(&this->m_pII2C), pName, TRUE, dwInstance ); if(this->m_pII2C == NULL) { if (bAllocate) OSfree(*ppCsii168); *ppCsii168 = NULL; return; } // Initialize virtual table this->VTable.Delete = Csii168__Delete; this->VTable.Init = Csii168__Init; this->VTable.Write = Csii168__Write; this->VTable.Read = Csii168__Read; this->VTable.SetState = Csii168__SetState; this->VTable.HwReset = Csii168__HwReset; this->VTable.InitPropertySet = Csii168__InitPropertySet; this->VTable.SetProperty = Csii168__SetProperty; this->VTable.GetProperty = Csii168__GetProperty; this->VTable.Test = Csii168__Test; this->lpVtbl = &this->VTable;}/****f* HwLib/IDviTransmitter_Delete * USAGE * IDviTransmitter_Delete(IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject) * Csii168__Delete(IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject) * DESCRIPTION * IDviTransmitter_Delete - frees memory for the specified DviTransmitter object. * IDviTransmitter_Delete plays the role of the destructor in C++. * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the object created by a previous * call to Csii168__CreateInstance or Csii168__New. * BOOL bDeleteObject - usually called with TRUE to free memory for object. * - if FALSE doesn't free any memory. * SEE ALSO * Csii168__CreateInstance, Csii168__New/********************************************************************************************/void Csii168__Delete (IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject){ Csii168* this = (Csii168*) pIDviTransmitter ; if (this == NULL) return; // Release what we were using // Call CI2C Destructor II2C_Delete ( this->m_pII2C, bDeleteObject ); // Call CObject Destructor CObject__Delete ((IObject*)this, FALSE); if (bDeleteObject) { // Delete Csii168 OSfree(pIDviTransmitter); }}/****f* HwLib/IDviTransmitter_Init * USAGE * void IDviTransmitter_Init(IDviTransmitter* pIDviTransmitter) * void Csii168__Init(IDviTransmitter* pIDviTransmitter) * DESCRIPTION * IDviTransmitter_Init - initialize the DviTransmitter object * It is called by CreateInstance. * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/void Csii168__Init(IDviTransmitter* pIDviTransmitter){ Csii168* this = (Csii168*) pIDviTransmitter; II2C_SetI2CAddress( this->m_pII2C, SII168_WRITE_ADDR, SII168_READ_ADDR, 2); II2C_Init( this->m_pII2C );}/****f* HwLib/IDviTransmitter_Write * USAGE * BOOL IDviTransmitter_Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * BOOL Csii168__Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object * IN DWORD Address - address of the register to write * IN BYTE* pData - pointer to the BYTE data to write/********************************************************************************************/BOOL Csii168__Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData){ Csii168* this = (Csii168*) pIDviTransmitter; BOOL bRet; bRet = II2C_Write(this->m_pII2C, (BYTE)Address, pData, 1); QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT(" Write168 at %x = %x"), Address, *pData)); return bRet;}/****f* HwLib/IDviTransmitter_Read * USAGE * BOOL IDviTransmitter_Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * BOOL Csii168__Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object * IN BYTE Address - address of the I2C register to read * IN BYTE* pData - pointer where the BYTE data is read/********************************************************************************************/BOOL Csii168__Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData){ Csii168* this = (Csii168*) pIDviTransmitter; BOOL bRet; bRet = II2C_Read(this->m_pII2C, (BYTE)Address, pData, 1); QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT(" Read168 at %x = %x"), Address, *pData)); return bRet;}/****f* HwLib/IDviTransmitter_HwReset * USAGE * QRESULT IDviTransmitter_HwReset(IDviTransmitter* pIDviTransmitter) * QRESULT Csii168__HwReset(IDviTransmitter* pIDviTransmitter) * DESCRIPTION * IDviTransmitter_HwReset - reset the hardware * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__HwReset(IDviTransmitter* pIDviTransmitter){ // Csii168* this = (Csii168*) pIDviTransmitter; BYTE Byte = 0x06; IDviTransmitter_Write(pIDviTransmitter, 0x08, &Byte);// power off Byte = 0x0A; IDviTransmitter_Write(pIDviTransmitter, 0x0c, &Byte);// PLL filter disable Byte = 0x01; IDviTransmitter_Write(pIDviTransmitter, 0x33, &Byte);// DE enable return Q_OK;}/****f* HwLib/IDviTransmitter_SetState * USAGE * QRESULT IDviTransmitter_SetState(IDviTransmitter* pIDviTransmitter, DWORD State) * QRESULT Csii168__SetState(IDviTransmitter* pIDviTransmitter, DWORD State) * DESCRIPTION * IDviTransmitter_SetState - On or off * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__SetState(IDviTransmitter* pIDviTransmitter, DWORD State){ // Csii168* this = (Csii168*) pIDviTransmitter; BYTE Byte; if( !State ) // OFF return Csii168__HwReset(pIDviTransmitter); Byte = 0x37; IDviTransmitter_Write(pIDviTransmitter, 0x08, &Byte);// power on, 24 bits, Input H,VSync enable Byte = 0x00; IDviTransmitter_Write(pIDviTransmitter, 0x09, &Byte); Byte = 0xf0; IDviTransmitter_Write(pIDviTransmitter, 0x0a, &Byte); Byte = 0x89; IDviTransmitter_Write(pIDviTransmitter, 0x0c, &Byte); Byte = 0x00; IDviTransmitter_Write(pIDviTransmitter, 0x0d, &Byte); Byte = 0x00; IDviTransmitter_Write(pIDviTransmitter, 0x0e, &Byte); Byte = 0x00; IDviTransmitter_Write(pIDviTransmitter, 0x0f, &Byte); return Q_OK;}void Csii168__InitPropertySet(IDviTransmitter* pIDviTransmitter, void* pPropSet, DWORD dwSize){ Csii168* this = (Csii168*) pIDviTransmitter; if(dwSize != sizeof(PROPERTY_SET_ITEM)) return; InitPropSet(pIDviTransmitter, pPropSet, DVI_TRANSMITTER_SET, edtMax,\ this->DviTransmitterPropertyList, Csii168__SetProperty, Csii168__GetProperty)}/****f* HwLib/IDviTransmitter_SetProperty * USAGE * QRESULT IDviTransmitter_SetProperty(IDviTransmitter* pIDviTransmitter, * DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * QRESULT Csii168__SetProperty(IDviTransmitter* pIDviTransmitter, * DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__SetProperty( IDviTransmitter* pIDviTransmitter, DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){ // DVI_TRANSMITTER_SET use DWORD for changing information and size condition is already checked DWORD Value = *(DWORD*)pData; QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT(" --> Csii168__SetProperty: set=%x id=%x flags=%x sz=%x value=%x"), PropSet, PropId, Flags, dwSizeIn, Value)); switch(PropId) { case edtAccessRegister: if(pdwSizeOut) *pdwSizeOut = sizeof(ADDR_DATA); if( dwSizeIn < sizeof(ADDR_DATA) ) return E_INVALID_PROPERTY_BUFFER; IDviTransmitter_Write(pIDviTransmitter, ((ADDR_DATA*)pData)->Addr, (BYTE*)&((ADDR_DATA*)pData)->Data); return Q_OK; case edtOutputEnable: Csii168__SetState(pIDviTransmitter, Value); break; default: return E_NOT_SUPPORTED; } return Q_OK;}/****f* HwLib/IDviTransmitter_GetProperty * USAGE * QRESULT IDviTransmitter_GetProperty(IDviTransmitter* pIDviTransmitter, * DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * QRESULT Csii168__GetProperty(IDviTransmitter* pIDviTransmitter, * DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS * IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__GetProperty( IDviTransmitter* pIDviTransmitter, DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){ // DVI_TRANSMITTER_SET use DWORD for changing information and size condition is already checked DWORD Value; switch(PropId) { case edtAccessRegister: if(pdwSizeOut) *pdwSizeOut = sizeof(ADDR_DATA); if( dwSizeIn < sizeof(ADDR_DATA) ) return E_INVALID_PROPERTY_BUFFER; IDviTransmitter_Read(pIDviTransmitter, ((ADDR_DATA*)pData)->Addr, (BYTE*)&((ADDR_DATA*)pData)->Data); return Q_OK; default: return E_NOT_SUPPORTED; } *(DWORD*)pData = Value; QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT(" <-- Csii168__GetProperty: set=%x id=%x flags=%x sz=%x value=%x"), PropSet, PropId, Flags, dwSizeIn, Value)); return Q_OK;}QRESULT Csii168__Test(IDviTransmitter* pIDviTransmitter){ // Csii168* this = (Csii168*) pIDviTransmitter; int Error = 0; if (Error) OSsprintf(g_InfoError, TEXT("Sii168 Write/Read Error") ); return Error ? E_TEST_DVI_TRANSMITTER_FAILED : Q_OK;}#else // ! SII168_OBJECTvoid Csii168__CreateInstance(void **ppv, DWORD dwInstance){ *ppv = NULL;}#endif // SII168_OBJECT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -