/******************************************************************** * UserDefinedIIC.c * User Defined IIC Function * By yooheeyong 2010/02/20 *********************************************************************/ //#include "../stdafx.h" #include "DHL_OSAL.h" #include "DHL_DEV_Priv.h" #include "UserDefinedIIC.h" #ifdef SEMCO_IIC #include "lpt.h" #include "CoreComm.h" #include "CyAPIUser.h" extern Ciic m_iic; /* IIC ÀÎÅÍÆäÀ̽º °´Ã¼ ¼±¾ð */ extern CCoreComm m_comm; extern int EXTERN_LPT_USB; extern int bDisconnect; extern BOOL bUSBDriverOpen; #define TRY_CONNECT_CNT 10 // 10¹ø±îÁö ¿¬°á ½Ãµµ #include "CIni.h" // ½Ã¸®¾ó Æ÷Æ® Á¤º¸ INI ÆÄÀÏ °ü·Ã °´Ã¼ CIni CI; #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) { #define LPTDELAY 4000 m_iic.I2cInit(LPTDELAY); if(bUSBDriverOpen) { bUSBDriverOpen = FALSE; Cypress_USB_Close(); } }else if(EXTERN_LPT_USB == SEL_USB){ // INI ÆÄÀÏ¿¡¼­ Com Á¤º¸ Àоî¿È CI.GetIniFile(".\\ComInfo.ini"); nPort = atoi(CI.lpPort); baudrate = atoi(CI.lpBaudRate); data = atoi(CI.lpData); parity = atoi(CI.lpParity); stop = atoi(CI.lpStop); if(bDisconnect) { m_comm.Disconnect(); } bDisconnect = m_comm.IsConnected(); nTimeOut = 0; while(!bDisconnect && nTimeOut < TRY_CONNECT_CNT) // ¿¬°á »óŰ¡ ¾Æ´Ï¶ó¸é ¿¬°á { m_comm.Connect(nPort, baudrate, data, stop, parity, 0); if((bDisconnect = m_comm.IsConnected())) { sprintf(msg,"COM%d¿¡ ¿¬°áµÇ¾ú½À´Ï´Ù.",nPort); OutputDebugString(msg); break; } nTimeOut++; } if(nTimeOut >= 10) { sprintf(msg,"COM%d¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù.",nPort); OutputDebugString(msg); } if(bUSBDriverOpen) { bUSBDriverOpen = FALSE; Cypress_USB_Close(); } }else{ if(bUSBDriverOpen == FALSE) { bUSBDriverOpen = TRUE; Cypress_USB_Open(); } } #endif } /* IIC Deinitialization */ void I2c_DeInit(void) { #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_CY_USB) { if(bUSBDriverOpen) { bUSBDriverOpen = FALSE; Cypress_USB_Close(); } } #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 if(EXTERN_LPT_USB == SEL_USB){ }else{ // Sleep(1);//for cypress status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &RegAddr, 1, &RegData); } #else #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 if(EXTERN_LPT_USB == SEL_USB){ }else{ // Sleep(1);//for cypress SendDatas[0] = 0xFB; SendDatas[1] = RegAddr; status = (I2C_RESULT)Cypress_USB_ReadI2C(I2cSlaveAddr>>1, 2,SendDatas, 1, DataPtr); } #else #endif return status; } /* MxL201 IIC Write */ /* int MxL201_I2cWrite(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char RegData, unsigned int count) { int status = 0;//usb purpose #ifdef SEMCO_IIC // Semco IIC function if(EXTERN_LPT_USB == SEL_LPT) { if(count<=1) m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,0);//AIC ÀÇ °æ¿ì. else m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,1); status = I2C_OK; }else if(EXTERN_LPT_USB == SEL_USB){ }else{ // Sleep(1);//for cypress status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &RegAddr, 1, &RegData); } #else #endif return status; } */ int MxL201_I2cWrite(unsigned char I2cSlaveAddr, unsigned char *RegData, unsigned int count) { int status = 0;//usb purpose unsigned char TempAddr,TempData;//Temp Register Addr/Data int len = 0; #ifdef SEMCO_IIC // Semco IIC function // if(EXTERN_LPT_USB == SEL_LPT) { if(count <= 1)//AIC ÀÇ °æ¿ì. { //S, DevID+W, ACK, AIC(OxFF), ACK, P) TempAddr = RegData[0]; TempData = 0x00; m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,TempAddr,&TempData,0); } else//(count > 1) { for(len=0;len>1, 1, &TempAddr, 0, &TempData); } else{ for(len=0;len>1, 1, &TempAddr, 1, &TempData); } } } #else DHL_RESULT dhr = DHL_OK; if (count <= 1) { TempAddr = RegData[0]; TempData = 0x00; dhr = dhl_i2c_write2(0, I2cSlaveAddr, TempAddr, &TempData, 1); if (dhr != DHL_OK) { DHL_OS_Printf("|%s| fail to write tuner(chip_addr:0x%x).\n", __FUNCTION__, I2cSlaveAddr); } } else { DHL_OS_Printf("|%s| dump = ", __FUNCTION__); for (len = 0; len < count; len++) { DHL_OS_Printf("%2x ", RegData[len]); } DHL_OS_Printf("\n"); for (len = 0; len < count; len += 2) { TempAddr = RegData[len]; TempData = RegData[len + 1]; DHL_OS_Printf("|%s| addr = %x, data = %x\n", __FUNCTION__, TempAddr, TempData); dhr = dhl_i2c_write2(0, I2cSlaveAddr, TempAddr, &TempData, 1); if (dhr != DHL_OK) { DHL_OS_Printf("|%s| fail to write tuner(chip_addr:0x%x).\n", __FUNCTION__, I2cSlaveAddr); } } } #endif return status; } /* MxL201 IIC Read */ int MxL201_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 if(EXTERN_LPT_USB == SEL_USB){ }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; } /* TDA8296 IIC Write */ unsigned long TDA8296_I2cWrite(int tUnit, unsigned long AddrSize, unsigned char *pAddr, unsigned long WriteLen, unsigned char *pData) { #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_LPT) { m_iic.TDA8296_Semco_Write(TDA8296_ADDRESS, pAddr, pData, WriteLen); //m_iic.Semco_I2c_WriteBytes (TDA8296_ADDRESS,1,(unsigned int)*pAddr,pData,WriteLen); }else if(EXTERN_LPT_USB == SEL_USB){ m_comm.ComIICWrite(TDA8296_ADDRESS,1,pAddr,WriteLen,pData); }else{ Cypress_USB_WriteI2C (TDA8296_ADDRESS>>1, AddrSize, pAddr,WriteLen,pData); } #endif #ifdef DUMP { char msg1[100]={0,}; sprintf(msg1,"Chip : 0x%x, Addr 0x%x, %d length 0x%x\n",(int)(TDA8296_ADDRESS>>1),*pAddr,WriteLen,*pData); OutputDebugString(msg1); } #endif return 0; } /* TDA8296 IIC Read */ unsigned long TDA8296_I2cRead(int tUnit, unsigned long AddrSize, unsigned char *pAddr, unsigned long ReadLen, unsigned char *pData) { #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_LPT) { m_iic.TDA8296_Semco_Read(TDA8296_ADDRESS, pAddr, pData, ReadLen); //m_iic.Semco_I2c_ReadBytes(TDA8296_ADDRESS,1,(unsigned int)*pAddr,pData,ReadLen); }else if(EXTERN_LPT_USB == SEL_USB){ m_comm.ComIICRead(TDA8296_ADDRESS,1,pAddr,ReadLen,pData); }else{ Cypress_USB_ReadI2C(TDA8296_ADDRESS>>1, AddrSize, pAddr, ReadLen, pData); } #endif return 0; } /* TDA8296 Wait time*/ unsigned long TDA8296_Wait(int tUnit, unsigned long wTime) { SemcoSleep((unsigned int)wTime); return 0; } /* S5H1411 IIC Write */ unsigned short SH1411_I2cWriteOneRegister(unsigned char ChipAddr, unsigned char RegAddr, unsigned short Data) { unsigned char data[2]; #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_LPT) { /* Semco IIC function */ m_iic.I2cWriteOneRegister_s5h1411(ChipAddr,RegAddr,Data); }else if(EXTERN_LPT_USB == SEL_USB){ data[0] = (unsigned char)(Data>>8); data[1] = (unsigned char)(Data); //Cypress_USB_WriteI2C (ChipAddr>>1, 1, &RegAddr, 2,data); m_comm.ComIICWrite(ChipAddr,1,&RegAddr,2,data); }else{ data[0] = (unsigned char)(Data>>8); data[1] = (unsigned char)(Data); Cypress_USB_WriteI2C (ChipAddr>>1, 1, &RegAddr, 2,data); } #endif return 1; } /* S5H1411 IIC Read */ unsigned short SH1411_I2cReadOneRegister(unsigned char ChipAddr, unsigned char RegAddr) { unsigned short ReadData=0x00; unsigned char Data[2]; #ifdef SEMCO_IIC if(EXTERN_LPT_USB == SEL_LPT) { /* Semco IIC function */ ReadData = m_iic.I2cReadOneRegister_s5h1411(ChipAddr,RegAddr); }else if(EXTERN_LPT_USB == SEL_USB){ //Cypress_USB_ReadI2C(ChipAddr>>1, 1, &RegAddr, 2,Data); m_comm.ComIICRead(ChipAddr,1,&RegAddr,2,Data); ReadData = (Data[0]<<8 | Data[1]); }else{ Cypress_USB_ReadI2C(ChipAddr>>1, 1, &RegAddr, 2,Data); ReadData = (Data[0]<<8 | Data[1]); } #endif return ReadData; } /* User Defined Delay */ void SemcoSleep(unsigned int nSleepTims_ms) { #ifdef SEMCO_IIC Sleep(nSleepTims_ms); #else DHL_OS_Delay(nSleepTims_ms); #endif }