/******************************************************************** * UserDefinedIIC.c * User Defined IIC Function * By yooheeyong 2010/02/20 *********************************************************************/ #include "DHL_OSAL.h" #include "DHL_DEV_Priv.h" #include "UserDefinedIIC2.h" #ifdef SEMCO_IIC #include "lpt.h" extern Ciic m_iic; /* IIC ÀÎÅÍÆäÀ̽º °´Ã¼ ¼±¾ð */ extern int EXTERN_LPT_USB; extern int bDisconnect; extern BOOL bCheckUSB; #define TRY_CONNECT_CNT 10 // 10¹ø±îÁö ¿¬°á ½Ãµµ //20110810 USB #include "CyAPIUser.h" #else #endif /* IIC initialization */ void I2c_Init(void) { #ifdef SEMCO_IIC int nTimeOut; char msg[100]={0,}; int nPort,baudrate,data,stop,parity; /* Semco IIC initialization */ if(EXTERN_LPT_USB == SEL_LPT) { if(bCheckUSB == TRUE) { Cypress_USB_Close(); bCheckUSB = FALSE; } #define LPTDELAY 4000 m_iic.I2cInit(LPTDELAY); }else{ if(bCheckUSB == FALSE) { double retdval; char rettxtBuffer[256]; char *rettxt; rettxt = rettxtBuffer; bCheckUSB = TRUE; //Cypress_USB_Open(); Cypress_Configure("-i2c", "100khz", 0, &retdval, &rettxt); /* at 400kHz SCL rate */ } } #else #endif } /* IIC Deinitialization */ void I2c_DeInit(void) { #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_USB) { if(bCheckUSB) { bCheckUSB = FALSE; Cypress_USB_Close(); } } #else #endif } /* MxL601 IIC Write */ int MxL601_I2cWrite(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char RegData) { int status = 0;//usb purpose #ifdef SEMCO_IIC /* Semco IIC function */ if(EXTERN_LPT_USB == SEL_LPT) { m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,1); status = I2C_OK; }else{ // Sleep(1);//for cypress status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &RegAddr, 1, &RegData); } #else DHL_RESULT dhr = DHL_OK; DHL_OS_Printf("|%s| addr = %x, data = %x\n", __FUNCTION__, RegAddr, RegData); dhr = dhl_i2c_write2(0, I2cSlaveAddr, RegAddr, &RegData, 1); if (dhr != DHL_OK) { DHL_OS_Printf("|%s| fail to write tuner(chip_addr:0x%x).\n", __FUNCTION__, I2cSlaveAddr); } #endif return status; } /* MxL601 IIC Read */ int MxL601_I2cRead(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char *DataPtr) { unsigned char SendDatas[200]={0,}; int status = 0;//usb purpose int addr=0; #ifdef SEMCO_IIC /* Semco IIC function */ if(EXTERN_LPT_USB == SEL_LPT) { addr = 0xFB; addr <<= 8; addr |= RegAddr; m_iic.Semco_I2c_ReadBytes(I2cSlaveAddr,2,(unsigned int)addr,DataPtr,1); status = I2C_OK; }else{ // Sleep(1);//for cypress SendDatas[0] = 0xFB; SendDatas[1] = RegAddr; status = (I2C_RESULT)Cypress_USB_ReadI2C(I2cSlaveAddr>>1, 2,SendDatas, 1, DataPtr); } #else DHL_RESULT dhr = DHL_OK; UINT16 SubAddr; SubAddr = 0xfb00 | RegAddr; dhr = dhl_i2c_read3(0, I2cSlaveAddr, SubAddr, DataPtr, 1); if (dhr != DHL_OK) { DHL_OS_Printf("|%s| fail to read tuner(chip_addr:0x%x).\n", __FUNCTION__, I2cSlaveAddr); } #endif return status; } /* TDA10024IIC Write */ int TDA10024_I2cWrite(int tUnit,unsigned long AddrSize, unsigned char *pAddr, unsigned long WriteLen, unsigned char *pData) { int status = 0;//usb purpose unsigned char ChipAddr; ChipAddr = TDA10024_ADDRESS; #ifdef SEMCO_IIC /* Semco IIC function */ if(EXTERN_LPT_USB == SEL_LPT) { m_iic.Semco_I2c_WriteBytes (ChipAddr,1,(unsigned int)*pAddr,pData,WriteLen); status = I2C_OK; }else{ // Sleep(1);//for cypress status =(I2C_RESULT)Cypress_USB_WriteI2C (ChipAddr>>1, 1, pAddr, WriteLen, pData); } #else #endif return status;//return 0; } /* TDA10024 IIC Read */ int TDA10024_I2cRead(int tUnit, unsigned long AddrSize, unsigned char *pAddr, unsigned long ReadLen, unsigned char *pData) { int status = 0; unsigned char ChipAddr; ChipAddr = TDA10024_ADDRESS; #ifdef SEMCO_IIC unsigned char ReadData; /* Semco IIC function */ if(EXTERN_LPT_USB == SEL_LPT) { m_iic.Semco_I2c_ReadBytes(ChipAddr,1,(unsigned int)*pAddr,pData,ReadLen); status = I2C_OK; }else{ // Sleep(1);//for cypress status = (I2C_RESULT)Cypress_USB_ReadI2C(ChipAddr>>1, 1, pAddr, ReadLen, pData); } #else #endif return status; } /* TDA10024 Wait time*/ int TDA10024_Wait(int tUnit, unsigned long wTime) { SemcoSleep(tUnit,wTime); return 0; } int SemcoSleep(int tUnit, unsigned long wTime) { #ifdef SEMCO_IIC Sleep(wTime); #else DHL_OS_Delay(wTime); #endif return 0; }